Merge branch '0.4.x' into 0.5.x
authorLuke Dashjr <luke-jr+git@utopios.org>
Thu, 14 Jun 2012 18:07:11 +0000 (18:07 +0000)
committerLuke Dashjr <luke-jr+git@utopios.org>
Thu, 14 Jun 2012 18:07:11 +0000 (18:07 +0000)
Conflicts:
doc/release-process.txt
src/serialize.h

300 files changed:
.gitignore
INSTALL [new file with mode: 0644]
README.md
bitcoin-qt.pro [new file with mode: 0644]
contrib/Bitcoin.app/Contents/Info.plist [deleted file]
contrib/Bitcoin.app/Contents/MacOS/.higit [deleted file]
contrib/Bitcoin.app/Contents/Resources/BitcoinAppIcon.icns [deleted file]
contrib/bitrpc/bitrpc.py [new file with mode: 0644]
contrib/debian/bin/bitcoin-qt [new file with mode: 0755]
contrib/debian/bin/bitcoind [new file with mode: 0755]
contrib/debian/bitcoin-qt.desktop [new file with mode: 0644]
contrib/debian/bitcoin-qt.install [new file with mode: 0644]
contrib/debian/bitcoin-qt.lintian-overrides [new file with mode: 0644]
contrib/debian/bitcoind.examples [new file with mode: 0644]
contrib/debian/bitcoind.install [new file with mode: 0644]
contrib/debian/bitcoind.lintian-overrides [new file with mode: 0644]
contrib/debian/bitcoind.manpages [new file with mode: 0644]
contrib/debian/changelog [new file with mode: 0644]
contrib/debian/compat [new file with mode: 0644]
contrib/debian/control [new file with mode: 0644]
contrib/debian/copyright [new file with mode: 0644]
contrib/debian/examples/bitcoin.conf [new file with mode: 0644]
contrib/debian/gbp.conf [new file with mode: 0644]
contrib/debian/manpages/bitcoin.conf.5 [new file with mode: 0644]
contrib/debian/manpages/bitcoind.1 [new file with mode: 0644]
contrib/debian/patches/1001_use_system_json-spirit.patch [new file with mode: 0644]
contrib/debian/patches/README [new file with mode: 0644]
contrib/debian/patches/series [new file with mode: 0644]
contrib/debian/rules [new file with mode: 0755]
contrib/debian/source/format [new file with mode: 0644]
contrib/debian/watch [new file with mode: 0644]
contrib/gitian-descriptors/README [new file with mode: 0644]
contrib/gitian-descriptors/gitian-win32.yml
contrib/gitian-descriptors/gitian.yml
contrib/gitian-descriptors/qt-win32.yml [new file with mode: 0644]
contrib/gitian-descriptors/wxwidgets-win32.yml [deleted file]
contrib/gitian-descriptors/wxwidgets.yml [deleted file]
contrib/gitian-downloader/linux-download-config [copied from contrib/gitian-downloader/bitcoin-download-config with 95% similarity]
contrib/gitian-downloader/win32-download-config [moved from contrib/gitian-downloader/bitcoin-download-config with 85% similarity]
contrib/macdeploy/LICENSE [new file with mode: 0644]
contrib/macdeploy/background.png [new file with mode: 0644]
contrib/macdeploy/background.psd [new file with mode: 0644]
contrib/macdeploy/fancy.plist [new file with mode: 0644]
contrib/macdeploy/macdeployqtplus [new file with mode: 0755]
contrib/macdeploy/notes.txt [new file with mode: 0644]
contrib/miniupnpc/Portfile [new file with mode: 0644]
contrib/qt_translations.py [new file with mode: 0755]
contrib/wallettools/walletchangepass.py [new file with mode: 0644]
contrib/wallettools/walletunlock.py [new file with mode: 0644]
doc/Doxyfile [new file with mode: 0644]
doc/README
doc/README_windows.txt
doc/assets-attribution.txt [new file with mode: 0644]
doc/bitcoin_logo_doxygen.png [new file with mode: 0644]
doc/build-msw.txt
doc/build-osx.txt
doc/build-unix.txt
doc/readme-qt.rst [new file with mode: 0644]
doc/release-process.txt
doc/translation_process.md [new file with mode: 0644]
locale/cs/LC_MESSAGES/bitcoin.mo [deleted file]
locale/cs/LC_MESSAGES/bitcoin.po [deleted file]
locale/de/LC_MESSAGES/bitcoin.mo [deleted file]
locale/de/LC_MESSAGES/bitcoin.po [deleted file]
locale/eo/LC_MESSAGES/bitcoin.mo [deleted file]
locale/eo/LC_MESSAGES/bitcoin.po [deleted file]
locale/es/LC_MESSAGES/bitcoin.mo [deleted file]
locale/es/LC_MESSAGES/bitcoin.po [deleted file]
locale/fr/LC_MESSAGES/bitcoin.mo [deleted file]
locale/fr/LC_MESSAGES/bitcoin.po [deleted file]
locale/it/LC_MESSAGES/bitcoin.mo [deleted file]
locale/it/LC_MESSAGES/bitcoin.po [deleted file]
locale/lt/LC_MESSAGES/bitcoin.mo [deleted file]
locale/lt/LC_MESSAGES/bitcoin.po [deleted file]
locale/nl/LC_MESSAGES/bitcoin.mo [deleted file]
locale/nl/LC_MESSAGES/bitcoin.po [deleted file]
locale/pl/LC_MESSAGES/bitcoin.po [deleted file]
locale/pt/LC_MESSAGES/bitcoin.mo [deleted file]
locale/pt/LC_MESSAGES/bitcoin.po [deleted file]
locale/readme.txt [deleted file]
locale/ro/LC_MESSAGES/bitcoin.mo [deleted file]
locale/ro/LC_MESSAGES/bitcoin.po [deleted file]
locale/ru/LC_MESSAGES/bitcoin.mo [deleted file]
locale/ru/LC_MESSAGES/bitcoin.po [deleted file]
locale/sv/LC_MESSAGES/bitcoin.mo [deleted file]
locale/sv/LC_MESSAGES/bitcoin.po [deleted file]
locale/zh_cn/LC_MESSAGES/bitcoin.mo [deleted file]
locale/zh_cn/LC_MESSAGES/bitcoin.po [deleted file]
scripts/qt/extract_strings_qt.py [new file with mode: 0755]
scripts/qt/img/reload.xcf [new file with mode: 0644]
scripts/qt/make_spinner.py [new file with mode: 0755]
scripts/qt/make_windows_icon.py [new symlink]
scripts/qt/make_windows_icon.sh [new file with mode: 0755]
share/pixmaps/bitcoin32.xpm [moved from src/xpm/bitcoin32.xpm with 100% similarity]
share/pixmaps/bitcoin80.xpm [moved from src/xpm/bitcoin80.xpm with 100% similarity]
share/setup.nsi
share/uiproject.fbp [deleted file]
src/base58.h
src/bitcoinrpc.cpp [moved from src/rpc.cpp with 88% similarity]
src/bitcoinrpc.h [moved from src/rpc.h with 100% similarity]
src/crypter.cpp
src/crypter.h
src/cryptopp/License.txt [deleted file]
src/cryptopp/Readme.txt [deleted file]
src/cryptopp/config.h [deleted file]
src/cryptopp/cpu.cpp [deleted file]
src/cryptopp/cpu.h [deleted file]
src/cryptopp/cryptlib.h [deleted file]
src/cryptopp/iterhash.h [deleted file]
src/cryptopp/misc.h [deleted file]
src/cryptopp/pch.h [deleted file]
src/cryptopp/secblock.h [deleted file]
src/cryptopp/sha.cpp [deleted file]
src/cryptopp/sha.h [deleted file]
src/cryptopp/simple.h [deleted file]
src/cryptopp/smartptr.h [deleted file]
src/cryptopp/stdcpp.h [deleted file]
src/db.cpp
src/headers.h
src/init.cpp
src/init.h
src/key.h
src/keystore.h
src/main.cpp
src/main.h
src/makefile.linux-mingw
src/makefile.mingw
src/makefile.osx
src/makefile.unix
src/makefile.vc
src/net.cpp
src/net.h
src/noui.h
src/obj-test/.gitignore [moved from src/cryptopp/obj/.gitignore with 100% similarity]
src/protocol.cpp
src/protocol.h
src/qt/aboutdialog.cpp [new file with mode: 0644]
src/qt/aboutdialog.h [new file with mode: 0644]
src/qt/addressbookpage.cpp [new file with mode: 0644]
src/qt/addressbookpage.h [new file with mode: 0644]
src/qt/addresstablemodel.cpp [new file with mode: 0644]
src/qt/addresstablemodel.h [new file with mode: 0644]
src/qt/askpassphrasedialog.cpp [new file with mode: 0644]
src/qt/askpassphrasedialog.h [new file with mode: 0644]
src/qt/bitcoin.cpp [new file with mode: 0644]
src/qt/bitcoin.qrc [new file with mode: 0644]
src/qt/bitcoinaddressvalidator.cpp [new file with mode: 0644]
src/qt/bitcoinaddressvalidator.h [new file with mode: 0644]
src/qt/bitcoinamountfield.cpp [new file with mode: 0644]
src/qt/bitcoinamountfield.h [new file with mode: 0644]
src/qt/bitcoingui.cpp [new file with mode: 0644]
src/qt/bitcoingui.h [new file with mode: 0644]
src/qt/bitcoinstrings.cpp [new file with mode: 0644]
src/qt/bitcoinunits.cpp [new file with mode: 0644]
src/qt/bitcoinunits.h [new file with mode: 0644]
src/qt/clientmodel.cpp [new file with mode: 0644]
src/qt/clientmodel.h [new file with mode: 0644]
src/qt/csvmodelwriter.cpp [new file with mode: 0644]
src/qt/csvmodelwriter.h [new file with mode: 0644]
src/qt/editaddressdialog.cpp [new file with mode: 0644]
src/qt/editaddressdialog.h [new file with mode: 0644]
src/qt/forms/aboutdialog.ui [new file with mode: 0644]
src/qt/forms/addressbookpage.ui [new file with mode: 0644]
src/qt/forms/askpassphrasedialog.ui [new file with mode: 0644]
src/qt/forms/editaddressdialog.ui [new file with mode: 0644]
src/qt/forms/overviewpage.ui [new file with mode: 0644]
src/qt/forms/sendcoinsdialog.ui [new file with mode: 0644]
src/qt/forms/sendcoinsentry.ui [new file with mode: 0644]
src/qt/forms/transactiondescdialog.ui [new file with mode: 0644]
src/qt/guiconstants.h [new file with mode: 0644]
src/qt/guiutil.cpp [new file with mode: 0644]
src/qt/guiutil.h [new file with mode: 0644]
src/qt/locale/bitcoin_da.ts [new file with mode: 0644]
src/qt/locale/bitcoin_de.ts [new file with mode: 0644]
src/qt/locale/bitcoin_en.ts [new file with mode: 0644]
src/qt/locale/bitcoin_es.ts [new file with mode: 0644]
src/qt/locale/bitcoin_es_CL.ts [new file with mode: 0644]
src/qt/locale/bitcoin_hu.ts [new file with mode: 0644]
src/qt/locale/bitcoin_it.ts [new file with mode: 0644]
src/qt/locale/bitcoin_nb.ts [new file with mode: 0644]
src/qt/locale/bitcoin_nl.ts [new file with mode: 0644]
src/qt/locale/bitcoin_pt_BR.ts [new file with mode: 0644]
src/qt/locale/bitcoin_ru.ts [new file with mode: 0644]
src/qt/locale/bitcoin_uk.ts [new file with mode: 0644]
src/qt/locale/bitcoin_zh_CN.ts [new file with mode: 0644]
src/qt/locale/bitcoin_zh_TW.ts [new file with mode: 0644]
src/qt/macdockiconhandler.h [new file with mode: 0644]
src/qt/macdockiconhandler.mm [new file with mode: 0644]
src/qt/monitoreddatamapper.cpp [new file with mode: 0644]
src/qt/monitoreddatamapper.h [new file with mode: 0644]
src/qt/notificator.cpp [new file with mode: 0644]
src/qt/notificator.h [new file with mode: 0644]
src/qt/optionsdialog.cpp [new file with mode: 0644]
src/qt/optionsdialog.h [new file with mode: 0644]
src/qt/optionsmodel.cpp [new file with mode: 0644]
src/qt/optionsmodel.h [new file with mode: 0644]
src/qt/overviewpage.cpp [new file with mode: 0644]
src/qt/overviewpage.h [new file with mode: 0644]
src/qt/qvalidatedlineedit.cpp [new file with mode: 0644]
src/qt/qvalidatedlineedit.h [new file with mode: 0644]
src/qt/qvaluecombobox.cpp [new file with mode: 0644]
src/qt/qvaluecombobox.h [new file with mode: 0644]
src/qt/res/bitcoin-qt.rc [new file with mode: 0644]
src/qt/res/icons/add.png [new file with mode: 0644]
src/qt/res/icons/address-book.png [new file with mode: 0644]
src/qt/res/icons/bitcoin.icns [new file with mode: 0644]
src/qt/res/icons/bitcoin.ico [new file with mode: 0644]
src/qt/res/icons/bitcoin.png [new file with mode: 0644]
src/qt/res/icons/bitcoin_testnet.png [new file with mode: 0644]
src/qt/res/icons/clock1.png [new file with mode: 0644]
src/qt/res/icons/clock2.png [new file with mode: 0644]
src/qt/res/icons/clock3.png [new file with mode: 0644]
src/qt/res/icons/clock4.png [new file with mode: 0644]
src/qt/res/icons/clock5.png [new file with mode: 0644]
src/qt/res/icons/configure.png [new file with mode: 0644]
src/qt/res/icons/connect0_16.png [new file with mode: 0644]
src/qt/res/icons/connect1_16.png [new file with mode: 0644]
src/qt/res/icons/connect2_16.png [new file with mode: 0644]
src/qt/res/icons/connect3_16.png [new file with mode: 0644]
src/qt/res/icons/connect4_16.png [new file with mode: 0644]
src/qt/res/icons/edit.png [new file with mode: 0644]
src/qt/res/icons/editcopy.png [new file with mode: 0644]
src/qt/res/icons/editpaste.png [new file with mode: 0644]
src/qt/res/icons/export.png [new file with mode: 0644]
src/qt/res/icons/history.png [new file with mode: 0644]
src/qt/res/icons/key.png [new file with mode: 0644]
src/qt/res/icons/lock_closed.png [new file with mode: 0644]
src/qt/res/icons/lock_open.png [new file with mode: 0644]
src/qt/res/icons/notsynced.png [new file with mode: 0644]
src/qt/res/icons/overview.png [new file with mode: 0644]
src/qt/res/icons/quit.png [new file with mode: 0644]
src/qt/res/icons/receive.png [new file with mode: 0644]
src/qt/res/icons/remove.png [new file with mode: 0644]
src/qt/res/icons/send.png [new file with mode: 0644]
src/qt/res/icons/synced.png [new file with mode: 0644]
src/qt/res/icons/toolbar.png [new file with mode: 0644]
src/qt/res/icons/toolbar_testnet.png [new file with mode: 0644]
src/qt/res/icons/transaction0.png [new file with mode: 0644]
src/qt/res/icons/transaction2.png [new file with mode: 0644]
src/qt/res/icons/tx_inout.png [new file with mode: 0644]
src/qt/res/icons/tx_input.png [new file with mode: 0644]
src/qt/res/icons/tx_mined.png [new file with mode: 0644]
src/qt/res/icons/tx_output.png [new file with mode: 0644]
src/qt/res/images/about.png [new file with mode: 0644]
src/qt/res/images/splash2.jpg [new file with mode: 0644]
src/qt/res/movies/update_spinner.mng [new file with mode: 0644]
src/qt/res/src/bitcoin.svg [new file with mode: 0644]
src/qt/res/src/clock1.svg [new file with mode: 0644]
src/qt/res/src/clock2.svg [new file with mode: 0644]
src/qt/res/src/clock3.svg [new file with mode: 0644]
src/qt/res/src/clock4.svg [new file with mode: 0644]
src/qt/res/src/clock5.svg [new file with mode: 0644]
src/qt/res/src/clock_green.svg [new file with mode: 0644]
src/qt/res/src/inout.svg [new file with mode: 0644]
src/qt/res/src/questionmark.svg [new file with mode: 0644]
src/qt/sendcoinsdialog.cpp [new file with mode: 0644]
src/qt/sendcoinsdialog.h [new file with mode: 0644]
src/qt/sendcoinsentry.cpp [new file with mode: 0644]
src/qt/sendcoinsentry.h [new file with mode: 0644]
src/qt/transactiondesc.cpp [new file with mode: 0644]
src/qt/transactiondesc.h [new file with mode: 0644]
src/qt/transactiondescdialog.cpp [new file with mode: 0644]
src/qt/transactiondescdialog.h [new file with mode: 0644]
src/qt/transactionfilterproxy.cpp [new file with mode: 0644]
src/qt/transactionfilterproxy.h [new file with mode: 0644]
src/qt/transactionrecord.cpp [new file with mode: 0644]
src/qt/transactionrecord.h [new file with mode: 0644]
src/qt/transactiontablemodel.cpp [new file with mode: 0644]
src/qt/transactiontablemodel.h [new file with mode: 0644]
src/qt/transactionview.cpp [new file with mode: 0644]
src/qt/transactionview.h [new file with mode: 0644]
src/qt/walletmodel.cpp [new file with mode: 0644]
src/qt/walletmodel.h [new file with mode: 0644]
src/qtui.h [new file with mode: 0644]
src/script.cpp
src/serialize.h
src/test/DoS_tests.cpp [new file with mode: 0644]
src/test/base58_tests.cpp [new file with mode: 0644]
src/test/base64_tests.cpp [new file with mode: 0644]
src/test/miner_tests.cpp [new file with mode: 0644]
src/test/test_bitcoin.cpp
src/test/util_tests.cpp [new file with mode: 0644]
src/ui.cpp [deleted file]
src/ui.h [deleted file]
src/uibase.cpp [deleted file]
src/uibase.h [deleted file]
src/util.cpp
src/util.h
src/wallet.cpp
src/wallet.h
src/xpm/about.xpm [deleted file]
src/xpm/addressbook16.xpm [deleted file]
src/xpm/addressbook20.xpm [deleted file]
src/xpm/bitcoin16.xpm [deleted file]
src/xpm/bitcoin20.xpm [deleted file]
src/xpm/bitcoin48.xpm [deleted file]
src/xpm/check.xpm [deleted file]
src/xpm/send16.xpm [deleted file]
src/xpm/send16noshadow.xpm [deleted file]
src/xpm/send20.xpm [deleted file]

index 7fc31bb..95152ce 100644 (file)
@@ -10,3 +10,14 @@ src/test_bitcoin
 *.o
 *.patch
 .bitcoin
+#compilation and Qt preprocessor part
+*.qm
+Makefile
+bitcoin-qt
+#resources cpp
+qrc_*.cpp
+#qt creator
+*.pro.user
+#mac specific
+.DS_Store
+build
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..6989d89
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,9 @@
+Building Bitcoin
+
+See doc/readme-qt.rst for instructions on building Bitcoin QT,
+the intended-for-end-users, nice-graphical-interface, reference
+implementation of Bitcoin.
+
+See doc/build-*.txt for instructions on building bitcoind,
+the intended-for-services, no-graphical-interface, reference
+implementation of Bitcoin.
index 92635bb..0c475ea 100644 (file)
--- a/README.md
+++ b/README.md
@@ -28,3 +28,15 @@ help test the Bitcoin core, please contact QA@BitcoinTesting.org.
 Feature branches are created when there are major new features being
 worked on by several people.
 
+From time to time a pull request will become outdated. If this occurs, and
+the pull is no longer automatically mergeable; a comment on the pull will
+be used to issue a warning of closure. The pull will be closed 15 days
+after the warning if action is not taken by the author. Pull requests closed
+in this manner will have their corresponding issue labeled 'stagnant'.
+
+Issues with no commits will be given a similar warning, and closed after
+15 days from their last activity. Issues closed in this manner will be 
+labeled 'stale'. 
+
+Requests to reopen closed pull requests and/or issues can be submitted to 
+QA@BitcoinTesting.org. 
\ No newline at end of file
diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro
new file mode 100644 (file)
index 0000000..b5cee48
--- /dev/null
@@ -0,0 +1,291 @@
+TEMPLATE = app
+TARGET =
+VERSION = 0.5.6
+INCLUDEPATH += src src/json src/qt
+DEFINES += QT_GUI BOOST_THREAD_USE_LIB
+CONFIG += no_include_pwd
+
+# for boost 1.37, add -mt to the boost libraries 
+# use: qmake BOOST_LIB_SUFFIX=-mt
+# for boost thread win32 with _win32 sufix
+# use: BOOST_THREAD_LIB_SUFFIX=_win32-...
+# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8
+
+# Dependency library locations can be customized with BOOST_INCLUDE_PATH, 
+#    BOOST_LIB_PATH, BDB_INCLUDE_PATH, BDB_LIB_PATH
+#    OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
+
+OBJECTS_DIR = build
+MOC_DIR = build
+UI_DIR = build
+
+# use: qmake "RELEASE=1"
+contains(RELEASE, 1) {
+    # Mac: compile for maximum compatibility (10.5, 32-bit)
+    macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
+
+    !windows:!macx {
+        # Linux: static link
+        LIBS += -Wl,-Bstatic
+    }
+}
+
+# use: qmake "USE_UPNP=1" ( enabled by default; default)
+#  or: qmake "USE_UPNP=0" (disabled by default)
+#  or: qmake "USE_UPNP=-" (not supported)
+# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support
+contains(USE_UPNP, -) {
+    message(Building without UPNP support)
+} else {
+    message(Building with UPNP support)
+    count(USE_UPNP, 0) {
+        USE_UPNP=1
+    }
+    DEFINES += USE_UPNP=$$USE_UPNP STATICLIB
+    INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH
+    LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc
+    win32:LIBS += -liphlpapi
+}
+
+# use: qmake "USE_DBUS=1"
+contains(USE_DBUS, 1) {
+    message(Building with DBUS (Freedesktop notifications) support)
+    DEFINES += USE_DBUS
+    QT += dbus
+}
+
+# use: qmake "USE_SSL=1"
+contains(USE_SSL, 1) {
+    message(Building with SSL support for RPC)
+    DEFINES += USE_SSL
+}
+
+contains(BITCOIN_NEED_QT_PLUGINS, 1) {
+    DEFINES += BITCOIN_NEED_QT_PLUGINS
+    QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets
+}
+
+!windows {
+    # for extra security against potential buffer overflows
+    QMAKE_CXXFLAGS += -fstack-protector
+    QMAKE_LFLAGS += -fstack-protector
+    # do not enable this on windows, as it will result in a non-working executable!
+}
+
+# disable quite some warnings because bitcoin core "sins" a lot
+QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wno-strict-aliasing -Wno-invalid-offsetof -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare -Wno-char-subscripts  -Wno-unused-value -Wno-sequence-point -Wno-parentheses -Wno-unknown-pragmas -Wno-switch
+
+# Input
+DEPENDPATH += src src/json src/qt
+HEADERS += src/qt/bitcoingui.h \
+    src/qt/transactiontablemodel.h \
+    src/qt/addresstablemodel.h \
+    src/qt/optionsdialog.h \
+    src/qt/sendcoinsdialog.h \
+    src/qt/addressbookpage.h \
+    src/qt/aboutdialog.h \
+    src/qt/editaddressdialog.h \
+    src/qt/bitcoinaddressvalidator.h \
+    src/base58.h \
+    src/bignum.h \
+    src/checkpoints.h \
+    src/util.h \
+    src/uint256.h \
+    src/serialize.h \
+    src/strlcpy.h \
+    src/main.h \
+    src/net.h \
+    src/key.h \
+    src/db.h \
+    src/script.h \
+    src/noui.h \
+    src/init.h \
+    src/headers.h \
+    src/irc.h \
+    src/json/json_spirit_writer_template.h \
+    src/json/json_spirit_writer.h \
+    src/json/json_spirit_value.h \
+    src/json/json_spirit_utils.h \
+    src/json/json_spirit_stream_reader.h \
+    src/json/json_spirit_reader_template.h \
+    src/json/json_spirit_reader.h \
+    src/json/json_spirit_error_position.h \
+    src/json/json_spirit.h \
+    src/qt/clientmodel.h \
+    src/qt/guiutil.h \
+    src/qt/transactionrecord.h \
+    src/qt/guiconstants.h \
+    src/qt/optionsmodel.h \
+    src/qt/monitoreddatamapper.h \
+    src/qtui.h \
+    src/qt/transactiondesc.h \
+    src/qt/transactiondescdialog.h \
+    src/qt/bitcoinamountfield.h \
+    src/wallet.h \
+    src/keystore.h \
+    src/qt/transactionfilterproxy.h \
+    src/qt/transactionview.h \
+    src/qt/walletmodel.h \
+    src/bitcoinrpc.h \
+    src/qt/overviewpage.h \
+    src/qt/csvmodelwriter.h \
+    src/crypter.h \
+    src/qt/sendcoinsentry.h \
+    src/qt/qvalidatedlineedit.h \
+    src/qt/bitcoinunits.h \
+    src/qt/qvaluecombobox.h \
+    src/qt/askpassphrasedialog.h \
+    src/protocol.h \
+    src/qt/notificator.h
+
+SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
+    src/qt/transactiontablemodel.cpp \
+    src/qt/addresstablemodel.cpp \
+    src/qt/optionsdialog.cpp \
+    src/qt/sendcoinsdialog.cpp \
+    src/qt/addressbookpage.cpp \
+    src/qt/aboutdialog.cpp \
+    src/qt/editaddressdialog.cpp \
+    src/qt/bitcoinaddressvalidator.cpp \
+    src/util.cpp \
+    src/script.cpp \
+    src/main.cpp \
+    src/init.cpp \
+    src/net.cpp \
+    src/irc.cpp \
+    src/checkpoints.cpp \
+    src/db.cpp \
+    src/json/json_spirit_writer.cpp \
+    src/json/json_spirit_value.cpp \
+    src/json/json_spirit_reader.cpp \
+    src/qt/clientmodel.cpp \
+    src/qt/guiutil.cpp \
+    src/qt/transactionrecord.cpp \
+    src/qt/optionsmodel.cpp \
+    src/qt/monitoreddatamapper.cpp \
+    src/qt/transactiondesc.cpp \
+    src/qt/transactiondescdialog.cpp \
+    src/qt/bitcoinstrings.cpp \
+    src/qt/bitcoinamountfield.cpp \
+    src/wallet.cpp \
+    src/keystore.cpp \
+    src/qt/transactionfilterproxy.cpp \
+    src/qt/transactionview.cpp \
+    src/qt/walletmodel.cpp \
+    src/bitcoinrpc.cpp \
+    src/qt/overviewpage.cpp \
+    src/qt/csvmodelwriter.cpp \
+    src/crypter.cpp \
+    src/qt/sendcoinsentry.cpp \
+    src/qt/qvalidatedlineedit.cpp \
+    src/qt/bitcoinunits.cpp \
+    src/qt/qvaluecombobox.cpp \
+    src/qt/askpassphrasedialog.cpp \
+    src/protocol.cpp \
+    src/qt/notificator.cpp
+
+RESOURCES += \
+    src/qt/bitcoin.qrc
+
+FORMS += \
+    src/qt/forms/sendcoinsdialog.ui \
+    src/qt/forms/addressbookpage.ui \
+    src/qt/forms/aboutdialog.ui \
+    src/qt/forms/editaddressdialog.ui \
+    src/qt/forms/transactiondescdialog.ui \
+    src/qt/forms/overviewpage.ui \
+    src/qt/forms/sendcoinsentry.ui \
+    src/qt/forms/askpassphrasedialog.ui
+
+CODECFORTR = UTF-8
+
+# for lrelease/lupdate
+# also add new translations to src/qt/bitcoin.qrc under translations/
+TRANSLATIONS = $$files(src/qt/locale/bitcoin_*.ts)
+
+isEmpty(QMAKE_LRELEASE) {
+    win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
+    else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
+}
+isEmpty(TS_DIR):TS_DIR = src/qt/locale
+# automatically build translations, so they can be included in resource file
+TSQM.name = lrelease ${QMAKE_FILE_IN}
+TSQM.input = TRANSLATIONS
+TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm
+TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN}
+TSQM.CONFIG = no_link
+QMAKE_EXTRA_COMPILERS += TSQM
+PRE_TARGETDEPS += compiler_TSQM_make_all
+
+# "Other files" to show in Qt Creator
+OTHER_FILES += \
+    doc/*.rst doc/*.txt doc/README README.md res/bitcoin-qt.rc
+
+# platform specific defaults, if not overridden on command line
+isEmpty(BOOST_LIB_SUFFIX) {
+    macx:BOOST_LIB_SUFFIX = -mt
+    windows:BOOST_LIB_SUFFIX = -mgw44-mt-1_43
+}
+
+isEmpty(BOOST_THREAD_LIB_SUFFIX) {
+    BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX
+}
+
+isEmpty(BDB_LIB_PATH) {
+    macx:BDB_LIB_PATH = /opt/local/lib/db48
+}
+
+isEmpty(BDB_LIB_SUFFIX) {
+    macx:BDB_LIB_SUFFIX = -4.8
+}
+
+isEmpty(BDB_INCLUDE_PATH) {
+    macx:BDB_INCLUDE_PATH = /opt/local/include/db48
+}
+
+isEmpty(BOOST_LIB_PATH) {
+    macx:BOOST_LIB_PATH = /opt/local/lib
+}
+
+isEmpty(BOOST_INCLUDE_PATH) {
+    macx:BOOST_INCLUDE_PATH = /opt/local/include
+}
+
+windows:LIBS += -lws2_32
+windows:DEFINES += WIN32
+windows:RC_FILE = src/qt/res/bitcoin-qt.rc
+
+windows:!contains(MINGW_THREAD_BUGFIX, 0) {
+    # At least qmake's win32-g++-cross profile is missing the -lmingwthrd
+    # thread-safety flag. GCC has -mthreads to enable this, but it doesn't
+    # work with static linking. -lmingwthrd must come BEFORE -lmingw, so
+    # it is prepended to QMAKE_LIBS_QT_ENTRY.
+    # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes
+    # any problems on some untested qmake profile now or in the future.
+    DEFINES += _MT
+    QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY
+}
+
+macx:HEADERS += src/qt/macdockiconhandler.h
+macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm
+macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit
+macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0
+macx:ICON = src/qt/res/icons/bitcoin.icns
+macx:TARGET = "Bitcoin-Qt"
+
+# Set libraries and includes at end, to use platform-defined defaults if not overridden
+INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH
+LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,)
+LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX
+# -lgdi32 has to happen after -lcrypto (see  #681)
+windows:LIBS += -lgdi32
+LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
+
+contains(RELEASE, 1) {
+    !windows:!macx {
+        # Linux: turn dynamic linking back on for c/c++ runtime libraries
+        LIBS += -Wl,-Bdynamic
+    }
+}
+
+system($$QMAKE_LRELEASE -silent $$_PRO_FILE_)
diff --git a/contrib/Bitcoin.app/Contents/Info.plist b/contrib/Bitcoin.app/Contents/Info.plist
deleted file mode 100644 (file)
index a7efd90..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>CFBundleDisplayName</key>
-       <string>Bitcoin</string>
-       <key>CFBundleDevelopmentRegion</key>
-       <string>English</string>
-       <key>CFBundleExecutable</key>
-       <string>bitcoin</string>
-       <key>CFBundleIdentifier</key>
-       <string>org.bitcoin.bitcoin</string>
-       <key>CFBundleInfoDictionaryVersion</key>
-       <string>6.0</string>
-       <key>CFBundleName</key>
-       <string>Bitcoin</string>
-       <key>CFBundlePackageType</key>
-       <string>APPL</string>
-       <key>CFBundleShortVersionString</key>
-       <string>0.4.7</string>
-       <key>CFBundleSignature</key>
-       <string>????</string>
-       <key>CFBundleVersion</key>
-       <string>400</string>
-       <key>LSMinimumSystemVersion</key>
-       <string>10.5</string>
-       <key>CFBundleIconFile</key>
-       <string>BitcoinAppIcon.icns</string>
-       <key>LSMultipleInstancesProhibited</key>
-       <true/>
-</dict>
-</plist>
diff --git a/contrib/Bitcoin.app/Contents/MacOS/.higit b/contrib/Bitcoin.app/Contents/MacOS/.higit
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/contrib/Bitcoin.app/Contents/Resources/BitcoinAppIcon.icns b/contrib/Bitcoin.app/Contents/Resources/BitcoinAppIcon.icns
deleted file mode 100644 (file)
index 033ce1a..0000000
Binary files a/contrib/Bitcoin.app/Contents/Resources/BitcoinAppIcon.icns and /dev/null differ
diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py
new file mode 100644 (file)
index 0000000..b02b299
--- /dev/null
@@ -0,0 +1,324 @@
+from jsonrpc import ServiceProxy
+import sys
+import string
+
+# ===== BEGIN USER SETTINGS =====
+# if you do not set these you will be prompted for a password for every command
+rpcuser = ""
+rpcpass = ""
+# ====== END USER SETTINGS ======
+
+
+if rpcpass == "":
+       access = ServiceProxy("http://127.0.0.1:8332")
+else:
+       access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332")
+cmd = sys.argv[1].lower()
+
+if cmd == "backupwallet":
+       try:
+               path = raw_input("Enter destination path/filename: ")
+               print access.backupwallet(path)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getaccount":
+       try:
+               addr = raw_input("Enter a Bitcoin address: ")
+               print access.getaccount(addr)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getaccountaddress":
+       try:
+               acct = raw_input("Enter an account name: ")
+               print access.getaccountaddress(acct)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getaddressesbyaccount":
+       try:
+               acct = raw_input("Enter an account name: ")
+               print access.getaddressesbyaccount(acct)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getbalance":
+       try:
+               acct = raw_input("Enter an account (optional): ")
+               mc = raw_input("Minimum confirmations (optional): ")
+               try:
+                       print access.getbalance(acct, mc)
+               except:
+                       print access.getbalance()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getblockbycount":
+       try:
+               height = raw_input("Height: ")
+               print access.getblockbycount(height)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getblockcount":
+       try:
+               print access.getblockcount()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getblocknumber":
+       try:
+               print access.getblocknumber()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getconnectioncount":
+       try:
+               print access.getconnectioncount()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getdifficulty":
+       try:
+               print access.getdifficulty()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getgenerate":
+       try:
+               print access.getgenerate()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "gethashespersec":
+       try:
+               print access.gethashespersec()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getinfo":
+       try:
+               print access.getinfo()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getnewaddress":
+       try:
+               acct = raw_input("Enter an account name: ")
+               try:
+                       print access.getnewaddress(acct)
+               except:
+                       print access.getnewaddress()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getreceivedbyaccount":
+       try:
+               acct = raw_input("Enter an account (optional): ")
+               mc = raw_input("Minimum confirmations (optional): ")
+               try:
+                       print access.getreceivedbyaccount(acct, mc)
+               except:
+                       print access.getreceivedbyaccount()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getreceivedbyaddress":
+       try:
+               addr = raw_input("Enter a Bitcoin address (optional): ")
+               mc = raw_input("Minimum confirmations (optional): ")
+               try:
+                       print access.getreceivedbyaddress(addr, mc)
+               except:
+                       print access.getreceivedbyaddress()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "gettransaction":
+       try:
+               txid = raw_input("Enter a transaction ID: ")
+               print access.gettransaction(txid)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "getwork":
+       try:
+               data = raw_input("Data (optional): ")
+               try:
+                       print access.gettransaction(data)
+               except:
+                       print access.gettransaction()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "help":
+       try:
+               cmd = raw_input("Command (optional): ")
+               try:
+                       print access.help(cmd)
+               except:
+                       print access.help()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "listaccounts":
+       try:
+               mc = raw_input("Minimum confirmations (optional): ")
+               try:
+                       print access.listaccounts(mc)
+               except:
+                       print access.listaccounts()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "listreceivedbyaccount":
+       try:
+               mc = raw_input("Minimum confirmations (optional): ")
+               incemp = raw_input("Include empty? (true/false, optional): ")
+               try:
+                       print access.listreceivedbyaccount(mc, incemp)
+               except:
+                       print access.listreceivedbyaccount()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "listreceivedbyaddress":
+       try:
+               mc = raw_input("Minimum confirmations (optional): ")
+               incemp = raw_input("Include empty? (true/false, optional): ")
+               try:
+                       print access.listreceivedbyaddress(mc, incemp)
+               except:
+                       print access.listreceivedbyaddress()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "listtransactions":
+       try:
+               acct = raw_input("Account (optional): ")
+               count = raw_input("Number of transactions (optional): ")
+               frm = raw_input("Skip (optional):")
+               try:
+                       print access.listtransactions(acct, count, frm)
+               except:
+                       print access.listtransactions()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "move":
+       try:
+               frm = raw_input("From: ")
+               to = raw_input("To: ")
+               amt = raw_input("Amount:")
+               mc = raw_input("Minimum confirmations (optional): ")
+               comment = raw_input("Comment (optional): ")
+               try:
+                       print access.move(frm, to, amt, mc, comment)
+               except:
+                       print access.move(frm, to, amt)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "sendfrom":
+       try:
+               frm = raw_input("From: ")
+               to = raw_input("To: ")
+               amt = raw_input("Amount:")
+               mc = raw_input("Minimum confirmations (optional): ")
+               comment = raw_input("Comment (optional): ")
+               commentto = raw_input("Comment-to (optional): ")
+               try:
+                       print access.sendfrom(frm, to, amt, mc, comment, commentto)
+               except:
+                       print access.sendfrom(frm, to, amt)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "sendmany":
+       try:
+               frm = raw_input("From: ")
+               to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
+               mc = raw_input("Minimum confirmations (optional): ")
+               comment = raw_input("Comment (optional): ")
+               try:
+                       print access.sendmany(frm,to,mc,comment)
+               except:
+                       print access.sendmany(frm,to)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "sendtoaddress":
+       try:
+               to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
+               amt = raw_input("Amount:")
+               comment = raw_input("Comment (optional): ")
+               commentto = raw_input("Comment-to (optional): ")
+               try:
+                       print access.sendtoaddress(to,amt,comment,commentto)
+               except:
+                       print access.sendtoaddress(to,amt)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "setaccount":
+       try:
+               addr = raw_input("Address: ")
+               acct = raw_input("Account:")
+               print access.setaccount(addr,acct)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "setgenerate":
+       try:
+               gen= raw_input("Generate? (true/false): ")
+               cpus = raw_input("Max processors/cores (-1 for unlimited, optional):")
+               try:
+                       print access.setgenerate(gen, cpus)
+               except:
+                       print access.setgenerate(gen)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "settxfee":
+       try:
+               amt = raw_input("Amount:")
+               print access.settxfee(amt)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "stop":
+       try:
+               print access.stop()
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "validateaddress":
+       try:
+               addr = raw_input("Address: ")
+               print access.validateaddress(addr)
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "walletpassphrase":
+       try:
+               pwd = raw_input("Enter wallet passphrase: ")
+               access.walletpassphrase(pwd, 60)
+               print "\n---Wallet unlocked---\n"
+       except:
+               print "\n---An error occurred---\n"
+
+elif cmd == "walletpassphrasechange":
+       try:
+               pwd = raw_input("Enter old wallet passphrase: ")
+               pwd2 = raw_input("Enter new wallet passphrase: ")
+               access.walletpassphrasechange(pwd, pwd2)
+               print
+               print "\n---Passphrase changed---\n"
+       except:
+               print
+               print "\n---An error occurred---\n"
+               print
+
+else:
+       print "Command not found or not supported"
\ No newline at end of file
diff --git a/contrib/debian/bin/bitcoin-qt b/contrib/debian/bin/bitcoin-qt
new file mode 100755 (executable)
index 0000000..f2eac1b
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+umask 077
+
+basedir=~/.bitcoin
+dbfile="$basedir/DB_CONFIG"
+cfgfile="$basedir/bitcoin.conf"
+
+[ -e "$basedir" ] || mkdir "$basedir"
+
+# Bitcoin does not clean up DB log files by default
+[ -e "$dbfile" ] || echo 'set_flags DB_LOG_AUTOREMOVE' > "$dbfile"
+
+exec /usr/lib/bitcoin/bitcoin-qt "$@"
diff --git a/contrib/debian/bin/bitcoind b/contrib/debian/bin/bitcoind
new file mode 100755 (executable)
index 0000000..0904f76
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+umask 077
+
+basedir=~/.bitcoin
+dbfile="$basedir/DB_CONFIG"
+cfgfile="$basedir/bitcoin.conf"
+
+[ -e "$basedir" ] || mkdir "$basedir"
+
+[ -e "$cfgfile" ] || perl -le 'print"rpcpassword=",map{(a..z,A..Z,0..9)[rand 62]}0..9' > "$cfgfile"
+
+# Bitcoin does not clean up DB log files by default
+[ -e "$dbfile" ] || echo 'set_flags DB_LOG_AUTOREMOVE' > "$dbfile"
+
+exec /usr/lib/bitcoin/bitcoind "$@"
diff --git a/contrib/debian/bitcoin-qt.desktop b/contrib/debian/bitcoin-qt.desktop
new file mode 100644 (file)
index 0000000..d65cc35
--- /dev/null
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Bitcoin
+Comment=Bitcoin P2P Cryptocurrency
+Exec=/usr/bin/bitcoin-qt
+Terminal=false
+Type=Application
+Icon=/usr/share/pixmaps/bitcoin80.xpm
+#For when bitcoin (finally) properly handles bitcoin: URLs
+#MimeType=x-scheme-handler/bitcoin;
+Categories=Office;
diff --git a/contrib/debian/bitcoin-qt.install b/contrib/debian/bitcoin-qt.install
new file mode 100644 (file)
index 0000000..7ddc8c1
--- /dev/null
@@ -0,0 +1,5 @@
+debian/bin/bitcoin-qt usr/bin
+bitcoin-qt usr/lib/bitcoin
+share/pixmaps/bitcoin32.xpm usr/share/pixmaps
+share/pixmaps/bitcoin80.xpm usr/share/pixmaps
+debian/bitcoin-qt.desktop usr/share/applications
diff --git a/contrib/debian/bitcoin-qt.lintian-overrides b/contrib/debian/bitcoin-qt.lintian-overrides
new file mode 100644 (file)
index 0000000..7fb230e
--- /dev/null
@@ -0,0 +1,2 @@
+# Linked code is Expat - only Debian packaging is GPL-2+
+bitcoin-qt: possible-gpl-code-linked-with-openssl
diff --git a/contrib/debian/bitcoind.examples b/contrib/debian/bitcoind.examples
new file mode 100644 (file)
index 0000000..4ded67d
--- /dev/null
@@ -0,0 +1 @@
+debian/examples/bitcoin.conf
diff --git a/contrib/debian/bitcoind.install b/contrib/debian/bitcoind.install
new file mode 100644 (file)
index 0000000..e978c44
--- /dev/null
@@ -0,0 +1,2 @@
+debian/bin/bitcoind usr/bin
+src/bitcoind usr/lib/bitcoin
diff --git a/contrib/debian/bitcoind.lintian-overrides b/contrib/debian/bitcoind.lintian-overrides
new file mode 100644 (file)
index 0000000..3f9f140
--- /dev/null
@@ -0,0 +1,2 @@
+# Linked code is Expat - only Debian packaging is GPL-2+
+bitcoind: possible-gpl-code-linked-with-openssl
diff --git a/contrib/debian/bitcoind.manpages b/contrib/debian/bitcoind.manpages
new file mode 100644 (file)
index 0000000..3e4ca63
--- /dev/null
@@ -0,0 +1,2 @@
+debian/manpages/bitcoind.1
+debian/manpages/bitcoin.conf.5
diff --git a/contrib/debian/changelog b/contrib/debian/changelog
new file mode 100644 (file)
index 0000000..0720acc
--- /dev/null
@@ -0,0 +1,287 @@
+bitcoin (0.5.3-natty0) natty; urgency=low
+
+  * New upstream release.
+
+ -- Luke Dashjr <luke+bitcoin+deb@dashjr.org>  Tue, 10 Jan 2012 15:57:00 -0500
+
+bitcoin (0.5.2-natty1) natty; urgency=low
+
+  * Remove mentions on anonymity in package descriptions and manpage.
+    These should never have been there, bitcoin isnt anonymous without
+    a ton of work that virtually no users will ever be willing and
+    capable of doing
+
+ -- Matt Corallo <matt@bluematt.me>  Sat, 7 Jan 2012 13:37:00 -0500
+
+bitcoin (0.5.2-natty0) natty; urgency=low
+
+  * New upstream release.
+
+ -- Luke Dashjr <luke+bitcoin+deb@dashjr.org>  Fri, 16 Dec 2011 17:57:00 -0500
+
+bitcoin (0.5.1-natty0) natty; urgency=low
+
+  * New upstream release.
+
+ -- Matt Corallo <matt@bluematt.me>  Fri, 16 Dec 2011 13:27:00 -0500
+
+bitcoin (0.5.0-natty0) natty; urgency=low
+
+  * New upstream release.
+
+ -- Matt Corallo <matt@bluematt.me>  Mon, 21 Nov 2011 11:32:00 -0500
+
+bitcoin (0.5.0~rc7-natty0) natty; urgency=low
+
+  * New upstream release candidate.
+
+ -- Matt Corallo <matt@bluematt.me>  Sun, 20 Nov 2011 17:08:00 -0500
+
+bitcoin (0.5.0~rc3-natty0) natty; urgency=low
+
+  * New upstream release candidate.
+  * Don't set rpcpassword for bitcoin-qt.
+
+ -- Matt Corallo <matt@bluematt.me>  Tue, 8 Nov 2011 11:56:00 -0400
+
+bitcoin (0.5.0~rc1-natty1) natty; urgency=low
+
+  * Add test_bitcoin to build test
+  * Fix clean
+  * Remove uneccessary build-dependancies
+
+ -- Matt Corallo <matt@bluematt.me>  Wed, 26 Oct 2011 14:37:18 -0400
+
+bitcoin (0.5.0~rc1-natty0) natty; urgency=low
+
+  * Mark for natty
+  * Fix broken build
+  * Fix copyright listing
+  * Remove bitcoin: URL handler until bitcoin actually has support for it (Oops)
+
+ -- Matt Corallo <matt@bluematt.me>  Wed, 26 Oct 2011 14:37:18 -0400
+
+bitcoin (0.5.0~rc1-2) experimental; urgency=low
+
+  * Add bitcoin-qt
+
+ -- Matt Corallo <matt@bluematt.me>  Tue, 25 Oct 2011 15:24:18 -0400
+
+bitcoin (0.5.0~rc1-1) experimental; urgency=low
+
+  * New upstream prerelease.
+  * Add Github as alternate upstream source in watch file.
+  * Stop build-depending on libcrypto++-dev, and drop patch 1000:
+    Upstream no longer use crypto++.
+  * Drop patch 1003: Upstream builds dynamic by default now.
+  * Update copyright file: Drop notes on longer included sources.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Fri, 14 Oct 2011 00:16:18 +0200
+
+bitcoin (0.4.0-1) unstable; urgency=low
+
+  * New upstream release.
+  * Stop repackaging source tarballs: No DFSG-violating stripping left.
+  * Update copyright file:
+    + Add Github URL to Source.
+  * Drop dpkg-source local-options hint: Declared options are default
+    since dpkg-source 1.16.1.
+    + Add irc URL to Upstream-Contact.
+    + Add comment on Bitcoin Developers to catch-all Files section.
+    + Add Files sections for newly readded src/cryptopp/* (new custom
+      BSD-like license), and newly added doc/build-osx.txt and
+      src/makefile.osx (Expat).
+  * Bump debhelper compatibility level to 7.
+  * Suppress binary icns and gpg files.
+  * Enable regression tests:
+    + Build-depend on libboost-test-dev.
+    + Extend patch 1003 to also dynamically link test binary.
+    + Build and invoke test binary unless tests are disabled.
+  * Tighten build-dependency on cdbs: Recent version needed to support
+    debhelper 7.
+  * Relax build-depend unversioned on debhelper: needed version
+    satisfied even in oldstable.
+  * Stop suppress optional build-dependencies: Satisfied in stable.
+    Build-depend on devscripts (enabling copyright-check).
+
+ -- Jonas Smedegaard <dr@jones.dk>  Wed, 05 Oct 2011 01:48:53 +0200
+
+bitcoin (0.3.24~dfsg-1) unstable; urgency=low
+
+  * New upstream release.
+
+  [ Jonas Smedegaard ]
+  * Improve various usage hints:
+    + Explicitly mention in long description that bitcoind contains
+      daemon and command-line interface.
+    + Extend README.Debian with section on lack of GUI, and add primary
+      headline.
+    + Avoid installing upstream README: contains no parts relevant for
+      Debian usage.
+    Thanks to richard for suggestions (see bug#629443).
+  * Favor final releases over prereleases in rules and watch file.
+    Thanks to Jan Dittberner.
+  * Track -src (not -linux) tarballs in rules and watch file.
+    Thanks to Jan Dittberner.
+  * Drop patches 1004 and 1005 (integrated upstream) and simplify
+    CXXFLAGS in rules file.
+  * Stop stripping no longer included source-less binaries from upstream
+    tarballs.
+
+  [ Jan Dittberner ]
+  * refresh debian/patches/1000_use_system_crypto++.patch
+
+ -- Jonas Smedegaard <dr@jones.dk>  Tue, 19 Jul 2011 15:08:54 +0200
+
+bitcoin (0.3.21~dfsg-2) unstable; urgency=low
+
+  * Enable UPNP support:
+    + Drop patch 1006.
+    + Build-depend on libminiupnpc-dev.
+    Thanks to Matt Corallo.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Sat, 28 May 2011 15:52:44 +0200
+
+bitcoin (0.3.21~dfsg-1) unstable; urgency=low
+
+  * New upstream release.
+  * Refresh patches.
+  * Drop patch 1002: no longer needed, as upstream use pkgconfig now.
+  * Add patch 1006 to really unset USE_UPNP as aparently intended.
+  * Adjust cleanup rule to preserve .gitignore files.
+  * Update copyright file:
+    + Bump format to draft 174 of DEP-5.
+    + Shorten comments.
+  * Bump policy compliance to standards-version 3.9.2.
+  * Shorten Vcs-Browser paragraph in control file.
+  * Fix mention daemon (not CLI tools) in short description.
+  * Stop conflicting with or replace bitcoin-cli: Only transitional, no
+    longer needed.
+  * Link against unversioned berkeleydb. Update NEWS and README.Debian
+    accordingly (and improve wording while at it).
+    Closes: Bug#621425. Thanks to Ondřej Surý.
+  * This release also implicitly updates linkage against libcrypto++,
+    which closes: bug#626953, #627024.
+  * Disable linkage against not yet Debian packaged MiniUPnP.
+  * Silence seemingly harmless noise about unused variables.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Tue, 17 May 2011 15:31:24 +0200
+
+bitcoin (0.3.20.2~dfsg-2) unstable; urgency=medium
+
+  * Fix have wrapper script execute real binary (not loop executing
+    itself).
+    Closes: bug#617290. Thanks to Philippe Gauthier and Etienne Laurin.
+  * Set urgency=medium as the only (user-exposed) binary is useless
+    without this fix and has been for some time.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Wed, 16 Mar 2011 09:11:06 +0100
+
+bitcoin (0.3.20.2~dfsg-1) unstable; urgency=low
+
+  * New upstream release.
+  * Fix provide and replace former package name bitcoin-cli.
+    Closes: bug#618439. Thanks to Shane Wegner.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Tue, 15 Mar 2011 11:41:43 +0100
+
+bitcoin (0.3.20.01~dfsg-1) unstable; urgency=low
+
+  * New upstream release.
+
+  [ Micah Anderson ]
+  * Add myself as uploader.
+
+  [ Jonas Smedegaard ]
+  * Add wrapper for bitcoind to ease initial startup.
+  * Update patches:
+    + Drop patch 2002: Applied upstream.
+    + Add patch 1005 to add phtread linker option.
+      Closes: bug#615619. Thanks to Shane Wegner.
+    + Refresh patches.
+  * Extend copyright years in rules file header.
+  * Rewrite copyright file using draft svn166 of DEP5 format.
+  * Rename binary package to bitcoind (from bincoin-cli).
+    Closes: bug#614025. Thanks to Luke-Jr.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Tue, 01 Mar 2011 15:55:04 +0100
+
+bitcoin (0.3.19~dfsg-6) unstable; urgency=low
+
+  * Fix override agressive optimizations.
+  * Fix tighten build-dependencies to really fit backporting to Lenny:
+    + Add fallback build-dependency on libdb4.6++-dev.
+    + Tighten unversioned Boost build-dependencies to recent versions,
+      To force use of versioned Boost when backporting to Lenny.
+    ...needs more love, though: actual build fails.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Mon, 17 Jan 2011 19:48:35 +0100
+
+bitcoin (0.3.19~dfsg-5) unstable; urgency=low
+
+  * Fix lower Boost fallback-build-dependencies to 1.35, really
+    available in Lenny.
+  * Correct comment in rules file regarding reason for versioned Boost
+    fallback-build-dependency.
+  * Add patch 2002 adding -mt decoration to Boost flags, to ease
+    backporting to Lenny.
+  * Respect DEB_BUILD_OPTIONS, and suppress arch-specific optimizations:
+    + Add patch 1004 to allow overriding optimization flags.
+    + Set optimization flags conditionally at build time.
+    + Drop patch 2002 unconditionally suppressing arch-optimizations.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Mon, 17 Jan 2011 16:04:48 +0100
+
+bitcoin (0.3.19~dfsg-4) unstable; urgency=low
+
+  [ Micah Anderson ]
+  * Provide example bitcoin.conf.
+  * Add bitcoind(1) and bitcoin.conf(5) man pages.
+
+  [ Jonas Smedegaard ]
+  * Ease backporting:
+    + Suppress optional build-dependencies.
+    + Add fallback build-dependencies on the most recent Boost libs
+    available in Lenny (where unversioned Boost libs are missing).
+  * Add Micah as copyright holder for manpages, licensed as GPL-3+.
+  * Bump copyright format to Subversion candidate draft 162 of DEP5.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Mon, 17 Jan 2011 14:00:48 +0100
+
+bitcoin (0.3.19~dfsg-3) unstable; urgency=low
+
+  * Document in copyright file files excluded from repackaged source.
+  * Update copyright file:
+    + Bump DEP5 format hint to Subversion draft rev. 153.
+    + Consistently wrap at 72 chars.
+    + Refer to GPL-2 file (not GPL symlink).
+  * Link against Berkeley DB 4.8 (not 4.7):
+    + Build-depend on libdb4.8++-dev (and on on libdb4.7++-dev).
+    + Suggest libdb4.8-util and db4.7-util.
+    + Add README.Debian note on (untested) upgrade routine.
+    + Add NEWS entry on changed db version, referring to README.Debian.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Fri, 07 Jan 2011 22:50:57 +0100
+
+bitcoin (0.3.19~dfsg-2) unstable; urgency=low
+
+  * Adjust build options to use optimized miner only for amd64. Fixes
+    FTBFS on i386 (and other archs, if compiling anywhere else at all).
+  * Avoid static linking.
+  * Adjust patch 2001 to avoid only arch-specific optimizations (keep
+    -O3).
+  * Extend long description to mention disk consumption and initial use
+    of IRC.
+  All of above changes thanks to Helmuth Grohne.
+  * Add lintian override regarding OpenSSL and GPL: Linked code is Expat
+    - only Debian packaging is GPL-2+.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Wed, 29 Dec 2010 00:27:54 +0100
+
+bitcoin (0.3.19~dfsg-1) unstable; urgency=low
+
+  [ Jonas Smedegaard ]
+  * Initial release.
+    Closes: bug#578157.
+
+ -- Jonas Smedegaard <dr@jones.dk>  Tue, 28 Dec 2010 15:49:22 +0100
diff --git a/contrib/debian/compat b/contrib/debian/compat
new file mode 100644 (file)
index 0000000..7f8f011
--- /dev/null
@@ -0,0 +1 @@
+7
diff --git a/contrib/debian/control b/contrib/debian/control
new file mode 100644 (file)
index 0000000..9152339
--- /dev/null
@@ -0,0 +1,57 @@
+Source: bitcoin
+Section: utils
+Priority: optional
+Maintainer: Jonas Smedegaard <dr@jones.dk>
+Uploaders: Micah Anderson <micah@debian.org>
+Build-Depends: debhelper,
+ devscripts,
+ libboost-system-dev (>> 1.35) | libboost-system1.35-dev,
+ libdb4.8++-dev,
+ libssl-dev,
+ pkg-config,
+ libminiupnpc8-dev,
+ libboost-filesystem-dev (>> 1.35) | libboost-filesystem1.35-dev,
+ libboost-program-options-dev (>> 1.35) | libboost-program-options1.35-dev,
+ libboost-thread-dev (>> 1.35) | libboost-thread1.35-dev,
+ libboost-test-dev (>> 1.35) | libboost-test1.35-dev,
+ qt4-qmake,
+ libqt4-dev
+Standards-Version: 3.9.2
+Homepage: http://www.bitcoin.org/
+Vcs-Git: git://github.com/bitcoin/bitcoin.git
+Vcs-Browser: http://github.com/bitcoin/bitcoin
+
+Package: bitcoind
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: peer-to-peer network based digital currency - daemon
+ Bitcoin is a free open source peer-to-peer electronic cash system that
+ is completely decentralized, without the need for a central server or
+ trusted parties.  Users hold the crypto keys to their own money and
+ transact directly with each other, with the help of a P2P network to
+ check for double-spending.
+ .
+ By default connects to an IRC network to discover other peers.
+ .
+ Full transaction history is stored locally at each client.  This
+ requires 2+ GB of space, slowly growing.
+ .
+ This package provides bitcoind, a combined daemon and CLI tool to
+ interact with the daemon.
+
+Package: bitcoin-qt
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: peer-to-peer network based digital currency - QT GUI
+ Bitcoin is a free open source peer-to-peer electronic cash system that
+ is completely decentralized, without the need for a central server or
+ trusted parties.  Users hold the crypto keys to their own money and
+ transact directly with each other, with the help of a P2P network to
+ check for double-spending.
+ .
+ By default connects to an IRC network to discover other peers.
+ .
+ Full transaction history is stored locally at each client.  This
+ requires 2+ GB of space, slowly growing.
+ .
+ This package provides bitcoin-qt, a GUI for Bitcoin based on QT.
diff --git a/contrib/debian/copyright b/contrib/debian/copyright
new file mode 100644 (file)
index 0000000..5db418d
--- /dev/null
@@ -0,0 +1,167 @@
+Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=174
+Upstream-Name: Bitcoin
+Upstream-Contact: Satoshi Nakamoto <satoshin@gmx.com>
+ irc://#bitcoin@freenode.net
+Source: http://sourceforge.net/projects/bitcoin/files/
+ https://github.com/bitcoin/bitcoin
+
+Files: *
+Copyright: 2009-2011, Bitcoin Developers
+License: Expat
+Comment: The Bitcoin Developers encompasses the current developers listed on bitcoin.org,
+         as well as the numerous contributors to the project.
+
+Files: src/json/*
+Copyright: 2007-2009, John W. Wilkinson
+License: Expat
+
+Files: src/strlcpy.h
+Copyright: 1998, Todd C. Miller <Todd.Miller@courtesan.com>
+License: ISC
+
+Files: debian/*
+Copyright: 2010-2011, Jonas Smedegaard <dr@jones.dk>
+           2011, Matt Corallo <matt@bluematt.me>
+License: GPL-2+
+
+Files: debian/manpages/*
+Copyright: Micah Anderson <micah@debian.org>
+License: GPL-3+
+
+Files: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png,
+       src/qt/res/src/*.svg
+Copyright: Wladimir van der Laan
+License: Expat
+
+Files: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png,
+       src/qt/res/icons/history.png, src/qt/res/icons/key.png,
+       src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png,
+       src/qt/res/icons/receive.png, src/qt/res/icons/send.png,
+       src/qt/res/icons/synced.png
+Copyright: David Vignoni (david@icon-king.com)
+           ICON KING - www.icon-king.com
+License: LGPL
+Comment: NUVOLA ICON THEME for KDE 3.x
+         Original icons: kaddressbook, klipper_dock, view-list-text,
+                         key-password, encrypted/decrypted, go-home, go-down,
+                         go-next, dialog-ok
+         Site: http://www.icon-king.com/projects/nuvola/
+
+Files: src/qt/res/icons/connect*.png
+Copyright: schollidesign
+License: GPL-3+
+Comment: Icon Pack: Human-O2
+         Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0
+
+Files: src/qt/res/icons/transaction*.png
+Copyright: md2k7
+License: You are free to do with these icons as you wish, including selling,
+ copying, modifying etc.
+Comment: Site: https://forum.bitcoin.org/index.php?topic=15276.0
+
+Files: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
+      src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png,
+      src/qt/res/icons/add.png, src/qt/res/icons/edit.png,
+      src/qt/res/icons/remove.png
+Copyright: http://www.everaldo.com
+License: LGPL
+Comment: Icon Pack: Crystal SVG
+
+Files: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png
+Copyright: Bitboy (optimized for 16x16 by Wladimir van der Laan)
+License: PUB-DOM
+Comment: Site: http://forum.bitcoin.org/?topic=1756.0
+
+Files:  scripts/img/reload.xcf, src/qt/res/movies/update_spinner.mng
+Copyright: Everaldo (Everaldo Coelho)
+License: GPL-3+
+Comment: Icon Pack: Kids
+         Site: http://findicons.com/icon/17102/reload?id=17102
+
+Files: src/qt/res/images/splash2.jpg
+License: PUB-DOM
+Copyright: Crobbo (forum)
+Comment: Site: https://bitcointalk.org/index.php?topic=32273.0
+
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License: ISC
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
+ BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+ OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+Comment:
+ On Debian systems the GNU General Public License (GPL) version 2 is
+ located in '/usr/share/common-licenses/GPL-2'.
+ .
+ You should have received a copy of the GNU General Public License along
+ with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+License: GPL-3+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU General Public License, Version 3 or any
+ later version published by the Free Software Foundation.
+Comment:
+ On Debian systems the GNU General Public License (GPL) version 3 is
+ located in '/usr/share/common-licenses/GPL-3'.
+ .
+ You should have received a copy of the GNU General Public License along
+ with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+License: LGPL
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+Comment:
+ On Debian systems the GNU Lesser General Public License (LGPL) is
+ located in '/usr/share/common-licenses/LGPL'.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+License: PUB-DOM
+ This work is in the public domain.
diff --git a/contrib/debian/examples/bitcoin.conf b/contrib/debian/examples/bitcoin.conf
new file mode 100644 (file)
index 0000000..e56c43c
--- /dev/null
@@ -0,0 +1,88 @@
+# bitcoin.conf configuration file. Lines beginning with # are comments.
+
+
+# Network-related settings:
+
+# Run on the test network instead of the real bitcoin network.
+#testnet=1
+
+# Connect via a socks4 proxy
+#proxy=127.0.0.1:9050
+
+# Use as many addnode= settings as you like to connect to specific peers
+#addnode=69.164.218.197
+#addnode=10.0.0.2:8333
+
+# ... or use as many connect= settings as you like to connect ONLY
+# to specific peers:
+#connect=69.164.218.197
+#connect=10.0.0.1:8333
+
+# Do not use Internet Relay Chat (irc.lfnet.org #bitcoin channel) to
+# find other peers.
+#noirc=1
+
+# Maximum number of inbound+outbound connections.
+#maxconnections=
+
+
+# JSON-RPC options (for controlling a running Bitcoin/bitcoind process)
+
+# server=1 tells Bitcoin to accept JSON-RPC commands.
+#server=1
+
+# You must set rpcuser and rpcpassword to secure the JSON-RPC api
+#rpcuser=Ulysseys
+#rpcpassword=YourSuperGreatPasswordNumber_385593
+
+# By default, only RPC connections from localhost are allowed.  Specify
+# as many rpcallowip= settings as you like to allow connections from
+# other hosts (and you may use * as a wildcard character):
+#rpcallowip=10.1.1.34
+#rpcallowip=192.168.1.*
+
+# Listen for RPC connections on this TCP port:
+rpcport=8332
+
+# You can use Bitcoin or bitcoind to send commands to Bitcoin/bitcoind
+# running on another host using this option:
+rpcconnect=127.0.0.1
+
+# Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate
+# with Bitcoin -server or bitcoind
+#rpcssl=1
+
+# OpenSSL settings used when rpcssl=1
+rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH
+rpcsslcertificatechainfile=server.cert
+rpcsslprivatekeyfile=server.pem
+
+
+# Miscellaneous options
+
+# Set gen=1 to attempt to generate bitcoins
+gen=0
+
+# Use SSE instructions to try to generate bitcoins faster.
+#4way=1
+
+# Pre-generate this many public/private key pairs, so wallet backups will be valid for
+# both prior transactions and several dozen future transactions.
+keypool=100
+
+# Pay an optional transaction fee every time you send bitcoins.  Transactions with fees
+# are more likely than free transactions to be included in generated blocks, so may
+# be validated sooner.
+paytxfee=0.00
+
+# Allow direct connections for the 'pay via IP address' feature.
+#allowreceivebyip=1
+
+
+# User interface options
+
+# Start Bitcoin minimized
+#min=1
+
+# Minimize to the system tray
+#minimizetotray=1
diff --git a/contrib/debian/gbp.conf b/contrib/debian/gbp.conf
new file mode 100644 (file)
index 0000000..a7281f9
--- /dev/null
@@ -0,0 +1,5 @@
+# Configuration file for git-buildpackage and friends
+
+[DEFAULT]
+pristine-tar = True
+sign-tags = True
diff --git a/contrib/debian/manpages/bitcoin.conf.5 b/contrib/debian/manpages/bitcoin.conf.5
new file mode 100644 (file)
index 0000000..1243253
--- /dev/null
@@ -0,0 +1,94 @@
+.TH BITCOIN.CONF "5" "January 2011" "bitcoin.conf 3.19"
+.SH NAME
+bitcoin.conf \- bitcoin configuration file
+.SH SYNOPSIS
+All command-line options (except for '-datadir' and '-conf') may be specified in a configuration file, and all configuration file options may also be specified on the command line. Command-line options override values set in the configuration file.
+.TP
+The configuration file is a list of 'setting=value' pairs, one per line, with optional comments starting with the '#' character.
+.TP
+The configuration file is not automatically created; you can create it using your favorite plain-text editor. By default, bitcoind(1) will look for a file named bitcoin.conf(5) in the bitcoin data directory, but both the data directory and the configuration file path may be changed using the '-datadir' and '-conf' command-line arguments.
+.SH LOCATION
+bitcoin.conf should be located in $HOME/.bitcoin
+.SH NETWORK-RELATED SETTINGS
+.TP
+.TP
+\fBtestnet=\fR[\fI'1'\fR|\fI'0'\fR]
+Enable or disable run on the test network instead of the real *bitcoin* network.
+.TP
+\fBproxy=\fR\fI'127.0.0.1:9050'\fR
+Connect via a socks4 proxy.
+.TP
+\fBaddnode=\fR\fI'10.0.0.2:8333'\fR
+Use as many *addnode=* settings as you like to connect to specific peers.
+.TP
+\fBconnect=\fR\fI'10.0.0.1:8333'\fR
+Use as many *connect=* settings as you like to connect ONLY to specific peers.
+.TP
+\fBnoirc=\fR[\fI'1'\fR|\fI'0'\fR]
+Use or Do not use Internet Relay Chat (irc.lfnet.org #bitcoin channel) to find other peers.
+.TP
+\fRmaxconnections=\fR\fI'value'\fR
+Maximum number of inbound+outbound connections.
+.SH JSON-RPC OPTIONS
+.TP
+\fBserver=\fR[\fI'1'\fR|\fI'0'\fR]
+Tells *bitcoin* to accept or not accept JSON-RPC commands.
+.TP
+\fBrpcuser=\fR\fI'username'\fR
+You must set *rpcuser* to secure the JSON-RPC api.
+.TP
+\fBrpcpassword=\fR\fI'password'\fR
+You must set *rpcpassword* to secure the JSON-RPC api.
+.TP
+\fBrpctimeout=\fR\fI'30'\fR
+How many seconds *bitcoin* will wait for a complete RPC HTTP request, after the HTTP connection is established.
+.TP
+\fBrpcallowip=\fR\fI'192.168.1.*'\fR
+By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character).
+.TP
+\fBrpcport=\fR\fI'8332'\fR
+Listen for RPC connections on this TCP port.
+.TP
+\fBrpcconnect=\fR\fI'127.0.0.1'\fR
+You can use *bitcoin* or *bitcoind(1)* to send commands to *bitcoin*/*bitcoind(1)* running on another host using this option.
+.TP
+\fBrpcssl=\fR\fI'1'\fR
+Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate with *bitcoin* '-server' or *bitcoind(1)*. Example of OpenSSL settings used when *rpcssl*='1':
+.TP
+\fBrpcsslciphers=\fR\fI'TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH'\fR
+.TP
+\fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR
+.TP
+\fBrpcsslprivatekeyfile=\fR\fI'server.pem'\fR
+.TP
+.SH MISCELLANEOUS OPTIONS
+.TP
+\fBgen=\fR[\fI'0'\fR|\fI'1'\fR]
+Enable or disable attempt to generate bitcoins.
+.TP
+\fB4way=\fR[\fI'0'\fR|\fI'1'\fR]
+Enable or disable use SSE instructions to try to generate bitcoins faster.
+.TP
+\fBkeypool=\fR\fI'100'\fR
+Pre-generate this many public/private key pairs, so wallet backups will be valid for both prior transactions and several dozen future transactions.
+.TP
+\fBpaytxfee=\fR\fI'0.00'\fR
+Pay an optional transaction fee every time you send bitcoins. Transactions with fees are more likely than free transactions to be included in generated blocks, so may be validated sooner.
+.TP
+\fBallowreceivebyip=\fR\fI'1'\fR
+Allow direct connections for the 'pay via IP address' feature.
+.TP
+.SH USER INTERFACE OPTIONS
+.TP
+\fBmin=\fR[\fI'0'\fR|\fI'1'\fR]
+Enable or disable start bitcoind minimized.
+.TP
+\fBminimizetotray=\fR[\fI'0'\fR|\fI'1'\fR]
+Enable or disable minimize to the system tray.
+.SH "SEE ALSO"
+bitcoind(1)
+.SH AUTHOR
+This manual page was written by Micah Anderson <micah@debian.org> for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation.
+
+On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.
+
diff --git a/contrib/debian/manpages/bitcoind.1 b/contrib/debian/manpages/bitcoind.1
new file mode 100644 (file)
index 0000000..bf46a66
--- /dev/null
@@ -0,0 +1,209 @@
+.TH BITCOIND "1" "January 2011" "bitcoind 3.19" 
+.SH NAME
+bitcoind \- peer-to-peer network based digital currency
+.SH SYNOPSIS
+bitcoin [options] <command> [params]  
+.TP
+bitcoin [options] help <command> - Get help for a command
+.SH DESCRIPTION
+This  manual page documents the bitcoind program. Bitcoin is a peer-to-peer digital currency. Peer-to-peer (P2P) means that there is no central authority to issue new money or keep track of transactions. Instead, these tasks are managed collectively by the nodes of the network. Advantages:
+
+Bitcoins can be sent easily through the Internet, without having to trust middlemen. Transactions are designed to be irreversible. Be safe from instability caused by fractional reserve banking and central banks. The limited inflation of the Bitcoin system’s money supply is distributed evenly (by CPU power) throughout the network, not monopolized by banks.
+
+.SH OPTIONS
+.TP
+\fB\-conf=\fR<file>
+Specify configuration file (default: bitcoin.conf)
+.TP
+\fB\-gen\fR
+Generate coins
+.TP
+\fB\-gen\fR=\fI0\fR
+Don't generate coins
+.TP
+\fB\-min\fR
+Start minimized
+.TP
+\fB\-datadir=\fR<dir>
+Specify data directory
+.TP
+\fB\-proxy=\fR<ip:port>
+Connect through socks4 proxy
+.TP
+\fB\-addnode=\fR<ip>
+Add a node to connect to
+.TP
+\fB\-connect=\fR<ip>
+Connect only to the specified node
+.TP
+\fB\-paytxfee=\fR<amt>
+Fee per KB to add to transactions you send
+.TP
+\fB\-server\fR
+Accept command line and JSON\-RPC commands
+.TP
+\fB\-daemon\fR
+Run in the background as a daemon and accept commands
+.TP
+\fB\-testnet\fR
+Use the test network
+.TP
+\fB\-rpcuser=\fR<user>
+Username for JSON\-RPC connections
+.TP
+\fB\-rpcpassword=\fR<pw>
+Password for JSON\-RPC connections
+.TP
+\fB\-rpcport=\fR<port>
+Listen for JSON\-RPC connections on <port>
+.TP
+\fB\-rpcallowip=\fR<ip>
+Allow JSON\-RPC connections from specified IP address
+.TP
+\fB\-rpcconnect=\fR<ip>
+Send commands to node running on <ip>
+.PP
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+.TP
+\fB\-rpcssl\fR=\fI1\fR
+Use OpenSSL (https) for JSON\-RPC connections
+.TP
+\fB\-rpcsslcertificatchainfile=\fR<file.cert>
+Server certificate file (default: server.cert)
+.TP
+\fB\-rpcsslprivatekeyfile=\fR<file.pem>
+Server private key (default: server.pem)
+.TP
+\fB\-rpcsslciphers=\fR<ciphers>
+Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+.TP
+\-?
+This help message
+.SH COMMANDS
+.TP
+\fBbackupwallet 'destination'\fR
+Safely copies *wallet.dat* to 'destination', which can be a directory or a path with filename.
+.TP
+\fBgetaccount 'bitcoinaddress'\fR
+Returns the account associated with the given address.
+.TP
+\fBsetaccount 'bitcoinaddress' ['account']\fR
+Sets the ['account'] associated with the given address. ['account'] may be omitted to remove an address from ['account'].
+.TP
+\fBgetaccountaddress 'account'\fR
+Returns a new bitcoin address for 'account'.
+.TP
+\fBgetaddressesbyaccount 'account'\fR
+Returns the list of addresses associated with the given 'account'.
+.TP
+\fBgetbalance 'account'\fR
+Returns the server's available balance, or the balance for 'account'.
+.TP
+\fBgetblockcount\fR
+Returns the number of blocks in the longest block chain.
+.TP
+\fBgetblocknumber\fR
+Returns the block number of the latest block in the longest block chain.
+.TP
+\fBgetconnectioncount\fR
+Returns the number of connections to other nodes.
+.TP
+\fBgetdifficulty\fR
+Returns the proof-of-work difficulty as a multiple of the minimum difficulty.
+.TP
+\fBgetgenerate\fR
+Returns boolean true if server is trying to generate bitcoins, false otherwise.
+.TP
+\fBsetgenerate 'generate' ['genproclimit']\fR
+Generation is limited to ['genproclimit'] processors, -1 is unlimited.
+.TP
+\fBgethashespersec\fR
+Returns a recent hashes per second performance measurement while generating.
+.TP
+\fBgetinfo\fR
+Returns an object containing server information.
+.TP
+\fBgetnewaddress 'account'\fR
+Returns a new bitcoin address for receiving payments. If 'account' is specified (recommended), it is added to the address book so payments received with the address will be credited to 'account'.
+.TP
+\fBgetreceivedbyaccount 'account' ['minconf=1']\fR
+Returns the total amount received by addresses associated with 'account' in transactions with at least ['minconf'] confirmations.
+.TP
+\fBgetreceivedbyaddress 'bitcoinaddress' ['minconf=1']\fR
+Returns the total amount received by 'bitcoinaddress' in transactions with at least ['minconf'] confirmations.
+.TP
+\fBgettransaction 'txid'\fR
+Returns information about a specific transaction, given hexadecimal transaction ID.
+.TP
+\fBgetwork 'data'\fR
+If 'data' is specified, tries to solve the block and returns true if it was successful. If 'data' is not specified, returns formatted hash 'data' to work on:
+
+    "midstate" : precomputed hash state after hashing the first half of the data.
+    "data"     : block data.
+    "hash1"    : formatted hash buffer for second hash.
+    "target"   : little endian hash target.
+.TP
+\fBhelp 'command'\fR
+List commands, or get help for a command.
+.TP
+\fBlistaccounts ['minconf=1']\fR
+List accounts and their current balances.
+     *note: requires bitcoin 0.3.20 or later.
+.TP
+\fBlistreceivedbyaccount ['minconf=1'] ['includeempty=false']\fR
+['minconf'] is the minimum number of confirmations before payments are included. ['includeempty'] whether to include addresses that haven't received any payments. Returns an array of objects containing:
+
+    "account"       : the account of the receiving address.
+    "amount"        : total amount received by the address.
+    "confirmations" : number of confirmations of the most recent transaction included.
+.TP
+\fBlistreceivedbyaddress ['minconf=1'] ['includeempty=false']\fR
+['minconf'] is the minimum number of confirmations before payments are included. ['includeempty'] whether to include addresses that haven't received any payments. Returns an array of objects containing:
+
+    "address"       : receiving address.
+    "account"       : the account of the receiving address.
+    "amount"        : total amount received by the address.
+    "confirmations" : number of confirmations of the most recent transaction included.
+.TP
+\fBlisttransactions 'account' ['count=10']\fR
+Returns a list of the last ['count'] transactions for 'account' - for all accounts if 'account' is not specified or is "*". Each entry in the list may contain:
+
+    "category"      : will be generate, send, receive, or move.
+    "amount"        : amount of transaction.
+    "fee"           : Fee (if any) paid (only for send transactions).
+    "confirmations" : number of confirmations (only for generate/send/receive).
+    "txid"          : transaction ID (only for generate/send/receive).
+    "otheraccount"  : account funds were moved to or from (only for move).
+    "message"       : message associated with transaction (only for send).
+    "to"            : message-to associated with transaction (only for send).
+
+    *note: requires bitcoin 0.3.20 or later.
+.TP
+\fBmove <'fromaccount'> <'toaccount'> <'amount'> ['minconf=1'] ['comment']\fR
+Moves funds between accounts.
+.TP
+\fBsendfrom* <'account'> <'bitcoinaddress'> <'amount'> ['minconf=1'] ['comment'] ['comment-to']\fR
+Sends amount from account's balance to 'bitcoinaddress'. This method will fail if there is less than amount bitcoins with ['minconf'] confirmations in the account's balance (unless account is the empty-string-named default account; it behaves like the *sendtoaddress* method). Returns transaction ID on success.
+.TP     
+\fBsendtoaddress 'bitcoinaddress' 'amount' ['comment'] ['comment-to']\fR
+Sends amount from the server's available balance to 'bitcoinaddress'. amount is a real and is rounded to the nearest 0.01. Returns transaction id on success.
+.TP    
+\fBstop\fR
+Stops the bitcoin server.
+.TP    
+\fBvalidateaddress 'bitcoinaddress'\fR
+Checks that 'bitcoinaddress' looks like a proper bitcoin address. Returns an object containing:
+
+    "isvalid" : true or false.
+    "ismine"  : true if the address is in the server's wallet.
+    "address" : bitcoinaddress.
+
+    *note: ismine and address are only returned if the address is valid.
+
+.SH "SEE ALSO"
+bitcoin.conf(5)
+.SH AUTHOR
+This manual page was written by Micah Anderson <micah@debian.org> for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation.
+
+On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.
+
diff --git a/contrib/debian/patches/1001_use_system_json-spirit.patch b/contrib/debian/patches/1001_use_system_json-spirit.patch
new file mode 100644 (file)
index 0000000..56a20af
--- /dev/null
@@ -0,0 +1,26 @@
+Description: Use system JSON Spirit library
+Author: Jonas Smedegaard <dr@jones.dk>
+Last-Update: 2011-05-17
+--- a/src/rpc.cpp
++++ b/src/rpc.cpp
+@@ -12,9 +12,7 @@
+ #include <boost/asio/ssl.hpp> 
+ typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream;
+ #endif
+-#include "json/json_spirit_reader_template.h"
+-#include "json/json_spirit_writer_template.h"
+-#include "json/json_spirit_utils.h"
++#include <json_spirit.h>
+ #define printf OutputDebugStringF
+ // MinGW 3.4.5 gets "fatal error: had to relocate PCH" if the json headers are
+ // precompiled in headers.h.  The problem might be when the pch file goes over
+--- a/src/makefile.unix
++++ b/src/makefile.unix
+@@ -23,6 +23,7 @@
+    -l boost_thread \
+    -l db_cxx \
+    -l ssl \
++   -l json_spirit \
+    -l crypto
+ ifdef USE_UPNP
diff --git a/contrib/debian/patches/README b/contrib/debian/patches/README
new file mode 100644 (file)
index 0000000..80c1584
--- /dev/null
@@ -0,0 +1,3 @@
+0xxx: Grabbed from upstream development.
+1xxx: Possibly relevant for upstream adoption.
+2xxx: Only relevant for official Debian release.
diff --git a/contrib/debian/patches/series b/contrib/debian/patches/series
new file mode 100644 (file)
index 0000000..bbe3685
--- /dev/null
@@ -0,0 +1 @@
+#1001_use_system_json-spirit.patch
diff --git a/contrib/debian/rules b/contrib/debian/rules
new file mode 100755 (executable)
index 0000000..a1d6565
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/make -f
+# -*- mode: makefile; coding: utf-8 -*-
+
+#DEB_MAKE_CHECK_TARGET = test_bitcoin
+#build/bitcoind::
+#      $(if $(filter nocheck,$(DEB_BUILD_OPTIONS)),,src/test_bitcoin)
+
+DEB_INSTALL_EXAMPLES_bitcoind += debian/examples/*
+DEB_INSTALL_MANPAGES_bitcoind += debian/manpages/*
+
+%:
+       dh $@
+
+override_dh_auto_build:
+       cd src; $(MAKE) -f makefile.unix bitcoind
+       $(MAKE)
+
+override_dh_auto_clean:
+       if [ -f Makefile ]; then $(MAKE) clean; else rm -rf build/; rm -f bitcoin-qt; fi
+       cd src; $(MAKE) -f makefile.unix clean
+
+override_dh_auto_configure:
+       qmake bitcoin-qt.pro
+
+override_dh_auto_test:
+       cd src; $(MAKE) -f makefile.unix test_bitcoin
+       src/test_bitcoin
+
+# Ensure wrapper is set executable
+binary-post-install/bitcoind:
+       chmod +x $(cdbs_curdestdir)usr/bin/bitcoind
+binary-post-install/bitcoin-qt:
+       chmod +x $(cdbs_curdestdir)usr/bin/bitcoin-qt
diff --git a/contrib/debian/source/format b/contrib/debian/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/contrib/debian/watch b/contrib/debian/watch
new file mode 100644 (file)
index 0000000..c96d2f8
--- /dev/null
@@ -0,0 +1,7 @@
+# Run the "uscan" command to check for upstream updates and more.
+version=3
+# use qa.debian.org redirector; see man uscan
+opts=uversionmangle=s/(\d)(alpha|beta|rc)/$1~$2/;s/\-src//,dversionmangle=s/~dfsg\d*// \
+ http://sf.net/bitcoin/bitcoin-(\d.*)-linux\.tar\.gz debian
+opts=uversionmangle=s/(\d)(alpha|beta|rc)/$1~$2/,dversionmangle=s/~dfsg\d*// \
+ http://githubredir.debian.net/github/bitcoin/bitcoin v(.*).tar.gz
diff --git a/contrib/gitian-descriptors/README b/contrib/gitian-descriptors/README
new file mode 100644 (file)
index 0000000..a2d902e
--- /dev/null
@@ -0,0 +1,31 @@
+Gavin's notes on getting gitian builds up and running:
+
+You need the right hardware: you need a 64-bit-capable CPU with hardware virtualization support (Intel VT-x or AMD-V). Not all modern CPUs support hardware virtualization.
+
+You probably need to enable hardware virtualization in your machine's BIOS.
+
+You need to be running a recent version of 64-bit-Ubuntu, and you need to install several prerequisites:
+  sudo apt-get install apache2 git apt-cacher-ng python-vm-builder qemu-kvm
+
+Sanity checks:
+  sudo service apt-cacher-ng status   # Should return apt-cacher-ng is running
+  ls -l /dev/kvm   # Should show a /dev/kvm device
+
+Once you've got the right hardware and software:
+
+    git clone git://github.com/bitcoin/bitcoin.git
+    git clone git://github.com/devrandom/gitian-builder.git
+    mkdir gitian-builder/inputs
+    wget 'http://miniupnp.tuxfamily.org/files/download.php?file=miniupnpc-1.6.tar.gz' -O gitian-builder/inputs/miniupnpc-1.6.tar.gz
+
+    cd gitian-builder
+    bin/make-base-vm --arch i386
+    bin/make-base-vm --arch amd64
+    cd ..
+
+    # To build
+    cd bitcoin
+    git pull
+    cd ../gitian-builder
+    git pull
+    ./bin/gbuild --commit bitcoin=HEAD ../bitcoin/contrib/gitian.yml
index f1990aa..f9c5214 100644 (file)
@@ -16,26 +16,18 @@ remotes:
 - "url": "https://git.gitorious.org/+bitcoin-stable-developers/bitcoin/bitcoind-stable.git"
   "dir": "bitcoin"
 files:
-- "wxwidgets-win32-2.9.2-gitian.zip"
+- "qt-win32-4.7.4-gitian.zip"
 - "boost-win32-1.47.0-gitian.zip"
 - "openssl-1.0.1b.tar.gz"
 - "db-4.8.30.NC.tar.gz"
 - "miniupnpc-1.6.tar.gz"
 script: |
   #
-  mkdir wxWidgets-2.9.2
-  cd wxWidgets-2.9.2
-  mkdir lib
-  unzip ../wxwidgets-win32-2.9.2-gitian.zip
-  cd bin/$GBUILD_BITS
-  for lib in wx_mswu; do
-    i586-mingw32msvc-ar rc ../../lib/lib${lib}-2.9-i586-mingw32msvc.a $lib/*.o
-    i586-mingw32msvc-ranlib ../../lib/lib${lib}-2.9-i586-mingw32msvc.a
-  done
-  cp -a wx ../../lib
-  cd ../..
-  mv include/wx-2.9/wx include
-  cd ..
+  mkdir $HOME/qt
+  cd $HOME/qt
+  unzip ../build/qt-win32-4.7.4-gitian.zip
+  cd $HOME/build/
+  export PATH=$PATH:$HOME/qt/bin/
   #
   mkdir boost_1_47_0
   cd boost_1_47_0
@@ -74,19 +66,23 @@ script: |
   mkdir -p $OUTDIR/src
   cp -a . $OUTDIR/src
   rm -rf $OUTDIR/src/.git
-  cp -a $OUTDIR/src/locale $OUTDIR
   cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt
   cp $OUTDIR/src/COPYING $OUTDIR/license.txt
+  export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
+  export FAKETIME=$REFERENCE_DATETIME
+  export TZ=UTC
+  $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross USE_SSL=1 MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_47_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_47_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1b OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1b/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin
+  make $MAKEOPTS
+  cp release/bitcoin-qt.exe $OUTDIR/
+  #
   cd src
   sed 's/$(DEBUGFLAGS)/-frandom-seed=bitcoin/' -i makefile.linux-mingw
   export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
   export FAKETIME=$REFERENCE_DATETIME
   export TZ=UTC
-  make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build bitcoin.exe USE_UPNP=1
-  make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build bitcoind.exe USE_UPNP=0
-  i586-mingw32msvc-strip bitcoin.exe
+  make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build bitcoind.exe USE_SSL=1 USE_UPNP=0
   i586-mingw32msvc-strip bitcoind.exe
   makensis ../share/setup.nsi
-  cp bitcoin.exe ../share/bitcoin-*-win32-setup.exe $OUTDIR/
+  cp ../share/bitcoin-*-win32-setup.exe $OUTDIR/
   mkdir $OUTDIR/daemon
   cp bitcoind.exe $OUTDIR/daemon
index c292244..11ee4dc 100644 (file)
@@ -7,9 +7,12 @@ architectures:
 - "amd64"
 packages: 
 - "libdb4.8++-dev"
-- "libxxf86vm-dev"
-- "libgtk2.0-dev"
-- "libboost-all-dev"
+- "qt4-qmake"
+- "libqt4-dev"
+- "libboost-system-dev"
+- "libboost-filesystem-dev"
+- "libboost-program-options-dev"
+- "libboost-thread-dev"
 - "libssl-dev"
 - "git-core"
 - "unzip"
@@ -18,8 +21,6 @@ remotes:
 - "url": "https://git.gitorious.org/+bitcoin-stable-developers/bitcoin/bitcoind-stable.git"
   "dir": "bitcoin"
 files:
-- "wxWidgets-2.9.2-x64-gitian.zip"
-- "wxWidgets-2.9.2-x32-gitian.zip"
 - "miniupnpc-1.6.tar.gz"
 script: |
   INSTDIR="$HOME/install"
@@ -30,30 +31,18 @@ script: |
   INSTALLPREFIX=$INSTDIR make $MAKEOPTS install
   cd ..
   #
-  mkdir -p $INSTDIR/bin $INSTDIR/lib/wx $INSTDIR/include
-  mkdir wxWidgets-2.9.2
-  cd wxWidgets-2.9.2
-  unzip ../wxWidgets-2.9.2-x32-gitian.zip
-  unzip -o ../wxWidgets-2.9.2-x64-gitian.zip
-  cp -a bin/$GBUILD_BITS/wx/config/gtk2-unicode-static-2.9 $INSTDIR/bin/wx-config
-  for lib in wx_gtk2u wxregexu wxtiff; do
-    ar rc $INSTDIR/lib/lib${lib}-2.9.a bin/$GBUILD_BITS/$lib/*.o
-    ranlib $INSTDIR/lib/lib${lib}-2.9.a
-  done
-  cp -a include/wx-2.9/* $INSTDIR/include
-  cp -a bin/$GBUILD_BITS/wx/include $INSTDIR/lib/wx
-  cd ..
-  #
   cd bitcoin
   mkdir -p $OUTDIR/src
   cp -a . $OUTDIR/src
   rm -rf $OUTDIR/src/.git
-  mv $OUTDIR/src/locale $OUTDIR
   cp $OUTDIR/src/doc/README $OUTDIR
   cp $OUTDIR/src/COPYING $OUTDIR
   cd src
   sed 's/$(DEBUGFLAGS)//' -i makefile.unix
-  PATH=$INSTDIR/bin:$PATH make -f makefile.unix CXX="g++ -I$INSTDIR/include -L$INSTDIR/lib" $MAKEOPTS bitcoin USE_UPNP=1
-  PATH=$INSTDIR/bin:$PATH make -f makefile.unix CXX="g++ -I$INSTDIR/include -L$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0
+  make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0 USE_SSL=1
   mkdir -p $OUTDIR/bin/$GBUILD_BITS
-  install -s bitcoin bitcoind $OUTDIR/bin/$GBUILD_BITS
+  install -s bitcoind $OUTDIR/bin/$GBUILD_BITS
+  cd ..
+  qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_SSL=1
+  make $MAKEOPTS
+  install bitcoin-qt $OUTDIR/bin/$GBUILD_BITS
diff --git a/contrib/gitian-descriptors/qt-win32.yml b/contrib/gitian-descriptors/qt-win32.yml
new file mode 100644 (file)
index 0000000..6eb76b2
--- /dev/null
@@ -0,0 +1,54 @@
+---
+name: "qt"
+suites:
+- "lucid"
+architectures:
+- "i386"
+packages: 
+- "mingw32"
+- "zip"
+- "faketime"
+reference_datetime: "2011-01-30 00:00:00"
+remotes: []
+files:
+- "qt-everywhere-opensource-src-4.7.4.tar.gz"
+script: |
+  INSTDIR="$HOME/qt/"
+  mkdir $INSTDIR
+  SRCDIR="$INSTDIR/src/"
+  mkdir $SRCDIR
+  #
+  tar xzf qt-everywhere-opensource-src-4.7.4.tar.gz
+  cd qt-everywhere-opensource-src-4.7.4
+  sed 's/$TODAY/2011-01-30/' -i configure
+  sed 's/i686-pc-mingw32-/i586-mingw32msvc-/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed --posix 's/QMAKE_MOC\t\t= i586-mingw32msvc-moc/QMAKE_MOC\t\t= moc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed --posix 's/QMAKE_RCC\t\t= i586-mingw32msvc-rcc/QMAKE_RCC\t\t= rcc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  sed --posix 's/QMAKE_UIC\t\t= i586-mingw32msvc-uic/QMAKE_UIC\t\t= uic/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  # ar adds timestamps to every object file included in the static library
+  # providing -D as ar argument is supposed to solve it, but doesn't work as qmake strips off the arguments and adds -M to pass a script...
+  # which somehow cannot be combined with other flags.
+  # use faketime only for ar, as it confuses make/qmake into hanging sometimes
+  sed --posix "s|QMAKE_LIB\t\t= i586-mingw32msvc-ar -ru|QMAKE_LIB\t\t= $HOME/ar -Dr|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf
+  echo '#!/bin/bash' > $HOME/ar
+  echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar
+  echo 'i586-mingw32msvc-ar "$@"' >> $HOME/ar
+  chmod +x $HOME/ar
+  #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
+  export FAKETIME=$REFERENCE_DATETIME
+  export TZ=UTC
+  ./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit  -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -opengl no -nomake examples -nomake demos -nomake docs
+  find . -name *.prl | xargs -l sed 's|/\.||' -i
+  find . -name *.prl | xargs -l sed 's|/$||' -i
+  make $MAKEOPTS install
+  cp -a bin $SRCDIR/
+  cd $INSTDIR
+  find . -name *.prl | xargs -l sed 's|/$||' -i
+  #sed 's|QMAKE_PRL_LIBS.*|QMAKE_PRL_LIBS = -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtNetwork -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32|' -i imports/Qt/labs/particles/qmlparticlesplugin.prl
+
+  # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date
+  export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
+  zip -r $OUTDIR/qt-win32-4.7.4-gitian.zip *
diff --git a/contrib/gitian-descriptors/wxwidgets-win32.yml b/contrib/gitian-descriptors/wxwidgets-win32.yml
deleted file mode 100644 (file)
index 3d49d7b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
----
-name: "wxwidgets"
-suites:
-- "lucid"
-architectures:
-- "i386"
-packages: 
-- "mingw32"
-- "faketime"
-- "zip"
-reference_datetime: "2011-01-30 00:00:00"
-remotes: []
-files:
-- "wxWidgets-2.9.2.tar.bz2"
-script: |
-  INSTDIR="$HOME/install"
-  TMPDIR="$HOME/tmpdir"
-  export LIBRARY_PATH="$INSTDIR/lib"
-  #
-  tar xjf wxWidgets-2.9.2.tar.bz2
-  cd wxWidgets-2.9.2
-  CXXFLAGS=-frandom-seed=wx1 ./configure --host=i586-mingw32msvc --build=i686-linux --prefix=$INSTDIR --disable-shared --enable-monolithic --without-libpng --disable-svg
-  perl -i -p -e "s/__TIME__/\"$REFERENCE_TIME\"/;s/__DATE__/\"$REFERENCE_DATE\"/" include/wx/chartype.h
-  make $MAKEOPTS install
-  mkdir $TMPDIR
-  cd $TMPDIR
-  cp -af $INSTDIR/include .
-  mkdir -p $TMPDIR/bin/$GBUILD_BITS
-  cd $TMPDIR/bin/$GBUILD_BITS
-  cp -af $INSTDIR/lib/wx .
-  for lib in wx_mswu; do
-      mkdir $lib
-      (cd $lib ; ar xf $INSTDIR/lib/lib${lib}-2.9-i586-mingw32msvc.a)
-  done
-  chmod -R +w $TMPDIR
-  cd $TMPDIR
-  export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
-  export FAKETIME=$REFERENCE_DATETIME
-  zip -r wxwidgets-win32-2.9.2-gitian.zip *
-  cp wxwidgets-win32-2.9.2-gitian.zip $OUTDIR
diff --git a/contrib/gitian-descriptors/wxwidgets.yml b/contrib/gitian-descriptors/wxwidgets.yml
deleted file mode 100644 (file)
index 0509615..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
----
-name: "wxwidgets"
-suites:
-- "lucid"
-architectures:
-- "i386"
-- "amd64"
-packages: 
-- "libxxf86vm-dev"
-- "libgtk2.0-dev"
-- "faketime"
-- "zip"
-reference_datetime: "2011-01-30 00:00:00"
-remotes: []
-files:
-- "wxWidgets-2.9.2.tar.bz2"
-script: |
-  INSTDIR="$HOME/install"
-  TMPDIR="$HOME/tmpdir"
-  export LIBRARY_PATH="$INSTDIR/lib"
-  #
-  tar xjf wxWidgets-2.9.2.tar.bz2
-  cd wxWidgets-2.9.2
-  ./configure --prefix=$INSTDIR --enable-monolithic --disable-shared
-  perl -i -p -e "s/__TIME__/\"$REFERENCE_TIME\"/;s/__DATE__/\"$REFERENCE_DATE\"/" include/wx/chartype.h
-  make $MAKEOPTS install
-  mkdir $TMPDIR
-  cd $TMPDIR
-  cp -af $INSTDIR/include .
-  mkdir -p $TMPDIR/bin/$GBUILD_BITS
-  cd $TMPDIR/bin/$GBUILD_BITS
-  cp -af $INSTDIR/lib/wx .
-  for lib in wxtiff wxregexu wx_gtk2u; do
-      mkdir $lib
-      (cd $lib ; ar xf $INSTDIR/lib/lib${lib}-2.9.a)
-  done
-  chmod -R +w $TMPDIR
-  cd $TMPDIR
-  export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1
-  export FAKETIME=$REFERENCE_DATETIME
-  zip -r wxWidgets-2.9.2-x$GBUILD_BITS-gitian.zip *
-  cp wxWidgets-2.9.2-x$GBUILD_BITS-gitian.zip $OUTDIR
@@ -31,7 +31,7 @@ signers:
     weight: 40
     name: "Gavin Andresen"
     key: gavinandresen
-  71A3B16735405025D447E8F274810B012346C9A6
+  71A3B16735405025D447E8F274810B012346C9A6:
     weight: 40
     name: "Wladimir J. van der Laan"
     key: laanwj
@@ -1,11 +1,11 @@
 --- 
 name: bitcoin
 urls:
-- http://bitcoin.org/bitcoin-latest-linux-gitian.zip
+- http://bitcoin.org/bitcoin-latest-win32-gitian.zip
 rss:
 - url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss
   xpath: //item/link/text()
-  pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip
+  pattern: bitcoin-\d+.\d+.\d+-win32-gitian.zip
 signers:
   0A82509767C7D4A5D14DA2301AE1D35043E08E54:
     weight: 40
@@ -31,7 +31,7 @@ signers:
     weight: 40
     name: "Gavin Andresen"
     key: gavinandresen
-  71A3B16735405025D447E8F274810B012346C9A6
+  71A3B16735405025D447E8F274810B012346C9A6:
     weight: 40
     name: "Wladimir J. van der Laan"
     key: laanwj
diff --git a/contrib/macdeploy/LICENSE b/contrib/macdeploy/LICENSE
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/contrib/macdeploy/background.png b/contrib/macdeploy/background.png
new file mode 100644 (file)
index 0000000..fce12e3
Binary files /dev/null and b/contrib/macdeploy/background.png differ
diff --git a/contrib/macdeploy/background.psd b/contrib/macdeploy/background.psd
new file mode 100644 (file)
index 0000000..5889676
Binary files /dev/null and b/contrib/macdeploy/background.psd differ
diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist
new file mode 100644 (file)
index 0000000..e73b9b6
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>window_bounds</key>
+       <array>
+               <integer>300</integer>
+               <integer>300</integer>
+               <integer>800</integer>
+               <integer>620</integer>
+       </array>
+       <key>background_picture</key>
+       <string>background.png</string>
+       <key>icon_size</key>
+       <integer>96</integer>
+       <key>applications_symlink</key>
+       <true/>
+       <key>items_position</key>
+       <dict>
+               <key>Applications</key>
+               <array>
+                       <integer>370</integer>
+                       <integer>156</integer>
+               </array>
+               <key>Bitcoin-Qt.app</key>
+               <array>
+                       <integer>128</integer>
+                       <integer>156</integer>
+               </array>
+       </dict>
+</dict>
+</plist>
diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus
new file mode 100755 (executable)
index 0000000..a43e710
--- /dev/null
@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+
+#
+# Copyright (C) 2011  Patrick "p2k" Schneider <me@p2k-network.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+import subprocess, sys, re, os, shutil, os.path
+from time import sleep
+from argparse import ArgumentParser
+
+qt_conf="""[Paths]
+translations=Resources
+plugins=PlugIns
+"""
+
+ap = ArgumentParser(description="""Front-end to macdeployqt with some additional functions.
+
+Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file.
+Note, that the "dist" folder will be deleted before deploying on each run.
+
+Optionally, Qt translation files (.qm) and additional resources can be added to the bundle.""")
+
+ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed")
+ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug")
+ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment")
+ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries")
+ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used")
+ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work")
+ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace")
+ap.add_argument("-add-resources", nargs="+", metavar="path", default=[], help="list of additional files or folders to be copied into the bundle's resources; must be the last argument")
+
+config = ap.parse_args()
+
+verbose = config.verbose[0]
+
+# ------------------------------------------------
+
+app_bundle = config.app_bundle[0]
+
+if not os.path.exists(app_bundle):
+    if verbose >= 1:
+        sys.stderr.write("Error: Could not find app bundle \"%s\"\n" % (app_bundle))
+    sys.exit(1)
+
+app_bundle_name = os.path.splitext(os.path.basename(app_bundle))[0]
+
+# ------------------------------------------------
+
+for p in config.add_resources:
+    if verbose >= 3:
+        print "Checking for \"%s\"..." % p
+    if not os.path.exists(p):
+        if verbose >= 1:
+            sys.stderr.write("Error: Could not find additional resource file \"%s\"\n" % (p))
+        sys.exit(1)
+
+# ------------------------------------------------
+
+if len(config.add_qt_tr) == 0:
+    add_qt_tr = []
+else:
+    qt_tr_dir = os.path.join(os.getenv("QTDIR", ""), "translations")
+    add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")]
+    for lng_file in add_qt_tr:
+        p = os.path.join(qt_tr_dir, lng_file)
+        if verbose >= 3:
+            print "Checking for \"%s\"..." % p
+        if not os.path.exists(p):
+            if verbose >= 1:
+                sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file))
+                sys.exit(1)
+
+# ------------------------------------------------
+
+if len(config.fancy) == 1:
+    if verbose >= 3:
+        print "Fancy: Importing plistlib..."
+    try:
+        import plistlib
+    except ImportError:
+        if verbose >= 1:
+            sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n")
+        sys.exit(1)
+    
+    if verbose >= 3:
+        print "Fancy: Importing appscript..."
+    try:
+        import appscript
+    except ImportError:
+        if verbose >= 1:
+            sys.stderr.write("Error: Could not import appscript which is required for fancy disk images.\n")
+            sys.stderr.write("Please install it e.g. with \"sudo easy_install appscript\".\n")
+        sys.exit(1)
+    
+    p = config.fancy[0]
+    if verbose >= 3:
+        print "Fancy: Loading \"%s\"..." % p
+    if not os.path.exists(p):
+        if verbose >= 1:
+            sys.stderr.write("Error: Could not find fancy disk image plist at \"%s\"\n" % (p))
+        sys.exit(1)
+    
+    try:
+        fancy = plistlib.readPlist(p)
+    except:
+        if verbose >= 1:
+            sys.stderr.write("Error: Could not parse fancy disk image plist at \"%s\"\n" % (p))
+        sys.exit(1)
+    
+    try:
+        assert not fancy.has_key("window_bounds") or (isinstance(fancy["window_bounds"], list) and len(fancy["window_bounds"]) == 4)
+        assert not fancy.has_key("background_picture") or isinstance(fancy["background_picture"], str)
+        assert not fancy.has_key("icon_size") or isinstance(fancy["icon_size"], int)
+        assert not fancy.has_key("applications_symlink") or isinstance(fancy["applications_symlink"], bool)
+        if fancy.has_key("items_position"):
+            assert isinstance(fancy["items_position"], dict)
+            for key, value in fancy["items_position"].iteritems():
+                assert isinstance(value, list) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int)
+    except:
+        if verbose >= 1:
+            sys.stderr.write("Error: Bad format of fancy disk image plist at \"%s\"\n" % (p))
+        sys.exit(1)
+    
+    if fancy.has_key("background_picture"):
+        bp = fancy["background_picture"]
+        if verbose >= 3:
+            print "Fancy: Resolving background picture \"%s\"..." % bp
+        if not os.path.exists(bp):
+            bp = os.path.join(os.path.dirname(p), bp)
+            if not os.path.exists(bp):
+                if verbose >= 1:
+                    sys.stderr.write("Error: Could not find background picture at \"%s\" or \"%s\"\n" % (fancy["background_picture"], bp))
+                sys.exit(1)
+            else:
+                fancy["background_picture"] = bp
+else:
+    fancy = None
+
+# ------------------------------------------------
+
+if os.path.exists("dist"):
+    if verbose >= 2:
+        print "+ Removing old dist folder +"
+    
+    shutil.rmtree("dist")
+
+# ------------------------------------------------
+
+target = os.path.join("dist", app_bundle)
+target_res = os.path.join(target, "Contents", "Resources")
+
+if verbose >= 2:
+    print "+ Copying source bundle +"
+if verbose >= 3:
+    print app_bundle, "->", target
+
+os.mkdir("dist")
+shutil.copytree(app_bundle, target)
+
+# ------------------------------------------------
+
+macdeployqt_args = ["macdeployqt", target, "-verbose=%d" % verbose]
+if not config.plugins:
+    macdeployqt_args.append("-no-plugins")
+if not config.strip:
+    macdeployqt_args.append("-no-strip")
+
+if verbose >= 2:
+    print "+ Running macdeployqt +"
+
+ret = subprocess.call(macdeployqt_args)
+if ret != 0:
+    sys.exit(ret)
+
+# ------------------------------------------------
+
+if verbose >= 2:
+    print "+ Installing qt.conf +"
+
+f = open(os.path.join(target_res, "qt.conf"), "wb")
+f.write(qt_conf)
+f.close()
+
+# ------------------------------------------------
+
+if len(add_qt_tr) > 0 and verbose >= 2:
+    print "+ Adding Qt translations +"
+
+for lng_file in add_qt_tr:
+    if verbose >= 3:
+        print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(target_res, lng_file)
+    shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(target_res, lng_file))
+
+# ------------------------------------------------
+
+if len(config.add_resources) > 0 and verbose >= 2:
+    print "+ Adding additional resources +"
+
+for p in config.add_resources:
+    t = os.path.join(target_res, os.path.basename(p))
+    if verbose >= 3:
+        print p, "->", t
+    if os.path.isdir(p):
+        shutil.copytree(p, t)
+    else:
+        shutil.copy2(p, t)
+
+# ------------------------------------------------
+
+if config.dmg is not None:
+    def runHDIUtil(verb, image_basename, **kwargs):
+        hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"]
+        if kwargs.has_key("capture_stdout"):
+            del kwargs["capture_stdout"]
+            run = subprocess.check_output
+        else:
+            if verbose < 2:
+                hdiutil_args.append("-quiet")
+            elif verbose >= 3:
+                hdiutil_args.append("-verbose")
+            run = subprocess.check_call
+        
+        for key, value in kwargs.iteritems():
+            hdiutil_args.append("-" + key)
+            if not value is True:
+                hdiutil_args.append(str(value))
+        
+        return run(hdiutil_args)
+    
+    if verbose >= 2:
+        if fancy is None:
+            print "+ Creating .dmg disk image +"
+        else:
+            print "+ Preparing .dmg disk image +"
+    
+    if config.dmg != "":
+        dmg_name = config.dmg
+    else:
+        spl = app_bundle_name.split(" ")
+        dmg_name = spl[0] + "".join(p.capitalize() for p in spl[1:])
+    
+    if fancy is None:
+        try:
+            runHDIUtil("create", dmg_name, srcfolder="dist", format="UDBZ", volname=app_bundle_name, ov=True)
+        except subprocess.CalledProcessError as e:
+            sys.exit(e.returncode)
+    else:
+        if verbose >= 3:
+            print "Determining size of \"dist\"..."
+        size = 0
+        for path, dirs, files in os.walk("dist"):
+            for file in files:
+                size += os.path.getsize(os.path.join(path, file))
+        size += int(size * 0.1)
+        
+        if verbose >= 3:
+            print "Creating temp image for modification..."
+        try:
+            runHDIUtil("create", dmg_name + ".temp", srcfolder="dist", format="UDRW", size=size, volname=app_bundle_name, ov=True)
+        except subprocess.CalledProcessError as e:
+            sys.exit(e.returncode)
+        
+        if verbose >= 3:
+            print "Attaching temp image..."
+        try:
+            output = runHDIUtil("attach", dmg_name + ".temp", readwrite=True, noverify=True, noautoopen=True, capture_stdout=True)
+        except subprocess.CalledProcessError as e:
+            sys.exit(e.returncode)
+        
+        m = re.search("/Volumes/(.+$)", output)
+        disk_root = m.group(0)
+        disk_name = m.group(1)
+        
+        if verbose >= 2:
+            print "+ Applying fancy settings +"
+        
+        if fancy.has_key("background_picture"):
+            bg_path = os.path.join(disk_root, os.path.basename(fancy["background_picture"]))
+            if verbose >= 3:
+                print fancy["background_picture"], "->", bg_path
+            shutil.copy2(fancy["background_picture"], bg_path)
+        else:
+            bg_path = None
+        
+        if fancy.get("applications_symlink", False):
+            os.symlink("/Applications", os.path.join(disk_root, "Applications"))
+        
+        finder = appscript.app("Finder")
+        disk = finder.disks[disk_name]
+        disk.open()
+        window = disk.container_window
+        window.current_view.set(appscript.k.icon_view)
+        window.toolbar_visible.set(False)
+        window.statusbar_visible.set(False)
+        if fancy.has_key("window_bounds"):
+            window.bounds.set(fancy["window_bounds"])
+        view_options = window.icon_view_options
+        view_options.arrangement.set(appscript.k.not_arranged)
+        if fancy.has_key("icon_size"):
+            view_options.icon_size.set(fancy["icon_size"])
+        if bg_path is not None:
+            view_options.background_picture.set(disk.files[os.path.basename(bg_path)])
+        if fancy.has_key("items_position"):
+            for name, position in fancy["items_position"].iteritems():
+                window.items[name].position.set(position)
+        disk.close()
+        if bg_path is not None:
+            subprocess.call(["SetFile", "-a", "V", bg_path])
+        disk.update(registering_applications=False)
+        sleep(2)
+        disk.eject()
+        
+        if verbose >= 2:
+            print "+ Finalizing .dmg disk image +"
+        
+        try:
+            runHDIUtil("convert", dmg_name + ".temp", format="UDBZ", o=dmg_name + ".dmg", ov=True)
+        except subprocess.CalledProcessError as e:
+            sys.exit(e.returncode)
+        
+        os.unlink(dmg_name + ".temp.dmg")
+
+# ------------------------------------------------
+
+if verbose >= 2:
+    print "+ Done +"
+
+sys.exit(0)
diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt
new file mode 100644 (file)
index 0000000..0654ff7
--- /dev/null
@@ -0,0 +1,26 @@
+
+macdeployqtplus works best on OS X Lion, for Snow Leopard you'd need to install
+Python 2.7 and make it your default Python installation.
+
+You will need the appscript package for the fancy disk image creation to work.
+Install it by invoking "sudo easy_install appscript".
+
+Ths script should be invoked in the target directory like this:
+$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr de,es,ru -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist
+
+During the process, the disk image window will pop up briefly where the fancy
+settings are applied. This is normal, please do not interfere.
+
+You can also set up Qt Creator for invoking the script. For this, go to the
+"Projects" tab on the left side, switch to "Run Settings" above and add a
+deploy configuration. Next add a deploy step choosing "Custom Process Step".
+Fill in the following.
+
+Enable custom process step: [x]
+Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus
+Working directory: %{buildDir}
+Command arguments: Bitcoin-Qt.app -add-qt-tr de,ru -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist 
+
+After that you can start the deployment process through the menu with
+Build -> Deploy Project "bitcoin-qt"
+
diff --git a/contrib/miniupnpc/Portfile b/contrib/miniupnpc/Portfile
new file mode 100644 (file)
index 0000000..133aee5
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
+# $Id$
+
+PortSystem          1.0
+
+name                miniupnpc
+epoch               2
+version             1.6
+revision            2
+categories          net
+platforms           darwin
+license             BSD
+maintainers         singingwolfboy openmaintainer
+description         Lightweight client for UPnP protocol
+long_description    \
+    ${description}
+    
+homepage            http://miniupnp.free.fr/
+master_sites        http://miniupnp.free.fr/files/download.php?file=${distname}${extract.suffix}&dummy=
+checksums           md5     88055f2d4a061cfd4cfe25a9eae22f67 \
+                    sha1    ef8f2edb17f2e7c5b8dc67ee80a65c199d823e0a \
+                    rmd160  d86b75b331a3fb5525c71708548f311977c0598f
+
+use_configure       no
+
+variant universal {}
+if {[variant_isset universal]} {
+    set archflags ${configure.universal_cflags}
+} else {
+    set archflags ${configure.cc_archflags}
+}
+
+build.args-append   CC="${configure.cc} ${archflags}"
+
+post-patch {
+    reinplace "s|-Wl,-install_name,|-Wl,-install_name,${prefix}/lib/|" ${worksrcpath}/Makefile
+}
+
+destroot.destdir    PREFIX=${prefix} INSTALLPREFIX=${destroot}${prefix}
+
+livecheck.type      regex
+livecheck.url       http://miniupnp.free.fr/files/
+livecheck.regex     ${name}-(\\d+(\\.\\d{1,4})+)${extract.suffix}
diff --git a/contrib/qt_translations.py b/contrib/qt_translations.py
new file mode 100755 (executable)
index 0000000..fd8a8b7
--- /dev/null
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+
+# Helpful little script that spits out a comma-separated list of
+# language codes for Qt icons that should be included
+# in binary bitcoin distributions
+
+import glob
+import os
+import re
+import sys
+
+if len(sys.argv) != 3:
+  sys.exit("Usage: %s $QTDIR/translations $BITCOINDIR/src/qt/locale"%sys.argv[0])
+
+d1 = sys.argv[1]
+d2 = sys.argv[2]
+
+l1 = set([ re.search(r'qt_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d1, 'qt_*.qm')) ])
+l2 = set([ re.search(r'bitcoin_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'bitcoin_*.qm')) ])
+
+print ",".join(sorted(l1.intersection(l2)))
+
diff --git a/contrib/wallettools/walletchangepass.py b/contrib/wallettools/walletchangepass.py
new file mode 100644 (file)
index 0000000..30f3f5b
--- /dev/null
@@ -0,0 +1,5 @@
+from jsonrpc import ServiceProxy
+access = ServiceProxy("http://127.0.0.1:8332")
+pwd = raw_input("Enter old wallet passphrase: ")
+pwd2 = raw_input("Enter new wallet passphrase: ")
+access.walletpassphrasechange(pwd, pwd2)
\ No newline at end of file
diff --git a/contrib/wallettools/walletunlock.py b/contrib/wallettools/walletunlock.py
new file mode 100644 (file)
index 0000000..f847c6f
--- /dev/null
@@ -0,0 +1,4 @@
+from jsonrpc import ServiceProxy
+access = ServiceProxy("http://127.0.0.1:8332")
+pwd = raw_input("Enter wallet passphrase: ")
+access.walletpassphrase(pwd, 60)
\ No newline at end of file
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644 (file)
index 0000000..08d4f8c
--- /dev/null
@@ -0,0 +1,1752 @@
+# Doxyfile 1.7.4
+
+# !!! Invoke doxygen from project root using: 
+#    doxygen doc/Doxyfile
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = Bitcoin
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 0.5.0
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "P2P Digital Currency"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = doc/bitcoin_logo_doxygen.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc/doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this 
+# tag. The format is ext=language, where ext is a file extension, and language 
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penalty. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. The create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = src
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.vhd \
+                         *.vhdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible 
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is adviced to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the stylesheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
+# the documentation publisher. This should be a reverse domain-name style 
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the 
+# mathjax.org site, so you can quickly see the result without installing 
+# MathJax, but it is strongly recommended to install a local copy of MathJax 
+# before deployment.
+
+MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links. 
+# Note that each tag file must have a unique name 
+# (where the name does NOT include the path) 
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called Helvetica to the output 
+# directory and reference it in all dot files that doxygen generates. 
+# When you want a differently looking font you can specify the font name 
+# using DOT_FONTNAME. You need to make sure dot is able to find the font, 
+# which can be done by putting it in a standard location or by setting the 
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
+# containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the 
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
+# different font using DOT_FONTNAME you can set the path where dot 
+# can find it using this tag.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
index 664a174..9fe0a44 100644 (file)
@@ -1,4 +1,4 @@
-Bitcoin 0.4.7 BETA
+Bitcoin 0.5.6 BETA
 
 Copyright (c) 2009-2012 Bitcoin Developers
 Distributed under the MIT/X11 software license, see the accompanying
@@ -18,100 +18,16 @@ with each other, with the help of a P2P network to check for double-spending.
 
 Setup
 -----
+You need the Qt4 run-time libraries to run bitcoin-qt. On Debian or Ubuntu:
+  sudo apt-get install libqtgui4
+
 Unpack the files into a directory and run:
- bin/32/bitcoin (GUI, 32-bit)
+ bin/32/bitcoin-qt (GUI, 32-bit)
  bin/32/bitcoind (headless, 32-bit)
- bin/64/bitcoin (GUI, 64-bit)
+ bin/64/bitcoin-qt (GUI, 64-bit)
  bin/64/bitcoind (headless, 64-bit)
 
 
-Wallet Encryption
------------------
-Bitcoin supports native wallet encryption so that people who steal your
-wallet file don't automatically get access to all of your Bitcoins.
-In order to enable this feature, chose "Encrypt Wallet" from the
-Options menu.  You will be prompted to enter a passphrase, which
-will be used as the key to encrypt your wallet and will be needed
-every time you wish to send Bitcoins.  If you lose this passphrase,
-you will lose access to spend all of the bitcoins in your wallet,
-no one, not even the Bitcoin developers can recover your Bitcoins.
-This means you are responsible for your own security, store your
-passphrase in a secure location and do not forget it.
-
-Remember that the encryption built into bitcoin only encrypts the
-actual keys which are required to send your bitcoins, not the full
-wallet.  This means that someone who steals your wallet file will
-be able to see all the addresses which belong to you, as well as the
-relevant transactions, you are only protected from someone spending
-your coins.
-
-It is recommended that you backup your wallet file before you
-encrypt your wallet.  To do this, close the Bitcoin client and
-copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user
-name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/
-on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on
-Windows Vista and 7 and /Documents and Settings/(user name)/Application
-Data/Bitcoin on Windows XP).  Once you have copied that file to a
-safe location, reopen the Bitcoin client and Encrypt your wallet.
-If everything goes fine, delete the backup and enjoy your encrypted
-wallet.  Note that once you encrypt your wallet, you will never be
-able to go back to a version of the Bitcoin client older than 0.4.
-
-Keep in mind that you are always responsible for your own security.
-All it takes is a slightly more advanced wallet-stealing trojan which
-installs a keylogger to steal your wallet passphrase as you enter it
-in addition to your wallet file and you have lost all your Bitcoins.
-Wallet encryption cannot keep you safe if you do not practice
-good security, such as running up-to-date antivirus software, only
-entering your wallet passphrase in the Bitcoin client and using the
-same passphrase only as your wallet passphrase.
-
-
-Technical details of wallet encryption
---------------------------------------
-Wallet encryption uses AES-256-CBC to encrypt only the private keys
-that are held in a wallet.  The keys are encrypted with a master key
-which is entirely random.  This master key is then encrypted with
-AES-256-CBC with a key derived from the passphrase using SHA512 and
-OpenSSL's EVP_BytesToKey and a dynamic number of rounds determined by
-the speed of the machine which does the initial encryption (and is
-updated based on the speed of a computer which does a subsequent
-passphrase change).  Although the underlying code supports multiple
-encrypted copies of the same master key (and thus multiple passphrases)
-the client does not yet have a method to add additional passphrases.
-
-At runtime, the client loads the wallet as it normally would, however
-the keystore stores the keys in encrypted form.  When the passphrase
-is required (to top up keypool or send coins) it will either be queried
-by a GUI prompt, or must first be entered with the walletpassphrase
-RPC command.  This will change the wallet to "unlocked" state where the
-unencrypted master key is stored in memory (in the case of GUI, only for
-long enough to complete the requested operation, in RPC, for as long as
-is specified by the second parameter to walletpassphrase).  The wallet is
-then locked (or can be manually locked using the walletlock RPC command)
-and the unencrypted master key is removed from memory.
-
-Implementation details of wallet encryption
--------------------------------------------
-When the wallet is locked, calls to sendtoaddress, sendfrom, sendmany,
-and keypoolrefill will return Error -13: "Error: Please enter the wallet 
-passphrase with walletpassphrase first."
-
-When the wallet is unlocked, calls to walletpassphrase will fail.
-
-When a wallet is encrypted, the passphrase is required to top up the
-keypool, thus, if the passphrase is rarely entered, it is possible that
-keypool might run out.  In this case, the default key will be used as the
-target for payouts for mining, and calls to getnewaddress and getaccount
-address will return an error.  In order to prevent such cases, the keypool
-is automatically refilled when walletpassphrase is called with a correct
-passphrase and when topupkeypool is called (while the wallet is unlocked).
-Note that the keypool continues to be topped up on various occasions when
-a new key from pool is used and the wallet is unlocked (or unencrypted).
-
-
-
 See the documentation at the bitcoin wiki:
   https://en.bitcoin.it/wiki/Main_Page
-
-... for help and more information.
+for help and more information.
index f611b6a..fcb88bb 100644 (file)
@@ -1,4 +1,4 @@
-Bitcoin 0.4.7 BETA\r
+Bitcoin 0.5.6 BETA\r
 \r
 Copyright (c) 2009-2012 Bitcoin Developers\r
 Distributed under the MIT/X11 software license, see the accompanying\r
@@ -18,7 +18,7 @@ with each other, with the help of a P2P network to check for double-spending.
 \r
 Setup\r
 -----\r
-Unpack the files into a directory and run bitcoin.exe.\r
+Unpack the files into a directory and run bitcoin-qt.exe.\r
 \r
 If you have Microsoft Security Essentials, you need to add bitcoin.exe to its\r
 "Excluded processes" list.  Microsoft Security Essentials->Settings tab,\r
@@ -27,8 +27,9 @@ select Excluded processes, press Add, select bitcoin.exe, OK, Save changes.
 The software automatically finds other nodes to connect to.  You can\r
 enable Universal Plug and Play using a menu entry or set your firewall\r
 to forward port 8333 (TCP) to your computer so you can receive\r
-incoming connections.  Bitcoin work without incoming connections,\r
+incoming connections.  Bitcoin works without incoming connections,\r
 but allowing incoming connections helps the Bitcoin network.\r
 \r
-See the bitcoin wiki at:  https://en.bitcoin.it/wiki/Main_Page\r
+See the bitcoin wiki at:\r
+  https://en.bitcoin.it/wiki/Main_Page\r
 for more help and information.\r
diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt
new file mode 100644 (file)
index 0000000..2ed25bb
--- /dev/null
@@ -0,0 +1,56 @@
+Code: src/strlcpy.h
+Author: Todd C. Miller <Todd.Miller@courtesan.com>
+License: ISC
+
+Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png,
+      src/qt/res/src/*.svg
+Designer: Wladimir van der Laan
+License: MIT
+
+Icon: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png,
+      src/qt/res/icons/history.png, src/qt/res/icons/key.png,
+      src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png,
+      src/qt/res/icons/receive.png, src/qt/res/icons/send.png,
+      src/qt/res/icons/synced.png
+Icon Pack: NUVOLA ICON THEME for KDE 3.x
+Designer: David Vignoni (david@icon-king.com)
+          ICON KING - www.icon-king.com
+License: LGPL
+Site: http://www.icon-king.com/projects/nuvola/
+
+Icon: src/qt/res/icons/connect*.png
+Icon Pack: Human-O2
+Designer: schollidesign
+License: GNU/GPL
+Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0
+
+Icon: src/qt/res/icons/transaction*.png
+Designer: md2k7
+Site: https://forum.bitcoin.org/index.php?topic=15276.0
+License: You are free to do with these icons as you wish, including selling,
+ copying, modifying etc.
+
+Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png,
+      src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png,
+      src/qt/res/icons/add.png, src/qt/res/icons/edit.png,
+      src/qt/res/icons/remove.png (edited)
+Designer: http://www.everaldo.com
+Icon Pack: Crystal SVG
+License: LGPL
+
+Icon: src/qt/res/icons/bitcoin.png, src/qt/res/icons/toolbar.png
+Designer: Bitboy (optimized for 16x16 by Wladimir van der Laan)
+License: Public Domain
+Site: http://forum.bitcoin.org/?topic=1756.0
+
+Icon:  scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng
+Icon Pack: Kids
+Designer: Everaldo (Everaldo Coelho)
+License: GNU/GPL 
+Site: http://findicons.com/icon/17102/reload?id=17102
+
+Image: src/qt/res/images/splash2.jpg (Wallet image)
+Designer: Crobbo (forum)
+Site: https://bitcointalk.org/index.php?topic=32273.0
+License: Public domain
+
diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png
new file mode 100644 (file)
index 0000000..5b41b02
Binary files /dev/null and b/doc/bitcoin_logo_doxygen.png differ
index 69c298b..2e54b02 100644 (file)
@@ -7,19 +7,16 @@ cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP
 software written by Thomas Bernard.
 
 
+See readme-qt.rst for instructions on building Bitcoin QT, the
+graphical user interface.
+
 WINDOWS BUILD NOTES
 ===================
 
 Compilers Supported
 -------------------
-MinGW GCC  http://tdm-gcc.tdragon.net/
-   TDM-GCC with gcc 4.5.1 was used to build this release.
-MSYS 1.0.11 was also used (sh needed to compile some dependencies)
-
-
-Candidate releases were built with MSVC 10.0 (2010), but
-compiling with Visual C++ caused rendering artifacts when
-bitcoin was run.
+TODO: What works?
+Note: releases are cross-compiled using mingw running on Linux.
 
 
 Dependencies
@@ -27,39 +24,24 @@ Dependencies
 Libraries you need to download separately and build:
 
                 default path               download
-wxWidgets       \wxwidgets-2.9.2-mgw       http://www.wxwidgets.org/downloads/
 OpenSSL         \openssl-1.0.1b-mgw        http://www.openssl.org/source/
 Berkeley DB     \db-4.8.30.NC-mgw          http://www.oracle.com/technology/software/products/berkeley-db/index.html
 Boost           \boost-1.47.0-mgw          http://www.boost.org/users/download/
 miniupnpc       \miniupnpc-1.6-mgw         http://miniupnp.tuxfamily.org/files/
 
 Their licenses:
-wxWidgets      LGPL 2.1 with very liberal exceptions
 OpenSSL        Old BSD license with the problematic advertising requirement
 Berkeley DB    New BSD license with additional requirement that linked software must be free open source
 Boost          MIT-like license
 miniupnpc      New (3-clause) BSD license
 
 Versions used in this release:
-wxWidgets    2.9.2
 OpenSSL      1.0.1b
 Berkeley DB  4.8.30.NC
 Boost        1.47.0
 miniupnpc    1.6
 
 
-Notes
------
-The UI layout is edited with wxFormBuilder.  The project file is
-uiproject.fbp.  It generates uibase.cpp and uibase.h, which define base
-classes that do the rote work of constructing all the UI elements.
-
-wxWidgets
----------
-DOS shell:
-cd \wxWidgets-2.9.2-mgw\build\msw
-mingw32-make -f makefile.gcc
-
 OpenSSL
 -------
 MSYS shell:
@@ -98,6 +80,5 @@ Bitcoin
 -------
 DOS prompt:
 cd \bitcoin\src
-mingw32-make bitcoin.exe bitcoind.exe -f makefile.mingw
-strip bitcoin.exe
+mingw32-make -f makefile.mingw
 strip bitcoind.exe
index 52d876d..8002441 100644 (file)
@@ -1,5 +1,4 @@
-Copyright (c) 2010 Laszlo Hanyecz
-Portions Copyright (c) 2011 Douglas Huff
+Copyright (c) 2011 Bitcoin Developers
 Distributed under the MIT/X11 software license, see the accompanying file
 license.txt or http://www.opensource.org/licenses/mit-license.php.  This
 product includes software developed by the OpenSSL Project for use in the
@@ -8,11 +7,14 @@ software written by Eric Young (eay@cryptsoft.com) and UPnP software written by
 Thomas Bernard.
 
 
-Mac OS X build instructions
+Mac OS X bitcoind build instructions
 Laszlo Hanyecz <solar@heliacal.net>
 Douglas Huff <dhuff@jrbobdobbs.org>
 
 
+See readme-qt.rst for instructions on building Bitcoin QT, the
+graphical user interface.
+
 Tested on 10.5 and 10.6 intel.  PPC is not supported because it's big-endian.
 
 All of the commands should be executed in Terminal.app.. it's in
@@ -23,256 +25,32 @@ everything is available in /usr not just /Developer I think it comes on the DVD
 but you can get the current version from http://developer.apple.com
 
 
-1.  Pick a directory to work inside.. something like ~/bitcoin works.  The
-structure I use looks like this:
-
-(~ is your home directory)
-
-~/bitcoin
-~/bitcoin/bitcoin       # Upstream source tree
-~/bitcoin/src           # source code (symlink to ~/bitcoin/bitcoin/src)
-~/bitcoin/deps          # dependencies.. like libraries and headers needed to compile
-~/bitcoin/Bitcoin.app   # the application bundle where you can run the app
-
-Just execute: mkdir ~/bitcoin
-This will create the top dir for you..
-
-WARNING: do not use the ~ notation with the configure scripts.. use the full
-name of the directory, for example /Users/james/bitcoin/deps for a user named
-'james'.  In my examples I am using 'macosuser' so make sure you change that.
-
-2.  Check out the bitcoin code from github:
-
-cd ~/bitcoin
-git clone https://github.com/bitcoin/bitcoin.git
-ln -s bitcoin/src src
-
-This will make ~/bitcoin/bitcoin for you with all the files from git. This puts
-the actual sources in ~/bitcoin/bitcoin/src and create a symlink src in
-~/bitcoin to this location.
-
-3.  Get and build the dependencies
-
-
-Boost
------
-
-Download from http://www.boost.org/users/download/
-I'm assuming it ended up in ~/Downloads..
-
-mkdir ~/bitcoin/deps
-cd ~/bitcoin/deps
-tar xvjf ~/Downloads/boost_1_42_0.tar.bz2
-cd boost_1_42_0
-./bootstrap.sh
-./bjam architecture=combined address-model=32_64 macosx-version=10.5 macosx-version-min=10.5 link=static runtime-link=static --toolset=darwin --prefix=/Users/macosuser/bitcoin/deps install
-
-If you're using Snow Leopard, you will need to specify 10.6 as your Mac OS X
-version instead of 10.5.
-
-This part takes a while.. use your judgement and fix it if something doesn't
-build for some reason.
-
-Change the prefix to whatever your directory is (my username in this example
-is macosuser).  I'm also running on 10.6 so i have macosx-version=10.6  change
-to 10.5 if you're using leopard.
-
-This is what my output looked like at the end:
-...failed updating 2 targets...
-...skipped 144 targets...
-...updated 8074 targets...
-
-
-OpenSSL
--------
-
-(System or MacPorts openssl will work fine. Optional.)
-
-Download from http://www.openssl.org/source/
-
-We would like to build this as a 32 bit/64 bit library so we actually build it
-2 times and join it together here..  If you downloaded with safari it already
-uncompressed it so it will just be a tar not a tar.gz
-
-cd ~/bitcoin/deps
-tar xvf ~/Downloads/openssl-1.0.0.tar
-mv openssl-1.0.0 openssl-1.0.0-i386
-tar xvf ~/Downloads/openssl-1.0.0.tar
-mv openssl-1.0.0 openssl-1.0.0-x86_64
-# build i386 (32 bit intel) binary
-cd openssl-1.0.0-i386
-./Configure --prefix=/Users/macosuser/bitcoin/deps --openssldir=/Users/macosuser/bitcoin/deps/openssl darwin-i386-cc && make
-make install # only do this on one of the architectures, to install the headers
-cd ..
-# build x86_64 (64 bit intel) binary
-cd openssl-1.0.0-x86_64
-./Configure --prefix=/Users/macosuser/bitcoin/deps --openssldir=/Users/macosuser/bitcoin/deps/openssl darwin64-x86_64-cc && make
-cd ..
-
-# combine the libs
-cd ~/bitcoin/deps
-lipo -arch i386 openssl-1.0.0-i386/libcrypto.a -arch x86_64 openssl-1.0.0-x86_64/libcrypto.a -o lib/libcrypto.a -create
-lipo -arch i386 openssl-1.0.0-i386/libssl.a -arch x86_64 openssl-1.0.0-x86_64/libssl.a -o lib/libssl.a -create
-
-Verify your binaries
-
-file lib/libcrypto.a
-
-output should look like this:
-
-lib/libcrypto.a: Mach-O universal binary with 2 architectures
-lib/libcrypto.a (for architecture i386):  current ar archive random library
-lib/libcrypto.a (for architecture x86_64):  current ar archive random library
-
-
-miniupnpc
----------
-
-(MacPorts miniupnpc package works fine. You will need to modify makefile.)
-
-The process for miniupnpc (optional) is similar to that of OpenSSL.
-
-Download from http://miniupnp.tuxfamily.org/files/.
-
-cd ~/bitcoin/deps
-tar xvf ~/Downloads/miniupnpc-1.6.tar
-mv miniupnpc-1.6 miniupnpc-1.6-x86_64
-tar xvf ~/Downloads/miniupnpc-1.6.tar
-mv miniupnpc-1.6 miniupnpc-1.6-i386
-# build x86_64 (64 bit intel) binary
-cd miniupnpc-1.6-x86_64
-export CFLAGS="-arch x86_64"
-export LDFLAGS="-arch x86_64"
-export PREFIX="/Users/macuser/bitcoin/deps"
-make && make install
-# build i386 (32 bit intel) binary
-cd miniupnpc-1.6-i386
-export CFLAGS="-arch i386"
-export LDFLAGS="-arch i386"
-export PREFIX="/Users/macuser/bitcoin/deps"
-make
-
-# combine the libs
-cd ~/bitcoin/deps
-lipo -arch i386 miniupnpc-1.6-i386/libminiupnpc.a -arch x86_64 miniupnpc-1.6-x86_64/libminiupnpc.a -o lib/libminiupnpc.a -create
-
-Verify your binaries
-
-file lib/libminiupnpc.a
-
-output should look like this:
-
-lib/libminiupnpc.a: Mach-O universal binary with 2 architectures
-lib/libminiupnpc.a (for architecture i386): current ar archive random library
-lib/libminiupnpc.a (for architecture x86_64): current ar archive random library
-
-
-Berkeley DB
------------
-
-(System or MacPorts version work fine.)
-
-Download from http://freshmeat.net/projects/berkeleydb/
-
-cd ~/bitcoin/deps
-tar xvf ~/Downloads/db-4.8.30.tar
-cd db-4.8.30/build_unix
-../dist/configure --prefix=/Users/macosuser/bitcoin/deps --enable-cxx && make && make install
-
-
-wxWidgets
----------
-
-(The wxWidgets-devel MacPorts package will work but will throw annoying assertion dialogs.)
-
-This is the big one..
-
-Check it out from svn
-
-cd ~/bitcoin/deps
-svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk wxWidgets-trunk
-
-This will make a wxWidgets-trunk directory in deps.
-
-Use this script snippet, change your prefix to whatever your dir is:
-
-PREFIX=~/bitcoin/deps
-SRCDIR="$PREFIX/wxWidgets-trunk"
-BUILDDIR="$SRCDIR/macbuild"
-
-cd "$PREFIX" &&
-#svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk wxWidgets-trunk &&
-cd "$SRCDIR" &&
-
-[ -f include/wx/hashmap.h.orig ] || cp include/wx/hashmap.h include/wx/hashmap.h.orig &&
-sed 's/if wxUSE_STL/if 0 \&\& wxUSE_STL/g' < include/wx/hashmap.h.orig > include/wx/hashmap.h &&
-
-[ -f include/wx/hashset.h.orig ] || cp include/wx/hashset.h include/wx/hashset.h.orig &&
-sed 's/if wxUSE_STL/if 0 \&\& wxUSE_STL/g' < include/wx/hashset.h.orig > include/wx/hashset.h &&
-
-
-
-rm -vrf "$BUILDDIR" &&
-mkdir "$BUILDDIR" &&
-cd "$BUILDDIR" &&
-
-../configure --prefix="$PREFIX" \
---with-osx_cocoa \
---disable-shared \
---disable-debug_flag \
---with-macosx-version-min=10.5 \
---enable-stl \
---enable-utf8 \
---enable-universal_binary \
---with-libjpeg=builtin \
---with-libpng=builtin \
---with-regex=builtin \
---with-libtiff=builtin \
---with-zlib=builtin \
---with-expat=builtin \
---with-macosx-sdk=/Developer/SDKs/MacOSX10.5.sdk &&
-
-
-find . -name Makefile | 
-while read i; do 
-  echo $i; 
-  sed 's/-arch i386/-arch i386 -arch x86_64/g' < "$i" > "$i".new && 
-  mv "$i" "$i".old && 
-  mv "$i".new "$i"; 
-done
-
-
-
-make && 
-make install
-
-
-
-Now you should be able to build bitcoin
-
-cd ~/bitcoin/src
-make -f makefile.osx bitcoin
-
-Before you can run it, you need to create an application bundle for Mac OS.
+1.  Clone the github tree to get the source code:
 
-A bundle is provided in contrib/Bitcoin.app.
+git clone git@github.com:bitcoin/bitcoin.git bitcoin
 
-Copy the bitcoin binary in to it like this:
-  cp -pR ~/bitcoin/bitcoin/contrib/Bitcoin.app ~/bitcoin/
-  cp ~/bitcoin/src/bitcoin ~/bitcoin/Bitcoin.app/Contents/MacOS/
+2.  Download and install MacPorts from http://www.macports.org/
 
-To run it you can just click the Bitcoin.app in Finder, or just do:
-open ~/bitcoin/Bitcoin.app
+2a. (for 10.7 Lion)
+    Edit /opt/local/etc/macports/macports.conf and uncomment "build_arch i386"
 
-If you want to run it with arguments you can just run it without backgrounding
-by specifying the full name in terminal:
+3.  Install dependencies from MacPorts
 
-~/bitcoin/Bitcoin.app/Contents/MacOS/bitcoin -addnode=192.75.207.66
+sudo port install boost db48 openssl
 
-You can also run it with arguments in the background with output going to the
-normal places for apps (Console) like this:
+Install the right version of miniupnpc:
+pushd bitcoin/contrib/minipupnpc; sudo port install; popd
+(this will be unnecessary soon, you will just port install miniupnpc
+along with the rest of the dependencies).
 
-open ~/bitcoin/Bitcoin.app --args -connect=192.75.207.66
+4.  Now you should be able to build bitcoind:
 
-It is advisable to relocate Bitcoin.app to /Applications or $HOME/Applications.
+cd bitcoin/src
+make -f makefile.osx
 
+Run:
+  ./bitcoind --help  # for a list of command-line options.
+Run
+  ./bitcoind -daemon # to start the bitcoin daemon.
+Run
+  ./bitcoind help # When the daemon is running, to get a list of RPC commands
index e608c25..0d335df 100644 (file)
@@ -1,4 +1,5 @@
 Copyright (c) 2009-2010 Satoshi Nakamoto
+Copyright (c) 2011 Bitcoin Developers
 Distributed under the MIT/X11 software license, see the accompanying
 file license.txt or http://www.opensource.org/licenses/mit-license.php.
 This product includes software developed by the OpenSSL Project for use in
@@ -14,76 +15,75 @@ To Build
 --------
 
 cd src/
+make -f makefile.unix            # Headless bitcoin
 
-make -f makefile.unix            # Bitcoin with wxWidgets GUI
-  or
-make -f makefile.unix bitcoind   # Headless bitcoin
-
+See readme-qt.rst for instructions on building Bitcoin QT,
+the graphical bitcoin.
 
 Dependencies
 ------------
+
+ Library    Purpose       Description
+ -------    -------       -----------
+ libssl     SSL Support   Secure communications
+ libdb4.8   Berkeley DB   Blockchain & wallet storage
+ libboost   Boost         C++ Library
+ miniupnpc  UPnP Support  Optional firewall-jumping support
+
+miniupnpc may be used for UPnP port mapping.  It can be downloaded from
+http://miniupnp.tuxfamily.org/files/.  UPnP support is compiled in and
+turned off by default.  Set USE_UPNP to a different value to control this:
+ USE_UPNP=-    No UPnP support - miniupnp not required
+ USE_UPNP=0    (the default) UPnP support turned off by default at runtime
+ USE_UPNP=1    UPnP support turned on by default at runtime
+
+Licenses of statically linked libraries:
+ Berkeley DB   New BSD license with additional requirement that linked
+               software must be free open source
+ Boost         MIT-like license
+ miniupnpc     New (3-clause) BSD license
+
+Versions used in this release:
+ GCC           4.3.3
+ OpenSSL       0.9.8g
+ Berkeley DB   4.8.30.NC
+ Boost         1.37
+ miniupnpc     1.6
+
+
+Dependency Build Instructions: Ubuntu & Debian
+----------------------------------------------
 sudo apt-get install build-essential
-sudo apt-get install libgtk2.0-dev
 sudo apt-get install libssl-dev
 sudo apt-get install libdb4.8-dev
 sudo apt-get install libdb4.8++-dev
-Boost 1.40+: sudo apt-get install libboost-all-dev
-or Boost 1.37: sudo apt-get install libboost1.37-dev
+ Boost 1.40+: sudo apt-get install libboost-all-dev
+ or Boost 1.37: sudo apt-get install libboost1.37-dev
 
 If using Boost 1.37, append -mt to the boost libraries in the makefile.
 
-Requires wxWidgets 2.9.1 or newer.
 
-You need to download wxWidgets from http://www.wxwidgets.org/downloads/
-and build it yourself.  See the build instructions and configure parameters
-below.
+Dependency Build Instructions: Gentoo
+-------------------------------------
 
-Requires miniupnpc for UPnP port mapping.  It can be downloaded from
-http://miniupnp.tuxfamily.org/files/.  UPnP support is compiled in and
-turned off by default.  Set USE_UPNP to a different value to control this:
-USE_UPNP=   no UPnP support, miniupnp not required;
-USE_UPNP=0  (the default) UPnP support turned off by default at runtime;
-USE_UPNP=1  UPnP support turned on by default at runtime.
+Note: If you just want to install bitcoind on Gentoo, you can add the Bitcoin
+      overlay and use your package manager:
+          layman -a bitcoin && emerge bitcoind
 
-Licenses of statically linked libraries:
-wxWidgets      LGPL 2.1 with very liberal exceptions
-Berkeley DB    New BSD license with additional requirement that linked software must be free open source
-Boost          MIT-like license
-miniupnpc      New (3-clause) BSD license
+emerge -av1 --noreplace boost glib openssl sys-libs/db:4.8
 
-Versions used in this release:
-GCC          4.3.3
-OpenSSL      0.9.8g
-wxWidgets    2.9.2
-Berkeley DB  4.8.30.NC
-Boost        1.37
-miniupnpc    1.6
+Take the following steps to build (no UPnP support):
+ cd ${BITCOIN_DIR}/src
+ make -f makefile.unix USE_UPNP= BDB_INCLUDE_PATH='/usr/include/db4.8'
+ strip bitcoind
 
 
 Notes
 -----
-The UI layout is edited with wxFormBuilder.  The project file is
-uiproject.fbp.  It generates uibase.cpp and uibase.h, which define base
-classes that do the rote work of constructing all the UI elements.
-
-The release is built with GCC and then "strip bitcoin" to strip the debug
+The release is built with GCC and then "strip bitcoind" to strip the debug
 symbols, which reduces the executable size by about 90%.
 
 
-wxWidgets
----------
-cd /usr/local
-tar -xzvf wxWidgets-2.9.2.tar.gz
-cd wxWidgets-2.9.2
-mkdir buildgtk
-cd buildgtk
-../configure --with-gtk --enable-debug --disable-shared --enable-monolithic --without-libpng --disable-svg
-make
-sudo su
-make install
-ldconfig
-
-
 miniupnpc
 ---------
 tar -xzvf miniupnpc-1.6.tar.gz
diff --git a/doc/readme-qt.rst b/doc/readme-qt.rst
new file mode 100644 (file)
index 0000000..0901773
--- /dev/null
@@ -0,0 +1,178 @@
+Bitcoin-qt: Qt4 GUI for Bitcoin
+===============================
+
+Features
+========
+
+- All functionality of the Wx GUI, including wallet encryption
+
+- Compatibility with Linux (both GNOME and KDE), MacOSX and Windows
+
+- Notification on incoming / outgoing transactions (compatible with FreeDesktop and other desktop notification schemes)
+
+- General interface improvements: Splash screen, tabbed interface
+
+- Overview page with current balance, unconfirmed balance, and such
+
+- Better transaction list with status icons, real-time filtering and a context menu
+
+- Asks for confirmation before sending coins, for your own safety
+
+- CSV export of transactions and address book (for Excel bookkeeping)
+
+- Shows alternative icon when connected to testnet, so you never accidentally send real coins during testing
+
+- Shows a progress bar on initial block download, so that you don't have to wonder how many blocks it needs to download to be up to date
+
+- Sendmany support, send to multiple recipients at the same time
+
+- Multiple unit support, can show subdivided bitcoins (uBTC, mBTC) for users that like large numbers
+
+- Support for English, German, Russian and Dutch languages
+
+- Address books and transaction table can be sorted by any column
+
+- Accepts "bitcoin:" URLs from browsers and other sources through drag and drop
+
+Build instructions
+===================
+
+Debian
+-------
+
+First, make sure that the required packages for Qt4 development of your
+distribution are installed, for Debian and Ubuntu these are:
+
+::
+
+    apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
+        libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
+        libssl-dev libdb4.8++-dev
+
+then execute the following:
+
+::
+
+    qmake
+    make
+
+Alternatively, install Qt Creator and open the `bitcoin-qt.pro` file.
+
+An executable named `bitcoin-qt` will be built.
+
+
+Windows
+--------
+
+Windows build instructions:
+
+- Download the `QT Windows SDK`_ and install it. You don't need the Symbian stuff, just the desktop Qt.
+
+- Download and extract the `dependencies archive`_  [#]_, or compile openssl, boost and dbcxx yourself.
+
+- Copy the contents of the folder "deps" to "X:\\QtSDK\\mingw", replace X:\\ with the location where you installed the Qt SDK. Make sure that the contents of "deps\\include" end up in the current "include" directory.
+
+- Open the .pro file in QT creator and build as normal (ctrl-B)
+
+.. _`QT Windows SDK`: http://qt.nokia.com/downloads/sdk-windows-cpp
+.. _`dependencies archive`: https://download.visucore.com/bitcoin/qtgui_deps_1.zip
+.. [#] PGP signature: https://download.visucore.com/bitcoin/qtgui_deps_1.zip.sig (signed with RSA key ID `610945D0`_)
+.. _`610945D0`: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x610945D0
+
+
+Mac OS X
+--------
+
+- Download and install the `Qt Mac OS X SDK`_. It is recommended to also install Apple's Xcode with UNIX tools.
+
+- Download and install `MacPorts`_.
+
+- Execute the following commands in a terminal to get the dependencies:
+
+::
+
+       sudo port selfupdate
+       sudo port install boost db48
+
+- Open the .pro file in Qt Creator and build as normal (cmd-B)
+
+.. _`Qt Mac OS X SDK`: http://qt.nokia.com/downloads/sdk-mac-os-cpp
+.. _`MacPorts`: http://www.macports.org/install.php
+
+
+Build configuration options
+============================
+
+UPNnP port forwarding
+---------------------
+
+To use UPnP for port forwarding behind a NAT router (recommended, as more connections overall allow for a faster and more stable bitcoin experience), pass the following argument to qmake:
+
+::
+
+    qmake "USE_UPNP=1"
+
+(in **Qt Creator**, you can find the setting for additional qmake arguments under "Projects" -> "Build Settings" -> "Build Steps", then click "Details" next to **qmake**)
+
+This requires miniupnpc for UPnP port mapping.  It can be downloaded from
+http://miniupnp.tuxfamily.org/files/.  UPnP support is not compiled in by default.
+
+Set USE_UPNP to a different value to control this:
+
++------------+--------------------------------------------------------------------------+
+| USE_UPNP=- | no UPnP support, miniupnpc not required;                                 |
++------------+--------------------------------------------------------------------------+
+| USE_UPNP=0 | (the default) built with UPnP, support turned off by default at runtime; |
++------------+--------------------------------------------------------------------------+
+| USE_UPNP=1 | build with UPnP support turned on by default at runtime.                 |
++------------+--------------------------------------------------------------------------+
+
+Mac OS X users: miniupnpc is currently outdated on MacPorts. An updated Portfile is provided in contrib/miniupnpc within this project.
+You can execute the following commands in a terminal to install it:
+
+::
+
+       cd <location of bitcoin-qt>/contrib/miniupnpc
+       sudo port install
+
+Notification support for recent (k)ubuntu versions
+---------------------------------------------------
+
+To see desktop notifications on (k)ubuntu versions starting from 10.04, enable usage of the
+FreeDesktop notification interface through DBUS using the following qmake option:
+
+::
+
+    qmake "USE_DBUS=1"
+
+Berkely DB version warning
+==========================
+
+A warning for people using the *static binary* version of Bitcoin on a Linux/UNIX-ish system (tl;dr: **Berkely DB databases are not forward compatible**).
+
+The static binary version of Bitcoin is linked against libdb4.8 (see also `this Debian issue`_).
+
+Now the nasty thing is that databases from 5.X are not compatible with 4.X.
+
+If the globally installed development package of Berkely DB installed on your system is 5.X, any source you
+build yourself will be linked against that. The first time you run with a 5.X version the database will be upgraded,
+and 4.X cannot open the new format. This means that you cannot go back to the old statically linked version without
+significant hassle!
+
+.. _`this Debian issue`: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=621425
+
+Ubuntu 11.10 warning
+====================
+
+Ubuntu 11.10 has a package called 'qt-at-spi' installed by default.  At the time of writing, having that package
+installed causes bitcoin-qt to crash intermittently.  The issue has been reported as `launchpad bug 857790`_, but
+isn't yet fixed.
+
+Until the bug is fixed, you can remove the qt-at-spi package to work around the problem, though this will presumably
+disable screen reader functionality for Qt apps:
+
+::
+
+    sudo apt-get remove qt-at-spi
+
+.. _`launchpad bug 857790`: https://bugs.launchpad.net/ubuntu/+source/qt-at-spi/+bug/857790
index 8a236a7..468d037 100644 (file)
@@ -1,42 +1,85 @@
 * update translations (ping tcatm on IRC for now)
 
 * update (commit) version in sources
+  bitcoin-qt.pro
   src/serialize.h
   share/setup.nsi
   doc/README*
 
-* update (commit) version in OSX app bundle
- contrib/Bitcoin.app/Contents/Info.plist
-
-  * CFBundleShortVersionString should have value like 0.3.23
-  * CFBundleVersion should have value like 323
-
 * tag version in git
 
-  $ git tag -a v0.3.23
+   git tag -a v0.5.1
 
 * write release notes.  git shortlog helps a lot:
 
-  $ git shortlog --no-merges v0.3.22..
-
-* create source-only archive
-
-  $ git archive --format=tar --prefix=bitcoin-0.3.23/ HEAD | \
-       gzip -9c > ~/tmp/bitcoin-0.3.23-src.tar.gz 
+   git shortlog --no-merges v0.5.0..
 
 * perform gitian builds
 
-  * From the bitcoin source dir
-  $ cd ../gitian-builder
-  $ ./bin/gbuild --commit bitcoin=v0.3.23 ../bitcoin/contrib/gitian.yml
-  $ ./bin/gbuild --commit bitcoin=v0.3.23 ../bitcoin/contrib/gitian-win32.yml
-  Build output expected:
-  1. linux 32-bit and 64-bit binaries + source
-  2. windows 32-bit binary + source
-  3. windows installer
+  * From a directory containing the bitcoin source, gitian-builder and gitian.sigs
+   export SIGNER=(your gitian key, ie bluematt, sipa, etc)
+   export VERSION=0.5.1
+   cd ./gitian-builder
+
+  * Fetch and build inputs:
+   mkdir -p inputs; cd inputs/
+   wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz
+   wget 'http://www.openssl.org/source/openssl-1.0.1b.tar.gz'
+   wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
+   wget 'http://downloads.sourceforge.net/project/boost/boost/1.47.0/boost_1_47_0.tar.bz2'
+   wget 'http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.4.tar.gz'
+   cd ..
+   ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win32.yml
+   cp build/out/boost-win32-1.47.0-gitian.zip inputs/
+   ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml
+   cp build/out/qt-win32-4.7.4-gitian.zip inputs/
+
+  * Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32:
+   ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml
+   ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml
+   pushd build/out
+   zip -r bitcoin-${VERSION}-linux-gitian.zip *
+   mv bitcoin-${VERSION}-linux-gitian.zip ../../
+   popd
+   ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
+   ./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml
+   pushd build/out
+   zip -r bitcoin-${VERSION}-win32-gitian.zip *
+   mv bitcoin-${VERSION}-win32-gitian.zip ../../
+   popd
 
-* upload builds to SF
+  Build output expected:
+  1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip)
+  2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip)
+  3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/
+
+* repackage gitian builds for release as stand-alone zip/tar/installer exe
+
+  * Linux .tar.gz:
+   unzip bitcoin-${VERSION}-linux-gitian.zip -d bitcoin-${VERSION}-linux
+   tar czvf bitcoin-${VERSION}-linux.tar.gz bitcoin-${VERSION}-linux
+   rm -rf bitcoin-${VERSION}-linux
+
+  * Windows .zip and setup.exe:
+   unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32
+   mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe .
+   zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32
+   rm -rf bitcoin-${VERSION}-win32
+
+* perform Mac build
+  See this blog post for how Gavin set up his build environment and
+  patched macdeployqt to build the OSX release:
+    http://gavintech.blogspot.com/2011/11/deploying-bitcoin-qt-on-osx.html
+  qmake USE_SSL=1 USE_UPNP=1 bitcoin-qt.pro
+  make
+  export QTDIR=/opt/local/share/qt4  # needed to find translations/qt_*.qm files
+  T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale)
+  contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist  
+
+ Build output expected:
+  Bitcoin-Qt.dmg
+
+* upload builds to SourceForge
 
 * create SHA256SUMS for builds, and PGP-sign it
 
 
 * update forum version
 
-* update wiki
-
 * update wiki download links
 
 * update wiki changelog: https://en.bitcoin.it/wiki/Changelog
 
+* Commit your signature to gitian.sigs:
+  pushd gitian.sigs
+  git add ${VERSION}/${SIGNER}
+  git add ${VERSION}-win32/${SIGNER}
+  git commit -a
+  git push  # Assuming you can push to the gitian.sigs tree
+  popd
+
+-------------------------------------------------------------------------
+
+* After 3 or more people have gitian-built, repackage gitian-signed zips:
+
+  * From a directory containing bitcoin source, gitian.sigs and gitian zips
+   export VERSION=0.5.1
+   mkdir bitcoin-${VERSION}-linux-gitian
+   pushd bitcoin-${VERSION}-linux-gitian
+   unzip ../bitcoin-${VERSION}-linux-gitian.zip
+   mkdir gitian
+   cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
+   for signer in $(ls ../gitian.sigs/${VERSION}/); do
+     cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
+     cp ../gitian.sigs/${VERSION}/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
+   done
+   zip -r bitcoin-${VERSION}-linux-gitian.zip *
+   cp bitcoin-${VERSION}-linux-gitian.zip ../
+   popd
+   mkdir bitcoin-${VERSION}-win32-gitian
+   pushd bitcoin-${VERSION}-win32-gitian
+   unzip ../bitcoin-${VERSION}-win32-gitian.zip
+   mkdir gitian
+   cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/
+   for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do
+     cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert
+     cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig
+   done
+   zip -r bitcoin-${VERSION}-win32-gitian.zip *
+   cp bitcoin-${VERSION}-win32-gitian.zip ../
+   popd
+
+  * Upload gitian zips to SourceForge
diff --git a/doc/translation_process.md b/doc/translation_process.md
new file mode 100644 (file)
index 0000000..603d557
--- /dev/null
@@ -0,0 +1,63 @@
+Translations
+============
+
+The Qt GUI can be easily translated into other languages. Here's how we
+handle those translations.
+
+Files and Folders
+-----------------
+
+### bitcoin-qt.pro
+
+This file takes care of generating `.qm` files from `.ts` files. It is mostly
+automated.
+
+### src/qt/bitcoin.qrc
+
+This file must be updated whenever a new translation is added. Please note that
+files must end with `.qm`, not `.ts`.
+
+    <qresource prefix="/translations">
+        <file alias="en">locale/bitcoin_en.qm</file>
+        ...
+    </qresource>
+
+### src/qt/locale/
+
+This directory contains all translations. Filenames must adhere to this format:
+
+    bitcoin_xx_YY.ts or bitcoin_xx.ts
+
+#### Source file
+
+`src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the
+source for all other translations. Whenever a string in the code is changed
+this file must be updated to reflect those changes. Usually, this can be
+accomplished by running `lupdate`.
+
+Syncing with transifex
+----------------------
+
+We are using http://transifex.net as a frontend for translating the client.
+
+https://www.transifex.net/projects/p/bitcoin/resource/tx/
+
+The "transifex client" (see: http://help.transifex.net/features/client/)
+will help with fetching new translations from transifex. Use the following
+config to be able to connect with the client.
+
+### .tx/config
+
+    [main]
+    host = https://www.transifex.net
+
+    [bitcoin.tx]
+    file_filter = src/qt/locale/bitcoin_<lang>.ts
+    source_file = src/qt/locale/bitcoin_en.ts
+    source_lang = en
+
+### Fetching new translations
+
+1. `tx pull -a`
+2. update `src/qt/bitcoin.qrc`
+3. `git add` new translations from `src/qt/locale/`
diff --git a/locale/cs/LC_MESSAGES/bitcoin.mo b/locale/cs/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 8b6e444..0000000
Binary files a/locale/cs/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/cs/LC_MESSAGES/bitcoin.po b/locale/cs/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 2275d90..0000000
+++ /dev/null
@@ -1,1079 +0,0 @@
-# This file is distributed under the same license as the Bitcoin package.
-# xHire <xhire@mujmalysvet.cz>, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-08-16 15:51+0100\n"
-"PO-Revision-Date: 2011-08-16 16:03+0100\n"
-"Last-Translator: xHire <xhire@mujmalysvet.cz>\n"
-"Language-Team: \n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/uibase.cpp:25
-#: ../../../src/ui.cpp:2985
-msgid "E&xit"
-msgstr "&Konec"
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Soubor"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "Tvá Bitcoinová &adresa..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "&Zašifruj peněženku..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "Změň &heslo pro šifrování peněženky..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "M&ožnosti"
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "Nas&tavení"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "&O programu"
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "&Nápověda"
-
-#: ../../../src/uibase.cpp:61
-#: ../../../src/ui.cpp:2143
-#: ../../../src/ui.cpp:2148
-#: ../../../src/ui.cpp:2153
-#: ../../../src/ui.cpp:2202
-msgid "Send Coins"
-msgstr "Pošli mince"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "Adresář"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Tvá Bitcoinová adresa:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " &Nová..."
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " &Kopírovat do schránky"
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "Stav účtu:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr " Vše"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr " Odeslané"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr " Přijaté"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr " Pracuje se na tom"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "Všechny transakce"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Odeslané/Přijaté"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "Odeslané"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "Přijaté"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "&Budiž"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "&Spustit Bitcoin při startu systému"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimalizovávat do ikony v panelu"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "Namapovat port přes &UPnP"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "Zavřením &minimalizovat do ikony"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "&Připojit přes socks4 proxy (vyžaduje restart aplikace):"
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "&IP adresa proxy:"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " &Port:"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Dobrovolný transakční poplatek za každý započatý KB napomáhá tomu, aby tvé transakce byly rychle zpracovány. Většina transakcí má do 1 KB. Doporučená výše poplatku je 0.01."
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "Výše transakčního poplatku:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "&Zrušit"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "&Použít"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin"
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "verze"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Vývojáři Bitcoinu\n"
-"\n"
-"Tohle je experimentální program.\n"
-"\n"
-"Šířen pod licencí MIT/X11, viz přiložený soubor license.txt nebo \n"
-"http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití \n"
-"v OpenSSL Toolkitu (http://www.openssl.org/) a kryptografický program od \n"
-"Erika Younga (eay@cryptsoft.com) a program UPnP od Thomase Bernarda."
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Vlož Bitcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "&Komu:"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "&Vložit"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr " &Adresář..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "&Částka"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "&Převod:"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "&Poslat"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Připojuji..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Tohle jsou tvé Bitcoinové adresy na příjem plateb.  Asi budeš chtít dát jinou adresu každému odesílateli, abys věděl, kdo ti kolik platil.  Označená adresa bude zobrazena v hlavním okně."
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "&Upravit..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " &Nová adresa..."
-
-#: ../../../src/uibase.cpp:847
-#: ../../../src/ui.cpp:2620
-msgid "Bitcoin Address"
-msgstr "Bitcoinová adresa"
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "Cizí adresy (pro odesílání)"
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Tohle jsou tvé Bitcoinové adresy na příjem plateb.  Můžeš dát jinou adresu každému odesílateli, abys věděl, kdo ti kolik platil.  Označená adresa bude zobrazena v hlavním okně."
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "Tvoje adresy (pro příjem)"
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "&Smazat"
-
-#: ../../../src/rpc.cpp:2088
-#: ../../../src/rpc.cpp:2090
-#, c-format
-msgid "To use the %s option"
-msgstr "Pro použití volby %s"
-
-#: ../../../src/rpc.cpp:2092
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Varování: %s, musíš nastavit rpcpassword=<heslo>\n"
-"v konfiguračním souboru: %s\n"
-"Pokud tenhle soubor neexistuje, vytvoř ho s oprávněním pro čtení pouze pro vlastníka.\n"
-
-#: ../../../src/rpc.cpp:2265
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Musíš nastavit rpcpassword=<heslo> v konfiguračním souboru:\n"
-"%s\n"
-"Pokud tenhle soubor neexistuje, vytvoř ho s oprávněním pro čtení pouze pro vlastníka."
-
-#: ../../../src/util.cpp:870
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Varování: Prosím zkontroluj, že datum a čas jsou na tvém počítači správně nastaveny. Pokud jsou nastaveny špatně, Bitcoin nebude fungovat správně."
-
-#: ../../../src/util.cpp:904
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/wallet.cpp:1084
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "Chyba: Peněženka je zamčená, takže není možné vytvořit transakci"
-
-#: ../../../src/wallet.cpp:1092
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Chyba: Tato transakce vyžaduje transakční poplatek nejméně %s kvůli svému objemu, komplexnosti nebo utrácení nedávno přijaté hotovosti"
-
-#: ../../../src/wallet.cpp:1094
-msgid "Error: Transaction creation failed  "
-msgstr "Chyba: Vytvoření transakce selhalo"
-
-#: ../../../src/wallet.cpp:1100
-#: ../../../src/ui.cpp:2176
-#: ../../../src/ui.cpp:2185
-#: ../../../src/ui.cpp:2336
-#: ../../../src/ui.cpp:2500
-msgid "Sending..."
-msgstr "Posílám..."
-
-#: ../../../src/wallet.cpp:1104
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Chyba: Transakce byla odmítnuta.  Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této."
-
-#: ../../../src/wallet.cpp:1117
-msgid "Invalid amount"
-msgstr "Neplatná částka"
-
-#: ../../../src/wallet.cpp:1119
-#: ../../../src/ui.cpp:2403
-#: ../../../src/ui.cpp:2474
-msgid "Insufficient funds"
-msgstr "Nedostatek peněz"
-
-#: ../../../src/ui.cpp:217
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Tahle transakce přesahuje velikostní limit.  Pořád ji ale můžeš poslat, pokud za ni zaplatíš poplatek %s, který půjde uzlům, které tvou transakci zpracují, a navíc tak podpoříš síť.  Chceš zaplatit poplatek?"
-
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1247
-msgid "Enter the current passphrase to the wallet."
-msgstr "Zadej platné heslo pro peněženku."
-
-#: ../../../src/ui.cpp:262
-#: ../../../src/ui.cpp:1183
-#: ../../../src/ui.cpp:1200
-#: ../../../src/ui.cpp:1248
-#: ../../../src/ui.cpp:1274
-#: ../../../src/ui.cpp:1294
-msgid "Passphrase"
-msgstr "Heslo"
-
-#: ../../../src/ui.cpp:268
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "Zadej platné heslo pro dešifrování peněženky."
-
-#: ../../../src/ui.cpp:276
-#: ../../../src/ui.cpp:1259
-#: ../../../src/ui.cpp:1316
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "Nezadal jsi správné heslo pro dešifrování peněženky."
-
-#: ../../../src/ui.cpp:353
-msgid "Status"
-msgstr "Stav"
-
-#: ../../../src/ui.cpp:354
-msgid "Date"
-msgstr "Datum"
-
-#: ../../../src/ui.cpp:355
-msgid "Description"
-msgstr "Popis"
-
-#: ../../../src/ui.cpp:356
-msgid "Debit"
-msgstr "Výdaje"
-
-#: ../../../src/ui.cpp:357
-msgid "Credit"
-msgstr "Příjmy"
-
-#: ../../../src/ui.cpp:568
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Otevřeno pro %d bloků"
-
-#: ../../../src/ui.cpp:570
-#, c-format
-msgid "Open until %s"
-msgstr "Otřevřeno dokud %s"
-
-#: ../../../src/ui.cpp:576
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/offline?"
-
-#: ../../../src/ui.cpp:578
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/nepotvrzeno"
-
-#: ../../../src/ui.cpp:580
-#, c-format
-msgid "%d confirmations"
-msgstr "%d potvrzení"
-
-#: ../../../src/ui.cpp:665
-msgid "Generated"
-msgstr "Vygenerováno"
-
-#: ../../../src/ui.cpp:673
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Vygenerováno (%s dozraje po %d blocích)"
-
-#: ../../../src/ui.cpp:677
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Vygenerovaný - Varování: Tehnle blok nebyl obdržen žádným jiným uzlem a pravděpodobně nebude akceptován!"
-
-#: ../../../src/ui.cpp:681
-msgid "Generated (not accepted)"
-msgstr "Vygenerováno (neakceptováno)"
-
-#: ../../../src/ui.cpp:691
-msgid "From: "
-msgstr "Od: "
-
-#: ../../../src/ui.cpp:715
-msgid "Received with: "
-msgstr "Přijato adresou: "
-
-#: ../../../src/ui.cpp:760
-msgid "Payment to yourself"
-msgstr "Platba pro sebe sama"
-
-#: ../../../src/ui.cpp:794
-msgid "To: "
-msgstr "Pro: "
-
-#: ../../../src/ui.cpp:1109
-msgid "    Generating"
-msgstr "    Generuji"
-
-#: ../../../src/ui.cpp:1111
-msgid "(not connected)"
-msgstr "(nepřipojen)"
-
-#: ../../../src/ui.cpp:1114
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d spojení     %d bloků     %d transakcí"
-
-#: ../../../src/ui.cpp:1171
-msgid "Wallet already encrypted."
-msgstr "Peněženka je už zašifrovaná."
-
-#: ../../../src/ui.cpp:1182
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"Zadej nové heslo pro peněženku.\n"
-"Použij alespoň 10 náhodných znaků nebo alespoň 8 slov."
-
-#: ../../../src/ui.cpp:1189
-#: ../../../src/ui.cpp:1282
-msgid "Error: The supplied passphrase was too short."
-msgstr "Chyba: Zadané heslo je příliš krátké."
-
-#: ../../../src/ui.cpp:1193
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"VAROVÁNÍ: Pokud zašifruješ peněženku a ztratíš či zapomeneš heslo, PŘIJDEŠ O VŠECHNY BITCOINY!\n"
-"Jsi si jistý, že chceš peněženku zašifrovat?"
-
-#: ../../../src/ui.cpp:1199
-msgid "Please re-enter your new wallet passphrase."
-msgstr "Zadej ještě jednou nové heslo pro peněženku."
-
-#: ../../../src/ui.cpp:1208
-#: ../../../src/ui.cpp:1304
-msgid "Error: the supplied passphrases didn't match."
-msgstr "Chyba: zadaná hesla nejsou shodná."
-
-#: ../../../src/ui.cpp:1218
-msgid "Wallet encryption failed."
-msgstr "Zašifrování peněženky selhalo."
-
-#: ../../../src/ui.cpp:1225
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"Peněženka je zašifrována.\n"
-"Pamatuj, že pouhé šifrování peněženky nemůže plně ochránit tvé bitcoiny před krádeží malwarem, kterým se může počítač nakazit."
-
-#: ../../../src/ui.cpp:1236
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "Peněženka není zašifrovaná, musíš ji prvně zašifrovat."
-
-#: ../../../src/ui.cpp:1273
-msgid "Enter the new passphrase for the wallet."
-msgstr "Zadej nové heslo pro peněženku."
-
-#: ../../../src/ui.cpp:1293
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "Zadej ještě jednou nové heslo pro peněženku."
-
-#: ../../../src/ui.cpp:1325
-msgid "Wallet Passphrase Changed."
-msgstr "Heslo peněženky bylo změněno."
-
-#: ../../../src/ui.cpp:1382
-#: ../../../src/ui.cpp:2815
-msgid "New Receiving Address"
-msgstr "Nová Bitcoinová adresa"
-
-#: ../../../src/ui.cpp:1383
-#: ../../../src/ui.cpp:2816
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Měl bys vždy použít novou adresu pro každou platbu, kterou přijímáš.\n"
-"\n"
-"Označení"
-
-#: ../../../src/ui.cpp:1467
-msgid "<b>Status:</b> "
-msgstr "<b>Stav:</b> "
-
-#: ../../../src/ui.cpp:1472
-msgid ", has not been successfully broadcast yet"
-msgstr ", ještě nebylo rozesláno"
-
-#: ../../../src/ui.cpp:1474
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", rozesláno přes %d uzel"
-
-#: ../../../src/ui.cpp:1476
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", rozesláno přes %d uzlů"
-
-#: ../../../src/ui.cpp:1480
-msgid "<b>Date:</b> "
-msgstr "<b>Datum:</b> "
-
-#: ../../../src/ui.cpp:1488
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Zdroj:</b> Vygenerováno<br>"
-
-#: ../../../src/ui.cpp:1494
-#: ../../../src/ui.cpp:1511
-msgid "<b>From:</b> "
-msgstr "<b>Od:</b> "
-
-#: ../../../src/ui.cpp:1511
-msgid "unknown"
-msgstr "neznámo"
-
-#: ../../../src/ui.cpp:1512
-#: ../../../src/ui.cpp:1536
-#: ../../../src/ui.cpp:1595
-msgid "<b>To:</b> "
-msgstr "<b>Pro:</b> "
-
-#: ../../../src/ui.cpp:1515
-msgid " (yours, label: "
-msgstr " (tvoje, označení: "
-
-#: ../../../src/ui.cpp:1517
-msgid " (yours)"
-msgstr " (tvoje)"
-
-#: ../../../src/ui.cpp:1554
-#: ../../../src/ui.cpp:1566
-#: ../../../src/ui.cpp:1612
-#: ../../../src/ui.cpp:1629
-msgid "<b>Credit:</b> "
-msgstr "<b>Příjem:</b> "
-
-#: ../../../src/ui.cpp:1556
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s dozraje po %d blocích)"
-
-#: ../../../src/ui.cpp:1558
-msgid "(not accepted)"
-msgstr "(neakceptováno)"
-
-#: ../../../src/ui.cpp:1603
-#: ../../../src/ui.cpp:1611
-#: ../../../src/ui.cpp:1626
-msgid "<b>Debit:</b> "
-msgstr "<b>Výdaj:</b> "
-
-#: ../../../src/ui.cpp:1617
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Transakční poplatek:</b> "
-
-#: ../../../src/ui.cpp:1633
-msgid "<b>Net amount:</b> "
-msgstr "<b>Čistá částka:</b> "
-
-#: ../../../src/ui.cpp:1640
-msgid "Message:"
-msgstr "Zpráva:"
-
-#: ../../../src/ui.cpp:1642
-msgid "Comment:"
-msgstr "Komentář:"
-
-#: ../../../src/ui.cpp:1645
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Vygenerované mince musí čekat 120 bloků, než mohou být utraceny.  Když jsi vygeneroval tenhle blok, tak byl rozposlán do sítě, aby byl přidán do řetězce bloků.  Pokud se mu nepodaří dostat se do řetězce, změní se na \"neakceptovaný\" a nebude utratitelný.  To se občas může přihodit, pokud jiný uzel vygeneruje blok zhruba ve stejném okamžiku jako ty."
-
-#: ../../../src/ui.cpp:1825
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Nemohu zapisovat do souboru autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1861
-msgid "Main"
-msgstr "Hlavní"
-
-#: ../../../src/ui.cpp:1871
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Spustit Bitcoin při startu okenního systému"
-
-#: ../../../src/ui.cpp:1878
-msgid "&Minimize on close"
-msgstr "&Zavřením pouze skrýt"
-
-#: ../../../src/ui.cpp:2020
-#, c-format
-msgid "version %s"
-msgstr "verze %s"
-
-#: ../../../src/ui.cpp:2143
-msgid "Error in amount  "
-msgstr "Chyba v částce"
-
-#: ../../../src/ui.cpp:2148
-msgid "Amount exceeds your balance  "
-msgstr "Částka překračuje stav účtu"
-
-#: ../../../src/ui.cpp:2153
-msgid "Total exceeds your balance when the "
-msgstr "Celková částka přesahuje stav tvého účtu, když "
-
-#: ../../../src/ui.cpp:2153
-msgid " transaction fee is included  "
-msgstr " transakční poplatek je zahrnut"
-
-#: ../../../src/ui.cpp:2176
-msgid "Payment sent  "
-msgstr "Platba odeslána"
-
-#: ../../../src/ui.cpp:2202
-msgid "Invalid address  "
-msgstr "Neplatná adresa"
-
-#: ../../../src/ui.cpp:2257
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Posílám %s %s"
-
-#: ../../../src/ui.cpp:2330
-#: ../../../src/ui.cpp:2363
-msgid "CANCELLED"
-msgstr "ZRUŠENO"
-
-#: ../../../src/ui.cpp:2334
-msgid "Cancelled"
-msgstr "Zrušeno"
-
-#: ../../../src/ui.cpp:2336
-msgid "Transfer cancelled  "
-msgstr "Převod zrušen"
-
-#: ../../../src/ui.cpp:2389
-msgid "Error: "
-msgstr "Chyba: "
-
-#: ../../../src/ui.cpp:2408
-msgid "Connecting..."
-msgstr "Připojuji..."
-
-#: ../../../src/ui.cpp:2413
-msgid "Unable to connect"
-msgstr "Nemohu se připojit"
-
-#: ../../../src/ui.cpp:2418
-msgid "Requesting public key..."
-msgstr "Požaduji veřejný klíč..."
-
-#: ../../../src/ui.cpp:2430
-msgid "Received public key..."
-msgstr "Přijat veřejný klíč..."
-
-#: ../../../src/ui.cpp:2444
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Příjemce neakceptuje transakce poslané IP adresou"
-
-#: ../../../src/ui.cpp:2446
-msgid "Transfer was not accepted"
-msgstr "Převod nebyl akceptován"
-
-#: ../../../src/ui.cpp:2455
-msgid "Invalid response received"
-msgstr "Přišla neplatná odpověď"
-
-#: ../../../src/ui.cpp:2470
-msgid "Creating transaction..."
-msgstr "Vytvářím transakci..."
-
-#: ../../../src/ui.cpp:2489
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Tato transakce vyžaduje transakční poplatek nejméně %s kvůli svému objemu, komplexnosti nebo utrácení nedávno přijaté hotovosti"
-
-#: ../../../src/ui.cpp:2491
-msgid "Transaction creation failed"
-msgstr "Vytvoření transakce selhalo"
-
-#: ../../../src/ui.cpp:2502
-msgid "Transaction aborted"
-msgstr "Transakce zrušena"
-
-#: ../../../src/ui.cpp:2510
-msgid "Lost connection, transaction cancelled"
-msgstr "Spojení se ztratilo, takže transakce byla zrušena"
-
-#: ../../../src/ui.cpp:2526
-msgid "Sending payment..."
-msgstr "Posílám platbu..."
-
-#: ../../../src/ui.cpp:2532
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Transakce byla odmítnuta.  Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této."
-
-#: ../../../src/ui.cpp:2541
-msgid "Waiting for confirmation..."
-msgstr "Čekám na potvrzení..."
-
-#: ../../../src/ui.cpp:2559
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Platba byla poslána, ale příjemce není schopen ji ověřit.\n"
-"Transakce je zaznamenána a bude připsána příjemci,\n"
-"ale poznámka u platby bude prázdná."
-
-#: ../../../src/ui.cpp:2568
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Platba byla odeslána, ale přišla neplatná odpověď"
-
-#: ../../../src/ui.cpp:2574
-msgid "Payment completed"
-msgstr "Platba je kompletní"
-
-#: ../../../src/ui.cpp:2616
-#: ../../../src/ui.cpp:2763
-#: ../../../src/ui.cpp:2803
-msgid "Name"
-msgstr "Jméno"
-
-#: ../../../src/ui.cpp:2617
-#: ../../../src/ui.cpp:2763
-#: ../../../src/ui.cpp:2803
-msgid "Address"
-msgstr "Adresa"
-
-#: ../../../src/ui.cpp:2619
-#: ../../../src/ui.cpp:2775
-msgid "Label"
-msgstr "Označení"
-
-#: ../../../src/ui.cpp:2745
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Tohle je jedna z tvých vlastních adres pro příjem plateb a nemůže být zadána do adresáře."
-
-#: ../../../src/ui.cpp:2763
-#: ../../../src/ui.cpp:2769
-msgid "Edit Address"
-msgstr "Upravit adresu"
-
-#: ../../../src/ui.cpp:2775
-msgid "Edit Address Label"
-msgstr "Upravit označení adresy"
-
-#: ../../../src/ui.cpp:2803
-#: ../../../src/ui.cpp:2809
-msgid "Add Address"
-msgstr "Přidat adresu"
-
-#: ../../../src/ui.cpp:2897
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2899
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Generování"
-
-#: ../../../src/ui.cpp:2901
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (nepřipojen)"
-
-#: ../../../src/ui.cpp:2980
-msgid "&Open Bitcoin"
-msgstr "&Otevřít Bitcoin"
-
-#: ../../../src/ui.cpp:2981
-msgid "&Send Bitcoins"
-msgstr "&Poslat Bitcoiny"
-
-#: ../../../src/ui.cpp:2982
-msgid "O&ptions..."
-msgstr "&Možnosti..."
-
-#: ../../../src/ui.cpp:3211
-msgid "Program has crashed and will terminate.  "
-msgstr "Program havaroval a bude ukončen."
-
-#: ../../../src/init.cpp:163
-msgid "Bitcoin version"
-msgstr "Bitcoin verze"
-
-#: ../../../src/init.cpp:164
-msgid "Usage:"
-msgstr "Užití:"
-
-#: ../../../src/init.cpp:166
-msgid "Send command to -server or bitcoind\n"
-msgstr "Poslat příkaz pro -server nebo bitcoind\n"
-
-#: ../../../src/init.cpp:167
-msgid "List commands\n"
-msgstr "Výpis příkazů\n"
-
-#: ../../../src/init.cpp:168
-msgid "Get help for a command\n"
-msgstr "Získat nápovědu pro příkaz\n"
-
-#: ../../../src/init.cpp:169
-msgid "Options:\n"
-msgstr "Možnosti:\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Konfigurační soubor (výchozí: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "PID soubor (výchozí: bitcoind.pid)\n"
-
-#: ../../../src/init.cpp:172
-msgid "Generate coins\n"
-msgstr "Generovat mince\n"
-
-#: ../../../src/init.cpp:173
-msgid "Don't generate coins\n"
-msgstr "Negenerovat mince\n"
-
-#: ../../../src/init.cpp:174
-msgid "Start minimized\n"
-msgstr "Startovat minimalizovaně\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify data directory\n"
-msgstr "Adresář pro data\n"
-
-#: ../../../src/init.cpp:176
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Zadej časový limit spojení (v milisekundách)\n"
-
-#: ../../../src/init.cpp:177
-msgid "Connect through socks4 proxy\n"
-msgstr "Připojovat se skrz socks4 proxy\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Povolit DNS dotazy pro addnode (přidání uzlu) a connect (připojení)\n"
-
-#: ../../../src/init.cpp:179
-msgid "Add a node to connect to\n"
-msgstr "Přidat uzel, ke kterému se připojit\n"
-
-#: ../../../src/init.cpp:180
-msgid "Connect only to the specified node\n"
-msgstr "Připojovat se pouze k udanému uzlu\n"
-
-#: ../../../src/init.cpp:181
-msgid "Don't accept connections from outside\n"
-msgstr "Nepřijímat připojení zvenčí\n"
-
-#: ../../../src/init.cpp:184
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Nesnažit se použít UPnP k namapování naslouchacího portu\n"
-
-#: ../../../src/init.cpp:186
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Snažit se použít UPnP k namapování naslouchacího portu\n"
-
-#: ../../../src/init.cpp:189
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Poplatek za KB, který se přidá ke každé odeslané transakci\n"
-
-#: ../../../src/init.cpp:191
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Akceptovat příkazy z příkazové řádky a přes JSON-RPC\n"
-
-#: ../../../src/init.cpp:194
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Běžet na pozadí jako démon a akceptovat příkazy\n"
-
-#: ../../../src/init.cpp:196
-msgid "Use the test network\n"
-msgstr "Použít testovací síť\n"
-
-#: ../../../src/init.cpp:197
-msgid "Username for JSON-RPC connections\n"
-msgstr "Uživatelské jméno pro JSON-RPC spojení\n"
-
-#: ../../../src/init.cpp:198
-msgid "Password for JSON-RPC connections\n"
-msgstr "Heslo pro JSON-RPC spojení\n"
-
-#: ../../../src/init.cpp:199
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Čekat na JSON-RPC spojení na <portu> (výchozí: 8332)\n"
-
-#: ../../../src/init.cpp:200
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Povolit JSON-RPC spojení ze specifikované IP adresy\n"
-
-#: ../../../src/init.cpp:201
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Posílat příkazy uzlu běžícím na <ip> (výchozí: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Nastavit zásobník klíčů na velikost <n> (výchozí: 100)\n"
-
-#: ../../../src/init.cpp:203
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Přeskenovat řetězec bloků na chybějící transakce peněženky\n"
-
-#: ../../../src/init.cpp:207
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"Možnosti SSL: (viz instrukce nastavení SSL v Bitcoin Wiki)\n"
-
-#: ../../../src/init.cpp:208
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Použít OpenSSL (https) pro JSON-RPC spojení\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Soubor se serverovým certifikátem (výchozí: server.cert)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Server private key (default: server.pem)\n"
-msgstr "Soubor se serverovým soukromým klíčem (výchozí: server.pem)\n"
-
-#: ../../../src/init.cpp:211
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Akceptovatelné šifry (výchozí: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:215
-msgid "This help message\n"
-msgstr "Tato nápověda\n"
-
-#: ../../../src/init.cpp:353
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Nedaří se mi získat zámek na datový adresář %s. Bitcoin pravděpodobně už jednou běží."
-
-#: ../../../src/init.cpp:379
-msgid "Error loading addr.dat      \n"
-msgstr "Chyba při načítání addr.dat      \n"
-
-#: ../../../src/init.cpp:385
-msgid "Error loading blkindex.dat      \n"
-msgstr "Chyba při načítání blkindex.dat      \n"
-
-#: ../../../src/init.cpp:396
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "Chyba při načítání wallet.dat: peněženka je poškozená      \n"
-
-#: ../../../src/init.cpp:398
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi Bitcoinu      \n"
-
-#: ../../../src/init.cpp:400
-msgid "Error loading wallet.dat      \n"
-msgstr "Chyba při načítání wallet.dat      \n"
-
-#: ../../../src/init.cpp:489
-msgid "Invalid -proxy address"
-msgstr "Neplatná -proxy adresa"
-
-#: ../../../src/init.cpp:514
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Neplatná částka pro -paytxfee=<částka>"
-
-#: ../../../src/init.cpp:518
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Varování: -paytxfee je nastaveno velmi vysoko. Toto je transakční poplatek, který zaplatíš za každou poslanou transakci."
-
-#: ../../../src/net.cpp:1622
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Nedaří se mi připojit na port %d na tomhle počítači.  Bitcoin už pravděpodobně jednou běží."
-
-#: ../../../src/main.cpp:1437
-msgid "Warning: Disk space is low  "
-msgstr "Upozornění: Na disku je málo místa"
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "Detaily transakce"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "Možnosti"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "O Bitcoinu"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "Tvá Bitcoinová adresa"
-
-#~ msgid "Invalid bitcoin address"
-#~ msgstr "Neplatná Bitcoinová adresa"
diff --git a/locale/de/LC_MESSAGES/bitcoin.mo b/locale/de/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index bd03fd2..0000000
Binary files a/locale/de/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/de/LC_MESSAGES/bitcoin.po b/locale/de/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 59381c1..0000000
+++ /dev/null
@@ -1,1081 +0,0 @@
-# Jakob Kramer <censored@gmail.com>, 2011.
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-08-07 01:46+0100\n"
-"PO-Revision-Date: 2011-08-07 01:47+0100\n"
-"Last-Translator: Michael Bemmerl <mail@mx-server.de>\n"
-"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.6.1\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/init.cpp:162
-msgid "Bitcoin version"
-msgstr "Bitcoin Version"
-
-#: ../../../src/init.cpp:163
-msgid "Usage:"
-msgstr "Verwendung:"
-
-#: ../../../src/init.cpp:165
-msgid "Send command to -server or bitcoind\n"
-msgstr "Sende Befehl zu -server oder bitcoind\n"
-
-#: ../../../src/init.cpp:166
-msgid "List commands\n"
-msgstr "Liste Befehle auf\n"
-
-#: ../../../src/init.cpp:167
-msgid "Get help for a command\n"
-msgstr "Hilfe für einen Befehl erhalten\n"
-
-#: ../../../src/init.cpp:168
-msgid "Options:\n"
-msgstr "Optionen:\n"
-
-#: ../../../src/init.cpp:169
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Konfigurationsdatei bestimmen (Standard: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "pid-Datei bestimmen (Standard: bitcoind.pid)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Generate coins\n"
-msgstr "Münzen erzeugen\n"
-
-#: ../../../src/init.cpp:172
-msgid "Don't generate coins\n"
-msgstr "Keine Münzen erzeugen\n"
-
-#: ../../../src/init.cpp:173
-msgid "Start minimized\n"
-msgstr "Minimiert starten\n"
-
-#: ../../../src/init.cpp:174
-msgid "Specify data directory\n"
-msgstr "Datenverzeichnis festlegen\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Verbindungs-Timeout in Milisekunden\n"
-
-#: ../../../src/init.cpp:176
-msgid "Connect through socks4 proxy\n"
-msgstr "Socks4-Proxy verwenden\n"
-
-#: ../../../src/init.cpp:177
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "DNS-Auflösung für addnode und connect erlauben\n"
-
-#: ../../../src/init.cpp:178
-msgid "Add a node to connect to\n"
-msgstr "Einen Teilnehmer hinzufügen, zu dem verbunden werden soll\n"
-
-#: ../../../src/init.cpp:179
-msgid "Connect only to the specified node\n"
-msgstr "Nur zu dem angegebenen Teilnehmer verbinden\n"
-
-#: ../../../src/init.cpp:180
-msgid "Don't accept connections from outside\n"
-msgstr "Akzeptiere keine externen Verbindungen\n"
-
-#: ../../../src/init.cpp:183
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Versuche nicht, UPnP zur Portweiterleitung zu nutzen\n"
-
-#: ../../../src/init.cpp:185
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Versuche, UPnP zur Portweiterleitung zu nutzen\n"
-
-#: ../../../src/init.cpp:188
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Gebühr pro KB für Überweisungen, die Sie tätigen\n"
-
-#: ../../../src/init.cpp:190
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Akzeptiere Kommandozeile und JSON-RPC-Befehle\n"
-
-#: ../../../src/init.cpp:193
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Laufe im Hintergrund als Daemon und akzeptiere Befehle\n"
-
-#: ../../../src/init.cpp:195
-msgid "Use the test network\n"
-msgstr "Nutze das Testnetzwerk\n"
-
-#: ../../../src/init.cpp:196
-msgid "Username for JSON-RPC connections\n"
-msgstr "Benutzername für JSON-RPC-Verbindungen\n"
-
-#: ../../../src/init.cpp:197
-msgid "Password for JSON-RPC connections\n"
-msgstr "Passwort für JSON-RPC-Verbindungen\n"
-
-#: ../../../src/init.cpp:198
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Horche für JSON-RPC-Verbindungen auf <port> (Standard: 8332)\n"
-
-#: ../../../src/init.cpp:199
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Erlaube JSON-RPC-Verbindungen von bestimmter IP-Adresse\n"
-
-#: ../../../src/init.cpp:200
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Sende Befehle zum Knoten mit <ip> (Standard: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:201
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Setze Key-Pool-Größe auf <n> (Standard: 100)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Frage die Block-Kette nach fehlenden Brieftaschen-Überweisungen ab\n"
-
-#: ../../../src/init.cpp:206
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"SSL-Optionen: (siehe das Bitcoin-Wiki für SSL-Installationsanleitungen)\n"
-
-#: ../../../src/init.cpp:207
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Nutze OpenSSL (https) für JSON-RPC-Verbindungen\n"
-
-#: ../../../src/init.cpp:208
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Server-Zertifikatsdatei (Standard: server.cert)\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server private key (default: server.pem)\n"
-msgstr "Server-Geheimschlüssel (Standard: server.pem)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Anzunehmende Verschlüsselungen (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:214
-msgid "This help message\n"
-msgstr "Diese Anleitung\n"
-
-#: ../../../src/init.cpp:352
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Erhalte keine Datensperre für das Datenverzeichnis %s. Bitcoin läuft wahrscheinlich bereits."
-
-#: ../../../src/init.cpp:378
-msgid "Error loading addr.dat      \n"
-msgstr "Fehler beim Laden von addr.dat      \n"
-
-#: ../../../src/init.cpp:384
-msgid "Error loading blkindex.dat      \n"
-msgstr "Fehler beim Laden von blkindex.dat      \n"
-
-#: ../../../src/init.cpp:395
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "Fehler beim Laden von wallet.dat: Brieftasche beschädigt      \n"
-
-#: ../../../src/init.cpp:397
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "Fehler beim Laden von wallet.dat: Die Brieftasche benötigt eine neuere Version von Bitcoin      \n"
-
-#: ../../../src/init.cpp:399
-msgid "Error loading wallet.dat      \n"
-msgstr "Fehler beim Laden von wallet.dat      \n"
-
-#: ../../../src/init.cpp:488
-msgid "Invalid -proxy address"
-msgstr "Ungültige -Proxy Adresse"
-
-#: ../../../src/init.cpp:513
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Ungültiger Betrag für -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:517
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Warnung: -paytxfee ist sehr hoch gesetzt. Das ist die Überweisungsgebühr, die Sie für das Senden einer Überweisung zahlen."
-
-#: ../../../src/main.cpp:1427
-msgid "Warning: Disk space is low  "
-msgstr "Warnung: Festplatte fast voll  "
-
-#: ../../../src/net.cpp:1616
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Kann nicht zu Port %d auf diesem Computer verbinden. Bitcoin läuft wahrscheinlich bereits."
-
-#: ../../../src/rpc.cpp:2086
-#: ../../../src/rpc.cpp:2088
-#, c-format
-msgid "To use the %s option"
-msgstr "Um die %s-Option zu nutzen"
-
-#: ../../../src/rpc.cpp:2090
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Warnung: %s, müssen Sie rpcpassword=<password>\n"
-"in der Konfigurationsdatei %s einstellen.\n"
-"Wenn die Datei nicht existiert, erstellen Sie sie mit ausschließlich Besitzer-Leserechten.\n"
-
-#: ../../../src/rpc.cpp:2263
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Sie müssen rpcpassword=<password> in der Konfigurationsdatei\n"
-"\"%s\" einstellen.\n"
-"Wenn die Datei nicht existiert, erstellen Sie sie mit ausschließlich Besitzer-Leserechten."
-
-#: ../../../src/ui.cpp:216
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Diese Überweisung übersteigt das Betragslimit. Sie können sie trotzdem tätigen, aber es wird eine Gebühr von %s erhoben, die an den Teilnehmer ausgeschüttet wird, der Ihre Überweisung bearbeitet und dadurch hilft, das Netzwerk am laufen zu halten. Möchten Sie die Gebühr entrichten?"
-
-#: ../../../src/ui.cpp:260
-#: ../../../src/ui.cpp:1246
-msgid "Enter the current passphrase to the wallet."
-msgstr "Geben Sie die derzeitige Passphrase der Brieftasche ein."
-
-# See http://dict.leo.org/forum/viewUnsolvedquery.php?idThread=465865&idForum=2&lp=ende&lang=de
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1182
-#: ../../../src/ui.cpp:1199
-#: ../../../src/ui.cpp:1247
-#: ../../../src/ui.cpp:1273
-#: ../../../src/ui.cpp:1293
-msgid "Passphrase"
-msgstr "Passphrase"
-
-#: ../../../src/ui.cpp:267
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "Bitte geben Sie die derzeitige Passphrase zur Entschlüsselung der Brieftasche an."
-
-#: ../../../src/ui.cpp:275
-#: ../../../src/ui.cpp:1258
-#: ../../../src/ui.cpp:1315
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "Die eingegebene Passphrase zur Entschlüsselung der Brieftasche war inkorrekt."
-
-#: ../../../src/ui.cpp:352
-msgid "Status"
-msgstr "Status"
-
-#: ../../../src/ui.cpp:353
-msgid "Date"
-msgstr "Datum"
-
-#: ../../../src/ui.cpp:354
-msgid "Description"
-msgstr "Beschreibung"
-
-#: ../../../src/ui.cpp:355
-msgid "Debit"
-msgstr "Belastungen"
-
-#: ../../../src/ui.cpp:356
-msgid "Credit"
-msgstr "Gutschriften"
-
-#: ../../../src/ui.cpp:567
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Offen für %d Blöcke"
-
-#: ../../../src/ui.cpp:569
-#, c-format
-msgid "Open until %s"
-msgstr "Offen bis %s"
-
-#: ../../../src/ui.cpp:575
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/Offline?"
-
-#: ../../../src/ui.cpp:577
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/nicht bestätigt"
-
-#: ../../../src/ui.cpp:579
-#, c-format
-msgid "%d confirmations"
-msgstr "%d Bestätigungen"
-
-#: ../../../src/ui.cpp:664
-msgid "Generated"
-msgstr "Erzeugt"
-
-#: ../../../src/ui.cpp:672
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Erzeugt (%s reifen nach %d weiteren Blöcken)"
-
-#: ../../../src/ui.cpp:676
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Erzeugt - Warnung: Dieser Block wurde von keinem anderen Teilnehmer empfangen und wird wahrscheinlich nicht akzeptiert werden!"
-
-#: ../../../src/ui.cpp:680
-msgid "Generated (not accepted)"
-msgstr "Erzeugt (nicht akzeptiert)"
-
-#: ../../../src/ui.cpp:690
-msgid "From: "
-msgstr "Von: "
-
-#: ../../../src/ui.cpp:714
-msgid "Received with: "
-msgstr "Empfangen durch: "
-
-#: ../../../src/ui.cpp:759
-msgid "Payment to yourself"
-msgstr "Überweisung an Sie selbst"
-
-#: ../../../src/ui.cpp:793
-msgid "To: "
-msgstr "An: "
-
-#: ../../../src/ui.cpp:1108
-msgid "    Generating"
-msgstr "    Erzeugen"
-
-#: ../../../src/ui.cpp:1110
-msgid "(not connected)"
-msgstr "(nicht verbunden)"
-
-#: ../../../src/ui.cpp:1113
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d Verbindungen     %d Blöcke     %d Überweisungen"
-
-#: ../../../src/ui.cpp:1170
-msgid "Wallet already encrypted."
-msgstr "Brieftasche bereits verschlüsselt."
-
-#: ../../../src/ui.cpp:1181
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"Geben Sie die neue Passphrase der Brieftasche ein.\n"
-"Bitte benutzen Sie eine Passphrase mit zehn oder mehr zufällig gewählten Zeichen, oder acht oder mehr Wörter."
-
-#: ../../../src/ui.cpp:1188
-#: ../../../src/ui.cpp:1281
-msgid "Error: The supplied passphrase was too short."
-msgstr "Fehler: Die angegebene Passphrase war zu kurz. "
-
-#: ../../../src/ui.cpp:1192
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"WARNUNG: Wenn Sie Ihre Brieftasche verschlüsseln und die Passphrase verlieren, werden Sie ALLE IHRE BITCOINS VERLIEREN!\n"
-"Sind Sie sicher, dass Sie Ihre Brieftasche verschlüsseln wollen?"
-
-#: ../../../src/ui.cpp:1198
-msgid "Please re-enter your new wallet passphrase."
-msgstr "Bitte geben Sie erneut Ihre neue Passphrase der Brieftasche ein."
-
-#: ../../../src/ui.cpp:1207
-#: ../../../src/ui.cpp:1303
-msgid "Error: the supplied passphrases didn't match."
-msgstr "Fehler: Die angegebenen Passphrasen stimmten nicht überein."
-
-#: ../../../src/ui.cpp:1217
-msgid "Wallet encryption failed."
-msgstr "Verschlüsselung der Brieftasche fehlgeschlagen."
-
-#: ../../../src/ui.cpp:1224
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"Brieftasche verschlüsselt.\n"
-"Beachten Sie, dass das Verschlüsseln der Brieftasche Ihre Bitcoins nicht völlig vor Diebstahl durch Schadprogramme auf Ihrem Computer schützt."
-
-#: ../../../src/ui.cpp:1235
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "Die Brieftasche ist nicht verschlüsselt, bitte verschlüsselen Sie sie erst."
-
-#: ../../../src/ui.cpp:1272
-msgid "Enter the new passphrase for the wallet."
-msgstr "Geben Sie die neue Passphrase der Brieftasche ein."
-
-#: ../../../src/ui.cpp:1292
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "Geben Sie erneut die neue Passphrase der Brieftasche ein."
-
-#: ../../../src/ui.cpp:1324
-msgid "Wallet Passphrase Changed."
-msgstr "Die Passphrase der Brieftasche wurde geändert."
-
-#: ../../../src/ui.cpp:1381
-#: ../../../src/ui.cpp:2814
-msgid "New Receiving Address"
-msgstr "&Neue Empfangs-Adresse"
-
-#: ../../../src/ui.cpp:1382
-#: ../../../src/ui.cpp:2815
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Am besten verwenden Sie für jede Zahlung, die Sie erhalten, eine neue Adresse.\n"
-"\n"
-"Beschreibung"
-
-#: ../../../src/ui.cpp:1466
-msgid "<b>Status:</b> "
-msgstr "<b>Status:</b> "
-
-#: ../../../src/ui.cpp:1471
-msgid ", has not been successfully broadcast yet"
-msgstr ", wurde noch nicht erfolgreich übertragen"
-
-#: ../../../src/ui.cpp:1473
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", durch %d Teilnehmer übertragen"
-
-#: ../../../src/ui.cpp:1475
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", durch %d Teilnehmer übertragen"
-
-#: ../../../src/ui.cpp:1479
-msgid "<b>Date:</b> "
-msgstr "<b>Datum</b> "
-
-#: ../../../src/ui.cpp:1487
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Quelle:</b> Erzeugt<br>"
-
-#: ../../../src/ui.cpp:1493
-#: ../../../src/ui.cpp:1510
-msgid "<b>From:</b> "
-msgstr "<b>Von:</b> "
-
-#: ../../../src/ui.cpp:1510
-msgid "unknown"
-msgstr "Unbekannt"
-
-#: ../../../src/ui.cpp:1511
-#: ../../../src/ui.cpp:1535
-#: ../../../src/ui.cpp:1594
-msgid "<b>To:</b> "
-msgstr "<b>An:</b> "
-
-#: ../../../src/ui.cpp:1514
-msgid " (yours, label: "
-msgstr " (Eigene, Beschreibung: "
-
-#: ../../../src/ui.cpp:1516
-msgid " (yours)"
-msgstr " (Eigene)"
-
-#: ../../../src/ui.cpp:1553
-#: ../../../src/ui.cpp:1565
-#: ../../../src/ui.cpp:1611
-#: ../../../src/ui.cpp:1628
-msgid "<b>Credit:</b> "
-msgstr "<b>Gutschrift:</b> "
-
-#: ../../../src/ui.cpp:1555
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s reifen nach %d weiteren Blöcken)"
-
-#: ../../../src/ui.cpp:1557
-msgid "(not accepted)"
-msgstr "(nicht akzeptiert)"
-
-#: ../../../src/ui.cpp:1602
-#: ../../../src/ui.cpp:1610
-#: ../../../src/ui.cpp:1625
-msgid "<b>Debit:</b> "
-msgstr "<b>Belastung:</b> "
-
-#: ../../../src/ui.cpp:1616
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Überweisungsgebühr:</b> "
-
-#: ../../../src/ui.cpp:1632
-msgid "<b>Net amount:</b> "
-msgstr "<b>Nettobetrag:</b> "
-
-#: ../../../src/ui.cpp:1639
-msgid "Message:"
-msgstr "Nachricht:"
-
-#: ../../../src/ui.cpp:1641
-msgid "Comment:"
-msgstr "Kommentar:"
-
-#: ../../../src/ui.cpp:1644
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Erzeugte Münzen müssen 120 Blöcke lang reifen. Als Sie diesen Block erzeugt haben, wurde er an alle Teilnehmer übertragen, damit er zur Block-Kette hinzugefügt werden kann. Falls der Block es nicht in die Block-Kette schafft, wird die Beschreibung zu \"nicht akzeptiert\" geändert, und Sie können die Münzen nicht ausgeben. Dies kann manchmal passieren, wenn Sie und ein anderer Teilnehmer annähernd zeitgleich einen Block erzeugen."
-
-#: ../../../src/ui.cpp:1824
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Kann Datei autostart/bitcoin.desktop nicht schreiben"
-
-#: ../../../src/ui.cpp:1860
-msgid "Main"
-msgstr "Haupt"
-
-#: ../../../src/ui.cpp:1870
-msgid "&Start Bitcoin on window system startup"
-msgstr "Bitcoin beim &Systemstart ausführen"
-
-#: ../../../src/ui.cpp:1877
-msgid "&Minimize on close"
-msgstr "Beim Schließen &minimieren"
-
-#: ../../../src/ui.cpp:2019
-#, c-format
-msgid "version %s"
-msgstr "Version %s"
-
-#: ../../../src/ui.cpp:2142
-msgid "Error in amount  "
-msgstr "Fehler in Betrag  "
-
-#: ../../../src/ui.cpp:2142
-#: ../../../src/ui.cpp:2147
-#: ../../../src/ui.cpp:2152
-#: ../../../src/ui.cpp:2201
-#: ../../../src/uibase.cpp:61
-msgid "Send Coins"
-msgstr "Überweisen"
-
-#: ../../../src/ui.cpp:2147
-msgid "Amount exceeds your balance  "
-msgstr "Der Betrag übersteigt Ihr Guthaben  "
-
-#: ../../../src/ui.cpp:2152
-msgid "Total exceeds your balance when the "
-msgstr "Der Betrag übersteigt Ihr Guthaben, wenn man die "
-
-#: ../../../src/ui.cpp:2152
-msgid " transaction fee is included  "
-msgstr " Überweisungsgebühr berücksichtigt  "
-
-#: ../../../src/ui.cpp:2175
-msgid "Payment sent  "
-msgstr "Zahlung überwiesen  "
-
-#: ../../../src/ui.cpp:2175
-#: ../../../src/ui.cpp:2184
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2499
-#: ../../../src/wallet.cpp:1099
-msgid "Sending..."
-msgstr "Überweise ..."
-
-#: ../../../src/ui.cpp:2201
-msgid "Invalid address  "
-msgstr "Ungültige Adresse  "
-
-#: ../../../src/ui.cpp:2256
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Überweise %s an %s"
-
-#: ../../../src/ui.cpp:2329
-#: ../../../src/ui.cpp:2362
-msgid "CANCELLED"
-msgstr "ANNULLIERT"
-
-#: ../../../src/ui.cpp:2333
-msgid "Cancelled"
-msgstr "Annulliert"
-
-#: ../../../src/ui.cpp:2335
-msgid "Transfer cancelled  "
-msgstr "Überweisung annulliert  "
-
-#: ../../../src/ui.cpp:2388
-msgid "Error: "
-msgstr "Fehler: "
-
-#: ../../../src/ui.cpp:2402
-#: ../../../src/ui.cpp:2473
-#: ../../../src/wallet.cpp:1118
-msgid "Insufficient funds"
-msgstr "Unzureichende Geldmittel"
-
-#: ../../../src/ui.cpp:2407
-msgid "Connecting..."
-msgstr "Verbinde ..."
-
-#: ../../../src/ui.cpp:2412
-msgid "Unable to connect"
-msgstr "Kann nicht verbinden"
-
-#: ../../../src/ui.cpp:2417
-msgid "Requesting public key..."
-msgstr "Fordere öffentlichen Schlüssel an ..."
-
-#: ../../../src/ui.cpp:2429
-msgid "Received public key..."
-msgstr "Öffentlicher Schlüssel empfangen ..."
-
-#: ../../../src/ui.cpp:2443
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Empfänger akzeptiert keine Überweisungen von IP-Adressen"
-
-#: ../../../src/ui.cpp:2445
-msgid "Transfer was not accepted"
-msgstr "Überweisung wurde nicht akzeptiert"
-
-#: ../../../src/ui.cpp:2454
-msgid "Invalid response received"
-msgstr "Ungültige Antwort erhalten"
-
-#: ../../../src/ui.cpp:2469
-msgid "Creating transaction..."
-msgstr "Erstelle Überweisung ..."
-
-#: ../../../src/ui.cpp:2488
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Diese Überweisung benötigt eine Überweisungsgebühr von mindestens %s wegen ihres Betrags, Komplexität oder der Benutzung kürzlich erhaltener Geldmittel"
-
-#: ../../../src/ui.cpp:2490
-msgid "Transaction creation failed"
-msgstr "Überweisung konnte nicht erzeugt werden."
-
-#: ../../../src/ui.cpp:2501
-msgid "Transaction aborted"
-msgstr "Überweisung abgebrochen"
-
-#: ../../../src/ui.cpp:2509
-msgid "Lost connection, transaction cancelled"
-msgstr "Verbindung verloren, Überweisungsvorgang abgebrochen"
-
-#: ../../../src/ui.cpp:2525
-msgid "Sending payment..."
-msgstr "Überweise Zahlung ..."
-
-#: ../../../src/ui.cpp:2531
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Die Überweisung wurde abgelehnt. Das kann passieren, wenn einige der Münzen in Ihrer Brieftasche bereits ausgegeben wurden, z.B. weil Sie eine Kopie der Brieftasche (wallet.dat) gemacht haben. Bitcoins, die mithilfe der Kopie ausgegeben wurden, sind in dieser Brieftasche noch nicht als ausgegeben markiert worden."
-
-#: ../../../src/ui.cpp:2540
-msgid "Waiting for confirmation..."
-msgstr "Warte auf Bestätigung ..."
-
-#: ../../../src/ui.cpp:2558
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Die Zahlung wurde überwiesen, aber der Empfänger konnte sie nicht bestätigen.\n"
-"Die Überweisung wurde gespeichert und wird dem Empfänger gutgeschrieben,\n"
-"aber die begleitende Nachricht wird leer sein."
-
-#: ../../../src/ui.cpp:2567
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Die Zahlung wurde überwiesen, aber die Antwort war fehlerhaft"
-
-#: ../../../src/ui.cpp:2573
-msgid "Payment completed"
-msgstr "Zahlung ausgeführt"
-
-#: ../../../src/ui.cpp:2615
-#: ../../../src/ui.cpp:2762
-#: ../../../src/ui.cpp:2802
-msgid "Name"
-msgstr "Name"
-
-#: ../../../src/ui.cpp:2616
-#: ../../../src/ui.cpp:2762
-#: ../../../src/ui.cpp:2802
-msgid "Address"
-msgstr "Adresse"
-
-#: ../../../src/ui.cpp:2618
-#: ../../../src/ui.cpp:2774
-msgid "Label"
-msgstr "Beschreibung"
-
-#: ../../../src/ui.cpp:2619
-#: ../../../src/uibase.cpp:847
-msgid "Bitcoin Address"
-msgstr "Bitcoin-Adresse"
-
-#: ../../../src/ui.cpp:2744
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Dies ist eine Ihrer eigenen Adressen für den Zahlungseingang und kann deshalb nicht in das Adressbuch übernommen werden.  "
-
-#: ../../../src/ui.cpp:2762
-#: ../../../src/ui.cpp:2768
-msgid "Edit Address"
-msgstr "Adresse bearbeiten"
-
-#: ../../../src/ui.cpp:2774
-msgid "Edit Address Label"
-msgstr "Beschreibung der Adresse bearbeiten"
-
-#: ../../../src/ui.cpp:2802
-#: ../../../src/ui.cpp:2808
-msgid "Add Address"
-msgstr "Adresse hinzufügen"
-
-#: ../../../src/ui.cpp:2896
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2898
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Erzeuge"
-
-#: ../../../src/ui.cpp:2900
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (nicht verbunden)"
-
-#: ../../../src/ui.cpp:2979
-msgid "&Open Bitcoin"
-msgstr "Bitcoin ö&ffnen"
-
-#: ../../../src/ui.cpp:2980
-msgid "&Send Bitcoins"
-msgstr "Bitcoins &senden"
-
-#: ../../../src/ui.cpp:2981
-msgid "O&ptions..."
-msgstr "O&ptionen ..."
-
-#: ../../../src/ui.cpp:2984
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "B&eenden"
-
-#: ../../../src/ui.cpp:3210
-msgid "Program has crashed and will terminate.  "
-msgstr "Das Programm ist abgestürzt und wird beendet.  "
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Datei"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Ihre Empfangs-Adressen..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "Bri&eftasche verschlüsseln..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "Passphrase der Vers&chlüsselung der Brieftasche ändern..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "&Optionen..."
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "&Einstellungen"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "Ü&ber..."
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "&Hilfe"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "Adressbuch"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Ihre Bitcoin-Adresse:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " &Neu... "
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " In die Zwischenablage &kopieren "
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "Kontostand:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr " Alle"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr " Überwiesen"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr " Erhalten"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr " In Bearbeitung"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "Alle Überweisungen"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Überwiesen/Erhalten"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "Überwiesen"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "Erhalten"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "Bitcoin beim &Systemstart ausführen"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "In den Infobereich statt in die Taskleiste &minimieren"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "Portweiterleitung via &UPnP"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "Beim Schließen in den Infobereich m&inimieren"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "&Per Socks4-Proxy verbinden (erfordert einen Neustart): "
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "Proxy-&IP:"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " &Port:"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Eine freiwillige Überweisungsgebühr pro KB, die dabei hilft, dass Ihre Überweisungen schnell durchgeführt werden. Die meisten Überweisungen sind 1 KB groß. Eine Gebühr von 0,01 ist empfohlen."
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "Überweisungsgebühr:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "&Anwenden"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "Version"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"Dies ist experimentelle Software.\n"
-"\n"
-"Lizensiert unter der MIT/X11 Software-Lizenz. Beachten Sie die beiliegende\n"
-"Datei license.txt oder http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Nutzung im\n"
-"OpenSSL Toolkit (http://www.openssl.org/) geschrieben wurde, sowie\n"
-"kryptographische Software von Eric Young (eay@cryptsoft.com)\n"
-"und UPnP-Software, entwickelt von Thomas Bernard."
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Geben Sie eine Bitcoin-Adresse ein (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "Überweisen &An:"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "&Einfügen"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr " Address&buch..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "&Betrag:"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "Ü&berweisung:"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "Ü&berweisen"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Verbinde ..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Dies sind Ihre Bitcoin-Adressen zum Empfang von Zahlungen. Sie sollten vielleicht jedem Überweisenden eine andere Adresse geben um nachvollziehen zu können von wem eine Zahlung stammt. Die markierte Adresse wird im Hauptfenster angezeigt."
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "&Bearbeiten..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " &Neue Adresse... "
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "Überweise"
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Dies sind Ihre Bitcoin-Adressen zum Empfang von Zahlungen. Sie können jedem Überweisenden eine andere Adresse geben um nachvollziehen zu können von wem eine Zahlung stammt. Die markierte Adresse wird im Hauptfenster angezeigt."
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "Empfange"
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "&Löschen"
-
-#: ../../../src/util.cpp:869
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Warnung: Bitte überprüfen Sie die Richtigkeit des Datums und der Uhrzeit Ihres Computers. Falls Ihre Uhr falsch läuft, wird Bitcoin nicht richtig funktionieren."
-
-#: ../../../src/util.cpp:903
-msgid "beta"
-msgstr "Beta"
-
-#: ../../../src/wallet.cpp:1083
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "Fehler: Brieftasche ist verschlossen; Überweisung konnte nicht erstellt werden  "
-
-#: ../../../src/wallet.cpp:1091
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Fehler: Diese Überweisung benötigt eine Überweisungsgebühr von mindestens %s wegen ihrer Größe, Komplexität oder der Benutzung erst kürzlich erhaltener Geldmittel  "
-
-#: ../../../src/wallet.cpp:1093
-msgid "Error: Transaction creation failed  "
-msgstr "Fehler: Überweisung konnte nicht erzeugt werden.  "
-
-#: ../../../src/wallet.cpp:1103
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Fehler: Die Überweisung wurde abgelehnt. Das kann passieren, wenn einige der Münzen in Ihrer Brieftasche bereits ausgegeben wurden, z.B. weil Sie eine Kopie der Brieftasche (wallet.dat) gemacht haben. Bitcoins, die mithilfe der Kopie ausgegeben wurden, sind in dieser Brieftasche noch nicht als ausgegeben markiert worden."
-
-#: ../../../src/wallet.cpp:1116
-msgid "Invalid amount"
-msgstr "Ungültiger Betrag"
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "Überweisungsdetails"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "Optionen"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "Über Bitcoin"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "Ihre Bitcoin-Adressen"
-
-#~ msgid "Invalid bitcoin address"
-#~ msgstr "Ungültige Bitcoin-Adresse"
diff --git a/locale/eo/LC_MESSAGES/bitcoin.mo b/locale/eo/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 5f898f2..0000000
Binary files a/locale/eo/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/eo/LC_MESSAGES/bitcoin.po b/locale/eo/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index e144cd8..0000000
+++ /dev/null
@@ -1,1029 +0,0 @@
-#\r
-# Danube <none>, 2011.\r
-#\r
-msgid ""\r
-msgstr ""\r
-"Project-Id-Version: Bitcoin 0.3.22\n"\r
-"Report-Msgid-Bugs-To: \n"\r
-"POT-Creation-Date: 2011-05-15 18:18+0100\n"\r
-"PO-Revision-Date: 2011-05-23 19:47+0200\n"\r
-"Last-Translator: Danube <none>\n"\r
-"Language-Team: Esperanto <none>\n"\r
-"Language: Esperanto\n"\r
-"MIME-Version: 1.0\n"\r
-"Content-Type: text/plain; charset=utf-8\n"\r
-"Content-Transfer-Encoding: 8bit\n"\r
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"\r
-"X-Poedit-Basepath: .\n"\r
-"Plural-Forms: j\n"\r
-"X-Poedit-Language: Esperanto\n"\r
-"X-Poedit-SearchPath-0: ../../..\n"\r
-\r
-#: ../../../src/net.cpp:1499\r
-#, c-format\r
-msgid ""\r
-"Unable to bind to port %d on this computer.  Bitcoin is probably already "\r
-"running."\r
-msgstr ""\r
-"Ne povis alligi al la porton %d ĉe ĉi tiu komputilo. Verŝajne la Bitmonero "\r
-"jam estas rulanta."\r
-\r
-#: ../../../src/ui.cpp:202\r
-#, c-format\r
-msgid ""\r
-"This transaction is over the size limit.  You can still send it for a fee of "\r
-"%s, which goes to the nodes that process your transaction and helps to "\r
-"support the network.  Do you want to pay the fee?"\r
-msgstr ""\r
-"Tiu ĉi transakcio transpasas la grandeclimiton.  Tamen vi povas sendi ĝin "\r
-"pagante transakcian koston de %s. Tiun koston ricevas la nodoj, kiuj "\r
-"realigas vian transakcion kaj kiuj helpas subteni la reton. Ĉu vi volas pagi "\r
-"la transakcian koston?"\r
-\r
-#: ../../../src/ui.cpp:301\r
-msgid "Status"\r
-msgstr "Stato"\r
-\r
-#: ../../../src/ui.cpp:302\r
-msgid "Date"\r
-msgstr "Dato"\r
-\r
-#: ../../../src/ui.cpp:303\r
-msgid "Description"\r
-msgstr "Priskribo"\r
-\r
-#: ../../../src/ui.cpp:304\r
-msgid "Debit"\r
-msgstr "Debeto"\r
-\r
-#: ../../../src/ui.cpp:305\r
-msgid "Credit"\r
-msgstr "Kredito"\r
-\r
-#: ../../../src/ui.cpp:511\r
-#, c-format\r
-msgid "Open for %d blocks"\r
-msgstr "Malfermita por %d blokoj"\r
-\r
-#: ../../../src/ui.cpp:513\r
-#, c-format\r
-msgid "Open until %s"\r
-msgstr "Malfermita ĝis %s"\r
-\r
-#: ../../../src/ui.cpp:519\r
-#, c-format\r
-msgid "%d/offline?"\r
-msgstr "%d/senkonekta?"\r
-\r
-#: ../../../src/ui.cpp:521\r
-#, c-format\r
-msgid "%d/unconfirmed"\r
-msgstr "%d/ne konfirmita"\r
-\r
-#: ../../../src/ui.cpp:523\r
-#, c-format\r
-msgid "%d confirmations"\r
-msgstr "%d konfirmoj"\r
-\r
-#: ../../../src/ui.cpp:608\r
-msgid "Generated"\r
-msgstr "Kreita"\r
-\r
-#: ../../../src/ui.cpp:616\r
-#, c-format\r
-msgid "Generated (%s matures in %d more blocks)"\r
-msgstr "Kreita (%s maturiĝos post %d blokoj)"\r
-\r
-#: ../../../src/ui.cpp:620\r
-msgid ""\r
-"Generated - Warning: This block was not received by any other nodes and will "\r
-"probably not be accepted!"\r
-msgstr ""\r
-"Kreita - Averto: Tiu bloko ne estas ricevita de iuj ajn aliaj nodoj! "\r
-"Verŝajne ĝi ne estos akceptita!"\r
-\r
-#: ../../../src/ui.cpp:624\r
-msgid "Generated (not accepted)"\r
-msgstr "Kreita (ne akceptita)"\r
-\r
-#: ../../../src/ui.cpp:634\r
-msgid "From: "\r
-msgstr "De: "\r
-\r
-#: ../../../src/ui.cpp:658\r
-msgid "Received with: "\r
-msgstr "Ricevita per: "\r
-\r
-#: ../../../src/ui.cpp:704\r
-msgid "Payment to yourself"\r
-msgstr "Pago al vi mem"\r
-\r
-#: ../../../src/ui.cpp:738\r
-msgid "To: "\r
-msgstr "Al: "\r
-\r
-#: ../../../src/ui.cpp:1053\r
-msgid "    Generating"\r
-msgstr "    Kreanta"\r
-\r
-#: ../../../src/ui.cpp:1055\r
-msgid "(not connected)"\r
-msgstr "(ne konektita)"\r
-\r
-#: ../../../src/ui.cpp:1058\r
-#, c-format\r
-msgid "     %d connections     %d blocks     %d transactions"\r
-msgstr "     %d konektoj     %d blokoj     %d transakcioj"\r
-\r
-#: ../../../src/ui.cpp:1163 ../../../src/ui.cpp:2527\r
-msgid "New Receiving Address"\r
-msgstr "Nova Ricevadreso"\r
-\r
-#: ../../../src/ui.cpp:1164 ../../../src/ui.cpp:2528\r
-msgid ""\r
-"You should use a new address for each payment you receive.\n"\r
-"\n"\r
-"Label"\r
-msgstr ""\r
-"Uzu novan adreson por ĉiu ajn pago kiu vi ricevos.\n"\r
-"\n"\r
-"Etikedo"\r
-\r
-#: ../../../src/ui.cpp:1233\r
-msgid "<b>Status:</b> "\r
-msgstr "<b>Stato:</b> "\r
-\r
-#: ../../../src/ui.cpp:1238\r
-msgid ", has not been successfully broadcast yet"\r
-msgstr ", ankoraŭ ne estas dissendita sukcese"\r
-\r
-#: ../../../src/ui.cpp:1240\r
-#, c-format\r
-msgid ", broadcast through %d node"\r
-msgstr ", estas dissendita per %d nodo"\r
-\r
-#: ../../../src/ui.cpp:1242\r
-#, c-format\r
-msgid ", broadcast through %d nodes"\r
-msgstr ", estas dissendita per %d nodoj"\r
-\r
-#: ../../../src/ui.cpp:1246\r
-msgid "<b>Date:</b> "\r
-msgstr "<b>Dato:</b> "\r
-\r
-#: ../../../src/ui.cpp:1254\r
-msgid "<b>Source:</b> Generated<br>"\r
-msgstr "<b>Fonto:</b> Kreita<br>"\r
-\r
-#: ../../../src/ui.cpp:1260 ../../../src/ui.cpp:1278\r
-msgid "<b>From:</b> "\r
-msgstr "<b>De:</b> "\r
-\r
-#: ../../../src/ui.cpp:1278\r
-msgid "unknown"\r
-msgstr "nekonata"\r
-\r
-#: ../../../src/ui.cpp:1279 ../../../src/ui.cpp:1303 ../../../src/ui.cpp:1362\r
-msgid "<b>To:</b> "\r
-msgstr "<b>Al:</b> "\r
-\r
-#: ../../../src/ui.cpp:1282\r
-msgid " (yours, label: "\r
-msgstr " (via, etikedo: "\r
-\r
-#: ../../../src/ui.cpp:1284\r
-msgid " (yours)"\r
-msgstr " (via)"\r
-\r
-#: ../../../src/ui.cpp:1321 ../../../src/ui.cpp:1333 ../../../src/ui.cpp:1379\r
-#: ../../../src/ui.cpp:1396\r
-msgid "<b>Credit:</b> "\r
-msgstr "<b>Кredito:</b> "\r
-\r
-#: ../../../src/ui.cpp:1323\r
-#, c-format\r
-msgid "(%s matures in %d more blocks)"\r
-msgstr "(%s maturiĝos post %d blokoj)"\r
-\r
-#: ../../../src/ui.cpp:1325\r
-msgid "(not accepted)"\r
-msgstr "(ne akceptita)"\r
-\r
-#: ../../../src/ui.cpp:1370 ../../../src/ui.cpp:1378 ../../../src/ui.cpp:1393\r
-msgid "<b>Debit:</b> "\r
-msgstr "<b>Debeto:</b> "\r
-\r
-#: ../../../src/ui.cpp:1384\r
-msgid "<b>Transaction fee:</b> "\r
-msgstr "<b>Transakcia kosto:</b> "\r
-\r
-#: ../../../src/ui.cpp:1400\r
-msgid "<b>Net amount:</b> "\r
-msgstr "<b>Neta kvanto:</b> "\r
-\r
-#: ../../../src/ui.cpp:1407\r
-msgid "Message:"\r
-msgstr "Mesaĝo:"\r
-\r
-#: ../../../src/ui.cpp:1409\r
-msgid "Comment:"\r
-msgstr "Komento:"\r
-\r
-#: ../../../src/ui.cpp:1412\r
-msgid ""\r
-"Generated coins must wait 120 blocks before they can be spent.  When you "\r
-"generated this block, it was broadcast to the network to be added to the "\r
-"block chain.  If it fails to get into the chain, it will change to \"not "\r
-"accepted\" and not be spendable.  This may occasionally happen if another "\r
-"node generates a block within a few seconds of yours."\r
-msgstr ""\r
-"Kreitaj moneroj devas atendi dum 120 blokoj ĝis ili povas esti elspezita. "\r
-"Kiam vi kreis tiun blokon, ĝi estis dissendita al la reton por esti "\r
-"inkludita en la blokĉeno. Se ĝi malsukcesos esti inkludita en la ĉeno, ĝi "\r
-"ŝanĝiĝos al \\\"ne akceptita\\\" kaj estos neelspezebla. Kelkfoje tio povas "\r
-"okazi se alia nodo kreas blokon samtempe (dum kelkaj sekundoj)."\r
-\r
-#: ../../../src/ui.cpp:1592\r
-msgid "Cannot write autostart/bitcoin.desktop file"\r
-msgstr "Ne povas skribi la dosieron autostart/bitcoin.desktop"\r
-\r
-#: ../../../src/ui.cpp:1628\r
-msgid "Main"\r
-msgstr "Ĉefa"\r
-\r
-#: ../../../src/ui.cpp:1636\r
-msgid "&Start Bitcoin on window system startup"\r
-msgstr "&Lanĉu Bitmoneron kiam vindozo ekas"\r
-\r
-#: ../../../src/ui.cpp:1643\r
-msgid "&Minimize on close"\r
-msgstr "Nur &kaŝiĝi anstataŭ malfermiĝi"\r
-\r
-#: ../../../src/ui.cpp:1785\r
-#, c-format\r
-msgid "version %s"\r
-msgstr "versio %s"\r
-\r
-#: ../../../src/ui.cpp:1897\r
-msgid "Error in amount  "\r
-msgstr "Eraro en kvanto  "\r
-\r
-#: ../../../src/ui.cpp:1897 ../../../src/ui.cpp:1902 ../../../src/ui.cpp:1907\r
-#: ../../../src/ui.cpp:1942 ../../../src/uibase.cpp:55\r
-msgid "Send Coins"\r
-msgstr "Sendu monerojn"\r
-\r
-#: ../../../src/ui.cpp:1902\r
-msgid "Amount exceeds your balance  "\r
-msgstr "Kvanto transpasas vian bonhavon  "\r
-\r
-#: ../../../src/ui.cpp:1907\r
-msgid "Total exceeds your balance when the "\r
-msgstr "Entuta sumo transpasas vian bonhavon, se la "\r
-\r
-#: ../../../src/ui.cpp:1907\r
-msgid " transaction fee is included  "\r
-msgstr " transakcia kosto estas inkludita  "\r
-\r
-#: ../../../src/ui.cpp:1925\r
-msgid "Payment sent  "\r
-msgstr "Pago sendita  "\r
-\r
-#: ../../../src/ui.cpp:1925 ../../../src/ui.cpp:1930 ../../../src/ui.cpp:2074\r
-#: ../../../src/ui.cpp:2227 ../../../src/main.cpp:3999\r
-msgid "Sending..."\r
-msgstr "Sendanta..."\r
-\r
-#: ../../../src/ui.cpp:1942\r
-msgid "Invalid address  "\r
-msgstr "Malvalida adreso  "\r
-\r
-#: ../../../src/ui.cpp:1995\r
-#, c-format\r
-msgid "Sending %s to %s"\r
-msgstr "Sendanta %s al %s"\r
-\r
-#: ../../../src/ui.cpp:2068 ../../../src/ui.cpp:2101\r
-msgid "CANCELLED"\r
-msgstr "MALVALIDIGITA"\r
-\r
-#: ../../../src/ui.cpp:2072\r
-msgid "Cancelled"\r
-msgstr "Malvalidigita"\r
-\r
-#: ../../../src/ui.cpp:2074\r
-msgid "Transfer cancelled  "\r
-msgstr "Transfero malvalidigita  "\r
-\r
-#: ../../../src/ui.cpp:2127\r
-msgid "Error: "\r
-msgstr "Eraro: "\r
-\r
-#: ../../../src/ui.cpp:2141 ../../../src/ui.cpp:2212\r
-#: ../../../src/main.cpp:4018\r
-msgid "Insufficient funds"\r
-msgstr "Malsufiĉa mono"\r
-\r
-#: ../../../src/ui.cpp:2146\r
-msgid "Connecting..."\r
-msgstr "Konektanta..."\r
-\r
-#: ../../../src/ui.cpp:2151\r
-msgid "Unable to connect"\r
-msgstr "Ne povas konekti"\r
-\r
-#: ../../../src/ui.cpp:2156\r
-msgid "Requesting public key..."\r
-msgstr "Postulanta publikan ĉifroŝlosilon..."\r
-\r
-#: ../../../src/ui.cpp:2168\r
-msgid "Received public key..."\r
-msgstr "Ricevinta publikan ĉifroŝlosilon..."\r
-\r
-#: ../../../src/ui.cpp:2182\r
-msgid "Recipient is not accepting transactions sent by IP address"\r
-msgstr "Adresato ne akceptas transakciojn senditajn per IP adreso"\r
-\r
-#: ../../../src/ui.cpp:2184\r
-msgid "Transfer was not accepted"\r
-msgstr "Transfero ne estis akceptita"\r
-\r
-#: ../../../src/ui.cpp:2193\r
-msgid "Invalid response received"\r
-msgstr "Malvalida respondo ricevita"\r
-\r
-#: ../../../src/ui.cpp:2208\r
-msgid "Creating transaction..."\r
-msgstr "Kreanta la transakcion..."\r
-\r
-#: ../../../src/ui.cpp:2220\r
-#, c-format\r
-msgid ""\r
-"This transaction requires a transaction fee of at least %s because of its "\r
-"amount, complexity, or use of recently received funds"\r
-msgstr ""\r
-"Tiu ĉi transakcio necesas transakcian koston de minimume %s, ĉar ĝia kvanto "\r
-"aŭ ĝia komplekseco aŭ la uzo de mono lastatempe ricevita."\r
-\r
-#: ../../../src/ui.cpp:2222\r
-msgid "Transaction creation failed"\r
-msgstr "La transakcio ne funkciis"\r
-\r
-#: ../../../src/ui.cpp:2229\r
-msgid "Transaction aborted"\r
-msgstr "Transakcio malvalidigita"\r
-\r
-#: ../../../src/ui.cpp:2237\r
-msgid "Lost connection, transaction cancelled"\r
-msgstr "Perdis la konekton, transakcio malvalidigita"\r
-\r
-#: ../../../src/ui.cpp:2253\r
-msgid "Sending payment..."\r
-msgstr "Sendanta pagon..."\r
-\r
-#: ../../../src/ui.cpp:2259\r
-msgid ""\r
-"The transaction was rejected.  This might happen if some of the coins in "\r
-"your wallet were already spent, such as if you used a copy of wallet.dat and "\r
-"coins were spent in the copy but not marked as spent here."\r
-msgstr ""\r
-"La transakcio estas malakceptita. Tio povas okazi se iom da moneroj en via "\r
-"monujo jam estis elspezata, ekzemple se vi uzis kopion de la monujo wallet."\r
-"dat kaj moneroj estis elspezita en la kopio, sed ne estas markata kiel "\r
-"elspezata ĉi tie."\r
-\r
-#: ../../../src/ui.cpp:2268\r
-msgid "Waiting for confirmation..."\r
-msgstr "Atendanta la konfirmon..."\r
-\r
-#: ../../../src/ui.cpp:2286\r
-msgid ""\r
-"The payment was sent, but the recipient was unable to verify it.\n"\r
-"The transaction is recorded and will credit to the recipient,\n"\r
-"but the comment information will be blank."\r
-msgstr ""\r
-"La pago estis sendita, sed la ricevanto ne povis atesti ĝin.\n"\r
-"La transakcio estas registrita kaj estos skribita en la krediton de la "\r
-"ricevanto,\n"\r
-"sed la komenta informo estas malplena."\r
-\r
-#: ../../../src/ui.cpp:2295\r
-msgid "Payment was sent, but an invalid response was received"\r
-msgstr "Pago estis sendita, sed malvalida respondo estas ricivita"\r
-\r
-#: ../../../src/ui.cpp:2301\r
-msgid "Payment completed"\r
-msgstr "Pago kompletigita"\r
-\r
-#: ../../../src/ui.cpp:2332 ../../../src/ui.cpp:2478 ../../../src/ui.cpp:2515\r
-msgid "Name"\r
-msgstr "Nomo"\r
-\r
-#: ../../../src/ui.cpp:2333 ../../../src/ui.cpp:2478 ../../../src/ui.cpp:2515\r
-msgid "Address"\r
-msgstr "Adreso"\r
-\r
-#: ../../../src/ui.cpp:2335 ../../../src/ui.cpp:2490\r
-msgid "Label"\r
-msgstr "Etikedo"\r
-\r
-#: ../../../src/ui.cpp:2336 ../../../src/uibase.cpp:837\r
-msgid "Bitcoin Address"\r
-msgstr "Bitmonera adreso"\r
-\r
-#: ../../../src/ui.cpp:2460\r
-msgid ""\r
-"This is one of your own addresses for receiving payments and cannot be "\r
-"entered in the address book.  "\r
-msgstr ""\r
-"Tiu ĉi estas unu el viaj adresoj mem pro ricevi pagojn. Ĝi ne povas esti "\r
-"enskribita en la adresaro.  "\r
-\r
-#: ../../../src/ui.cpp:2478 ../../../src/ui.cpp:2484\r
-msgid "Edit Address"\r
-msgstr "Editu adreson"\r
-\r
-#: ../../../src/ui.cpp:2490\r
-msgid "Edit Address Label"\r
-msgstr "Editu adresan etikedon"\r
-\r
-#: ../../../src/ui.cpp:2515 ../../../src/ui.cpp:2521\r
-msgid "Add Address"\r
-msgstr "Aldonu adreson"\r
-\r
-#: ../../../src/ui.cpp:2598\r
-msgid "Bitcoin"\r
-msgstr "Bitmonero"\r
-\r
-#: ../../../src/ui.cpp:2600\r
-msgid "Bitcoin - Generating"\r
-msgstr "Bitmonero - Kreanta"\r
-\r
-#: ../../../src/ui.cpp:2602\r
-msgid "Bitcoin - (not connected)"\r
-msgstr "Bitcoin - (ne konektita)"\r
-\r
-#: ../../../src/ui.cpp:2681\r
-msgid "&Open Bitcoin"\r
-msgstr "&Malfermu Bitmoneron"\r
-\r
-#: ../../../src/ui.cpp:2682\r
-msgid "&Send Bitcoins"\r
-msgstr "&Sendu bitmonerojn"\r
-\r
-#: ../../../src/ui.cpp:2683\r
-msgid "O&ptions..."\r
-msgstr "&Opcioj..."\r
-\r
-#: ../../../src/ui.cpp:2686 ../../../src/uibase.cpp:25\r
-msgid "E&xit"\r
-msgstr "&Fermu"\r
-\r
-#: ../../../src/ui.cpp:2902\r
-msgid "Program has crashed and will terminate.  "\r
-msgstr "La programo kraŝis kaj haltiĝos.  "\r
-\r
-#: ../../../src/main.cpp:1868\r
-msgid "Warning: Disk space is low  "\r
-msgstr "Averto: Malmulte da storloko  "\r
-\r
-#: ../../../src/main.cpp:3992\r
-#, c-format\r
-msgid ""\r
-"Error: This transaction requires a transaction fee of at least %s because of "\r
-"its amount, complexity, or use of recently received funds  "\r
-msgstr ""\r
-"Eraro: Tiu ĉi transakcio necesas transakcian koston de minimume %s, ĉar ĝia "\r
-"kvanto aŭ ĝia komplekseco aŭ la uzo de mono lastatempe ricevitaŭ  "\r
-\r
-#: ../../../src/main.cpp:3994\r
-msgid "Error: Transaction creation failed  "\r
-msgstr "Eraro: La kreado de la transakcio ne funkciis  "\r
-\r
-#: ../../../src/main.cpp:4003\r
-msgid ""\r
-"Error: The transaction was rejected.  This might happen if some of the coins "\r
-"in your wallet were already spent, such as if you used a copy of wallet.dat "\r
-"and coins were spent in the copy but not marked as spent here."\r
-msgstr ""\r
-"Eraro: La transakcio estas malakceptita. Tio povas okazi se iom da moneroj "\r
-"en via monujo jam estas elspezita, ekzemple se vi uzis kopion de la monujo "\r
-"wallet.dat kaj moneroj estis elspezita en la kopio, sed ne estas markata "\r
-"kiel elspezata ĉi tie."\r
-\r
-#: ../../../src/main.cpp:4016\r
-msgid "Invalid amount"\r
-msgstr "Malvalida kvanto"\r
-\r
-#: ../../../src/main.cpp:4023\r
-msgid "Invalid bitcoin address"\r
-msgstr "Malvalida bitmonera adreso"\r
-\r
-#: ../../../src/rpc.cpp:1800 ../../../src/rpc.cpp:1802\r
-#, c-format\r
-msgid "To use the %s option"\r
-msgstr "Por uzi la %s optcion"\r
-\r
-#: ../../../src/rpc.cpp:1804\r
-#, c-format\r
-msgid ""\r
-"Warning: %s, you must set rpcpassword=<password>\n"\r
-"in the configuration file: %s\n"\r
-"If the file does not exist, create it with owner-readable-only file "\r
-"permissions.\n"\r
-msgstr ""\r
-"Averto: %s, vi devas meti rpcpassword=<pasvorto>\n"\r
-"en la agorda dosiero: %s\n"\r
-"Se la doriero ne ekzistas, kreu ĝin nurposedantlegeble.\n"\r
-\r
-#: ../../../src/rpc.cpp:1972\r
-#, c-format\r
-msgid ""\r
-"You must set rpcpassword=<password> in the configuration file:\n"\r
-"%s\n"\r
-"If the file does not exist, create it with owner-readable-only file "\r
-"permissions."\r
-msgstr ""\r
-"Vi devas meti rpcpassword=<pasvorto> en la agorda dosiero:\n"\r
-"%s\n"\r
-"Se la dosiero ne ekzistas, kreu ĝin nurposedantlegeble."\r
-\r
-#: ../../../src/util.cpp:865\r
-msgid ""\r
-"Warning: Please check that your computer's date and time are correct.  If "\r
-"your clock is wrong Bitcoin will not work properly."\r
-msgstr ""\r
-"Averto: Bonvole kontrolu ke la dato kaj la tempo de via komputilo estas "\r
-"ĝusta. Se viaj horloĝo malĝustas, Bitmonero ne funkcios korekte."\r
-\r
-#: ../../../src/util.cpp:898\r
-msgid "beta"\r
-msgstr "beta"\r
-\r
-#: ../../../src/uibase.cpp:28\r
-msgid "&File"\r
-msgstr "&Dosiero"\r
-\r
-#: ../../../src/uibase.cpp:32\r
-msgid "&Your Receiving Addresses..."\r
-msgstr "&Viaj ricevadresoj..."\r
-\r
-#: ../../../src/uibase.cpp:36\r
-msgid "&Options..."\r
-msgstr "&Opcioj..."\r
-\r
-#: ../../../src/uibase.cpp:39\r
-msgid "&Settings"\r
-msgstr "&Agordoj"\r
-\r
-#: ../../../src/uibase.cpp:43\r
-msgid "&About..."\r
-msgstr "&Pri..."\r
-\r
-#: ../../../src/uibase.cpp:46\r
-msgid "&Help"\r
-msgstr "&Helpo"\r
-\r
-#: ../../../src/uibase.cpp:56\r
-msgid "Address Book"\r
-msgstr "Adresaro"\r
-\r
-#: ../../../src/uibase.cpp:69\r
-msgid "Your Bitcoin Address:"\r
-msgstr "Via bitmonera adreso:"\r
-\r
-#: ../../../src/uibase.cpp:76\r
-msgid " &New... "\r
-msgstr " &Nova... "\r
-\r
-#: ../../../src/uibase.cpp:79 ../../../src/uibase.cpp:780\r
-#: ../../../src/uibase.cpp:883\r
-msgid " &Copy to Clipboard "\r
-msgstr " &Kopiu al la poŝon "\r
-\r
-#: ../../../src/uibase.cpp:93\r
-msgid "Balance:"\r
-msgstr "Bonhavo:"\r
-\r
-#: ../../../src/uibase.cpp:109\r
-msgid " All"\r
-msgstr " Ĉiom"\r
-\r
-#: ../../../src/uibase.cpp:109\r
-msgid " Sent"\r
-msgstr " Sendita"\r
-\r
-#: ../../../src/uibase.cpp:109\r
-msgid " Received"\r
-msgstr " Ricevita"\r
-\r
-#: ../../../src/uibase.cpp:109\r
-msgid " In Progress"\r
-msgstr " Progresanta"\r
-\r
-#: ../../../src/uibase.cpp:130\r
-msgid "All Transactions"\r
-msgstr "Ĉiuj transakcioj"\r
-\r
-#: ../../../src/uibase.cpp:141\r
-msgid "Sent/Received"\r
-msgstr "Sendita/Ricevita"\r
-\r
-#: ../../../src/uibase.cpp:152\r
-msgid "Sent"\r
-msgstr "Sendita"\r
-\r
-#: ../../../src/uibase.cpp:163\r
-msgid "Received"\r
-msgstr "Ricevita"\r
-\r
-#: ../../../src/uibase.cpp:302 ../../../src/uibase.cpp:443\r
-#: ../../../src/uibase.cpp:542 ../../../src/uibase.cpp:722\r
-#: ../../../src/uibase.cpp:783 ../../../src/uibase.cpp:892\r
-#: ../../../src/uibase.cpp:981\r
-msgid "OK"\r
-msgstr "Bone"\r
-\r
-#: ../../../src/uibase.cpp:345\r
-msgid "&Start Bitcoin on system startup"\r
-msgstr "&Lanĉigu Bitmoneron kiam la sistemo ekas"\r
-\r
-#: ../../../src/uibase.cpp:348\r
-msgid "&Minimize to the tray instead of the taskbar"\r
-msgstr "&Kaŝu al la programan pleton anstataŭ al la programan linion"\r
-\r
-#: ../../../src/uibase.cpp:351\r
-msgid "Map port using &UPnP"\r
-msgstr "Pordplusendo per &UPnP"\r
-\r
-#: ../../../src/uibase.cpp:354\r
-msgid "M&inimize to the tray on close"\r
-msgstr "K&aŝu al la programan pleton anstataŭ malfermu ĝin"\r
-\r
-#: ../../../src/uibase.cpp:360\r
-msgid "&Connect through socks4 proxy: "\r
-msgstr "&Konekti per socks4 prokuro: "\r
-\r
-#: ../../../src/uibase.cpp:371\r
-msgid "Proxy &IP:"\r
-msgstr "Prokura &IP:"\r
-\r
-#: ../../../src/uibase.cpp:379\r
-msgid " &Port:"\r
-msgstr " &Pordo:"\r
-\r
-#: ../../../src/uibase.cpp:392\r
-msgid ""\r
-"Optional transaction fee per KB that helps make sure your transactions are "\r
-"processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."\r
-msgstr ""\r
-"Volonta transakcia kosto po kilobajto, kiu helpas certigi ke viaj "\r
-"transakcioj estas plenumita rapide.  La plej transacioj estas 1 kilobajto.  "\r
-"Rekomendita transakcia kosto: 0.01"\r
-\r
-#: ../../../src/uibase.cpp:399\r
-msgid "Pay transaction fee:"\r
-msgstr "Pagu transakcian koston:"\r
-\r
-#: ../../../src/uibase.cpp:420\r
-msgid "// [don't translate] Test panel 2 for future expansion"\r
-msgstr ""\r
-\r
-#: ../../../src/uibase.cpp:424\r
-msgid ""\r
-"// [don't translate] Let's not start multiple pages until the first page is "\r
-"filled up"\r
-msgstr ""\r
-\r
-#: ../../../src/uibase.cpp:446 ../../../src/uibase.cpp:668\r
-#: ../../../src/uibase.cpp:727 ../../../src/uibase.cpp:786\r
-#: ../../../src/uibase.cpp:895 ../../../src/uibase.cpp:984\r
-msgid "Cancel"\r
-msgstr "Malvalidigu"\r
-\r
-#: ../../../src/uibase.cpp:449\r
-msgid "&Apply"\r
-msgstr "&Apliku"\r
-\r
-#: ../../../src/uibase.cpp:508\r
-msgid "Bitcoin "\r
-msgstr "Bitmonero "\r
-\r
-#: ../../../src/uibase.cpp:514\r
-msgid "version"\r
-msgstr "versio"\r
-\r
-#: ../../../src/uibase.cpp:525\r
-msgid ""\r
-"Copyright (c) 2009-2011 Bitcoin Developers\n"\r
-"\n"\r
-"This is experimental software.\n"\r
-"\n"\r
-"Distributed under the MIT/X11 software license, see the accompanying file \n"\r
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"\r
-"\n"\r
-"This product includes software developed by the OpenSSL Project for use in "\r
-"the \n"\r
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written "\r
-"by \n"\r
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."\r
-msgstr ""\r
-"Kopirajto (c) 2009-2011 Disvolviĝuloj de Bitmonero\n"\r
-"\n"\r
-"Tio ĉi estas eksperimenta softvaro.\n"\r
-"\n"\r
-"Distribita laŭ la MIT/X11 softvara licenco. Vidu la kundonitan dosieron \n"\r
-"license.txt aŭ http://www.opensource.org/licenses/mit-license.php.\n"\r
-"\n"\r
-"Tio ĉi produkto inkludas softvaron, kiu estas disvolviĝita de la OpenSSL "\r
-"projekto por uzo en la \n"\r
-"OpenSSL Toolkit (http://www.openssl.org/), kaj kriptografia softvaro verkita "\r
-"de \n"\r
-"Eric Young (eay@cryptsoft.com) kaj UPnP softvaro verkita de Thomas Bernard."\r
-\r
-#: ../../../src/uibase.cpp:581\r
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"\r
-msgstr "Entajpu bitmoneran adreson (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"\r
-\r
-#: ../../../src/uibase.cpp:595\r
-msgid "Pay &To:"\r
-msgstr "Pagu &al:"\r
-\r
-#: ../../../src/uibase.cpp:610\r
-msgid "&Paste"\r
-msgstr "&Elpoŝigi"\r
-\r
-#: ../../../src/uibase.cpp:613\r
-msgid " Address &Book..."\r
-msgstr " &Adresaro..."\r
-\r
-#: ../../../src/uibase.cpp:620\r
-msgid "&Amount:"\r
-msgstr "&Kvanto:"\r
-\r
-#: ../../../src/uibase.cpp:630\r
-msgid "T&ransfer:"\r
-msgstr "T&ransfero:"\r
-\r
-#: ../../../src/uibase.cpp:636\r
-msgid " Standard"\r
-msgstr " Normo"\r
-\r
-#: ../../../src/uibase.cpp:663\r
-msgid "&Send"\r
-msgstr "&Sendu"\r
-\r
-#: ../../../src/uibase.cpp:711\r
-msgid ""\r
-"\n"\r
-"\n"\r
-"Connecting..."\r
-msgstr ""\r
-"\n"\r
-"\n"\r
-"Konektanta..."\r
-\r
-#: ../../../src/uibase.cpp:761\r
-msgid ""\r
-"These are your Bitcoin addresses for receiving payments.  You may want to "\r
-"give a different one to each sender so you can keep track of who is paying "\r
-"you.  The highlighted address is displayed in the main window."\r
-msgstr ""\r
-"Tiuj ĉi estas viaj bitmonerajn adresojn por ricevi pagojn. Vi povus voli "\r
-"doni malsaman adreson al ĉiuj sendanto, por ke vi povas vidi kiu pagis vin.  "\r
-"La markita adreso estas vidigita en la ĉefa fenestro."\r
-\r
-#: ../../../src/uibase.cpp:774 ../../../src/uibase.cpp:886\r
-msgid "&Edit..."\r
-msgstr "&Redakti..."\r
-\r
-#: ../../../src/uibase.cpp:777 ../../../src/uibase.cpp:889\r
-msgid " &New Address... "\r
-msgstr " &Nova adreso... "\r
-\r
-#: ../../../src/uibase.cpp:849\r
-msgid "Sending"\r
-msgstr "Sendanta"\r
-\r
-#: ../../../src/uibase.cpp:857\r
-msgid ""\r
-"These are your Bitcoin addresses for receiving payments.  You can give a "\r
-"different one to each sender to keep track of who is paying you.  The "\r
-"highlighted address will be displayed in the main window."\r
-msgstr ""\r
-"Tiuj estas viaj bitmoneraj adresoj por ricevi pagojn. Vi povas doni malsaman "\r
-"adreson al ĉiuj sendanto, por ke vi povas vidi kiu pagis vin. La markita "\r
-"adreso estas vidigita en la ĉefa fenestro."\r
-\r
-#: ../../../src/uibase.cpp:870\r
-msgid "Receiving"\r
-msgstr "Ricevanta"\r
-\r
-#: ../../../src/uibase.cpp:880\r
-msgid "&Delete"\r
-msgstr "&Viŝu"\r
-\r
-#: ../../../src/init.cpp:147\r
-msgid "Bitcoin version"\r
-msgstr "Versio de Bitmonero"\r
-\r
-#: ../../../src/init.cpp:148\r
-msgid "Usage:"\r
-msgstr "Uzado:"\r
-\r
-#: ../../../src/init.cpp:150\r
-msgid "Send command to -server or bitcoind\n"\r
-msgstr "Sendu komandon al aŭ -server aŭ bitcoind\n"\r
-\r
-#: ../../../src/init.cpp:151\r
-msgid "List commands\n"\r
-msgstr "Listigu komandojn\n"\r
-\r
-#: ../../../src/init.cpp:152\r
-msgid "Get help for a command\n"\r
-msgstr "Ricevu helpon de komando\n"\r
-\r
-#: ../../../src/init.cpp:153\r
-msgid "Options:\n"\r
-msgstr "Opcioj:\n"\r
-\r
-#: ../../../src/init.cpp:154\r
-msgid "Specify configuration file (default: bitcoin.conf)\n"\r
-msgstr "Elektu agordan dosieron (defaŭlto: bitcoin.conf)\n"\r
-\r
-#: ../../../src/init.cpp:155\r
-msgid "Specify pid file (default: bitcoind.pid)\n"\r
-msgstr "Elektu pid dosieron (defaŭlto: bitcoind.pid)\n"\r
-\r
-#: ../../../src/init.cpp:156\r
-msgid "Generate coins\n"\r
-msgstr "Generate coins\n"\r
-\r
-#: ../../../src/init.cpp:157\r
-msgid "Don't generate coins\n"\r
-msgstr "Ne kreu monerojn\n"\r
-\r
-#: ../../../src/init.cpp:158\r
-msgid "Start minimized\n"\r
-msgstr "Lanĉiĝu kaŝe\n"\r
-\r
-#: ../../../src/init.cpp:159\r
-msgid "Specify data directory\n"\r
-msgstr "Elektu datenara dosierujon\n"\r
-\r
-#: ../../../src/init.cpp:160\r
-msgid "Connect through socks4 proxy\n"\r
-msgstr "Konektu per socks4 prokuro\n"\r
-\r
-#: ../../../src/init.cpp:161\r
-msgid "Allow DNS lookups for addnode and connect\n"\r
-msgstr "Permesu DNS solvon por aldoni nodon kaj konekti\n"\r
-\r
-#: ../../../src/init.cpp:162\r
-msgid "Add a node to connect to\n"\r
-msgstr "Aldonu nodon konektotan\n"\r
-\r
-#: ../../../src/init.cpp:163\r
-msgid "Connect only to the specified node\n"\r
-msgstr "Konektu nur al specifan nodon\n"\r
-\r
-#: ../../../src/init.cpp:164\r
-msgid "Don't accept connections from outside\n"\r
-msgstr "Ne akceptu eksterajn konektojn\n"\r
-\r
-#: ../../../src/init.cpp:167\r
-msgid "Don't attempt to use UPnP to map the listening port\n"\r
-msgstr "Ne provu uzi UPnP-on por la pordplusendo\n"\r
-\r
-#: ../../../src/init.cpp:169\r
-msgid "Attempt to use UPnP to map the listening port\n"\r
-msgstr "Provu uzi UPnP-on por la pordplusendo\n"\r
-\r
-#: ../../../src/init.cpp:172\r
-msgid "Fee per KB to add to transactions you send\n"\r
-msgstr "Kosto po kilobajto aldonota al viaj transakcioj sendataj\n"\r
-\r
-#: ../../../src/init.cpp:174\r
-msgid "Accept command line and JSON-RPC commands\n"\r
-msgstr "Akceptu kaj komandliniajn kaj JSON-RPC-ajn komandojn\n"\r
-\r
-#: ../../../src/init.cpp:177\r
-msgid "Run in the background as a daemon and accept commands\n"\r
-msgstr "Lanĉigu fone kiel demono kaj akceptu komandojn\n"\r
-\r
-#: ../../../src/init.cpp:179\r
-msgid "Use the test network\n"\r
-msgstr "Uzu la testreton\n"\r
-\r
-#: ../../../src/init.cpp:180\r
-msgid "Username for JSON-RPC connections\n"\r
-msgstr "Salutnomo por JSON-RPC-aj konektoj\n"\r
-\r
-#: ../../../src/init.cpp:181\r
-msgid "Password for JSON-RPC connections\n"\r
-msgstr "Pasvorto por JSON-RPC-aj konektoj\n"\r
-\r
-#: ../../../src/init.cpp:182\r
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"\r
-msgstr "Aŭskultu JSON-RPC-ajn konektojn ĉe <pordo> (defaŭlto: 8332)\n"\r
-\r
-#: ../../../src/init.cpp:183\r
-msgid "Allow JSON-RPC connections from specified IP address\n"\r
-msgstr "Permesu JSON-RPC-ajn konektojn el specifa IP-adreso\n"\r
-\r
-#: ../../../src/init.cpp:184\r
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"\r
-msgstr "Sendu komandojn al nodo rulanta ĉe <ip> (defaŭlto: 127.0.0.1)\n"\r
-\r
-#: ../../../src/init.cpp:185\r
-msgid "Set key pool size to <n> (default: 100)\n"\r
-msgstr "Difinu la grandecon de la ĉifroŝlosilaro kiel <n> (defaŭlto: 100)\n"\r
-\r
-#: ../../../src/init.cpp:186\r
-msgid "Rescan the block chain for missing wallet transactions\n"\r
-msgstr "Reskandu la blokĉenon por mankantaj transakcioj en la monujo\n"\r
-\r
-#: ../../../src/init.cpp:190\r
-msgid ""\r
-"\n"\r
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"\r
-msgstr ""\r
-"\n"\r
-"SSL-aj opcioj: (Legu la Vikipedion de Bitmonero pri la agordaĵaj instruoj)\n"\r
-\r
-#: ../../../src/init.cpp:191\r
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"\r
-msgstr "Uzu OpenSSL (https) por JSON-RPC-aj konektoj\n"\r
-\r
-#: ../../../src/init.cpp:192\r
-msgid "Server certificate file (default: server.cert)\n"\r
-msgstr "Argorda doesiero de la servilo (defaŭlto: server.cert)\n"\r
-\r
-#: ../../../src/init.cpp:193\r
-msgid "Server private key (default: server.pem)\n"\r
-msgstr "Privata ĉifroŝlosilo de la servilo (defaŭlto: server.pem)\n"\r
-\r
-#: ../../../src/init.cpp:194\r
-msgid ""\r
-"Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:"\r
-"@STRENGTH)\n"\r
-msgstr ""\r
-"\"Akcepteblaj ĉifroj (defaŭlto: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:"\r
-"@STRENGTH)\n"\r
-\r
-#: ../../../src/init.cpp:198\r
-msgid "This help message\n"\r
-msgstr "Ĉi tiu helpa mesaĝo\n"\r
-\r
-#: ../../../src/init.cpp:335\r
-#, c-format\r
-msgid ""\r
-"Cannot obtain a lock on data directory %s.  Bitcoin is probably already "\r
-"running."\r
-msgstr ""\r
-"Ne povas ŝlosi la datenan dosierujon %s. Verŝajne alia instanco de la "\r
-"programo Bitmonero jam rulas."\r
-\r
-#: ../../../src/init.cpp:361\r
-msgid "Error loading addr.dat      \n"\r
-msgstr "Eraro ŝarĝante la dosieron addr.dat      \n"\r
-\r
-#: ../../../src/init.cpp:367\r
-msgid "Error loading blkindex.dat      \n"\r
-msgstr "Eraro ŝarĝante la dosieron blkindex.dat      \n"\r
-\r
-#: ../../../src/init.cpp:374\r
-msgid "Error loading wallet.dat      \n"\r
-msgstr "Eraro ŝarĝante la dosieron wallet.dat      \n"\r
-\r
-#: ../../../src/init.cpp:454\r
-msgid "Invalid -proxy address"\r
-msgstr "Malvalida prokuradreso (-proxy)"\r
-\r
-#: ../../../src/init.cpp:477\r
-msgid "Invalid amount for -paytxfee=<amount>"\r
-msgstr "Malvalida kvanto de la transakcia kosto (-paytxfee=<kvanto>)"\r
-\r
-#: ../../../src/init.cpp:481\r
-msgid ""\r
-"Warning: -paytxfee is set very high.  This is the transaction fee you will "\r
-"pay if you send a transaction."\r
-msgstr ""\r
-"Averto: La transakcia kosto (-paytxfee) estas tre alta. Tiu ĉi estas la "\r
-"kosto, kiun vi devos pagi kiam vi sendos transakcion."\r
-\r
-#: ../../../src/uibase.h:147\r
-msgid "Transaction Details"\r
-msgstr "Detaloj pri transakcio"\r
-\r
-#: ../../../src/uibase.h:199\r
-msgid "Options"\r
-msgstr "Detaloj pri transakcio"\r
-\r
-#: ../../../src/uibase.h:228\r
-msgid "About Bitcoin"\r
-msgstr "Pri Bitmonero"\r
-\r
-#: ../../../src/uibase.h:337\r
-msgid "Your Bitcoin Addresses"\r
-msgstr "Viaj Bitmoneraj adresoj"\r
diff --git a/locale/es/LC_MESSAGES/bitcoin.mo b/locale/es/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index e22b894..0000000
Binary files a/locale/es/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/es/LC_MESSAGES/bitcoin.po b/locale/es/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 1787c48..0000000
+++ /dev/null
@@ -1,1076 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-06 21:58+0100\n"
-"PO-Revision-Date: 2011-09-06 22:19+0100\n"
-"Last-Translator: Alex B <paraipanakos@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/init.cpp:163
-msgid "Bitcoin version"
-msgstr "versión Bitcoin"
-
-#: ../../../src/init.cpp:164
-msgid "Usage:"
-msgstr "Uso:"
-
-#: ../../../src/init.cpp:166
-msgid "Send command to -server or bitcoind\n"
-msgstr "Envia comando a bitcoin lanzado con -server u bitcoind\n"
-
-#: ../../../src/init.cpp:167
-msgid "List commands\n"
-msgstr "Muestra comandos\n"
-
-#: ../../../src/init.cpp:168
-msgid "Get help for a command\n"
-msgstr "Recibir ayuda para un comando\n"
-
-#: ../../../src/init.cpp:169
-msgid "Options:\n"
-msgstr "Opciones:\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Especifica archivo de configuración (predeterminado: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Especifica archivo pid (predeterminado: bitcoin.pid)\n"
-
-#: ../../../src/init.cpp:172
-msgid "Generate coins\n"
-msgstr "Genera monedas\n"
-
-#: ../../../src/init.cpp:173
-msgid "Don't generate coins\n"
-msgstr "No generar monedas\n"
-
-#: ../../../src/init.cpp:174
-msgid "Start minimized\n"
-msgstr "Arranca minimizado\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify data directory\n"
-msgstr "Especifica directorio para los datos\n"
-
-#: ../../../src/init.cpp:176
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Especifica tiempo de espera para conexion (en milisegundos)\n"
-
-#: ../../../src/init.cpp:177
-msgid "Connect through socks4 proxy\n"
-msgstr "Conecta mediante proxy socks4\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Permite búsqueda DNS para addnode y connect\n"
-
-#: ../../../src/init.cpp:179
-msgid "Add a node to connect to\n"
-msgstr "Agrega un nodo para conectarse\n"
-
-#: ../../../src/init.cpp:180
-msgid "Connect only to the specified node\n"
-msgstr "Conecta solo al nodo especificado\n"
-
-#: ../../../src/init.cpp:181
-msgid "Don't accept connections from outside\n"
-msgstr "No aceptar conexiones desde el exterior\n"
-
-#: ../../../src/init.cpp:184
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "No intentar usar UPnP para mapear el puerto de entrada\n"
-
-#: ../../../src/init.cpp:186
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Intenta usar UPnP para mapear el puerto de escucha.\n"
-
-#: ../../../src/init.cpp:189
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Comisión por KB para agregar a las transacciones que envias\n"
-
-#: ../../../src/init.cpp:191
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Aceptar comandos consola y JSON-RPC\n"
-
-#: ../../../src/init.cpp:194
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Correr como demonio y acepta comandos\n"
-
-#: ../../../src/init.cpp:196
-msgid "Use the test network\n"
-msgstr "Usa la red de pruebas\n"
-
-#: ../../../src/init.cpp:197
-msgid "Username for JSON-RPC connections\n"
-msgstr "Usuario para las conexiones JSON-RPC\n"
-
-#: ../../../src/init.cpp:198
-msgid "Password for JSON-RPC connections\n"
-msgstr "Contraseña para las conexiones JSON-RPC\n"
-
-#: ../../../src/init.cpp:199
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 8332)\n"
-
-#: ../../../src/init.cpp:200
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Permite conexiones JSON-RPC desde la dirección IP especificada\n"
-
-#: ../../../src/init.cpp:201
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Ajusta el numero de claves en reserva <n> (predeterminado: 100)\n"
-
-#: ../../../src/init.cpp:203
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Rescanea la cadena de bloques para transacciones perdidas de la cartera\n"
-
-#: ../../../src/init.cpp:207
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL)\n"
-
-#: ../../../src/init.cpp:208
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Usa OpenSSL (https) para las conexiones JSON-RPC\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Archivo de certificado del servidor (Predeterminado: server.cert)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Server private key (default: server.pem)\n"
-msgstr "Clave privada del servidor (Predeterminado: server.pem)\n"
-
-#: ../../../src/init.cpp:211
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:215
-msgid "This help message\n"
-msgstr "Este mensaje de ayuda\n"
-
-#: ../../../src/init.cpp:353
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "No se puede obtener permiso de trabajo en la carpeta de datos %s. Probablemente Bitcoin ya se está ejecutando."
-
-#: ../../../src/init.cpp:379
-msgid "Error loading addr.dat      \n"
-msgstr "Error cargando addr.dat      \n"
-
-#: ../../../src/init.cpp:385
-msgid "Error loading blkindex.dat      \n"
-msgstr "Error cargando blkindex.dat      \n"
-
-#: ../../../src/init.cpp:396
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "Error cargando wallet.dat: Cartera dañada      \n"
-
-#: ../../../src/init.cpp:398
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "Error cargando el archivo wallet.dat: Se necesita una versión mas nueva de Bitcoin      \n"
-
-#: ../../../src/init.cpp:400
-msgid "Error loading wallet.dat      \n"
-msgstr "Error cargando wallet.dat      \n"
-
-#: ../../../src/init.cpp:489
-msgid "Invalid -proxy address"
-msgstr "Dirección -proxy no valida"
-
-#: ../../../src/init.cpp:514
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Cantidad inválida para -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:518
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción."
-
-#: ../../../src/main.cpp:1398
-msgid "Warning: Disk space is low  "
-msgstr "Cuidado: Poco espacio en el disco duro"
-
-#: ../../../src/net.cpp:1610
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "No es posible escuchar en el puerto %d en este ordenador. Probablemente Bitcoin ya se está ejecutando."
-
-#: ../../../src/rpc.cpp:2005
-#: ../../../src/rpc.cpp:2007
-#, c-format
-msgid "To use the %s option"
-msgstr "Para usar la opción %s"
-
-#: ../../../src/rpc.cpp:2009
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Precaución: %s, debes especificar rpcpassword=<password>\n"
-"en el archivo de configuración: %s\n"
-"Si el archivo no existe, debes crearlo con permisos de lectura al autor solamente.\n"
-
-#: ../../../src/rpc.cpp:2185
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Debes especificar rpcpassword=<password> en el archivo de configuración:\n"
-"%s\n"
-"Si el archivo no existe, debes crearlo con permisos de lectura al autor solamente."
-
-#: ../../../src/ui.cpp:217
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?"
-
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1247
-msgid "Enter the current passphrase to the wallet."
-msgstr "Introduce la contraseña actual de la cartera."
-
-#: ../../../src/ui.cpp:262
-#: ../../../src/ui.cpp:1183
-#: ../../../src/ui.cpp:1200
-#: ../../../src/ui.cpp:1248
-#: ../../../src/ui.cpp:1272
-#: ../../../src/ui.cpp:1292
-msgid "Passphrase"
-msgstr "Contraseña"
-
-#: ../../../src/ui.cpp:268
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "Por favor introduce la contraseña actual de la cartera."
-
-#: ../../../src/ui.cpp:276
-#: ../../../src/ui.cpp:1257
-#: ../../../src/ui.cpp:1314
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "La contraseña introducida para decriptar la cartera es incorrecta."
-
-#: ../../../src/ui.cpp:353
-msgid "Status"
-msgstr "Estado"
-
-#: ../../../src/ui.cpp:354
-msgid "Date"
-msgstr "Fecha"
-
-#: ../../../src/ui.cpp:355
-msgid "Description"
-msgstr "Descripción"
-
-#: ../../../src/ui.cpp:356
-msgid "Debit"
-msgstr "Débito"
-
-#: ../../../src/ui.cpp:357
-msgid "Credit"
-msgstr "Crédito"
-
-#: ../../../src/ui.cpp:568
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Abrir para %d bloques"
-
-#: ../../../src/ui.cpp:570
-#, c-format
-msgid "Open until %s"
-msgstr "Abrir hasta %s"
-
-#: ../../../src/ui.cpp:576
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/desconectado?"
-
-#: ../../../src/ui.cpp:578
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/no confirmado"
-
-#: ../../../src/ui.cpp:580
-#, c-format
-msgid "%d confirmations"
-msgstr "%d confirmaciones"
-
-#: ../../../src/ui.cpp:665
-msgid "Generated"
-msgstr "Generado"
-
-#: ../../../src/ui.cpp:673
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Generado (%s madura en %d bloques)"
-
-#: ../../../src/ui.cpp:677
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Generado - Cuidado: Este bloque no se recibió de otros nodos y probablemente no sea aceptado!"
-
-#: ../../../src/ui.cpp:681
-msgid "Generated (not accepted)"
-msgstr "Generado (no aceptado)"
-
-#: ../../../src/ui.cpp:691
-msgid "From: "
-msgstr "De: "
-
-#: ../../../src/ui.cpp:715
-msgid "Received with: "
-msgstr "Recibido con: "
-
-#: ../../../src/ui.cpp:760
-msgid "Payment to yourself"
-msgstr "Pago a ti mismo"
-
-#: ../../../src/ui.cpp:794
-msgid "To: "
-msgstr "Para: "
-
-#: ../../../src/ui.cpp:1109
-msgid "    Generating"
-msgstr "    Generando"
-
-#: ../../../src/ui.cpp:1111
-msgid "(not connected)"
-msgstr "(no conectado)"
-
-#: ../../../src/ui.cpp:1114
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d conexiones     %d bloques     %d transacciones"
-
-#: ../../../src/ui.cpp:1171
-msgid "Wallet already encrypted."
-msgstr "La cartera ya esta encriptada."
-
-#: ../../../src/ui.cpp:1182
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"Introduce la nueva contraseña de cartera.\n"
-"Por favor utiliza un contraseña de 10 o mas caracteres aleatorios, u ocho o mas palabras."
-
-#: ../../../src/ui.cpp:1189
-#: ../../../src/ui.cpp:1280
-msgid "Error: The supplied passphrase was too short."
-msgstr "Error: La contraseña introducida es demasiado corta."
-
-#: ../../../src/ui.cpp:1193
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"ATENCION: ¡Si encriptas tu cartera y pierdes la contraseña perderas TODOS TUS BITCOINS!\n"
-"¿Seguro que quieres seguir encriptando la cartera?"
-
-#: ../../../src/ui.cpp:1199
-msgid "Please re-enter your new wallet passphrase."
-msgstr "Por favor vuelve introducir la nueva contraseña."
-
-#: ../../../src/ui.cpp:1208
-#: ../../../src/ui.cpp:1302
-msgid "Error: the supplied passphrases didn't match."
-msgstr "Error: las contraseñas no son identicas."
-
-#: ../../../src/ui.cpp:1218
-msgid "Wallet encryption failed."
-msgstr "Encriptacion de cartera fallida."
-
-#: ../../../src/ui.cpp:1225
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"Cartera Encriptada.\n"
-"Recuerda que encriptando tu cartera no garantiza mantener a salvo tus bitcoins en caso de tener viruses en el ordenador."
-
-#: ../../../src/ui.cpp:1236
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "Cartera no encriptada, intenta encriptar primero."
-
-#: ../../../src/ui.cpp:1271
-msgid "Enter the new passphrase for the wallet."
-msgstr "Introduce la nueva contraseña para la cartera."
-
-#: ../../../src/ui.cpp:1291
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "Reintroduce la nueva contraseña para la cartera."
-
-#: ../../../src/ui.cpp:1323
-msgid "Wallet Passphrase Changed."
-msgstr "Contraseña de cartera cambiada."
-
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:2825
-msgid "New Receiving Address"
-msgstr "Nueva dirección de recepción"
-
-#: ../../../src/ui.cpp:1380
-#: ../../../src/ui.cpp:2826
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Debes usar una nueva dirección para cada pago que usted recibe.\n"
-"\n"
-"Etiqueta"
-
-#: ../../../src/ui.cpp:1464
-msgid "<b>Status:</b> "
-msgstr "<b>Estado:</b> "
-
-#: ../../../src/ui.cpp:1469
-msgid ", has not been successfully broadcast yet"
-msgstr ", no ha sido emitido satisfactoriamente todavía"
-
-#: ../../../src/ui.cpp:1471
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", emitido mediante %d nodo"
-
-#: ../../../src/ui.cpp:1473
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", emitido mediante %d nodos"
-
-#: ../../../src/ui.cpp:1477
-msgid "<b>Date:</b> "
-msgstr "<b>Fecha:</b> "
-
-#: ../../../src/ui.cpp:1485
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Fuente:</b> Generado<br>"
-
-#: ../../../src/ui.cpp:1491
-#: ../../../src/ui.cpp:1508
-msgid "<b>From:</b> "
-msgstr "<b>De:</b> "
-
-#: ../../../src/ui.cpp:1508
-msgid "unknown"
-msgstr "desconocido"
-
-#: ../../../src/ui.cpp:1509
-#: ../../../src/ui.cpp:1533
-#: ../../../src/ui.cpp:1592
-msgid "<b>To:</b> "
-msgstr "<b>Para:</b> "
-
-#: ../../../src/ui.cpp:1512
-msgid " (yours, label: "
-msgstr "(tuya, etiqueta: "
-
-#: ../../../src/ui.cpp:1514
-msgid " (yours)"
-msgstr "(tuya)"
-
-#: ../../../src/ui.cpp:1551
-#: ../../../src/ui.cpp:1563
-#: ../../../src/ui.cpp:1609
-#: ../../../src/ui.cpp:1626
-msgid "<b>Credit:</b> "
-msgstr "<b>Crédito:</b> "
-
-#: ../../../src/ui.cpp:1553
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s madura en %d bloques)"
-
-#: ../../../src/ui.cpp:1555
-msgid "(not accepted)"
-msgstr "(no aceptada)"
-
-#: ../../../src/ui.cpp:1600
-#: ../../../src/ui.cpp:1608
-#: ../../../src/ui.cpp:1623
-msgid "<b>Debit:</b> "
-msgstr "<b>Débito:</b> "
-
-#: ../../../src/ui.cpp:1614
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Comisión transacción:</b> "
-
-#: ../../../src/ui.cpp:1630
-msgid "<b>Net amount:</b> "
-msgstr "<b>Cantidad total:</b> "
-
-#: ../../../src/ui.cpp:1637
-msgid "Message:"
-msgstr "Mensaje:"
-
-#: ../../../src/ui.cpp:1639
-msgid "Comment:"
-msgstr "Comentario:"
-
-#: ../../../src/ui.cpp:1642
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a \"no aceptado\" y no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo."
-
-#: ../../../src/ui.cpp:1826
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "No se puede escribir el fichero autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1862
-msgid "Main"
-msgstr "Principal"
-
-#: ../../../src/ui.cpp:1872
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Arranca Bitcoin al iniciar el sistema"
-
-#: ../../../src/ui.cpp:1879
-msgid "&Minimize on close"
-msgstr "&Minimiza al cerrar"
-
-#: ../../../src/ui.cpp:2021
-#, c-format
-msgid "version %s"
-msgstr "versión %s"
-
-#: ../../../src/ui.cpp:2144
-msgid "Error in amount  "
-msgstr "Error en la cantidad  "
-
-#: ../../../src/ui.cpp:2144
-#: ../../../src/ui.cpp:2149
-#: ../../../src/ui.cpp:2154
-#: ../../../src/ui.cpp:2207
-#: ../../../src/uibase.cpp:61
-msgid "Send Coins"
-msgstr "Envia monedas"
-
-#: ../../../src/ui.cpp:2149
-msgid "Amount exceeds your balance  "
-msgstr "La cantidad excede su balance  "
-
-#: ../../../src/ui.cpp:2154
-msgid "Total exceeds your balance when the "
-msgstr "El total excede su balance cuando el "
-
-#: ../../../src/ui.cpp:2154
-msgid " transaction fee is included  "
-msgstr " la comisión de la transacción está incluida "
-
-#: ../../../src/ui.cpp:2181
-msgid "Payment sent  "
-msgstr "Pago enviado  "
-
-#: ../../../src/ui.cpp:2181
-#: ../../../src/ui.cpp:2191
-#: ../../../src/ui.cpp:2341
-#: ../../../src/ui.cpp:2506
-#: ../../../src/wallet.cpp:1088
-msgid "Sending..."
-msgstr "Enviando..."
-
-#: ../../../src/ui.cpp:2207
-msgid "Invalid address  "
-msgstr "Dirección inválida  "
-
-#: ../../../src/ui.cpp:2262
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Enviando %s a %s"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2368
-msgid "CANCELLED"
-msgstr "CANCELADO"
-
-#: ../../../src/ui.cpp:2339
-msgid "Cancelled"
-msgstr "Cancelado"
-
-#: ../../../src/ui.cpp:2341
-msgid "Transfer cancelled  "
-msgstr "Transferencia cancelada  "
-
-#: ../../../src/ui.cpp:2394
-msgid "Error: "
-msgstr "Error: "
-
-#: ../../../src/ui.cpp:2408
-#: ../../../src/ui.cpp:2477
-#: ../../../src/wallet.cpp:1106
-msgid "Insufficient funds"
-msgstr "Fondos insuficientes"
-
-#: ../../../src/ui.cpp:2413
-msgid "Connecting..."
-msgstr "Conectando..."
-
-#: ../../../src/ui.cpp:2418
-msgid "Unable to connect"
-msgstr "No es posible conectar"
-
-#: ../../../src/ui.cpp:2423
-msgid "Requesting public key..."
-msgstr "Pidiendo clave pública..."
-
-#: ../../../src/ui.cpp:2435
-msgid "Received public key..."
-msgstr "Clave pública recibida..."
-
-#: ../../../src/ui.cpp:2449
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "El destinatario no accepta transacciones enviadas a direcciones IP"
-
-#: ../../../src/ui.cpp:2451
-msgid "Transfer was not accepted"
-msgstr "La transferencia no fue aceptada"
-
-#: ../../../src/ui.cpp:2460
-msgid "Invalid response received"
-msgstr "Respuesta inválida recibida"
-
-#: ../../../src/ui.cpp:2473
-msgid "Creating transaction..."
-msgstr "Creando transacción..."
-
-#: ../../../src/ui.cpp:2496
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Esta transacción requiere una comisión de al menos %s por su cantidad, complejidad o uso de fondos recibidos recientemente"
-
-#: ../../../src/ui.cpp:2498
-msgid "Transaction creation failed"
-msgstr "Fallo al crear la transacción."
-
-#: ../../../src/ui.cpp:2508
-msgid "Transaction aborted"
-msgstr "Transacción abortada"
-
-#: ../../../src/ui.cpp:2516
-msgid "Lost connection, transaction cancelled"
-msgstr "Conexión perdida, transacción cancelada"
-
-#: ../../../src/ui.cpp:2532
-msgid "Sending payment..."
-msgstr "Enviando pago..."
-
-#: ../../../src/ui.cpp:2544
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui."
-
-#: ../../../src/ui.cpp:2553
-msgid "Waiting for confirmation..."
-msgstr "Esperando confirmación..."
-
-#: ../../../src/ui.cpp:2570
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"El pago se ha enviado, pero el receptor no pudo verificarlo.\n"
-"La transacción se grabó y el saldo fue transferido\n"
-"pero la información de los comentarios quedará en blanco."
-
-#: ../../../src/ui.cpp:2579
-msgid "Payment was sent, but an invalid response was received"
-msgstr "El pago fue enviado, pero se recibió una respuesta inválida"
-
-#: ../../../src/ui.cpp:2585
-msgid "Payment completed"
-msgstr "Pago completado"
-
-#: ../../../src/ui.cpp:2627
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-msgid "Name"
-msgstr "Nombre"
-
-#: ../../../src/ui.cpp:2628
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-msgid "Address"
-msgstr "Dirección"
-
-#: ../../../src/ui.cpp:2630
-#: ../../../src/ui.cpp:2785
-msgid "Label"
-msgstr "Etiqueta"
-
-#: ../../../src/ui.cpp:2631
-#: ../../../src/uibase.cpp:847
-msgid "Bitcoin Address"
-msgstr "Dirección Bitcoin"
-
-#: ../../../src/ui.cpp:2755
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Esta es una de sus direcciones para recibir pagos y no puede incluirse en la libreta de direcciones.  "
-
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2779
-msgid "Edit Address"
-msgstr "Editar dirección"
-
-#: ../../../src/ui.cpp:2785
-msgid "Edit Address Label"
-msgstr "Editar etiqueta dirección"
-
-#: ../../../src/ui.cpp:2813
-#: ../../../src/ui.cpp:2819
-msgid "Add Address"
-msgstr "Agregar dirección"
-
-#: ../../../src/ui.cpp:2906
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2908
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Generando"
-
-#: ../../../src/ui.cpp:2910
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (no conectado)"
-
-#: ../../../src/ui.cpp:2989
-msgid "&Open Bitcoin"
-msgstr "&Abrir Bitcoin"
-
-#: ../../../src/ui.cpp:2990
-msgid "&Send Bitcoins"
-msgstr "&Enviar Bitcoin"
-
-#: ../../../src/ui.cpp:2991
-msgid "O&ptions..."
-msgstr "O&pciones"
-
-#: ../../../src/ui.cpp:2994
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "S&alir"
-
-#: ../../../src/ui.cpp:3220
-msgid "Program has crashed and will terminate.  "
-msgstr "El programa ha detectado un error y va a cerrarse.  "
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Archivo"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Tus direcciones de recepción..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "&Encriptar cartera..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "&Cambiar contraseña de cartera..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "&Opciones..."
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "&Configuración"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "&Acerca de..."
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "&Ayuda"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "Libreta de direcciones"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Su dirección Bitcoin:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " &Nuevo... "
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " &Copiar al portapapeles "
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "Balance:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr " Todo"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr " Enviado"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr " Recibido"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr " En progreso"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "Todas las transacciones"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Enviado/Recibido"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "Enviado"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "Recibido"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "&Arranca Bitcoin al iniciar el sistema"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimiza a la bandeja en vez de a la barra de tareas"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "Mapea el puerto usando &UPnP"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "M&inimiza a la bandeja al cerrar"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "&Conecta usando un proxy socks4 (necesita reinicio): "
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "&IP proxy:"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " &Puerto:"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Comisión opcional a las transacciones por KB que ayuda a asegurar que tus transacciones son procesadas rápidamente. La mayoría de las transacciones son de 1KB. Se recomienda una comisión de 0.01."
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "Comisión de la transacción:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "&Aplicar"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "versión"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"Este es un software experimental.\n"
-"\n"
-"Distribuido bajo la licencia MIT/X11, vea el archivo adjunto \n"
-"license.txt o http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Este producto incluye software desarrollado por OpenSSL Project para su uso en el\n"
-"OpenSSL Toolkit (http://www.openssl.org/) y software criptográfico escrito por \n"
-"Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard."
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Introduce una dirección Bitcoin (ejemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "Pagar &A:"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "&Pegar"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr " Libreta &Direcciones..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "&Cantidad:"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "T&ransferir:"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr " Estándar"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "&Envia"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Conenctando..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Estas son tus direcciones Bitcoin para recibir pagos. Puedes darle una diferente a cada emisor para saber quien te está pagando. La dirección resaltada se muestra en la ventana principal."
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "&Edita..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " &Nueva dirección... "
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "Enviando"
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Estas son tus direcciones Bitcoin para recibir pagos. Puedes darle una diferente a cada emisor para saber quien te está pagando. La dirección resaltada se muestra en la ventana principal."
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "Recibiendo"
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "&Borra"
-
-#: ../../../src/util.cpp:870
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Precaución: Por favor revisa que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal Bitcoin no funcionará correctamente."
-
-#: ../../../src/util.cpp:904
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/wallet.cpp:1073
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "Error: Cartera bloqueada, no se puede crear la transacción"
-
-#: ../../../src/wallet.cpp:1081
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Error: Esta transacción requiere de una comisión de al menos %s por su cantidad, complejidad o uso de fondos recibidos recientemente "
-
-#: ../../../src/wallet.cpp:1083
-msgid "Error: Transaction creation failed  "
-msgstr "Error: La creación de la transacción falló  "
-
-#: ../../../src/wallet.cpp:1092
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui."
-
-#: ../../../src/wallet.cpp:1104
-msgid "Invalid amount"
-msgstr "Cantidad erronea"
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "Detalles de la transacción"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "Opciones"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "Acerca de Bitcoin"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "Sus direcciones Bitcoin"
-
-#~ msgid "Invalid bitcoin address"
-#~ msgstr "Dirección Bitcoin inválida"
diff --git a/locale/fr/LC_MESSAGES/bitcoin.mo b/locale/fr/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index f60e15b..0000000
Binary files a/locale/fr/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/fr/LC_MESSAGES/bitcoin.po b/locale/fr/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index a714e01..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-26 22:02-0000\n"
-"PO-Revision-Date: 2010-07-15 02:48+0100\n"
-"Last-Translator: aidos\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../init.cpp:174
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr ""
-
-#: ../../../init.cpp:388
-#, fuzzy
-msgid "Usage:"
-msgstr ""
-
-#: ../../../init.cpp:390
-msgid "Send command to bitcoin running with -server or -daemon\n"
-msgstr ""
-
-#: ../../../init.cpp:391
-msgid "Get help for a command\n"
-msgstr ""
-
-#: ../../../init.cpp:392
-msgid "List commands\n"
-msgstr ""
-
-#: ../../../init.cpp:393
-msgid "Options:\n"
-msgstr "Options:\n"
-
-#: ../../../init.cpp:394
-msgid "Generate coins\n"
-msgstr "Générer des pièces\n"
-
-#: ../../../init.cpp:395
-msgid "Don't generate coins\n"
-msgstr "Ne pas générer de pièce\n"
-
-#: ../../../init.cpp:396
-msgid "Start minimized\n"
-msgstr "Démarrer réduit\n"
-
-#: ../../../init.cpp:397
-msgid "Specify data directory\n"
-msgstr "Spécifier le repertoire de donnée\n"
-
-#: ../../../init.cpp:398
-msgid "Connect through socks4 proxy\n"
-msgstr "Connection à travers un proxy SOCKS4\n"
-
-#: ../../../init.cpp:399
-msgid "Add a node to connect to\n"
-msgstr "Ajouter un nœud auquel se connecter\n"
-
-#: ../../../init.cpp:400
-msgid "Connect only to the specified node\n"
-msgstr "Se connecter uniquement au nœud spécifié\n"
-
-#: ../../../init.cpp:401
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr ""
-
-#: ../../../init.cpp:402
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr ""
-
-#: ../../../init.cpp:403
-msgid "This help message\n"
-msgstr "Ce message d'aide\n"
-
-#: ../../../init.cpp:503
-msgid "Error loading addr.dat      \n"
-msgstr "Erreur lors du chargement de addr.dat      \n"
-
-#: ../../../init.cpp:509
-msgid "Error loading blkindex.dat      \n"
-msgstr "Erreur lors du chargement de blkindex.dat      \n"
-
-#: ../../../init.cpp:516
-msgid "Error loading wallet.dat      \n"
-msgstr "Erreur lors du chargement de wallet.dat      \n"
-
-#: ../../../init.cpp:584
-msgid "Invalid -proxy address"
-msgstr "Adresse -proxy invalide"
-
-#: ../../../init.cpp:677
-msgid "Program has crashed and will terminate.  "
-msgstr "Le programme a planté et va s'arrêter.  "
-
-#: ../../../main.cpp:1480
-#: ../../../main.cpp:1482
-msgid "Warning: Disk space is low  "
-msgstr "Attention: L'espace disque est presque épuisé  "
-
-#: ../../../main.cpp:3094
-#, c-format
-msgid "Error: This is an oversized transaction that requires a transaction fee of %s  "
-msgstr "Erreur: Ceci est une transaction de taille excessive qui nécessite %s de frais de transaction  "
-
-#: ../../../main.cpp:3096
-msgid "Error: Transaction creation failed  "
-msgstr "Erreur: La création de la transaction a échouée  "
-
-#: ../../../main.cpp:3101
-#: ../../../ui.cpp:1776
-#: ../../../ui.cpp:1778
-#: ../../../ui.cpp:1919
-#: ../../../ui.cpp:2068
-msgid "Sending..."
-msgstr "Envoi..."
-
-#: ../../../main.cpp:3105
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Erreur: La transaction a été rejetée. Ceci peut arriver si une partie des pièces de votre porte-monnaie ont déjà été dépensées, par exemple si vous avez utilisé une copie de wallet.dat et que les pièces ont été dépensées dans la copie mais pas marquées comme telles ici."
-
-#: ../../../main.cpp:3117
-msgid "Invalid amount"
-msgstr "Quantité invalide"
-
-#: ../../../main.cpp:3119
-#: ../../../ui.cpp:1986
-#: ../../../ui.cpp:2053
-msgid "Insufficient funds"
-msgstr "Fonds insuffisants"
-
-#: ../../../main.cpp:3124
-msgid "Invalid bitcoin address"
-msgstr "Adresse bitcoin incorrecte"
-
-#: ../../../ui.cpp:189
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Cette transaction est au delà de la limite de taille. Vous pouvez tout de même l'envoyer moyennant des frais de %s, qui ira au noeud gérant votre transaction, et qui aidera à soutenir le réseau. Acceptez-vous de payer ces frais ?"
-
-#: ../../../ui.cpp:286
-msgid "Status"
-msgstr "État"
-
-#: ../../../ui.cpp:287
-msgid "Date"
-msgstr "Date"
-
-#: ../../../ui.cpp:288
-msgid "Description"
-msgstr "Description"
-
-#: ../../../ui.cpp:289
-msgid "Debit"
-msgstr "Débit"
-
-#: ../../../ui.cpp:290
-msgid "Credit"
-msgstr "Crédit"
-
-#: ../../../ui.cpp:489
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Ouvert pour %d blocks"
-
-#: ../../../ui.cpp:491
-#, c-format
-msgid "Open until %s"
-msgstr "Ouvert jusqu'au %s"
-
-#: ../../../ui.cpp:497
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/hors-ligne?"
-
-#: ../../../ui.cpp:499
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/non confirmé"
-
-#: ../../../ui.cpp:501
-#, c-format
-msgid "%d confirmations"
-msgstr "%d confirmations"
-
-#: ../../../ui.cpp:584
-msgid "Generated"
-msgstr "Généré"
-
-#: ../../../ui.cpp:592
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Généré (%s mûrira dans %d blocks)"
-
-#: ../../../ui.cpp:596
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Généré - Attention: Ce block n'a été reçu par aucun autre nœud et ne sera probablement pas accepté!"
-
-#: ../../../ui.cpp:600
-msgid "Generated (not accepted)"
-msgstr "Généré (pas accepté)"
-
-#: ../../../ui.cpp:610
-msgid "From: "
-msgstr "De: "
-
-#: ../../../ui.cpp:634
-msgid "Received with: "
-msgstr "Reçu depuis: "
-
-#: ../../../ui.cpp:676
-msgid "Payment to yourself"
-msgstr "Paiement à vous-même"
-
-#: ../../../ui.cpp:713
-msgid "To: "
-msgstr "À: "
-
-#: ../../../ui.cpp:1009
-msgid "    Generating"
-msgstr "    Génération en cours"
-
-#: ../../../ui.cpp:1011
-msgid "(not connected)"
-msgstr "(non connecté)"
-
-#: ../../../ui.cpp:1014
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d connexions     %d blocks     %d transactions"
-
-#: ../../../ui.cpp:1128
-#: ../../../ui.cpp:2368
-msgid "New Receiving Address"
-msgstr "Nouvelle adresse de reception"
-
-#: ../../../ui.cpp:1129
-#: ../../../ui.cpp:2369
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"C'est une bonne politique d'utiliser une nouvelle adresse pour \n"
-"chaque paiement reçu.\n"
-"\n"
-"Intitulé"
-
-#: ../../../ui.cpp:1198
-msgid "<b>Status:</b> "
-msgstr "<b>État:</b> "
-
-#: ../../../ui.cpp:1203
-msgid ", has not been successfully broadcast yet"
-msgstr ", n'a pas encore été diffusé avec succès"
-
-#: ../../../ui.cpp:1205
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", diffusé à travers %d nœud"
-
-#: ../../../ui.cpp:1207
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", diffusé à travers %d nœuds"
-
-#: ../../../ui.cpp:1211
-msgid "<b>Date:</b> "
-msgstr "<b>Date:</b> "
-
-#: ../../../ui.cpp:1219
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Source:</b> Généré<br>"
-
-#: ../../../ui.cpp:1225
-#: ../../../ui.cpp:1243
-msgid "<b>From:</b> "
-msgstr "<b>De:</b> "
-
-#: ../../../ui.cpp:1243
-msgid "unknown"
-msgstr "inconnu"
-
-#: ../../../ui.cpp:1244
-#: ../../../ui.cpp:1268
-#: ../../../ui.cpp:1327
-msgid "<b>To:</b> "
-msgstr "<b>À:</b> "
-
-#: ../../../ui.cpp:1247
-msgid " (yours, label: "
-msgstr " (vous, intitulé: "
-
-#: ../../../ui.cpp:1249
-msgid " (yours)"
-msgstr " (vous)"
-
-#: ../../../ui.cpp:1286
-#: ../../../ui.cpp:1298
-#: ../../../ui.cpp:1361
-msgid "<b>Credit:</b> "
-msgstr "<b>Crédit:</b> "
-
-#: ../../../ui.cpp:1288
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s mûrira dans %d blocks)"
-
-#: ../../../ui.cpp:1290
-msgid "(not accepted)"
-msgstr "(pas accepté)"
-
-#: ../../../ui.cpp:1335
-#: ../../../ui.cpp:1358
-msgid "<b>Debit:</b> "
-msgstr "<b>Débit:</b> "
-
-#: ../../../ui.cpp:1349
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Redevance de transaction :</b> "
-
-#: ../../../ui.cpp:1365
-msgid "<b>Net amount:</b> "
-msgstr "<b>Montant net:</b> "
-
-#: ../../../ui.cpp:1372
-msgid "Message:"
-msgstr "Message:"
-
-#: ../../../ui.cpp:1375
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Les pièces générées doivent attendrent 120 blocks avant de pouvoir être dépensées. Quand vous avez généré ce block, il a été diffusé au réseau pour être ajouté à la chaîne de block. Si il échoue à être intégré à la chaîne, il changera à \"pas accepté\" et ne sera pas dépensable. Ceci peut parfois arriver si un autre nœud génère un block à quelques secondes du vôtre."
-
-#: ../../../ui.cpp:1442
-msgid "Main"
-msgstr "Général"
-
-#: ../../../ui.cpp:1447
-#, fuzzy
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Lancer Bitcoin au démarrage du système"
-
-#: ../../../ui.cpp:1454
-msgid "&Minimize on close"
-msgstr "&Réduire à la fermeture"
-
-#: ../../../ui.cpp:1610
-#, c-format
-msgid "version %s%s BETA"
-msgstr "version %s%s BETA"
-
-#: ../../../ui.cpp:1696
-msgid "Will appear as \"From: Unknown\""
-msgstr "Apparaîtra ainsi \"De: Inconnu\""
-
-#: ../../../ui.cpp:1681
-msgid "n/a"
-msgstr "Inconnu"
-
-#: ../../../ui.cpp:1681
-msgid "Unknown"
-msgstr "Inconnu"
-
-#: ../../../ui.cpp:1697
-msgid "Can't include a message when sending to a Bitcoin address"
-msgstr "Impossible d'inclure un message lors d'un envoi à une adresse Bitcoin"
-
-#: ../../../ui.cpp:1750
-msgid "Error in amount  "
-msgstr "Erreur dans le montant  "
-
-#: ../../../ui.cpp:1750
-#: ../../../ui.cpp:1755
-#: ../../../ui.cpp:1760
-#: ../../../ui.cpp:1786
-#: ../../../uibase.cpp:59
-msgid "Send Coins"
-msgstr "Envoyer des pièces"
-
-#: ../../../ui.cpp:1755
-msgid "Amount exceeds your balance  "
-msgstr "Le montant dépasse votre solde  "
-
-#: ../../../ui.cpp:1760
-msgid "Total exceeds your balance when the "
-msgstr "Le total dépasse votre solde quand les "
-
-#: ../../../ui.cpp:1760
-msgid " transaction fee is included  "
-msgstr " de frais de transaction sont ajoutés  "
-
-#: ../../../ui.cpp:1776
-msgid "Payment sent  "
-msgstr "Paiement envoyé  "
-
-#: ../../../ui.cpp:1786
-msgid "Invalid address  "
-msgstr "Adresse invalide  "
-
-#: ../../../ui.cpp:1840
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Envoi de %s à %s"
-
-#: ../../../ui.cpp:1913
-#: ../../../ui.cpp:1946
-msgid "CANCELLED"
-msgstr "ANNULÉ"
-
-#: ../../../ui.cpp:1917
-msgid "Cancelled"
-msgstr "Annulé"
-
-#: ../../../ui.cpp:1919
-msgid "Transfer cancelled  "
-msgstr "Transfert annulé  "
-
-#: ../../../ui.cpp:1972
-msgid "Error: "
-msgstr "Erreur: "
-
-#: ../../../ui.cpp:1991
-msgid "Connecting..."
-msgstr "Connexion..."
-
-#: ../../../ui.cpp:1996
-msgid "Unable to connect"
-msgstr "Impossible de se connecter"
-
-#: ../../../ui.cpp:2001
-msgid "Requesting public key..."
-msgstr "Requête de la clef publique..."
-
-#: ../../../ui.cpp:2013
-msgid "Received public key..."
-msgstr "Clef publique reçue..."
-
-#: ../../../ui.cpp:2025
-msgid "Transfer was not accepted"
-msgstr "Le transfer n'a pas été accepté"
-
-#: ../../../ui.cpp:2034
-msgid "Invalid response received"
-msgstr "Réponse invalide reçue"
-
-#: ../../../ui.cpp:2049
-msgid "Creating transaction..."
-msgstr "Création de la transaction..."
-
-#: ../../../ui.cpp:2061
-#, c-format
-msgid "This is an oversized transaction that requires a transaction fee of %s"
-msgstr "Ceci est une transaction de taille excessive qui nécessite des frais de transaction de %s"
-
-#: ../../../ui.cpp:2063
-msgid "Transaction creation failed"
-msgstr "La création de la transaction a échouée"
-
-#: ../../../ui.cpp:2070
-msgid "Transaction aborted"
-msgstr "Transaction interrompue"
-
-#: ../../../ui.cpp:2078
-msgid "Lost connection, transaction cancelled"
-msgstr "Connexion perdue, transaction annulée"
-
-#: ../../../ui.cpp:2094
-msgid "Sending payment..."
-msgstr "Envoi du paiement..."
-
-#: ../../../ui.cpp:2100
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "La transaction a été rejetée. Ceci peut arriver si une partie des pièces de votre porte-monnaie ont déjà été dépensées, par exemple si vous avez utilisé une copie de wallet.dat et que les pièces ont été dépensées dans la copie mais pas marquées comme telles ici."
-
-#: ../../../ui.cpp:2109
-msgid "Waiting for confirmation..."
-msgstr "Attente de confirmation..."
-
-#: ../../../ui.cpp:2127
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Le paiement a été envoyé, mais le destinataire n'a pas pû le vérifier.\n"
-"La transaction est enregistrée et sera créditée au destinataire,\n"
-"mais le commentaire sera vide."
-
-#: ../../../ui.cpp:2136
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Le paiement a été envoyé, mais une réponse invalide a été reçue"
-
-#: ../../../ui.cpp:2142
-msgid "Payment completed"
-msgstr "Paiement terminé"
-
-#: ../../../ui.cpp:2173
-#: ../../../ui.cpp:2319
-#: ../../../ui.cpp:2356
-msgid "Name"
-msgstr "Nom"
-
-#: ../../../ui.cpp:2174
-#: ../../../ui.cpp:2319
-#: ../../../ui.cpp:2356
-msgid "Address"
-msgstr "Adresse"
-
-#: ../../../ui.cpp:2176
-#: ../../../ui.cpp:2331
-msgid "Label"
-msgstr "Intitulé"
-
-#: ../../../ui.cpp:2177
-#: ../../../uibase.cpp:902
-msgid "Bitcoin Address"
-msgstr "Adresse Bitcoin"
-
-#: ../../../ui.cpp:2301
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Ceci est une de vos adresses de reception de paiement, et ne peut être ajoutée au carnet d'adresse.  "
-
-#: ../../../ui.cpp:2319
-#: ../../../ui.cpp:2325
-msgid "Edit Address"
-msgstr "Modifier l'adresse"
-
-#: ../../../ui.cpp:2331
-msgid "Edit Address Label"
-msgstr "Modifier l'intitulé de l'adresse"
-
-#: ../../../ui.cpp:2356
-#: ../../../ui.cpp:2362
-msgid "Add Address"
-msgstr "Ajouter une adresse"
-
-#: ../../../ui.cpp:2438
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../ui.cpp:2440
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Génération"
-
-#: ../../../ui.cpp:2442
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (non connecté)"
-
-#: ../../../ui.cpp:2519
-msgid "&Open Bitcoin"
-msgstr "&Ouvrir Bitcoin"
-
-#: ../../../ui.cpp:2520
-msgid "O&ptions..."
-msgstr "O&ptions..."
-
-#: ../../../ui.cpp:2524
-#: ../../../uibase.cpp:25
-msgid "E&xit"
-msgstr "&Quitter"
-
-#: ../../../uibase.cpp:28
-msgid "&File"
-msgstr "&Fichier"
-
-#: ../../../uibase.cpp:36
-msgid "&Your Receiving Addresses..."
-msgstr "&Vos adresses de reception..."
-
-#: ../../../uibase.cpp:40
-msgid "&Options..."
-msgstr "&Options..."
-
-#: ../../../uibase.cpp:43
-msgid "&Settings"
-msgstr "&Préférences"
-
-#: ../../../uibase.cpp:47
-msgid "&About..."
-msgstr "&À propos..."
-
-#: ../../../uibase.cpp:50
-msgid "&Help"
-msgstr "&Aide"
-
-#: ../../../uibase.cpp:60
-msgid "Address Book"
-msgstr "Carnet d'adresse"
-
-#: ../../../uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Votre adresse Bitcoin :"
-
-#: ../../../uibase.cpp:82
-msgid " &New... "
-msgstr " &Nouvelle... "
-
-#: ../../../uibase.cpp:85
-#: ../../../uibase.cpp:845
-#: ../../../uibase.cpp:948
-msgid " &Copy to Clipboard "
-msgstr " &Copier dans le presse-papier "
-
-#: ../../../uibase.cpp:99
-msgid "Balance:"
-msgstr "Solde :"
-
-#: ../../../uibase.cpp:115
-msgid " All"
-msgstr " Tout"
-
-#: ../../../uibase.cpp:115
-msgid " Sent"
-msgstr " Envoyés"
-
-#: ../../../uibase.cpp:115
-msgid " Received"
-msgstr " Reçus"
-
-#: ../../../uibase.cpp:115
-msgid " In Progress"
-msgstr " En cours"
-
-#: ../../../uibase.cpp:136
-msgid "All Transactions"
-msgstr "Toutes les transactions"
-
-#: ../../../uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Envoyées/Reçues"
-
-#: ../../../uibase.cpp:158
-msgid "Sent"
-msgstr "Envoyées"
-
-#: ../../../uibase.cpp:169
-msgid "Received"
-msgstr "Reçues"
-
-#: ../../../uibase.cpp:312
-#: ../../../uibase.cpp:473
-#: ../../../uibase.cpp:574
-#: ../../../uibase.cpp:787
-#: ../../../uibase.cpp:848
-#: ../../../uibase.cpp:957
-#: ../../../uibase.cpp:1046
-msgid "OK"
-msgstr "OK"
-
-#: ../../../uibase.cpp:355
-msgid "Optional transaction fee you give to the nodes that process your transactions."
-msgstr "Frais de transaction optionel que vous donnez au nœud qui traite vos transactions."
-
-#: ../../../uibase.cpp:364
-msgid "Transaction fee:"
-msgstr "Frais de transaction :"
-
-#: ../../../uibase.cpp:380
-msgid "&Limit coin generation to"
-msgstr "&Limiter la génération de pièce à"
-
-#: ../../../uibase.cpp:387
-msgid "processors"
-msgstr "processeurs"
-
-#: ../../../uibase.cpp:393
-msgid "&Start Bitcoin on system startup"
-msgstr "&Lancer Bitcoin au démarrage du système"
-
-#: ../../../uibase.cpp:397
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr ""
-"&Réduire dans la zone de notification\n"
-"plutôt que dans la barre des tâches"
-
-#: ../../../uibase.cpp:401
-msgid "M&inimize to the tray on close"
-msgstr "Ré&duire dans la zone de notification"
-
-#: ../../../uibase.cpp:408
-msgid "&Connect through socks4 proxy: "
-msgstr "Se &connecter à travers un proxy SOCKS4: "
-
-#: ../../../uibase.cpp:420
-msgid "Proxy &IP:"
-msgstr "&IP du proxy :"
-
-#: ../../../uibase.cpp:428
-msgid " &Port:"
-msgstr " Port :"
-
-#: ../../../uibase.cpp:450
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../uibase.cpp:454
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../uibase.cpp:476
-#: ../../../uibase.cpp:729
-#: ../../../uibase.cpp:792
-#: ../../../uibase.cpp:851
-#: ../../../uibase.cpp:960
-#: ../../../uibase.cpp:1049
-msgid "Cancel"
-msgstr "Annuler"
-
-#: ../../../uibase.cpp:479
-msgid "&Apply"
-msgstr "&Appliquer"
-
-#: ../../../uibase.cpp:540
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../uibase.cpp:546
-msgid "version"
-msgstr "version"
-
-#: ../../../uibase.cpp:557
-msgid ""
-"Copyright (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"Ceci est un logiciel expérimental.\n"
-"\n"
-"Distribué sous la licence logicielle MIT/X11, voir le fichier joint \n"
-"license.txt ou http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Ce produit comprend des composants logiciels développés pour le Projet OpenSSL \n"
-"OpenSSL Toolkit (http://www.openssl.org/) ainsi que des composants cryptographiques \n"
-"écrits par Eric Young (eay@cryptsoft.com) et des logiciels UPnP écrits par Thomas Bernard.."
-
-#: ../../../uibase.cpp:613
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJED9L) or IP address (e.g. 123.45.6.7)"
-msgstr ""
-"Entrez une adresse Bitcoin (par exemple : 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJED9L)\n"
-" ou une adresse IP (par exemple : 123.45.6.7)"
-
-#: ../../../uibase.cpp:627
-msgid "Pay &To:"
-msgstr "&Payable à:"
-
-#: ../../../uibase.cpp:642
-msgid "&Paste"
-msgstr "&Coller"
-
-#: ../../../uibase.cpp:645
-msgid " Address &Book..."
-msgstr " Carnet d'&adresse..."
-
-#: ../../../uibase.cpp:652
-msgid "&Amount:"
-msgstr "&Montant :"
-
-#: ../../../uibase.cpp:662
-msgid "T&ransfer:"
-msgstr "T&ransfert :"
-
-#: ../../../uibase.cpp:668
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../uibase.cpp:690
-msgid "&From:"
-msgstr "&De :"
-
-#: ../../../uibase.cpp:707
-msgid "&Message:"
-msgstr "&Message:"
-
-#: ../../../uibase.cpp:724
-msgid "&Send"
-msgstr "&Envoyer"
-
-#: ../../../uibase.cpp:776
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Connexion..."
-
-#: ../../../uibase.cpp:826
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Voici vos adresses Bitcoin de reception de paiement. Il peut être judicieux d'en fournir une différente à chaque émetteur afin de pouvoir suivre qui vous paie. L'adresse surlignée est affichée dans la fenêtre principale."
-
-#: ../../../uibase.cpp:839
-#: ../../../uibase.cpp:951
-msgid "&Edit..."
-msgstr "&Modifier..."
-
-#: ../../../uibase.cpp:842
-#: ../../../uibase.cpp:954
-msgid " &New Address... "
-msgstr " &Nouvelle adresse... "
-
-#: ../../../uibase.cpp:914
-msgid "Sending"
-msgstr "Envoi"
-
-#: ../../../uibase.cpp:922
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Voici vos adresses Bitcoin de reception de paiement. Vous pouvez en fournir une différente à chaque émetteur afin de pouvoir suivre qui vous paie. L'adresse surlignée sera affichée dans la fenêtre principale."
-
-#: ../../../uibase.cpp:935
-msgid "Receiving"
-msgstr "Reception"
-
-#: ../../../uibase.cpp:945
-msgid "&Delete"
-msgstr "&Supprimer"
-
-#: ../../../uibase.h:149
-msgid "Transaction Details"
-msgstr "Détails de la transaction"
-
-#: ../../../uibase.h:202
-msgid "Options"
-msgstr "Options"
-
-#: ../../../uibase.h:230
-msgid "About Bitcoin"
-msgstr "À propos de Bitcoin"
-
-#: ../../../uibase.h:340
-msgid "Your Bitcoin Addresses"
-msgstr "Votre adresse Bitcoin"
-
-#~ msgid "Usage: bitcoin [options]"
-#~ msgstr "Usage: bitcoin [options]"
diff --git a/locale/it/LC_MESSAGES/bitcoin.mo b/locale/it/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 12386bc..0000000
Binary files a/locale/it/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/it/LC_MESSAGES/bitcoin.po b/locale/it/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index c041b1e..0000000
+++ /dev/null
@@ -1,967 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-05-15 18:22+0100\n"
-"PO-Revision-Date: 2011-05-26 09:46+0100\n"
-"Last-Translator: Joozero <hostfat@gmail.com>\n"
-"Language-Team: \n"
-"Language: Italian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/net.cpp:1499
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Impossibile utilizzare la porta %d su questo computer.  Bitcoin probabilmente e' gia' in esecuzione"
-
-#: ../../../src/ui.cpp:202
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Questo trasferimento supera le dimensioni massime. Puoi comunque inviarlo per un costo aggiuntivo di %s, che andrà ai nodi che effettueranno il processo della tua operazione e che supportano il network. Vuoi pagare il costo aggiuntivo?"
-
-#: ../../../src/ui.cpp:301
-msgid "Status"
-msgstr "Stato"
-
-#: ../../../src/ui.cpp:302
-msgid "Date"
-msgstr "Data"
-
-#: ../../../src/ui.cpp:303
-msgid "Description"
-msgstr "Descrizione"
-
-#: ../../../src/ui.cpp:304
-msgid "Debit"
-msgstr "Debito"
-
-#: ../../../src/ui.cpp:305
-msgid "Credit"
-msgstr "Credito"
-
-#: ../../../src/ui.cpp:511
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Aperto per %d blocchi"
-
-#: ../../../src/ui.cpp:513
-#, c-format
-msgid "Open until %s"
-msgstr "Aperto fino a %s"
-
-#: ../../../src/ui.cpp:519
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/disconnesso?"
-
-#: ../../../src/ui.cpp:521
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/non confermato"
-
-#: ../../../src/ui.cpp:523
-#, c-format
-msgid "%d confirmations"
-msgstr "%d conferme"
-
-#: ../../../src/ui.cpp:608
-msgid "Generated"
-msgstr "Generato"
-
-#: ../../../src/ui.cpp:616
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Generato (%s matureranno in %d altri blocchi)"
-
-#: ../../../src/ui.cpp:620
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Generato - Attenzione: Questo blocco non è stato ricevuto da nessun altro nodo e probabilmente non sarà accettato!"
-
-#: ../../../src/ui.cpp:624
-msgid "Generated (not accepted)"
-msgstr "Generato (non accettato)"
-
-#: ../../../src/ui.cpp:634
-msgid "From: "
-msgstr "Da: "
-
-#: ../../../src/ui.cpp:658
-msgid "Received with: "
-msgstr "Ricevuto con: "
-
-#: ../../../src/ui.cpp:704
-msgid "Payment to yourself"
-msgstr "Pagamento a te stesso"
-
-#: ../../../src/ui.cpp:738
-msgid "To: "
-msgstr "A: "
-
-#: ../../../src/ui.cpp:1053
-msgid "    Generating"
-msgstr "    Generando"
-
-#: ../../../src/ui.cpp:1055
-msgid "(not connected)"
-msgstr "(non connesso)"
-
-#: ../../../src/ui.cpp:1058
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d connessioni     %d blocchi     %d trasferimenti"
-
-#: ../../../src/ui.cpp:1163
-#: ../../../src/ui.cpp:2527
-msgid "New Receiving Address"
-msgstr "Nuovo indirizzo di ricezione"
-
-#: ../../../src/ui.cpp:1164
-#: ../../../src/ui.cpp:2528
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Si dovrebbe usare un nuovo indirizzo per ogni pagamento che ricevi.\n"
-"\n"
-"Label"
-
-#: ../../../src/ui.cpp:1233
-msgid "<b>Status:</b> "
-msgstr "<b>Stato:</b> "
-
-#: ../../../src/ui.cpp:1238
-msgid ", has not been successfully broadcast yet"
-msgstr ", non è ancora stato trasmesso correttamente"
-
-#: ../../../src/ui.cpp:1240
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", trasmissione attraverso %d nodo"
-
-#: ../../../src/ui.cpp:1242
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", trasmissione attraverso %d nodi"
-
-#: ../../../src/ui.cpp:1246
-msgid "<b>Date:</b> "
-msgstr "<b>Data:</b> "
-
-#: ../../../src/ui.cpp:1254
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Sorgente:</b> Generato<br>"
-
-#: ../../../src/ui.cpp:1260
-#: ../../../src/ui.cpp:1278
-msgid "<b>From:</b> "
-msgstr "<b>Da:</b> "
-
-#: ../../../src/ui.cpp:1278
-msgid "unknown"
-msgstr "sconosciuto"
-
-#: ../../../src/ui.cpp:1279
-#: ../../../src/ui.cpp:1303
-#: ../../../src/ui.cpp:1362
-msgid "<b>To:</b> "
-msgstr "<b>A:</b> "
-
-#: ../../../src/ui.cpp:1282
-msgid " (yours, label: "
-msgstr " (vostro, label: "
-
-#: ../../../src/ui.cpp:1284
-msgid " (yours)"
-msgstr " (vostro)"
-
-#: ../../../src/ui.cpp:1321
-#: ../../../src/ui.cpp:1333
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:1396
-msgid "<b>Credit:</b> "
-msgstr "<b>Credito:</b> "
-
-#: ../../../src/ui.cpp:1323
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s matureranno in %d altri blocchi)"
-
-#: ../../../src/ui.cpp:1325
-msgid "(not accepted)"
-msgstr "(non accettato)"
-
-#: ../../../src/ui.cpp:1370
-#: ../../../src/ui.cpp:1378
-#: ../../../src/ui.cpp:1393
-msgid "<b>Debit:</b> "
-msgstr "<b>Debito:</b> "
-
-#: ../../../src/ui.cpp:1384
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Costo del trasferimento :</b> "
-
-#: ../../../src/ui.cpp:1400
-msgid "<b>Net amount:</b> "
-msgstr "<b>Quantità del network:</b> "
-
-#: ../../../src/ui.cpp:1407
-msgid "Message:"
-msgstr "Messaggio:"
-
-#: ../../../src/ui.cpp:1409
-msgid "Comment:"
-msgstr "Commento:"
-
-#: ../../../src/ui.cpp:1412
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Le monete generate devono aspettare 120 blocchi prima di poter essere spese. Quando hai generato questo blocco, è stato diffuso sul network  per essere aggiunto alla catena dei blocchi. Se fallirà l'entrata nella catena, cambierà in \"non accettato\" e non spendibile. Questo può capitare se un altro nodo genera un blocco pochi secondi prima del tuo."
-
-#: ../../../src/ui.cpp:1592
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Impossibile creare il file autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1628
-msgid "Main"
-msgstr "Principale"
-
-#: ../../../src/ui.cpp:1636
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Avvia Bitcoin all'avvio del sistema"
-
-#: ../../../src/ui.cpp:1643
-msgid "&Minimize on close"
-msgstr "&Minimizza se chiuso"
-
-#: ../../../src/ui.cpp:1785
-#, c-format
-msgid "version %s"
-msgstr "versione %s"
-
-#: ../../../src/ui.cpp:1897
-msgid "Error in amount  "
-msgstr "Errore nell'ammontare  "
-
-#: ../../../src/ui.cpp:1897
-#: ../../../src/ui.cpp:1902
-#: ../../../src/ui.cpp:1907
-#: ../../../src/ui.cpp:1942
-#: ../../../src/uibase.cpp:55
-msgid "Send Coins"
-msgstr "Invia monete"
-
-#: ../../../src/ui.cpp:1902
-msgid "Amount exceeds your balance  "
-msgstr "L'ammontare è andato oltre i tuoi capitali  "
-
-#: ../../../src/ui.cpp:1907
-msgid "Total exceeds your balance when the "
-msgstr "Il totale supera il tuo bilancio quando il "
-
-#: ../../../src/ui.cpp:1907
-msgid " transaction fee is included  "
-msgstr " il costo del trasferimento è incluso  "
-
-#: ../../../src/ui.cpp:1925
-msgid "Payment sent  "
-msgstr "Pagamento inviato  "
-
-#: ../../../src/ui.cpp:1925
-#: ../../../src/ui.cpp:1930
-#: ../../../src/ui.cpp:2074
-#: ../../../src/ui.cpp:2227
-#: ../../../src/main.cpp:3999
-msgid "Sending..."
-msgstr "Invio in corso..."
-
-#: ../../../src/ui.cpp:1942
-msgid "Invalid address  "
-msgstr "Indirizzo non valido  "
-
-#: ../../../src/ui.cpp:1995
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Inviando %s a %s"
-
-#: ../../../src/ui.cpp:2068
-#: ../../../src/ui.cpp:2101
-msgid "CANCELLED"
-msgstr "CANCELLATO"
-
-#: ../../../src/ui.cpp:2072
-msgid "Cancelled"
-msgstr "Cancellato"
-
-#: ../../../src/ui.cpp:2074
-msgid "Transfer cancelled  "
-msgstr "Operazione cancellata  "
-
-#: ../../../src/ui.cpp:2127
-msgid "Error: "
-msgstr "Errore: "
-
-#: ../../../src/ui.cpp:2141
-#: ../../../src/ui.cpp:2212
-#: ../../../src/main.cpp:4018
-msgid "Insufficient funds"
-msgstr "Fondi insufficenti"
-
-#: ../../../src/ui.cpp:2146
-msgid "Connecting..."
-msgstr "Connessione in corso..."
-
-#: ../../../src/ui.cpp:2151
-msgid "Unable to connect"
-msgstr "Impossibile connettersi"
-
-#: ../../../src/ui.cpp:2156
-msgid "Requesting public key..."
-msgstr "Richiesta chiave pubblica..."
-
-#: ../../../src/ui.cpp:2168
-msgid "Received public key..."
-msgstr "Ricezione chiave pubblica..."
-
-#: ../../../src/ui.cpp:2182
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Il destinatario non accetta transazioni effettuate tramite questo IP"
-
-#: ../../../src/ui.cpp:2184
-msgid "Transfer was not accepted"
-msgstr "Trasferimento non accettato"
-
-#: ../../../src/ui.cpp:2193
-msgid "Invalid response received"
-msgstr "Risposta non valida ricevuta"
-
-#: ../../../src/ui.cpp:2208
-msgid "Creating transaction..."
-msgstr "Creo transazione..."
-
-#: ../../../src/ui.cpp:2220
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Questa transazione richiede un costo di transazione di almeno %s a causa della sua quantità, complessità, o per l'uso di fondi recentemente ricevuti"
-
-#: ../../../src/ui.cpp:2222
-msgid "Transaction creation failed"
-msgstr "Creazione trasferimento fallita"
-
-#: ../../../src/ui.cpp:2229
-msgid "Transaction aborted"
-msgstr "Trasferimento bloccato"
-
-#: ../../../src/ui.cpp:2237
-msgid "Lost connection, transaction cancelled"
-msgstr "Connessione persa, trasferimento cancellato"
-
-#: ../../../src/ui.cpp:2253
-msgid "Sending payment..."
-msgstr "Invio del pagamento..."
-
-#: ../../../src/ui.cpp:2259
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Il trasferimento è stato respinto. Questo può accadere se alcune delle monete nel tuo portafoglio erano già state spese, o anche se hai usato una copia di wallet.dat e le monete erano già state spese nella copia originale ma non segnate in quest'ultima."
-
-#: ../../../src/ui.cpp:2268
-msgid "Waiting for confirmation..."
-msgstr "In attesa di conferma..."
-
-#: ../../../src/ui.cpp:2286
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Il pagamento è stato inviato, ma il destinatario non è stato in grado di verificarlo.\n"
-"Il trasferimento è registrato e sarà accreditato al destinatario,\n"
-"ma il commento informativo verrà mostrato come vuoto."
-
-#: ../../../src/ui.cpp:2295
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Il pagamento è stato inviato, ma è arrivata un risposta invalida"
-
-#: ../../../src/ui.cpp:2301
-msgid "Payment completed"
-msgstr "Pagamento completato"
-
-#: ../../../src/ui.cpp:2332
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2515
-msgid "Name"
-msgstr "Nome"
-
-#: ../../../src/ui.cpp:2333
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2515
-msgid "Address"
-msgstr "Indirizzo"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2490
-msgid "Label"
-msgstr "Label"
-
-#: ../../../src/ui.cpp:2336
-#: ../../../src/uibase.cpp:837
-msgid "Bitcoin Address"
-msgstr "Indirizzo Bitcoin"
-
-#: ../../../src/ui.cpp:2460
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Questo qui è uno dei tuoi indirizzi personali per ricevere pagamenti e non può essere inserito nella rubrica indirizzi.  "
-
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2484
-msgid "Edit Address"
-msgstr "Modifica indirizzo"
-
-#: ../../../src/ui.cpp:2490
-msgid "Edit Address Label"
-msgstr "Modifica spazio indirizzo"
-
-#: ../../../src/ui.cpp:2515
-#: ../../../src/ui.cpp:2521
-msgid "Add Address"
-msgstr "Aggiungi indirizzo"
-
-#: ../../../src/ui.cpp:2598
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2600
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Generando"
-
-#: ../../../src/ui.cpp:2602
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (non connesso)"
-
-#: ../../../src/ui.cpp:2681
-msgid "&Open Bitcoin"
-msgstr "&Apri Bitcoin"
-
-#: ../../../src/ui.cpp:2682
-msgid "&Send Bitcoins"
-msgstr "&Apri Bitcoin"
-
-#: ../../../src/ui.cpp:2683
-msgid "O&ptions..."
-msgstr "&Opzioni..."
-
-#: ../../../src/ui.cpp:2686
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "&Esci"
-
-#: ../../../src/ui.cpp:2902
-msgid "Program has crashed and will terminate.  "
-msgstr "Il programma è crashato e sarà terminato.  "
-
-#: ../../../src/main.cpp:1868
-msgid "Warning: Disk space is low  "
-msgstr "Attenzione: c'è poco spazio sul disco  "
-
-#: ../../../src/main.cpp:3992
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Errore: Questa transazione richiede un costo di transazione di almeno %s a causa della sua quantità, complessità, o per l'uso di fondi recentemente ricevuti"
-
-#: ../../../src/main.cpp:3994
-msgid "Error: Transaction creation failed  "
-msgstr "Errore: Creazione del trasferimento fallito  "
-
-#: ../../../src/main.cpp:4003
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Errore: Il trasferimento è stato respinto. Questo può accadere se alcune delle monete nel tuo portafoglio erano già state spese, o anche se hai usato una copia di wallet.dat e le monete erano già state spese nella copia originale ma non segnate in quest'ultima."
-
-#: ../../../src/main.cpp:4016
-msgid "Invalid amount"
-msgstr "Quantità non valida"
-
-#: ../../../src/main.cpp:4023
-msgid "Invalid bitcoin address"
-msgstr "Indirizzo bitcoin non valido"
-
-#: ../../../src/rpc.cpp:1800
-#: ../../../src/rpc.cpp:1802
-#, c-format
-msgid "To use the %s option"
-msgstr "Usare l'opzione %s"
-
-#: ../../../src/rpc.cpp:1804
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Attenzione: %s, devi impostare rpcpassword=<password>\n"
-"nel file di configurazione: %s\n"
-"Se questo file non esiste, puoi crearlo come un file di sola lettura.\n"
-
-#: ../../../src/rpc.cpp:1972
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Devi settare rpcpassword=<password> nel file di configurazione:\n"
-"%s\n"
-"Se questo file non esiste, puoi crearlo come un file di sola lettura"
-
-#: ../../../src/util.cpp:865
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Attenzione: Controlla che data/ora del tuo computer siano corrette. Se il tuo orologio è sbagliato bitcoin non funzionerà correttamente"
-
-#: ../../../src/util.cpp:898
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&File"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Il tuo indirizzo di ricezione..."
-
-#: ../../../src/uibase.cpp:36
-msgid "&Options..."
-msgstr "&Opzioni..."
-
-#: ../../../src/uibase.cpp:39
-msgid "&Settings"
-msgstr "I&mpostazioni"
-
-#: ../../../src/uibase.cpp:43
-msgid "&About..."
-msgstr "&Info..."
-
-#: ../../../src/uibase.cpp:46
-msgid "&Help"
-msgstr "&Aiuto"
-
-#: ../../../src/uibase.cpp:56
-msgid "Address Book"
-msgstr "Rubrica indirizzi"
-
-#: ../../../src/uibase.cpp:69
-msgid "Your Bitcoin Address:"
-msgstr "Il tuo indirizzo Bitcoin:"
-
-#: ../../../src/uibase.cpp:76
-msgid " &New... "
-msgstr " &Nuovo... "
-
-#: ../../../src/uibase.cpp:79
-#: ../../../src/uibase.cpp:780
-#: ../../../src/uibase.cpp:883
-msgid " &Copy to Clipboard "
-msgstr " &Copia nella Clipboard "
-
-#: ../../../src/uibase.cpp:93
-msgid "Balance:"
-msgstr "Bilancio:"
-
-#: ../../../src/uibase.cpp:109
-msgid " All"
-msgstr " Tutte"
-
-#: ../../../src/uibase.cpp:109
-msgid " Sent"
-msgstr " Inviato"
-
-#: ../../../src/uibase.cpp:109
-msgid " Received"
-msgstr " Ricevuto"
-
-#: ../../../src/uibase.cpp:109
-msgid " In Progress"
-msgstr " In lavorazione"
-
-#: ../../../src/uibase.cpp:130
-msgid "All Transactions"
-msgstr "Tutte le transazioni"
-
-#: ../../../src/uibase.cpp:141
-msgid "Sent/Received"
-msgstr "Inviato/Ricevuto"
-
-#: ../../../src/uibase.cpp:152
-msgid "Sent"
-msgstr "Inviato"
-
-#: ../../../src/uibase.cpp:163
-msgid "Received"
-msgstr "Ricevuto"
-
-#: ../../../src/uibase.cpp:302
-#: ../../../src/uibase.cpp:443
-#: ../../../src/uibase.cpp:542
-#: ../../../src/uibase.cpp:722
-#: ../../../src/uibase.cpp:783
-#: ../../../src/uibase.cpp:892
-#: ../../../src/uibase.cpp:981
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:345
-msgid "&Start Bitcoin on system startup"
-msgstr "&Avvia Bitcoin all'avvio del sistema"
-
-#: ../../../src/uibase.cpp:348
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimizza nella tray invece che nella barra"
-
-#: ../../../src/uibase.cpp:351
-msgid "Map port using &UPnP"
-msgstr "Imposta le porte del firewall utilizzando &UPnP"
-
-#: ../../../src/uibase.cpp:354
-msgid "&Minimize to the tray on close"
-msgstr "&Minimizza nella tray alla chiusura"
-
-#: ../../../src/uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Connesso attraverso proxy socks4: "
-
-#: ../../../src/uibase.cpp:371
-msgid "Proxy &IP:"
-msgstr "Proxy &IP:"
-
-#: ../../../src/uibase.cpp:379
-msgid " &Port:"
-msgstr " &Porta:"
-
-#: ../../../src/uibase.cpp:392
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Tassa di transazione per ogni KB opzionale che consente di assicurarsi che le transazioni siano trattate con rapidità. La maggior parte delle operazioni sono 1KB. Quota 0,01 raccomandata."
-
-#: ../../../src/uibase.cpp:399
-msgid "Pay transaction fee:"
-msgstr "Costo trasferimento:"
-
-#: ../../../src/uibase.cpp:420
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:424
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:446
-#: ../../../src/uibase.cpp:668
-#: ../../../src/uibase.cpp:727
-#: ../../../src/uibase.cpp:786
-#: ../../../src/uibase.cpp:895
-#: ../../../src/uibase.cpp:984
-msgid "Cancel"
-msgstr "Cancella"
-
-#: ../../../src/uibase.cpp:449
-msgid "&Apply"
-msgstr "&Accetta"
-
-#: ../../../src/uibase.cpp:508
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:514
-msgid "version"
-msgstr "versione"
-
-#: ../../../src/uibase.cpp:525
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"Questo è un software sperimentale.\n"
-"\n"
-"Distribuito sotto la licenza software MIT/X11, guarda il file license.txt\n"
-"incluso oppure su http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Questo prodotto include software sviluppato dal progetto OpenSSL per\n"
-"l'uso del (http://www.openssl.org/) e il software criptografico scritto\n"
-"da Eric Young (eay@cryptsoft.com) e UPnP software scritto da Thomas Bernard."
-
-#: ../../../src/uibase.cpp:581
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Inserisci un indirizzo Bitcoin (es. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:595
-msgid "Pay &To:"
-msgstr "Paga &a:"
-
-#: ../../../src/uibase.cpp:610
-msgid "&Paste"
-msgstr "&Incolla"
-
-#: ../../../src/uibase.cpp:613
-msgid " Address &Book..."
-msgstr " &Rubrica degli indirizzi..."
-
-#: ../../../src/uibase.cpp:620
-msgid "&Amount:"
-msgstr "&Quantità"
-
-#: ../../../src/uibase.cpp:630
-msgid "&Transfer:"
-msgstr "&Trasferimento:"
-
-#: ../../../src/uibase.cpp:636
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../src/uibase.cpp:663
-msgid "&Send"
-msgstr "&Invia"
-
-#: ../../../src/uibase.cpp:711
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Connessione in corso..."
-
-#: ../../../src/uibase.cpp:761
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Questi sono i tuoi indirizzi Bitcoin per ricevere pagamenti. Potrai darne uno diverso ad ognuno per cosi tenere traccia di chi ti sta pagando. L'indirizzo selezionato sarà quello mostrato nella finestra principale."
-
-#: ../../../src/uibase.cpp:774
-#: ../../../src/uibase.cpp:886
-msgid "&Edit..."
-msgstr "&Cambia..."
-
-#: ../../../src/uibase.cpp:777
-#: ../../../src/uibase.cpp:889
-msgid " &New Address... "
-msgstr " &Nuovo indirizzo... "
-
-#: ../../../src/uibase.cpp:849
-msgid "Sending"
-msgstr "Invio in corso.."
-
-#: ../../../src/uibase.cpp:857
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Questi sono i tuoi indirizzi Bitcoin per ricevere pagamenti. Potrai darne uno diverso ad ognuno per cosi tenere traccia di chi ti sta pagando. L'indirizzo selezionato sarà quello mostrato nella finestra principale."
-
-#: ../../../src/uibase.cpp:870
-msgid "Receiving"
-msgstr "Ricevendo"
-
-#: ../../../src/uibase.cpp:880
-msgid "&Delete"
-msgstr "&Cancella"
-
-#: ../../../src/init.cpp:147
-msgid "Bitcoin version"
-msgstr "Versione Bitcoin "
-
-#: ../../../src/init.cpp:148
-msgid "Usage:"
-msgstr "Uso:"
-
-#: ../../../src/init.cpp:150
-msgid "Send command to -server or bitcoind\n"
-msgstr "Invia comando a -server o a bitcoin\n"
-
-#: ../../../src/init.cpp:151
-msgid "List commands\n"
-msgstr "Lista comandi\n"
-
-#: ../../../src/init.cpp:152
-msgid "Get help for a command\n"
-msgstr "Chiedi aiuto per i comandi\n"
-
-#: ../../../src/init.cpp:153
-msgid "Options:\n"
-msgstr "Opzioni:\n"
-
-#: ../../../src/init.cpp:154
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Specifica il file di configurazione (normalmente e': bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:155
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Specifica il fil pid (normalmente: bitcoin.pid)\n"
-
-#: ../../../src/init.cpp:156
-msgid "Generate coins\n"
-msgstr "Genera monete\n"
-
-#: ../../../src/init.cpp:157
-msgid "Don't generate coins\n"
-msgstr "Non generare monete\n"
-
-#: ../../../src/init.cpp:158
-msgid "Start minimized\n"
-msgstr "Avvia minimizzato\n"
-
-#: ../../../src/init.cpp:159
-msgid "Specify data directory\n"
-msgstr "Indica la cartella per i dati\n"
-
-#: ../../../src/init.cpp:160
-msgid "Connect through socks4 proxy\n"
-msgstr "Connetti attraverso proxy socks4\n"
-
-#: ../../../src/init.cpp:161
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Permetti DNS lookups per aggiungere un nodo e collegarsi\n"
-
-#: ../../../src/init.cpp:162
-msgid "Add a node to connect to\n"
-msgstr "Aggiungi un nodoper la connessione a\n"
-
-#: ../../../src/init.cpp:163
-msgid "Connect only to the specified node\n"
-msgstr "Collegati solo al nodo specificato\n"
-
-#: ../../../src/init.cpp:164
-msgid "Don't accept connections from outside\n"
-msgstr "Non accettare connessioni dall'esterno\n"
-
-#: ../../../src/init.cpp:167
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Non provare a usare UPnP per mappare le porte in ascolto\n"
-
-#: ../../../src/init.cpp:169
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Prova ad usare l' UPnP per mappare la porte in ascolto\n"
-
-#: ../../../src/init.cpp:172
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Tassa per KB da aggiungere alle operazioni di invio\n"
-
-#: ../../../src/init.cpp:174
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Accetta linea di comando e i comando JSON-RPC\n"
-
-#: ../../../src/init.cpp:177
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Avvia in background come processo e accetta i comandi\n"
-
-#: ../../../src/init.cpp:179
-msgid "Use the test network\n"
-msgstr "Usa il network test\n"
-
-#: ../../../src/init.cpp:180
-msgid "Username for JSON-RPC connections\n"
-msgstr "Username per le connessioni JSON-RPC\n"
-
-#: ../../../src/init.cpp:181
-msgid "Password for JSON-RPC connections\n"
-msgstr "Password per le connessioni JSON-RPC\n"
-
-#: ../../../src/init.cpp:182
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "In ascolta per connessioni JSON-RPC sulla porta <port> (default: 8332)\n"
-
-#: ../../../src/init.cpp:183
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Permetti connessioni JSON-RPC da un indirizzo IP specifico\n"
-
-#: ../../../src/init.cpp:184
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Invia comandi al nodo in esecuzione su <ip> (default: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:185
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Imposta la dimensione della key pool a <n> (default: 100)\n"
-
-#: ../../../src/init.cpp:186
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Ricontrolla il blocco della catena transazioni del portafoglio mancate\n"
-
-#: ../../../src/init.cpp:190
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"opzioni SSL: (Consulta Bitcoin Wiki per le istruzioni di configurazione dell' SSL)\n"
-
-#: ../../../src/init.cpp:191
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Usa OpenSSL (https) per connessioni JSON-RPC\n"
-
-#: ../../../src/init.cpp:192
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "File del certificato del server (default: server.cert)\n"
-
-#: ../../../src/init.cpp:193
-msgid "Server private key (default: server.pem)\n"
-msgstr "Chiave del server privata ((default: server.pem)\n"
-
-#: ../../../src/init.cpp:194
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Cifrari accettati (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:198
-msgid "This help message\n"
-msgstr "Questo messaggio di aiuto\n"
-
-#: ../../../src/init.cpp:335
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Impossibile ottenere un blocco sulla directory %s. Bitcoin e' probabilmente gia' in esecuzione"
-
-#: ../../../src/init.cpp:361
-msgid "Error loading addr.dat      \n"
-msgstr "Errore nel caricamento addr.dat      \n"
-
-#: ../../../src/init.cpp:367
-msgid "Error loading blkindex.dat      \n"
-msgstr "Errore nel caricamento blkindex.dat      \n"
-
-#: ../../../src/init.cpp:374
-msgid "Error loading wallet.dat      \n"
-msgstr "Errore nel caricamento wallet.dat      \n"
-
-#: ../../../src/init.cpp:454
-msgid "Invalid -proxy address"
-msgstr "Indirizzo proxy non valido"
-
-#: ../../../src/init.cpp:477
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Quantita' non valida per -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:481
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Attenzione: -paytxfee e' molto alta. Questo e' la tassa che pagherai se invii la transazione"
-
-#: ../../../src/uibase.h:147
-msgid "Transaction Details"
-msgstr "Dettagli transazione"
-
-#: ../../../src/uibase.h:199
-msgid "Options"
-msgstr "Opzioni"
-
-#: ../../../src/uibase.h:228
-msgid "About Bitcoin"
-msgstr "Info Bitcoin"
-
-#: ../../../src/uibase.h:337
-msgid "Your Bitcoin Addresses"
-msgstr "Il tuo indirizzo Bitcoin"
diff --git a/locale/lt/LC_MESSAGES/bitcoin.mo b/locale/lt/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index bba16a8..0000000
Binary files a/locale/lt/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/lt/LC_MESSAGES/bitcoin.po b/locale/lt/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index b0decb2..0000000
+++ /dev/null
@@ -1,971 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-05-17 14:07+0100\n"
-"PO-Revision-Date: 2011-05-17 14:09+0100\n"
-"Last-Translator: Anonymous <anon@none>\n"
-"Language-Team: \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/net.cpp:1503
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Neįmanoma prisijungti prie šio kompiuterio porto %d. Bitcoin programa tikriausiai jau yra paleista"
-
-#: ../../../src/ui.cpp:204
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Šis pervedimas viršija dydžio limitą.  Jūs galite siūsti šią suma sumokėję %s mokestį, kuris bus skirtas nodams už persiuntimą ir padėti tinklui. Ar sutinkate pridėti ši mokestį?"
-
-#: ../../../src/ui.cpp:303
-msgid "Status"
-msgstr "Būklė"
-
-#: ../../../src/ui.cpp:304
-msgid "Date"
-msgstr "Data"
-
-#: ../../../src/ui.cpp:305
-msgid "Description"
-msgstr "Apibūdinimas"
-
-#: ../../../src/ui.cpp:306
-msgid "Debit"
-msgstr "Debetas"
-
-#: ../../../src/ui.cpp:307
-msgid "Credit"
-msgstr "Kreditas"
-
-#: ../../../src/ui.cpp:513
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Atidaryta %d blokams"
-
-#: ../../../src/ui.cpp:515
-#, c-format
-msgid "Open until %s"
-msgstr "Atidaryta iki %s"
-
-#: ../../../src/ui.cpp:521
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/neprisijunges?"
-
-#: ../../../src/ui.cpp:523
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/ nepatvirtinta"
-
-#: ../../../src/ui.cpp:525
-#, c-format
-msgid "%d confirmations"
-msgstr "%d patvirtinta"
-
-#: ../../../src/ui.cpp:610
-msgid "Generated"
-msgstr "Sugeneruota"
-
-#: ../../../src/ui.cpp:618
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Sugeneruota (%s bus galima naudoti už %d blokų)"
-
-#: ../../../src/ui.cpp:622
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Sugeneruota - Perspėjimas: Šio bloko negavo kiti nodai ir jis tikriausiai nebus priimtas!"
-
-#: ../../../src/ui.cpp:626
-msgid "Generated (not accepted)"
-msgstr "Sugeneruota (nepriimta)"
-
-#: ../../../src/ui.cpp:636
-msgid "From: "
-msgstr "Nuo: "
-
-#: ../../../src/ui.cpp:660
-msgid "Received with: "
-msgstr "Priimta su: "
-
-#: ../../../src/ui.cpp:706
-msgid "Payment to yourself"
-msgstr "Pervedimas sau"
-
-#: ../../../src/ui.cpp:740
-msgid "To: "
-msgstr "Kam: "
-
-#: ../../../src/ui.cpp:1055
-msgid "    Generating"
-msgstr "    Generuojama"
-
-#: ../../../src/ui.cpp:1057
-msgid "(not connected)"
-msgstr "(neprijungta)"
-
-#: ../../../src/ui.cpp:1060
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d Jungtys     %d Blokai     %d pervedimai"
-
-#: ../../../src/ui.cpp:1165
-#: ../../../src/ui.cpp:2529
-msgid "New Receiving Address"
-msgstr "Naujas priėmimo adresas"
-
-#: ../../../src/ui.cpp:1166
-#: ../../../src/ui.cpp:2530
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Naudokite naują adresas kiekvienam pervedimui.\n"
-"\n"
-"Pavadinimas"
-
-#: ../../../src/ui.cpp:1235
-msgid "<b>Status:</b> "
-msgstr "<b>Būklė:</b> "
-
-#: ../../../src/ui.cpp:1240
-msgid ", has not been successfully broadcast yet"
-msgstr ", dar nėra paskelbta"
-
-#: ../../../src/ui.cpp:1242
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", paskelbta per %d nodą"
-
-#: ../../../src/ui.cpp:1244
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", paskelbta per %d nodus"
-
-#: ../../../src/ui.cpp:1248
-msgid "<b>Date:</b> "
-msgstr "<b>Data:</b> "
-
-#: ../../../src/ui.cpp:1256
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Iš:</b> Sugeneruota<br>"
-
-#: ../../../src/ui.cpp:1262
-#: ../../../src/ui.cpp:1280
-msgid "<b>From:</b> "
-msgstr "<b>Nuo:</b> "
-
-#: ../../../src/ui.cpp:1280
-msgid "unknown"
-msgstr "nežinomas"
-
-#: ../../../src/ui.cpp:1281
-#: ../../../src/ui.cpp:1305
-#: ../../../src/ui.cpp:1364
-msgid "<b>To:</b> "
-msgstr "<b>Kam:</b> "
-
-#: ../../../src/ui.cpp:1284
-msgid " (yours, label: "
-msgstr " (jūsų, pavadinimas: "
-
-#: ../../../src/ui.cpp:1286
-msgid " (yours)"
-msgstr " (jūsų)"
-
-#: ../../../src/ui.cpp:1323
-#: ../../../src/ui.cpp:1335
-#: ../../../src/ui.cpp:1381
-#: ../../../src/ui.cpp:1398
-msgid "<b>Credit:</b> "
-msgstr "<b>Kreditas:</b> "
-
-#: ../../../src/ui.cpp:1325
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s bus galima naudoti už %d blokų)"
-
-#: ../../../src/ui.cpp:1327
-msgid "(not accepted)"
-msgstr "(nepriimta)"
-
-#: ../../../src/ui.cpp:1372
-#: ../../../src/ui.cpp:1380
-#: ../../../src/ui.cpp:1395
-msgid "<b>Debit:</b> "
-msgstr "<b>Debetas:</b> "
-
-#: ../../../src/ui.cpp:1386
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Pervedimo mokestis:</b> "
-
-#: ../../../src/ui.cpp:1402
-msgid "<b>Net amount:</b> "
-msgstr "<b>Neto suma:</b> "
-
-#: ../../../src/ui.cpp:1409
-msgid "Message:"
-msgstr "Žinutė:"
-
-#: ../../../src/ui.cpp:1411
-msgid "Comment:"
-msgstr "Komentaras:"
-
-#: ../../../src/ui.cpp:1414
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Turite palaukti 120 blokų, kol galėsite išleisti sugeneruotas monetas. Kai sugeneravotė šį blokai, jis buvo paskelbtas tinklui ir bus pridėtas į blokų grandinę. Jei šio bloko tinklas nepriims i grandinė, jis pasikeis į \"nepriimtas\" ir negali būti išleidžiamas. Tai gali kartais nutikti jei kitas nodas sugeneravo bloką keliom sekundėm anksčiau."
-
-#: ../../../src/ui.cpp:1594
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Nepavyksta įrašyti į autostart/bitcoin.desktop failą"
-
-#: ../../../src/ui.cpp:1630
-msgid "Main"
-msgstr "Pagrindinis"
-
-#: ../../../src/ui.cpp:1638
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Paleisti Bitcoin kai pasileižia operacinė sistema"
-
-#: ../../../src/ui.cpp:1645
-msgid "&Minimize on close"
-msgstr "&Sumažinti kai uždaroma"
-
-#: ../../../src/ui.cpp:1787
-#, c-format
-msgid "version %s"
-msgstr "versija %s"
-
-#: ../../../src/ui.cpp:1899
-msgid "Error in amount  "
-msgstr "Klaidinga suma"
-
-#: ../../../src/ui.cpp:1899
-#: ../../../src/ui.cpp:1904
-#: ../../../src/ui.cpp:1909
-#: ../../../src/ui.cpp:1944
-#: ../../../src/uibase.cpp:55
-msgid "Send Coins"
-msgstr "Siūsti monetas"
-
-#: ../../../src/ui.cpp:1904
-msgid "Amount exceeds your balance  "
-msgstr "Suma viršija jūsų balasą"
-
-#: ../../../src/ui.cpp:1909
-msgid "Total exceeds your balance when the "
-msgstr "Bendra suma viršija jūsu balansą kai"
-
-#: ../../../src/ui.cpp:1909
-msgid " transaction fee is included  "
-msgstr "pervedimo suma įskaičiuota"
-
-#: ../../../src/ui.cpp:1927
-msgid "Payment sent  "
-msgstr "Mokestis išsiųstas"
-
-#: ../../../src/ui.cpp:1927
-#: ../../../src/ui.cpp:1932
-#: ../../../src/ui.cpp:2076
-#: ../../../src/ui.cpp:2229
-#: ../../../src/main.cpp:3997
-msgid "Sending..."
-msgstr "Siunčia..."
-
-#: ../../../src/ui.cpp:1944
-msgid "Invalid address  "
-msgstr "Klaidingas adresas"
-
-#: ../../../src/ui.cpp:1997
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Siunčia %s į %s"
-
-#: ../../../src/ui.cpp:2070
-#: ../../../src/ui.cpp:2103
-msgid "CANCELLED"
-msgstr "NUTRAUKTA"
-
-#: ../../../src/ui.cpp:2074
-msgid "Cancelled"
-msgstr "Nutraukta"
-
-#: ../../../src/ui.cpp:2076
-msgid "Transfer cancelled  "
-msgstr "Siuntimas nutrauktas"
-
-#: ../../../src/ui.cpp:2129
-msgid "Error: "
-msgstr "Klaida:"
-
-#: ../../../src/ui.cpp:2143
-#: ../../../src/ui.cpp:2214
-#: ../../../src/main.cpp:4016
-msgid "Insufficient funds"
-msgstr "Nepakankamai monetų"
-
-#: ../../../src/ui.cpp:2148
-msgid "Connecting..."
-msgstr "Jungiasi..."
-
-#: ../../../src/ui.cpp:2153
-msgid "Unable to connect"
-msgstr "Negali prisijungti"
-
-#: ../../../src/ui.cpp:2158
-msgid "Requesting public key..."
-msgstr "Prašo \"viešojo rakto\"(public key)..."
-
-#: ../../../src/ui.cpp:2170
-msgid "Received public key..."
-msgstr "Gautas \"viešasis raktas\"(public key)..."
-
-#: ../../../src/ui.cpp:2184
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Gavėjas nepriima pervedimų siunčiamų iš IP adresų"
-
-#: ../../../src/ui.cpp:2186
-msgid "Transfer was not accepted"
-msgstr "Persiuntimas nepriimtas"
-
-#: ../../../src/ui.cpp:2195
-msgid "Invalid response received"
-msgstr "Gautas klaidingas atsakymas"
-
-#: ../../../src/ui.cpp:2210
-msgid "Creating transaction..."
-msgstr "Kuriamas pervedimas..."
-
-#: ../../../src/ui.cpp:2222
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Šis pervedimas reikalauja %s mokesčio dėl jo sumos, sudėtingumo arba dėl to, kad šie pinigai buvo neseniai gauti"
-
-#: ../../../src/ui.cpp:2224
-msgid "Transaction creation failed"
-msgstr "Pervedimo sukurti nepavyko"
-
-#: ../../../src/ui.cpp:2231
-msgid "Transaction aborted"
-msgstr "Pervedimas nutrauktas"
-
-#: ../../../src/ui.cpp:2239
-msgid "Lost connection, transaction cancelled"
-msgstr "Prarastas ryšys, pervedimas nutrauktas"
-
-#: ../../../src/ui.cpp:2255
-msgid "Sending payment..."
-msgstr "Monetos siunčiamos..."
-
-#: ../../../src/ui.cpp:2261
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Pervedimas buvo atmestas. Tai galėjo atsitikti jei dalis jūsų monetų jau buvo išleista. Pvz.: Jei nodojote kopija wallet.dat kitame kliente ir monetos buvo išleistos ten, bet nepažymėtos kaip išleistos čia."
-
-#: ../../../src/ui.cpp:2270
-msgid "Waiting for confirmation..."
-msgstr "Laukia patvirtinimo..."
-
-#: ../../../src/ui.cpp:2288
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Pervedimas išsiūstas, bet gavėjas negalėjo jo patvirtinti.\n"
-"Pervedimas įrašytas ir suma bus kredituojama gavėjui,\n"
-"bet komentaro informacija nebus rodoma."
-
-#: ../../../src/ui.cpp:2297
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Pervedimas išsiūstas, bet klaidingas atsakymas gautas"
-
-#: ../../../src/ui.cpp:2303
-msgid "Payment completed"
-msgstr "Pervedimas pavyko"
-
-#: ../../../src/ui.cpp:2334
-#: ../../../src/ui.cpp:2480
-#: ../../../src/ui.cpp:2517
-msgid "Name"
-msgstr "Vardas"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2480
-#: ../../../src/ui.cpp:2517
-msgid "Address"
-msgstr "Adresas"
-
-#: ../../../src/ui.cpp:2337
-#: ../../../src/ui.cpp:2492
-msgid "Label"
-msgstr "Pavadinimas"
-
-#: ../../../src/ui.cpp:2338
-#: ../../../src/uibase.cpp:837
-msgid "Bitcoin Address"
-msgstr "Bitcoin Adresas"
-
-#: ../../../src/ui.cpp:2462
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Tai vienas iš jūsų adresų priimti pervedimams ir negali būti įvestas i adresų knygą"
-
-#: ../../../src/ui.cpp:2480
-#: ../../../src/ui.cpp:2486
-msgid "Edit Address"
-msgstr "Pakeisti Adresą"
-
-#: ../../../src/ui.cpp:2492
-msgid "Edit Address Label"
-msgstr "Pakeisti adreso pavadinimą"
-
-#: ../../../src/ui.cpp:2517
-#: ../../../src/ui.cpp:2523
-msgid "Add Address"
-msgstr "Pridėti adresą"
-
-#: ../../../src/ui.cpp:2600
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2602
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Generuoja"
-
-#: ../../../src/ui.cpp:2604
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (neprijungta)"
-
-#: ../../../src/ui.cpp:2683
-msgid "&Open Bitcoin"
-msgstr "&Atidaryti Bitcoin"
-
-#: ../../../src/ui.cpp:2684
-#, fuzzy
-msgid "&Send Bitcoins"
-msgstr "&Atidaryti Bitcoin"
-
-#: ../../../src/ui.cpp:2685
-msgid "O&ptions..."
-msgstr "P&arametrai..."
-
-#: ../../../src/ui.cpp:2688
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "&Išeiti"
-
-#: ../../../src/ui.cpp:2904
-msgid "Program has crashed and will terminate.  "
-msgstr "Programa neveikia ir bus uždaryta"
-
-#: ../../../src/main.cpp:1866
-msgid "Warning: Disk space is low  "
-msgstr "Perspėjimas: Diske trūksta vietos"
-
-#: ../../../src/main.cpp:3990
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Klaida: Šis pervedimas reikalauja %s mokesčio dėl jo sumos, sudėtingumo arba dėl to, kad šie pinigai buvo neseniai gauti  "
-
-#: ../../../src/main.cpp:3992
-msgid "Error: Transaction creation failed  "
-msgstr "Klaida: Pervedimo sukurti nepavyko  "
-
-#: ../../../src/main.cpp:4001
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Klaida: Pervedimas nepavyko. Tai galėjo atsitikti jei dalis jūsų monetų jau buvo išleista. Pvz.: Jei nodojote kopija wallet.dat kitame kliente ir monetos buvo išleistos ten, bet nepažymėtos kaip išleistos čia."
-
-#: ../../../src/main.cpp:4014
-msgid "Invalid amount"
-msgstr "Neteisinga suma"
-
-#: ../../../src/main.cpp:4021
-msgid "Invalid bitcoin address"
-msgstr "Klaidingas bitcoin adresas"
-
-#: ../../../src/rpc.cpp:1802
-#: ../../../src/rpc.cpp:1804
-#, c-format
-msgid "To use the %s option"
-msgstr "Kad naudoti %s parametrą"
-
-#: ../../../src/rpc.cpp:1806
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Perspėjimas: %s, jūs privalote nustatyti rpcpassword=<slaptažodis>\n"
-"Konfiguracijos faile: %s\n"
-"Jei failas neegzistuoja, sukurkite jį su owner-readable-only failo teisėmis.\n"
-
-#: ../../../src/rpc.cpp:1974
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Jūs privalote nustatyti rpcpassword=<slaptažodis> Konfiguracijos faile:\n"
-"%s\n"
-"Jei failas neegzistuoja, sukurkite jį su owner-readable-only failo teisėm."
-
-#: ../../../src/util.cpp:866
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Perspėjimas: Prašome patikrinti kompiuterio laiką ir datą. Jei laikas neteisingai nustatytas, Bitcoin neveiks."
-
-#: ../../../src/util.cpp:899
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Byla"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Jūsų priimantys adresai..."
-
-#: ../../../src/uibase.cpp:36
-msgid "&Options..."
-msgstr "&Parametrai"
-
-#: ../../../src/uibase.cpp:39
-msgid "&Settings"
-msgstr "N&ustatymai"
-
-#: ../../../src/uibase.cpp:43
-msgid "&About..."
-msgstr "&О Apie..."
-
-#: ../../../src/uibase.cpp:46
-msgid "&Help"
-msgstr "&Pagalba"
-
-#: ../../../src/uibase.cpp:56
-msgid "Address Book"
-msgstr "Adresų knyga"
-
-#: ../../../src/uibase.cpp:69
-msgid "Your Bitcoin Address:"
-msgstr "Jūsų Bitcoin Adresas:"
-
-#: ../../../src/uibase.cpp:76
-msgid " &New... "
-msgstr " &Naujas... "
-
-#: ../../../src/uibase.cpp:79
-#: ../../../src/uibase.cpp:780
-#: ../../../src/uibase.cpp:883
-msgid " &Copy to Clipboard "
-msgstr "&Kopijuoti"
-
-#: ../../../src/uibase.cpp:93
-msgid "Balance:"
-msgstr "Balansas:"
-
-#: ../../../src/uibase.cpp:109
-msgid " All"
-msgstr "Visi"
-
-#: ../../../src/uibase.cpp:109
-msgid " Sent"
-msgstr "Išsiūsta"
-
-#: ../../../src/uibase.cpp:109
-msgid " Received"
-msgstr "Priimta"
-
-#: ../../../src/uibase.cpp:109
-msgid " In Progress"
-msgstr "Progrese"
-
-#: ../../../src/uibase.cpp:130
-msgid "All Transactions"
-msgstr "Visi pervedimai"
-
-#: ../../../src/uibase.cpp:141
-msgid "Sent/Received"
-msgstr "Išsiųsti/Priimti"
-
-#: ../../../src/uibase.cpp:152
-msgid "Sent"
-msgstr "Išsiūsti"
-
-#: ../../../src/uibase.cpp:163
-msgid "Received"
-msgstr "Priimti"
-
-#: ../../../src/uibase.cpp:302
-#: ../../../src/uibase.cpp:443
-#: ../../../src/uibase.cpp:542
-#: ../../../src/uibase.cpp:722
-#: ../../../src/uibase.cpp:783
-#: ../../../src/uibase.cpp:892
-#: ../../../src/uibase.cpp:981
-msgid "OK"
-msgstr "Gerai"
-
-#: ../../../src/uibase.cpp:345
-msgid "&Start Bitcoin on system startup"
-msgstr "&Paleisti Bitcoin kai pasileidžia operacinė sistema"
-
-#: ../../../src/uibase.cpp:348
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Sumažinti į \"tray\" vietoj \"taskbar\""
-
-#: ../../../src/uibase.cpp:351
-msgid "Map port using &UPnP"
-msgstr "Peradresuoti porta naudojant &UPnP"
-
-#: ../../../src/uibase.cpp:354
-msgid "M&inimize to the tray on close"
-msgstr "Su&mažinti į \"tray\" kai uždaroma"
-
-#: ../../../src/uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Prisijungti per socks4 proksį: "
-
-#: ../../../src/uibase.cpp:371
-msgid "Proxy &IP:"
-msgstr "P&roksio IP:"
-
-#: ../../../src/uibase.cpp:379
-msgid " &Port:"
-msgstr " &Portas"
-
-#: ../../../src/uibase.cpp:392
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Pasirintinis pervedimo mokestis per KB, kuris padeda jį ivykdyti greičiau. Dauguma pervedimų yra 1KB.  Rekomencuojamas mokestis 0.01."
-
-#: ../../../src/uibase.cpp:399
-#, fuzzy
-msgid "Pay transaction fee:"
-msgstr "Pervedimo mokestis:"
-
-#: ../../../src/uibase.cpp:420
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:424
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:446
-#: ../../../src/uibase.cpp:668
-#: ../../../src/uibase.cpp:727
-#: ../../../src/uibase.cpp:786
-#: ../../../src/uibase.cpp:895
-#: ../../../src/uibase.cpp:984
-msgid "Cancel"
-msgstr "Nutraukti"
-
-#: ../../../src/uibase.cpp:449
-msgid "&Apply"
-msgstr "&Nustatyti"
-
-#: ../../../src/uibase.cpp:508
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:514
-msgid "version"
-msgstr "versija"
-
-#: ../../../src/uibase.cpp:525
-#, fuzzy
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Autorinė teisė (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"Ši programa yra eksperimentinė.\n"
-"\n"
-"Išleista ir teisės saugomos pagal MIT/X11 programų licenziją, kuri detaliau aprašyra faile \n"
-"license.txt ir http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Šis produktas turi programą iš OpenSSL projekto, kuri naudojamas \n"
-"OpenSSL Toolkit (http://www.openssl.org/), kriptografinę programą parašyta \n"
-"Eric Young (eay@cryptsoft.com) ir UPnP programą parašyta Thomas Bernard."
-
-#: ../../../src/uibase.cpp:581
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Įveskite Bitcoin adresą (pvz.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:595
-msgid "Pay &To:"
-msgstr "&Kam:"
-
-#: ../../../src/uibase.cpp:610
-msgid "&Paste"
-msgstr "&Įrašyti"
-
-#: ../../../src/uibase.cpp:613
-msgid " Address &Book..."
-msgstr " &Adresų knyga..."
-
-#: ../../../src/uibase.cpp:620
-msgid "&Amount:"
-msgstr "S&uma:"
-
-#: ../../../src/uibase.cpp:630
-msgid "T&ransfer:"
-msgstr "&Pervedimas:"
-
-#: ../../../src/uibase.cpp:636
-msgid " Standard"
-msgstr "Standartinis"
-
-#: ../../../src/uibase.cpp:663
-msgid "&Send"
-msgstr "&Siūsti"
-
-#: ../../../src/uibase.cpp:711
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Jungiasi..."
-
-#: ../../../src/uibase.cpp:761
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Tai yra jūsų Bitcoin adresai priimti pervedimus. Galite duoti skirtinga adresa kiekvienam siuntėjui, kad žinotumėte kas jums moka. Pažymėtas adresas bus rodomas pagrindiniame lange."
-
-#: ../../../src/uibase.cpp:774
-#: ../../../src/uibase.cpp:886
-msgid "&Edit..."
-msgstr "&Pakeisti..."
-
-#: ../../../src/uibase.cpp:777
-#: ../../../src/uibase.cpp:889
-msgid " &New Address... "
-msgstr " &Naujas Adresas... "
-
-#: ../../../src/uibase.cpp:849
-msgid "Sending"
-msgstr "Siunčiama"
-
-#: ../../../src/uibase.cpp:857
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Tai yra jūsų Bitcoin adresai priimti pervedimus. Galite duoti skirtinga adresa kiekvienam siuntėjui, kad žinotumėte kas jums moka. Pažymėtas adresas bus rodomas pagrindiniame lange."
-
-#: ../../../src/uibase.cpp:870
-msgid "Receiving"
-msgstr "Priėmimo"
-
-#: ../../../src/uibase.cpp:880
-msgid "&Delete"
-msgstr "&Ištrinti"
-
-#: ../../../src/init.cpp:142
-msgid "Bitcoin version"
-msgstr "Bitcoin version"
-
-#: ../../../src/init.cpp:143
-msgid "Usage:"
-msgstr "Komandų vartojimas:"
-
-#: ../../../src/init.cpp:145
-msgid "Send command to -server or bitcoind\n"
-msgstr "Siūsti komandą i -server arba bitcoind\n"
-
-#: ../../../src/init.cpp:146
-msgid "List commands\n"
-msgstr "Parodyti visas komandas\n"
-
-#: ../../../src/init.cpp:147
-msgid "Get help for a command\n"
-msgstr "Komandos paaiškinimas\n"
-
-#: ../../../src/init.cpp:148
-msgid "Options:\n"
-msgstr "Parametrai\n"
-
-#: ../../../src/init.cpp:149
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Nurodyti konfiguracijos failą (pagal nutylėjimą: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:150
-#, fuzzy
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Nurodyti konfiguracijos failą (pagal nutylėjimą: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:151
-msgid "Generate coins\n"
-msgstr "Generuoti monetas\n"
-
-#: ../../../src/init.cpp:152
-msgid "Don't generate coins\n"
-msgstr "Negeneruoti monetų\n"
-
-#: ../../../src/init.cpp:153
-msgid "Start minimized\n"
-msgstr "Paleisti minimizuotą klientą\n"
-
-#: ../../../src/init.cpp:154
-msgid "Specify data directory\n"
-msgstr "Nurodyti duomenų direktoriją\n"
-
-#: ../../../src/init.cpp:155
-msgid "Connect through socks4 proxy\n"
-msgstr "Prisijungti per socks4 proksį\n"
-
-#: ../../../src/init.cpp:156
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Leisti DNS lookups addnode ir connect komandoms\n"
-
-#: ../../../src/init.cpp:157
-msgid "Add a node to connect to\n"
-msgstr "Pridėti nodą prie kurio bus jungiamasi\n"
-
-#: ../../../src/init.cpp:158
-msgid "Connect only to the specified node\n"
-msgstr "Prisijungti tik prie šio nodo\n"
-
-#: ../../../src/init.cpp:159
-msgid "Don't accept connections from outside\n"
-msgstr "Neleisti prisijungti iš išorės\n"
-
-#: ../../../src/init.cpp:162
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Nenaudoti UPnP klausančio porto peradresavimui\n"
-
-#: ../../../src/init.cpp:164
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Pamėginti naudoti UPnP klausančio porto peradresavimui\n"
-
-#: ../../../src/init.cpp:167
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Mokestis per KB pridedamas prie siunčiamo pervedimo\n"
-
-#: ../../../src/init.cpp:169
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Priimti komandas iš terminalo ir JSON-RPC\n"
-
-#: ../../../src/init.cpp:172
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Paleisti daemon\n"
-
-#: ../../../src/init.cpp:174
-msgid "Use the test network\n"
-msgstr "Naudoti bandomajį tinklą\n"
-
-#: ../../../src/init.cpp:175
-msgid "Username for JSON-RPC connections\n"
-msgstr "Naudotojo vardas JSON-RPC prisijungimui\n"
-
-#: ../../../src/init.cpp:176
-msgid "Password for JSON-RPC connections\n"
-msgstr "Slaptažodis JSON-RPC prisijungimui\n"
-
-#: ../../../src/init.cpp:177
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Klausyti JSON-RPC prisijungimų ant <port> (pagal nutylėjimą: 8332)\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Leisti JSON-RPC prisijungimą iš tam tikrų IP adresų\n"
-
-#: ../../../src/init.cpp:179
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Siūsti komandas į nodą kuris yra <ip> (pagal nutylėjimą: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:180
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Nustatyti kiek raktų skaičių <n> (pagal nutylėjimą: 100)\n"
-
-#: ../../../src/init.cpp:181
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Perskanuoti blokų grandinę dėl trūkstamų pervedimų\n"
-
-#: ../../../src/init.cpp:185
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"SSL parametrai: (aplankykite Bitcoin Wiki dėl SSL nustatymų)\n"
-
-#: ../../../src/init.cpp:186
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Naudoti OpenSSL (https) JSON-RPC prisijungimui\n"
-
-#: ../../../src/init.cpp:187
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Serverio sertifikato failas (pagal nutylėjimą: server.cert)\n"
-
-#: ../../../src/init.cpp:188
-msgid "Server private key (default: server.pem)\n"
-msgstr "Serverio privatus raktas (pagal nutylėjimą: server.pem)\n"
-
-#: ../../../src/init.cpp:189
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Priimtinas šifras (pagal nutylėjimą: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:193
-msgid "This help message\n"
-msgstr "Ši pagalbos žinutė\n"
-
-#: ../../../src/init.cpp:330
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Neranda duomenų directorijos %s.  Bitcoin programa tikriausiai jau paleista."
-
-#: ../../../src/init.cpp:356
-msgid "Error loading addr.dat      \n"
-msgstr "Klaida nuskaitant addr.dat      \n"
-
-#: ../../../src/init.cpp:362
-msgid "Error loading blkindex.dat      \n"
-msgstr "Klaida nuskaitant blkindex.dat      \n"
-
-#: ../../../src/init.cpp:369
-msgid "Error loading wallet.dat      \n"
-msgstr "Klaida nuskaitant wallet.dat      \n"
-
-#: ../../../src/init.cpp:449
-msgid "Invalid -proxy address"
-msgstr "Klaidingas -proxy adresas"
-
-#: ../../../src/init.cpp:472
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Klaidinga suma -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:476
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Perspėjimas: -paytxfee yra nustatyta labai aukšta suma. Ši suma bus nuskaičiuota kaip mokestis darant pervedimą"
-
-#: ../../../src/uibase.h:147
-msgid "Transaction Details"
-msgstr "Pervedimų detalės"
-
-#: ../../../src/uibase.h:199
-msgid "Options"
-msgstr "Parametrai"
-
-#: ../../../src/uibase.h:228
-msgid "About Bitcoin"
-msgstr "Apie Bitcoin"
-
-#: ../../../src/uibase.h:337
-msgid "Your Bitcoin Addresses"
-msgstr "Jūsų Bitcoin Adresas"
diff --git a/locale/nl/LC_MESSAGES/bitcoin.mo b/locale/nl/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 13467f2..0000000
Binary files a/locale/nl/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/nl/LC_MESSAGES/bitcoin.po b/locale/nl/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 5074f21..0000000
+++ /dev/null
@@ -1,1195 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-22 19:03+0100\n"
-"PO-Revision-Date: 2011-09-22 19:19+0100\n"
-"Last-Translator: Pieter Wuille <pieter.wuille@gmail.com>\n"
-"Language-Team: \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-Language: Dutch\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/init.cpp:163
-msgid "Bitcoin version"
-msgstr "Bitcoin versie"
-
-#: ../../../src/init.cpp:164
-msgid "Usage:"
-msgstr "Mededeling:"
-
-#: ../../../src/init.cpp:166
-msgid "Send command to -server or bitcoind\n"
-msgstr "Zend commando naar -server of bitcoind\n"
-
-#: ../../../src/init.cpp:167
-msgid "List commands\n"
-msgstr "List van commando's\n"
-
-#: ../../../src/init.cpp:168
-msgid "Get help for a command\n"
-msgstr "Toon hulp voor een commando\n"
-
-#: ../../../src/init.cpp:169
-msgid "Options:\n"
-msgstr "Opties:\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Specifieer configuratiebestand (standaard: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Specifieer pid-bestand (standaard: bitcoind.pid)\n"
-
-#: ../../../src/init.cpp:172
-msgid "Generate coins\n"
-msgstr "Genereer coins\n"
-
-#: ../../../src/init.cpp:173
-msgid "Don't generate coins\n"
-msgstr "Genereer geen coins\n"
-
-#: ../../../src/init.cpp:174
-msgid "Start minimized\n"
-msgstr "Geminimaliseerd starten\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify data directory\n"
-msgstr "Stel datamap in\n"
-
-#: ../../../src/init.cpp:176
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Gelieve de time-out tijd te specifieren (in milliseconden)\n"
-
-#: ../../../src/init.cpp:177
-msgid "Connect through socks4 proxy\n"
-msgstr "Verbind via socks4 proxy\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Sta DNS-opzoeking toe voor addnode en connect\n"
-
-#: ../../../src/init.cpp:179
-msgid "Add a node to connect to\n"
-msgstr "Voeg een node toe om mee te verbinden\n"
-
-#: ../../../src/init.cpp:180
-msgid "Connect only to the specified node\n"
-msgstr "Verbind alleen met deze node\n"
-
-#: ../../../src/init.cpp:181
-msgid "Don't accept connections from outside\n"
-msgstr "Sta geen verbindingen van buitenaf toe\n"
-
-#: ../../../src/init.cpp:184
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Probeer geen UPnP te gebruiken om de poort waarop geluisterd wordt te mappen\n"
-
-#: ../../../src/init.cpp:186
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Probeer UPnP te gebruiken om de poort waarop geluisterd wordt te mappen\n"
-
-#: ../../../src/init.cpp:189
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Fooi per KB om aan transacties die gezonden worden toe te voegen\n"
-
-#: ../../../src/init.cpp:191
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Aanvaard commandolijn en JSON-RPC commando's\n"
-
-#: ../../../src/init.cpp:194
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Draai in de achtergrond als daemon en aanvaard commando's\n"
-
-#: ../../../src/init.cpp:196
-msgid "Use the test network\n"
-msgstr "Gebruik het test-netwerk\n"
-
-#: ../../../src/init.cpp:197
-msgid "Username for JSON-RPC connections\n"
-msgstr "Gebruikersnaam voor JSON-RPC verbindingen\n"
-
-#: ../../../src/init.cpp:198
-msgid "Password for JSON-RPC connections\n"
-msgstr "Wachtwoord voor JSON-RPC verbindingen\n"
-
-#: ../../../src/init.cpp:199
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Luister voor JSON-RPC verbindingen op <poort> (standaard: 8332)\n"
-
-#: ../../../src/init.cpp:200
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Enkel JSON-RPC verbindingen van opgegeven IP adres toestaan\n"
-
-#: ../../../src/init.cpp:201
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Zend commando's naar proces dat op <ip> draait (standaard: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Stel sleutelpoelgrootte in op <n> (standaard: 100)\n"
-
-#: ../../../src/init.cpp:203
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Doorzoek de blokken database voor ontbrekende portefeuille-transacties\n"
-
-#: ../../../src/init.cpp:207
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"SSL opties: (zie de Bitcoin wiki voor SSL instructies)\n"
-
-#: ../../../src/init.cpp:208
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Gebruik OpenSSL (https) voor JSON-RPC verbindingen\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Certificaat-bestand voor server (standaard: server.cert)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Server private key (default: server.pem)\n"
-msgstr "Geheime sleutel voor server (standaard: server.pem)\n"
-
-#: ../../../src/init.cpp:211
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Aanvaardbare ciphers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:215
-msgid "This help message\n"
-msgstr "Dit helpbericht\n"
-
-#: ../../../src/init.cpp:353
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Kan geen lock op de gegevensdirectory %s verkrijgen. Bitcoin draait vermoedelijk reeds."
-
-#: ../../../src/init.cpp:379
-msgid "Error loading addr.dat      \n"
-msgstr "Fout bij laden van bestand addr.dat      \n"
-
-#: ../../../src/init.cpp:385
-msgid "Error loading blkindex.dat      \n"
-msgstr "Fout bij laden van bestand blkindex.dat      \n"
-
-#: ../../../src/init.cpp:396
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "Fout bij laden van bestand wallet.dat: portefeuille beschadigd      \n"
-
-#: ../../../src/init.cpp:398
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "Fout bij laden van bestand wallet.dat: portefeuille vereist nieuwere versie van Bitcoin\n"
-
-#: ../../../src/init.cpp:400
-msgid "Error loading wallet.dat      \n"
-msgstr "Fout bij laden van bestand wallet.dat      \n"
-
-#: ../../../src/init.cpp:489
-msgid "Invalid -proxy address"
-msgstr "Foutief -proxy adres"
-
-#: ../../../src/init.cpp:514
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Ongeldig bedrag voor -paytxfee=<bedrag>"
-
-#: ../../../src/init.cpp:518
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Waarschuwing: -paytxfee is zeer hoog ingesteld.  Dit is de fooi die betaald wordt bij het zenden van een transactie."
-
-#: ../../../src/rpc.cpp:2035
-#: ../../../src/rpc.cpp:2037
-#, c-format
-msgid "To use the %s option"
-msgstr "Om de %s optie te gebruiken"
-
-#: ../../../src/rpc.cpp:2039
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Waarschuwing: %s, rpcpassword=<password> moet ingesteld zijn\n"
-"in het configuratie bestand: %s\n"
-"Als het bestand nog niet bestaat, maak het dan aan met enkel-leesbaar-door-eigenaar rechten.\n"
-
-#: ../../../src/rpc.cpp:2215
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"rpcpassword=<password> moet ingesteld in het configuratie bestand:\n"
-"%s\n"
-"Als het bestand nog niet bestaat, maak het dan aan met enkel-leesbaar-door-eigenaar rechten."
-
-#: ../../../src/net.cpp:1616
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Kan niet binden met poort %d op deze computer. Bitcoin draait vermoedelijk reeds."
-
-#: ../../../src/util.cpp:1008
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Waarschuwing: Controleer of uw computers datum en tijd correct ingesteld zijn. Als uw klok fout staat zal Bitcoin niet correct werken."
-
-#: ../../../src/util.cpp:1042
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/wallet.cpp:1073
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "Fout: portefeuille is op slot, kan geen transactie aanmaken"
-
-#: ../../../src/wallet.cpp:1081
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Fout: Deze transactie vergt een fooi van ten minste %s omwille van zijn bedrag, complexiteit, of gebruik van recent ontvangen fonden  "
-
-#: ../../../src/wallet.cpp:1083
-msgid "Error: Transaction creation failed  "
-msgstr "Fout: Aanmaken van transactie mislukt  "
-
-#: ../../../src/wallet.cpp:1088
-msgid "Sending..."
-msgstr "Versturen..."
-
-#: ../../../src/wallet.cpp:1092
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Fout: De transactie is afgekeurd.  Dit kan gebeuren als bepaalde coins in je Portefeuille al zijn uitgegeven. Dit kan veroorzaakt worden doordat je een kopie van wallet.dat gebruikt hebt en enkel daar je uitgave geregistreerd is."
-
-#: ../../../src/wallet.cpp:1104
-msgid "Invalid amount"
-msgstr "Foutieve hoeveelheid"
-
-#: ../../../src/wallet.cpp:1106
-msgid "Insufficient funds"
-msgstr "Onvoldoende saldo"
-
-#: ../../../src/main.cpp:1398
-#: ../../../src/bak/main.cpp:1414
-msgid "Warning: Disk space is low  "
-msgstr "Waarschuwing: Weinig schijfruimte over  "
-
-#: ../../../src/ui.cpp:217
-#: ../../../src/bak/ui.cpp:216
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Deze transactie overschrijdt de limiet.  Om de transactie alsnog te verwerken kun je een fooi betalen van %s. Deze zal betaald worden aan de node die uw transactie verwerkt. Wil je doorgaan en deze fooi betalen?"
-
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1247
-msgid "Enter the current passphrase to the wallet."
-msgstr "Geef het huidige wachtwoord voor de portefeuille."
-
-#: ../../../src/ui.cpp:262
-#: ../../../src/ui.cpp:1183
-#: ../../../src/ui.cpp:1200
-#: ../../../src/ui.cpp:1248
-#: ../../../src/ui.cpp:1272
-#: ../../../src/ui.cpp:1292
-msgid "Passphrase"
-msgstr "Wachtwoord"
-
-#: ../../../src/ui.cpp:268
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "Geef het huidige wachtwoord voor de portefeille"
-
-#: ../../../src/ui.cpp:276
-#: ../../../src/ui.cpp:1257
-#: ../../../src/ui.cpp:1314
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "Het wachtwoord voor het openen van de portefeulle is foutief."
-
-#: ../../../src/ui.cpp:353
-#: ../../../src/bak/ui.cpp:316
-msgid "Status"
-msgstr "Status"
-
-#: ../../../src/ui.cpp:354
-#: ../../../src/bak/ui.cpp:317
-msgid "Date"
-msgstr "Datum"
-
-#: ../../../src/ui.cpp:355
-#: ../../../src/bak/ui.cpp:318
-msgid "Description"
-msgstr "Beschrijving"
-
-#: ../../../src/ui.cpp:356
-#: ../../../src/bak/ui.cpp:319
-msgid "Debit"
-msgstr "Debet"
-
-#: ../../../src/ui.cpp:357
-#: ../../../src/bak/ui.cpp:320
-msgid "Credit"
-msgstr "Credit"
-
-#: ../../../src/ui.cpp:568
-#: ../../../src/bak/ui.cpp:526
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Open gedurende %d blokken"
-
-#: ../../../src/ui.cpp:570
-#: ../../../src/bak/ui.cpp:528
-#, c-format
-msgid "Open until %s"
-msgstr "Open tot %s"
-
-#: ../../../src/ui.cpp:576
-#: ../../../src/bak/ui.cpp:534
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/offline?"
-
-#: ../../../src/ui.cpp:578
-#: ../../../src/bak/ui.cpp:536
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/niet bevestigd"
-
-#: ../../../src/ui.cpp:580
-#: ../../../src/bak/ui.cpp:538
-#, c-format
-msgid "%d confirmations"
-msgstr "%d bevestigingen"
-
-#: ../../../src/ui.cpp:665
-#: ../../../src/bak/ui.cpp:623
-msgid "Generated"
-msgstr "Gegenereerd"
-
-#: ../../../src/ui.cpp:673
-#: ../../../src/bak/ui.cpp:631
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Gegenereerd (%s wordt volwassen over %d blokken)"
-
-#: ../../../src/ui.cpp:677
-#: ../../../src/bak/ui.cpp:635
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Gegenereerd - Waarschuwing: Dit blok is niet ontvangen door andere nodes en zal waarschijnlijk niet geaccepteerd worden!"
-
-#: ../../../src/ui.cpp:681
-#: ../../../src/bak/ui.cpp:639
-msgid "Generated (not accepted)"
-msgstr "Gegenereerd (niet geaccepteerd)"
-
-#: ../../../src/ui.cpp:691
-#: ../../../src/bak/ui.cpp:649
-msgid "From: "
-msgstr "Van: "
-
-#: ../../../src/ui.cpp:715
-#: ../../../src/bak/ui.cpp:673
-msgid "Received with: "
-msgstr "Ontvangen met: "
-
-#: ../../../src/ui.cpp:760
-#: ../../../src/bak/ui.cpp:719
-msgid "Payment to yourself"
-msgstr "Betaling aan uzelf"
-
-#: ../../../src/ui.cpp:794
-#: ../../../src/bak/ui.cpp:753
-msgid "To: "
-msgstr "Naar: "
-
-#: ../../../src/ui.cpp:1109
-#: ../../../src/bak/ui.cpp:1068
-msgid "    Generating"
-msgstr "    Genereren..."
-
-#: ../../../src/ui.cpp:1111
-#: ../../../src/bak/ui.cpp:1070
-msgid "(not connected)"
-msgstr "(niet verbonden)"
-
-#: ../../../src/ui.cpp:1114
-#: ../../../src/bak/ui.cpp:1073
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d verbindingen     %d blokken     %d transacties"
-
-#: ../../../src/ui.cpp:1171
-msgid "Wallet already encrypted."
-msgstr "Portefeuille reeds versleuteld."
-
-#: ../../../src/ui.cpp:1182
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"Geef het nieuwe wachtwoord voor de portefeuille.\n"
-"Gebruik een wachtwoord van 10 of meer willekeurige characters, of 8 of meer woorden."
-
-#: ../../../src/ui.cpp:1189
-#: ../../../src/ui.cpp:1280
-msgid "Error: The supplied passphrase was too short."
-msgstr "Fout: het wachtwoord is kort."
-
-#: ../../../src/ui.cpp:1193
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"WAARSCHUWING: Indien u uw portefeuille versleutelt en het wachtwoord verliest, zal u AL UW BITCOINS VERLIEZEN!\n"
-"Bent u zeker dat u de portfeuille wenst te versleutelen?"
-
-#: ../../../src/ui.cpp:1199
-msgid "Please re-enter your new wallet passphrase."
-msgstr "Voer uw portefeuille-wachtwoord opnieuw in."
-
-#: ../../../src/ui.cpp:1208
-#: ../../../src/ui.cpp:1302
-msgid "Error: the supplied passphrases didn't match."
-msgstr "Fout: de ingevoerde wachtwoorden komen niet overeen."
-
-#: ../../../src/ui.cpp:1218
-msgid "Wallet encryption failed."
-msgstr "Versleutelen van de portefeuille mislukt."
-
-#: ../../../src/ui.cpp:1225
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"Portefeuille versleuteld.\n"
-"Denk eraan dat uw portefeuille versleutelen geen volledige bescherming biedt tegen malware die uw computer zou geinfecteerd hebben."
-
-#: ../../../src/ui.cpp:1236
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "Portefeuille is onversleuteld. Versleutel ze eerst."
-
-#: ../../../src/ui.cpp:1271
-msgid "Enter the new passphrase for the wallet."
-msgstr "Voer nieuw wachtwoord voor de portefeuille in."
-
-#: ../../../src/ui.cpp:1291
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "Voer nieuw wachtwoord voor de portefeuille opnieuw in."
-
-#: ../../../src/ui.cpp:1323
-msgid "Wallet Passphrase Changed."
-msgstr "Portefeuille-wachtwoord gewijzigd."
-
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:2825
-#: ../../../src/bak/ui.cpp:1178
-#: ../../../src/bak/ui.cpp:2571
-msgid "New Receiving Address"
-msgstr "Nieuw Ontvangstadres"
-
-#: ../../../src/ui.cpp:1380
-#: ../../../src/ui.cpp:2826
-#: ../../../src/bak/ui.cpp:1179
-#: ../../../src/bak/ui.cpp:2572
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Het is een goede gewoonte om voor iedere betaling die je ontvangt een nieuw adres te gebruiken.\n"
-"\n"
-"Label"
-
-#: ../../../src/ui.cpp:1464
-#: ../../../src/bak/ui.cpp:1251
-msgid "<b>Status:</b> "
-msgstr "<b>Status:</b> "
-
-#: ../../../src/ui.cpp:1469
-#: ../../../src/bak/ui.cpp:1256
-msgid ", has not been successfully broadcast yet"
-msgstr ", is nog niet succesvol verstuurd naar het netwerk"
-
-#: ../../../src/ui.cpp:1471
-#: ../../../src/bak/ui.cpp:1258
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", verstuurd via %d node"
-
-#: ../../../src/ui.cpp:1473
-#: ../../../src/bak/ui.cpp:1260
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", verstuurd via %d nodes"
-
-#: ../../../src/ui.cpp:1477
-#: ../../../src/bak/ui.cpp:1264
-msgid "<b>Date:</b> "
-msgstr "<b>Datum:</b> "
-
-#: ../../../src/ui.cpp:1485
-#: ../../../src/bak/ui.cpp:1272
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Bron:</b> Gegenereerd<br>"
-
-#: ../../../src/ui.cpp:1491
-#: ../../../src/ui.cpp:1508
-#: ../../../src/bak/ui.cpp:1278
-#: ../../../src/bak/ui.cpp:1296
-msgid "<b>From:</b> "
-msgstr "<b>Van:</b> "
-
-#: ../../../src/ui.cpp:1508
-#: ../../../src/bak/ui.cpp:1296
-msgid "unknown"
-msgstr "onbekend"
-
-#: ../../../src/ui.cpp:1509
-#: ../../../src/ui.cpp:1533
-#: ../../../src/ui.cpp:1592
-#: ../../../src/bak/ui.cpp:1297
-#: ../../../src/bak/ui.cpp:1321
-#: ../../../src/bak/ui.cpp:1380
-msgid "<b>To:</b> "
-msgstr "<b>Naar:</b> "
-
-#: ../../../src/ui.cpp:1512
-#: ../../../src/bak/ui.cpp:1300
-msgid " (yours, label: "
-msgstr " (van jou, label: "
-
-#: ../../../src/ui.cpp:1514
-#: ../../../src/bak/ui.cpp:1302
-msgid " (yours)"
-msgstr " (van jou)"
-
-#: ../../../src/ui.cpp:1551
-#: ../../../src/ui.cpp:1563
-#: ../../../src/ui.cpp:1609
-#: ../../../src/ui.cpp:1626
-#: ../../../src/bak/ui.cpp:1339
-#: ../../../src/bak/ui.cpp:1351
-#: ../../../src/bak/ui.cpp:1397
-#: ../../../src/bak/ui.cpp:1414
-msgid "<b>Credit:</b> "
-msgstr "<b>Credit:</b>"
-
-#: ../../../src/ui.cpp:1553
-#: ../../../src/bak/ui.cpp:1341
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s wordt volwassen over %d blokken)"
-
-#: ../../../src/ui.cpp:1555
-#: ../../../src/bak/ui.cpp:1343
-msgid "(not accepted)"
-msgstr "(niet geaccepteerd)"
-
-#: ../../../src/ui.cpp:1600
-#: ../../../src/ui.cpp:1608
-#: ../../../src/ui.cpp:1623
-#: ../../../src/bak/ui.cpp:1388
-#: ../../../src/bak/ui.cpp:1396
-#: ../../../src/bak/ui.cpp:1411
-msgid "<b>Debit:</b> "
-msgstr "<b>Debet:</b>"
-
-#: ../../../src/ui.cpp:1614
-#: ../../../src/bak/ui.cpp:1402
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Transactiefooi:</b> "
-
-#: ../../../src/ui.cpp:1630
-#: ../../../src/bak/ui.cpp:1418
-msgid "<b>Net amount:</b> "
-msgstr "<b>Nettobedrag:</b> "
-
-#: ../../../src/ui.cpp:1637
-#: ../../../src/bak/ui.cpp:1425
-msgid "Message:"
-msgstr "Mededeling:"
-
-#: ../../../src/ui.cpp:1639
-#: ../../../src/bak/ui.cpp:1427
-msgid "Comment:"
-msgstr "Commentaar:"
-
-#: ../../../src/ui.cpp:1642
-#: ../../../src/bak/ui.cpp:1430
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Gegenereerde coins mogen pas na een wachttijd van 120 blokken uitgegeven worden. Op het moment dat dit blok gegenereerd werd, is het naar het netwerk verzonden om aan de blokkenreeks toegevoegd te worden. Als het niet succesvol in de blokkenreeks opgenomen kan worden verandert de status in \"niet geaccepteerd\" en kan het niet uitegegeven worden. Dit kan soms gebeuren als een andere node op ongeveer hetzelfde moment een blok genereert."
-
-#: ../../../src/ui.cpp:1826
-#: ../../../src/bak/ui.cpp:1610
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Kan niet schrijven naar het bestand autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1862
-#: ../../../src/bak/ui.cpp:1646
-msgid "Main"
-msgstr "Algemeen"
-
-#: ../../../src/ui.cpp:1872
-#: ../../../src/bak/ui.cpp:1656
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Start Bitcoin wanneer het systeem opstart"
-
-#: ../../../src/ui.cpp:1879
-#: ../../../src/bak/ui.cpp:1663
-msgid "&Minimize on close"
-msgstr "&Minimaliseer bij sluiten van het venster"
-
-#: ../../../src/ui.cpp:2021
-#: ../../../src/bak/ui.cpp:1805
-#, c-format
-msgid "version %s"
-msgstr "versie %s"
-
-#: ../../../src/ui.cpp:2144
-#: ../../../src/bak/ui.cpp:1928
-msgid "Error in amount  "
-msgstr "Fout in hoeveelheid  "
-
-#: ../../../src/ui.cpp:2144
-#: ../../../src/ui.cpp:2149
-#: ../../../src/ui.cpp:2154
-#: ../../../src/ui.cpp:2207
-#: ../../../src/uibase.cpp:61
-#: ../../../src/bak/ui.cpp:1928
-#: ../../../src/bak/ui.cpp:1933
-#: ../../../src/bak/ui.cpp:1938
-#: ../../../src/bak/ui.cpp:1973
-msgid "Send Coins"
-msgstr "Verstuur coins"
-
-#: ../../../src/ui.cpp:2149
-#: ../../../src/bak/ui.cpp:1933
-msgid "Amount exceeds your balance  "
-msgstr "Hoeveelheid overschrijdt uw huidige balans  "
-
-#: ../../../src/ui.cpp:2154
-#: ../../../src/bak/ui.cpp:1938
-msgid "Total exceeds your balance when the "
-msgstr "Totaal overschrijdt uw huidige balans wanneer de "
-
-#: ../../../src/ui.cpp:2154
-#: ../../../src/bak/ui.cpp:1938
-msgid " transaction fee is included  "
-msgstr " transactiefooi is meegerekend  "
-
-#: ../../../src/ui.cpp:2181
-#: ../../../src/bak/ui.cpp:1956
-msgid "Payment sent  "
-msgstr "Betaling verzonden  "
-
-#: ../../../src/ui.cpp:2207
-#: ../../../src/bak/ui.cpp:1973
-msgid "Invalid address  "
-msgstr "Foutief adres  "
-
-#: ../../../src/ui.cpp:2262
-#: ../../../src/bak/ui.cpp:2028
-#, c-format
-msgid "Sending %s to %s"
-msgstr "%s versturen naar %s"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2368
-#: ../../../src/bak/ui.cpp:2101
-#: ../../../src/bak/ui.cpp:2134
-msgid "CANCELLED"
-msgstr "GEANNULEERD"
-
-#: ../../../src/ui.cpp:2339
-#: ../../../src/bak/ui.cpp:2105
-msgid "Cancelled"
-msgstr "Geannuleerd"
-
-#: ../../../src/ui.cpp:2341
-#: ../../../src/bak/ui.cpp:2107
-msgid "Transfer cancelled  "
-msgstr "Transactie geannuleerd  "
-
-#: ../../../src/ui.cpp:2394
-#: ../../../src/bak/ui.cpp:2160
-msgid "Error: "
-msgstr "Fout: "
-
-#: ../../../src/ui.cpp:2413
-#: ../../../src/bak/ui.cpp:2179
-msgid "Connecting..."
-msgstr "Verbinden..."
-
-#: ../../../src/ui.cpp:2418
-#: ../../../src/bak/ui.cpp:2184
-msgid "Unable to connect"
-msgstr "Kan niet verbinden"
-
-#: ../../../src/ui.cpp:2423
-#: ../../../src/bak/ui.cpp:2189
-msgid "Requesting public key..."
-msgstr "Aanvragen van publieke sleutel..."
-
-#: ../../../src/ui.cpp:2435
-#: ../../../src/bak/ui.cpp:2201
-msgid "Received public key..."
-msgstr "Publieke sleutel ontvangen..."
-
-#: ../../../src/ui.cpp:2449
-#: ../../../src/bak/ui.cpp:2215
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Ontvanger aanvaardt geen transacties via IP adres"
-
-#: ../../../src/ui.cpp:2451
-#: ../../../src/bak/ui.cpp:2217
-msgid "Transfer was not accepted"
-msgstr "Transactie niet geaccepteerd"
-
-#: ../../../src/ui.cpp:2460
-#: ../../../src/bak/ui.cpp:2226
-msgid "Invalid response received"
-msgstr "Foutief antwoord ontvangen"
-
-#: ../../../src/ui.cpp:2473
-#: ../../../src/bak/ui.cpp:2241
-msgid "Creating transaction..."
-msgstr "Transactie aanmaken..."
-
-#: ../../../src/ui.cpp:2496
-#: ../../../src/bak/ui.cpp:2253
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Deze transactie vergt een fooi van ten minste %s omwille van zijn bedrag, complexiteit, of gebruik van recent ontvangen fonden"
-
-#: ../../../src/ui.cpp:2498
-#: ../../../src/bak/ui.cpp:2255
-msgid "Transaction creation failed"
-msgstr "Aanmaken van transactie mislukt"
-
-#: ../../../src/ui.cpp:2508
-#: ../../../src/bak/ui.cpp:2262
-msgid "Transaction aborted"
-msgstr "Transactie geannuleerd"
-
-#: ../../../src/ui.cpp:2516
-#: ../../../src/bak/ui.cpp:2270
-msgid "Lost connection, transaction cancelled"
-msgstr "Verbinding verloren, transactie geannuleerd"
-
-#: ../../../src/ui.cpp:2532
-#: ../../../src/bak/ui.cpp:2286
-msgid "Sending payment..."
-msgstr "Betaling versturen..."
-
-#: ../../../src/ui.cpp:2544
-#: ../../../src/bak/ui.cpp:2292
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Fout: De transactie is afgekeurd.  Dit kan gebeuren als bepaalde coins in je Portefeuille al zijn uitgegeven. Dit kan veroorzaakt worden doordat je een kopie van wallet.dat gebruikt hebt en enkel daar je uitgave geregistreerd is."
-
-#: ../../../src/ui.cpp:2553
-#: ../../../src/bak/ui.cpp:2301
-msgid "Waiting for confirmation..."
-msgstr "Wachten op bevestiging..."
-
-#: ../../../src/ui.cpp:2570
-#: ../../../src/bak/ui.cpp:2319
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"De betaling is verstuurd, maar de ontvanger kon hem niet verifiëren.\n"
-"De transactie is opgenomen en wordt uitbetaald aan de ontvanger,\n"
-"maar het mededelings-veld blijft blanco."
-
-#: ../../../src/ui.cpp:2579
-#: ../../../src/bak/ui.cpp:2328
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Betaling is verstuurd, maar een foutief antword is ontvangen."
-
-#: ../../../src/ui.cpp:2585
-#: ../../../src/bak/ui.cpp:2334
-msgid "Payment completed"
-msgstr "Betaling voltooid"
-
-#: ../../../src/ui.cpp:2627
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-#: ../../../src/bak/ui.cpp:2376
-#: ../../../src/bak/ui.cpp:2522
-#: ../../../src/bak/ui.cpp:2559
-msgid "Name"
-msgstr "Naam"
-
-#: ../../../src/ui.cpp:2628
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-#: ../../../src/bak/ui.cpp:2377
-#: ../../../src/bak/ui.cpp:2522
-#: ../../../src/bak/ui.cpp:2559
-msgid "Address"
-msgstr "Adres"
-
-#: ../../../src/ui.cpp:2630
-#: ../../../src/ui.cpp:2785
-#: ../../../src/bak/ui.cpp:2379
-#: ../../../src/bak/ui.cpp:2534
-msgid "Label"
-msgstr "Label"
-
-#: ../../../src/ui.cpp:2631
-#: ../../../src/uibase.cpp:847
-#: ../../../src/bak/ui.cpp:2380
-msgid "Bitcoin Address"
-msgstr "Bitcoin-adres"
-
-#: ../../../src/ui.cpp:2755
-#: ../../../src/bak/ui.cpp:2504
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Dit is een van uw eigen adressen voor het ontvangen van betalingen, en kan niet worden toegevoegd aan uw adresboek.  "
-
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2779
-#: ../../../src/bak/ui.cpp:2522
-#: ../../../src/bak/ui.cpp:2528
-msgid "Edit Address"
-msgstr "Bewerk adres"
-
-#: ../../../src/ui.cpp:2785
-#: ../../../src/bak/ui.cpp:2534
-msgid "Edit Address Label"
-msgstr "Bewerk adreslabel"
-
-#: ../../../src/ui.cpp:2813
-#: ../../../src/ui.cpp:2819
-#: ../../../src/bak/ui.cpp:2559
-#: ../../../src/bak/ui.cpp:2565
-msgid "Add Address"
-msgstr "Adres toevoegen"
-
-#: ../../../src/ui.cpp:2906
-#: ../../../src/bak/ui.cpp:2642
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2908
-#: ../../../src/bak/ui.cpp:2644
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Genereren..."
-
-#: ../../../src/ui.cpp:2910
-#: ../../../src/bak/ui.cpp:2646
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (niet verbonden)"
-
-#: ../../../src/ui.cpp:2989
-#: ../../../src/bak/ui.cpp:2725
-msgid "&Open Bitcoin"
-msgstr "&Open Bitcoin"
-
-#: ../../../src/ui.cpp:2990
-#: ../../../src/bak/ui.cpp:2726
-msgid "&Send Bitcoins"
-msgstr "&Verstuur Bitcoins"
-
-#: ../../../src/ui.cpp:2991
-#: ../../../src/bak/ui.cpp:2727
-msgid "O&ptions..."
-msgstr "O&pties"
-
-#: ../../../src/ui.cpp:2994
-#: ../../../src/uibase.cpp:25
-#: ../../../src/bak/ui.cpp:2730
-msgid "E&xit"
-msgstr "A&fsluiten"
-
-#: ../../../src/ui.cpp:3220
-#: ../../../src/bak/ui.cpp:2956
-msgid "Program has crashed and will terminate.  "
-msgstr "Het programma is gecrasht en wordt afgesloten.  "
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Bestand"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Uw ontvangstadressen..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "&Versleutel portefeuille..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "&Wijzig portefeuille-wachtwoord..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "&Opties..."
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "&Eigenschappen"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "&Over..."
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "&Help"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "Adresboek"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Uw bitcoin-adres:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " &Nieuw... "
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " &Kopieer naar plakbord "
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "Balans:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr " Alles"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr " Verstuurd"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr " Ontvangen"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr " Wordt verwerkt"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "Alle transacties"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Verstuurd/Ontvangen"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "Verstuurd"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "Ontvangen"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "&Start Bitcoin wanneer het systeem opstart"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimaliseer tot systeemvak in plaats van de taakbalk"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "Portmapping via &UPnP"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "M&inimaliseer tot taakbalk bij sluiten"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "&Verbind via socks4 proxy (vereist herstart):"
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "Proxy &IP:"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " &Poort:"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Optionele transactiefooi per KB die helpt ervoor zorgen dat uw transacties snel verwerkt worden. De meeste transacties zijn 1KB. Fooi 0.01 is aangeraden."
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "Transactiefooi:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "Annuleren"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "&Toepassen"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "versie"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Bitcoin-ontwikkelaars\n"
-"\n"
-"Dit is experimentele software.\n"
-"\n"
-"Gedistributeerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand \n"
-"license.txt of kijk op http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Dit product bevat software ontwikkeld door het OpenSSL project for gebruik \n"
-"in de OpenSSL Toolkit (http://www.openssl.org/), en cryptografische \n"
-"software geschreven door Eric Young (eay@cryptsoft.com)) en UPnP software geschreven\n"
-"door Thomas Bernard."
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Voer een bitcoin-adres (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "Betaal &aan:"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "&Plakken"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr " Adres&boek..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "&Hoeveelheid:"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "O&verdracht:"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr " Standaard"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "&Versturen"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Verbinden..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Dit zijn je bitcoin-adressen voor het ontvangen van betalingen.  Het is een goed idee iedere afzender een ander adres te geven zodat je bij kunt houden wie je een betaling stuurt. Het geselecteerde adres is zichtbaar in het hoofdscherm."
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "&Bewerken..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " &Nieuw adres... "
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "Versturen..."
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Dit zijn je bitcoin-adressen voor het ontvangen van betalingen.  Het is een goed idee iedere afzender een ander adres te geven zodat je bij kunt houden wie je een betaling stuurt. Het geselecteerde adres is zichtbaar in het hoofdscherm."
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "Ontvangen..."
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "&Verwijderen"
-
-#: ../../../src/bak/wallet.cpp:957
-msgid "Invalid bitcoin address"
-msgstr "Foutief bitcoin-adres"
-
-#: ../../../src/bak/uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Verbind via socks4 proxy: "
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "Transactiedetails"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "Opties"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "Over Bitcoin"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "Uw bitcoin-adressen"
-
diff --git a/locale/pl/LC_MESSAGES/bitcoin.po b/locale/pl/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 17b5f10..0000000
+++ /dev/null
@@ -1,978 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Bitcoin\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-28 20:11+0100\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Krystian Maksymowicz <krystian.maksymowicz@gmail.com>\n"
-"Language-Team: Spiechu <spiechu@gmail.com>, Krystian Maksymowicz <krystian.maksymowicz@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"X-Poedit-Language: Polish\n"
-"X-Poedit-Country: POLAND\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/net.cpp:1590
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Powiązanie z portem %d nie powiodło się. Prawdopodobnie Bitcoin jest już uruchomiony."
-
-#: ../../../src/init.cpp:162
-msgid "Bitcoin version"
-msgstr "Wersja Bitcoin"
-
-#: ../../../src/init.cpp:163
-msgid "Usage:"
-msgstr "Zastosowanie:"
-
-#: ../../../src/init.cpp:165
-msgid "Send command to -server or bitcoind\n"
-msgstr "Wyślij polecenie do -server lub bitcoind\n"
-
-#: ../../../src/init.cpp:166
-msgid "List commands\n"
-msgstr "Lista komend\n"
-
-#: ../../../src/init.cpp:167
-msgid "Get help for a command\n"
-msgstr "Wyświetl pomoc dla komendy\n"
-
-#: ../../../src/init.cpp:168
-msgid "Options:\n"
-msgstr "Opcje:\n"
-
-#: ../../../src/init.cpp:169
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Określ plik konfiguracyjny (domyślnie: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Określ plik pid (domyślnie: bitcoind.pid)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Generate coins\n"
-msgstr "Generuj monety\n"
-
-#: ../../../src/init.cpp:172
-msgid "Don't generate coins\n"
-msgstr "Nie generuj monet\n"
-
-#: ../../../src/init.cpp:173
-msgid "Start minimized\n"
-msgstr "Uruchom zminimalizowany\n"
-
-#: ../../../src/init.cpp:174
-msgid "Specify data directory\n"
-msgstr "Określ katalog danych\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Ustaw limit czasu połączenia (w milisekundach)\n"
-
-#: ../../../src/init.cpp:176
-msgid "Connect through socks4 proxy\n"
-msgstr "Połącz przez proxy socks4\n"
-
-# 2do
-#: ../../../src/init.cpp:177
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Umożliwiaj wyszukiwanie DNS przy dodawaniu węzła i połączenia\n"
-
-# 2do
-#: ../../../src/init.cpp:178
-msgid "Add a node to connect to\n"
-msgstr "Dodaj węzeł do którego połączyć\n"
-
-#: ../../../src/init.cpp:179
-msgid "Connect only to the specified node\n"
-msgstr "Łącz tylko z wybranym węzłem\n"
-
-#: ../../../src/init.cpp:180
-msgid "Don't accept connections from outside\n"
-msgstr "Nie akceptuj połączeń z zewnątrz\n"
-
-#: ../../../src/init.cpp:183
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Nie próbuj użyć UPnP dla mapowania portu nasłuchu\n"
-
-#: ../../../src/init.cpp:185
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Próbuj użyć UPnP dla mapowania portu nasłuchu\n"
-
-#: ../../../src/init.cpp:188
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Prowizja na KB dodawana do transakcji, które wysyłasz\n"
-
-#: ../../../src/init.cpp:190
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Akceptuj polecenia linii poleceń i JSON-RPC\n"
-
-#: ../../../src/init.cpp:193
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Uruchom w tle (daemon) i akceptuj komendy\n"
-
-#: ../../../src/init.cpp:195
-msgid "Use the test network\n"
-msgstr "Użyj sieci testowej\n"
-
-#: ../../../src/init.cpp:196
-msgid "Username for JSON-RPC connections\n"
-msgstr "Nazwa użytkownika dla połączeń JSON-RPC\n"
-
-#: ../../../src/init.cpp:197
-msgid "Password for JSON-RPC connections\n"
-msgstr "Hasło dla połączeń JSON-RPC\n"
-
-#: ../../../src/init.cpp:198
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Nasłuch dla połączeń JSON-RPC na porcie <port> (domyślnie: 8332)\n"
-
-#: ../../../src/init.cpp:199
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Zezwól na połączenia JSON-RPC z adresu IP\n"
-
-#: ../../../src/init.cpp:200
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Wysyłaj polecenia do węzła działającego na <ip> (domyślnie: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:201
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Ustaw pulę kluczy na <n> (domyślnie: 100)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Przeszukaj łańcuch bloków w poszukiwaniu zaginionych transakcji\n"
-
-#: ../../../src/init.cpp:206
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"Opcje SSL: (zobacz instrukcje na Bitcoin Wiki dla ustawień SSL)\n"
-
-#: ../../../src/init.cpp:207
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Użyj OpenSSL (https) dla połączeń JSON-RPC\n"
-
-#: ../../../src/init.cpp:208
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Plik certyfikacji serwera (domyślnie: server.cert)\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server private key (default: server.pem)\n"
-msgstr "Klucz prywatny serwera (domyślnie: server.pem)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Akceptowalne szyfry (domyślnie: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:214
-msgid "This help message\n"
-msgstr "Ta wiadomość pomocy\n"
-
-#: ../../../src/init.cpp:351
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Nie można korzystać z katalogu %s z danymi. Bitcoin prawdopodobnie już jest uruchomiony."
-
-#: ../../../src/init.cpp:377
-msgid "Error loading addr.dat      \n"
-msgstr "Błąd ładowania addr.dat      \n"
-
-#: ../../../src/init.cpp:383
-msgid "Error loading blkindex.dat      \n"
-msgstr "Błąd ładowania blkindex.dat      \n"
-
-#: ../../../src/init.cpp:391
-msgid "Error loading wallet.dat      \n"
-msgstr "Błąd ładowania wallet.dat      \n"
-
-#: ../../../src/init.cpp:481
-msgid "Invalid -proxy address"
-msgstr "Niewłaściwy adres -proxy"
-
-#: ../../../src/init.cpp:504
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Nieprawidłowa kwota w -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:508
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Ostrzeżenie: ustawienie -paytxfee jest bardzo wysokie. To jest prowizja transakcji, którą zapłacisz jeżeli wyślesz transakcję."
-
-#: ../../../src/rpc.cpp:1822
-#: ../../../src/rpc.cpp:1824
-#, c-format
-msgid "To use the %s option"
-msgstr "Użycie opcji %s"
-
-#: ../../../src/rpc.cpp:1826
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Ostrzeżenie: %s, musisz ustawić rpcpassword=<password>\n"
-"w pliku konfiguracyjnym: %s\n"
-"Jeżeli plik nie istnieje, utwórz go z uprawnieniami tylko do odczytu dla właściciela.\n"
-
-#: ../../../src/rpc.cpp:1994
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Musisz ustawić rpcpassword=<password> w pliku konfiguracyjnym:\n"
-"%s\n"
-"Jeżeli plik nie istnieje, utwórz go z uprawnieniami tylko do odczytu dla właściciela."
-
-#: ../../../src/util.cpp:874
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Ostrzeżenie: Sprawdź czy ustawienia daty i czasu komputera są prawidłowe. Jeżeli zegar jest źle ustawiony, Bitcoin nie będzie działał poprawnie."
-
-#: ../../../src/util.cpp:908
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/ui.cpp:216
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Ta transakcja przekracza limit wielkości. W dalszym ciągu możesz ją wysłać z prowizją %s, która dotrze do węzłów przetwarzających twoją transakcję i pomoże utrzymać całą sieć. Chcesz zapłacić prowizję?"
-
-#: ../../../src/ui.cpp:316
-msgid "Status"
-msgstr "Stan"
-
-#: ../../../src/ui.cpp:317
-msgid "Date"
-msgstr "Data"
-
-#: ../../../src/ui.cpp:318
-msgid "Description"
-msgstr "Opis"
-
-#: ../../../src/ui.cpp:319
-msgid "Debit"
-msgstr "Debet"
-
-#: ../../../src/ui.cpp:320
-msgid "Credit"
-msgstr "Kredyt"
-
-#: ../../../src/ui.cpp:526
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Otwórz na %d bloków"
-
-#: ../../../src/ui.cpp:528
-#, c-format
-msgid "Open until %s"
-msgstr "Otwarte dopóki %s"
-
-#: ../../../src/ui.cpp:534
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/offline?"
-
-#: ../../../src/ui.cpp:536
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/niepotwierdzona"
-
-#: ../../../src/ui.cpp:538
-#, c-format
-msgid "%d confirmations"
-msgstr "%d potwierdzeń"
-
-#: ../../../src/ui.cpp:623
-msgid "Generated"
-msgstr "Wygenerowano"
-
-#: ../../../src/ui.cpp:631
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Wygenerowano (%s dojrzałych w %d więcej bloków)"
-
-#: ../../../src/ui.cpp:635
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Wygenerowano - Ostrzeżenie: Ten blok nie został otrzymany przez żaden inny węzeł i prawdopodobnie nie zostanie zaakceptowany!"
-
-#: ../../../src/ui.cpp:639
-msgid "Generated (not accepted)"
-msgstr "Wygenerowano (nie zaakceptowano)"
-
-#: ../../../src/ui.cpp:649
-msgid "From: "
-msgstr "Od:"
-
-#: ../../../src/ui.cpp:673
-msgid "Received with: "
-msgstr "Otrzymano z:"
-
-#: ../../../src/ui.cpp:719
-msgid "Payment to yourself"
-msgstr "Płatność dla siebie samego"
-
-#: ../../../src/ui.cpp:753
-msgid "To: "
-msgstr "Do:"
-
-#: ../../../src/ui.cpp:1068
-msgid "    Generating"
-msgstr "    Generowanie"
-
-#: ../../../src/ui.cpp:1070
-msgid "(not connected)"
-msgstr "(nie połączony)"
-
-#: ../../../src/ui.cpp:1073
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d połączeń     %d bloków     %d transakcji"
-
-#: ../../../src/ui.cpp:1178
-#: ../../../src/ui.cpp:2571
-msgid "New Receiving Address"
-msgstr "Nowy adres odbiorczy"
-
-#: ../../../src/ui.cpp:1179
-#: ../../../src/ui.cpp:2572
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Powinieneś używać nowych adresów dla każdej otrzymywanej płatności.\n"
-"\n"
-"Etykieta"
-
-#: ../../../src/ui.cpp:1251
-msgid "<b>Status:</b> "
-msgstr "<b>Status:</b>"
-
-#: ../../../src/ui.cpp:1256
-msgid ", has not been successfully broadcast yet"
-msgstr ", nie został jeszcze prawidłowo rozgłoszony"
-
-#: ../../../src/ui.cpp:1258
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", rozgłasza przez %d węzeł"
-
-#: ../../../src/ui.cpp:1260
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", rozgłasza przez %d węzłów"
-
-#: ../../../src/ui.cpp:1264
-msgid "<b>Date:</b> "
-msgstr "<b>Data:</b>"
-
-#: ../../../src/ui.cpp:1272
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Źródło:</b> Wygenerowano<br>"
-
-#: ../../../src/ui.cpp:1278
-#: ../../../src/ui.cpp:1296
-msgid "<b>From:</b> "
-msgstr "<b>Od:</b>"
-
-#: ../../../src/ui.cpp:1296
-msgid "unknown"
-msgstr "nieznany"
-
-#: ../../../src/ui.cpp:1297
-#: ../../../src/ui.cpp:1321
-#: ../../../src/ui.cpp:1380
-msgid "<b>To:</b> "
-msgstr "<b>Do:</b>"
-
-#: ../../../src/ui.cpp:1300
-msgid " (yours, label: "
-msgstr " (twoja, etykieta: "
-
-#: ../../../src/ui.cpp:1302
-msgid " (yours)"
-msgstr " (twoja)"
-
-#: ../../../src/ui.cpp:1339
-#: ../../../src/ui.cpp:1351
-#: ../../../src/ui.cpp:1397
-#: ../../../src/ui.cpp:1414
-msgid "<b>Credit:</b> "
-msgstr "<b>Kredyt:</b>"
-
-#: ../../../src/ui.cpp:1341
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s dojrzałych w %d więcej bloków)"
-
-#: ../../../src/ui.cpp:1343
-msgid "(not accepted)"
-msgstr "(nie zaakceptowano)"
-
-#: ../../../src/ui.cpp:1388
-#: ../../../src/ui.cpp:1396
-#: ../../../src/ui.cpp:1411
-msgid "<b>Debit:</b> "
-msgstr "<b>Debet:</b>"
-
-#: ../../../src/ui.cpp:1402
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Prowizja transakcji:</b>"
-
-#: ../../../src/ui.cpp:1418
-msgid "<b>Net amount:</b> "
-msgstr "<b>Kwota netto:</b>"
-
-#: ../../../src/ui.cpp:1425
-msgid "Message:"
-msgstr "Wiadomość:"
-
-#: ../../../src/ui.cpp:1427
-msgid "Comment:"
-msgstr "Komentarz:"
-
-#: ../../../src/ui.cpp:1430
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Wygenerowane monety muszą poczekać 120 bloków zanim będą mogły być wydane. Wygenerowany blok został został rozgłoszony w sieci z przeznaczeniem dodawania nowych bloków do łańcucha. Jeżeli nie uda się go dodać do łańcucha, zostanie oznaczony jako \"nie zaakceptowany\" i nie będzie mógł być wydany. Sporadycznie dzieje się tak jeżeli inny węzeł wygeneruje blok nie dalej niż kilka sekund od ciebie."
-
-#: ../../../src/ui.cpp:1610
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Nie mogę zapisać pliku autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1646
-msgid "Main"
-msgstr "Główne"
-
-#: ../../../src/ui.cpp:1656
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Uruchom Bitcoin przy starcie systemu"
-
-#: ../../../src/ui.cpp:1663
-msgid "&Minimize on close"
-msgstr "&Minimalizuj przy zamknięciu"
-
-#: ../../../src/ui.cpp:1805
-#, c-format
-msgid "version %s"
-msgstr "wersja %s"
-
-#: ../../../src/ui.cpp:1928
-msgid "Error in amount  "
-msgstr "Nieprawidłowa kwota"
-
-#: ../../../src/ui.cpp:1928
-#: ../../../src/ui.cpp:1933
-#: ../../../src/ui.cpp:1938
-#: ../../../src/ui.cpp:1973
-#: ../../../src/uibase.cpp:55
-msgid "Send Coins"
-msgstr "Wyślij Monety"
-
-#: ../../../src/ui.cpp:1933
-msgid "Amount exceeds your balance  "
-msgstr "Kwota przekracza twój stan konta"
-
-#: ../../../src/ui.cpp:1938
-msgid "Total exceeds your balance when the "
-msgstr "Przekroczenie twojego stanu konta gdy"
-
-#: ../../../src/ui.cpp:1938
-msgid " transaction fee is included  "
-msgstr " prowizja jest wliczona"
-
-#: ../../../src/ui.cpp:1956
-msgid "Payment sent  "
-msgstr "Wysłano płatność"
-
-#: ../../../src/ui.cpp:1956
-#: ../../../src/ui.cpp:1961
-#: ../../../src/ui.cpp:2107
-#: ../../../src/ui.cpp:2260
-#: ../../../src/wallet.cpp:924
-msgid "Sending..."
-msgstr "Wysyłanie..."
-
-#: ../../../src/ui.cpp:1973
-msgid "Invalid address  "
-msgstr "Nieprawidłowy adres"
-
-#: ../../../src/ui.cpp:2028
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Wysyłanie %s do %s"
-
-#: ../../../src/ui.cpp:2101
-#: ../../../src/ui.cpp:2134
-msgid "CANCELLED"
-msgstr "ANULOWANO"
-
-#: ../../../src/ui.cpp:2105
-msgid "Cancelled"
-msgstr "Anulowano"
-
-#: ../../../src/ui.cpp:2107
-msgid "Transfer cancelled  "
-msgstr "Transfer anulowany"
-
-#: ../../../src/ui.cpp:2160
-msgid "Error: "
-msgstr "Błąd:"
-
-#: ../../../src/ui.cpp:2174
-#: ../../../src/ui.cpp:2245
-#: ../../../src/wallet.cpp:943
-msgid "Insufficient funds"
-msgstr "Niewystarczające fundusze"
-
-#: ../../../src/ui.cpp:2179
-msgid "Connecting..."
-msgstr "Łączenie..."
-
-#: ../../../src/ui.cpp:2184
-msgid "Unable to connect"
-msgstr "Nie można połączyć"
-
-#: ../../../src/ui.cpp:2189
-msgid "Requesting public key..."
-msgstr "Żądanie klucza publicznego..."
-
-#: ../../../src/ui.cpp:2201
-msgid "Received public key..."
-msgstr "Otrzymano klucz publiczny..."
-
-#: ../../../src/ui.cpp:2215
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Adresat nie akceptuje transakcji wysyłanych przez adres IP"
-
-#: ../../../src/ui.cpp:2217
-msgid "Transfer was not accepted"
-msgstr "Transfer nie został zaakceptowany"
-
-#: ../../../src/ui.cpp:2226
-msgid "Invalid response received"
-msgstr "Otrzymano niepoprawną odpowiedź"
-
-#: ../../../src/ui.cpp:2241
-msgid "Creating transaction..."
-msgstr "Tworzenie transakcji..."
-
-#: ../../../src/ui.cpp:2253
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Ta transakcja wymaga prowizji co najmniej %s z uwagi na jej kwotę, złożoność lub wykorzystanie niedawno otrzymanych funduszy"
-
-#: ../../../src/ui.cpp:2255
-msgid "Transaction creation failed"
-msgstr "Błąd tworzenia transakcji "
-
-#: ../../../src/ui.cpp:2262
-msgid "Transaction aborted"
-msgstr "Przerwano transakcję"
-
-#: ../../../src/ui.cpp:2270
-msgid "Lost connection, transaction cancelled"
-msgstr "Utracono połączenie, transakcja anulowana"
-
-#: ../../../src/ui.cpp:2286
-msgid "Sending payment..."
-msgstr "Wysyłanie płatności..."
-
-#: ../../../src/ui.cpp:2292
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Transakcja została odrzucona. Może się tak zdarzyć jeżeli część monet w twoim portfelu zostało wydanych, np. gdy użyto kopii pliku wallet.dat i monety zostały wydane w kopii, a tutaj nie zostały oznaczone jako wydane."
-
-#: ../../../src/ui.cpp:2301
-msgid "Waiting for confirmation..."
-msgstr "Oczekiwanie na potwierdzenie..."
-
-#: ../../../src/ui.cpp:2319
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Płatność została wysłana, ale odbiorca nie mógł jej zweryfikować.\n"
-"Transakcja została zarejestrowana i zostanie przypisana do odbiorcy,\n"
-"ale informacja w komentarzu będzie pusta."
-
-#: ../../../src/ui.cpp:2328
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Płatność została wysłana, ale otrzymano nieprawidłową odpowiedź"
-
-#: ../../../src/ui.cpp:2334
-msgid "Payment completed"
-msgstr "Płatność zakończona"
-
-#: ../../../src/ui.cpp:2376
-#: ../../../src/ui.cpp:2522
-#: ../../../src/ui.cpp:2559
-msgid "Name"
-msgstr "Nazwa"
-
-#: ../../../src/ui.cpp:2377
-#: ../../../src/ui.cpp:2522
-#: ../../../src/ui.cpp:2559
-msgid "Address"
-msgstr "Adres"
-
-#: ../../../src/ui.cpp:2379
-#: ../../../src/ui.cpp:2534
-msgid "Label"
-msgstr "Etykieta"
-
-#: ../../../src/ui.cpp:2380
-#: ../../../src/uibase.cpp:837
-msgid "Bitcoin Address"
-msgstr "Adres Bitcoin"
-
-#: ../../../src/ui.cpp:2504
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "To jest jeden z twoich adresów na otrzymywane płatności i nie może zostać wpisany do książki adresowej."
-
-#: ../../../src/ui.cpp:2522
-#: ../../../src/ui.cpp:2528
-msgid "Edit Address"
-msgstr "Edytuj adres"
-
-#: ../../../src/ui.cpp:2534
-msgid "Edit Address Label"
-msgstr "Edytuj etykietę adresu"
-
-#: ../../../src/ui.cpp:2559
-#: ../../../src/ui.cpp:2565
-msgid "Add Address"
-msgstr "Dodaj adres"
-
-#: ../../../src/ui.cpp:2642
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2644
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Generowanie"
-
-#: ../../../src/ui.cpp:2646
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (nie połączony)"
-
-#: ../../../src/ui.cpp:2725
-msgid "&Open Bitcoin"
-msgstr "&Otwórz Bitcoin"
-
-#: ../../../src/ui.cpp:2726
-msgid "&Send Bitcoins"
-msgstr "&Wyślij Bitcoiny"
-
-#: ../../../src/ui.cpp:2727
-msgid "O&ptions..."
-msgstr "O&pcje..."
-
-#: ../../../src/ui.cpp:2730
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "W&yjście"
-
-#: ../../../src/ui.cpp:2956
-msgid "Program has crashed and will terminate.  "
-msgstr "Program uległ awarii i zostanie zamknięty."
-
-#: ../../../src/main.cpp:1430
-msgid "Warning: Disk space is low  "
-msgstr "Ostrzeżenie: Mało miejsca na dysku"
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Plik"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Twój adres odbiorczy..."
-
-#: ../../../src/uibase.cpp:36
-msgid "&Options..."
-msgstr "&Opcje..."
-
-#: ../../../src/uibase.cpp:39
-msgid "&Settings"
-msgstr "&Ustawienia"
-
-#: ../../../src/uibase.cpp:43
-msgid "&About..."
-msgstr "&O programie..."
-
-#: ../../../src/uibase.cpp:46
-msgid "&Help"
-msgstr "&Pomoc"
-
-#: ../../../src/uibase.cpp:56
-msgid "Address Book"
-msgstr "Książka adresowa"
-
-#: ../../../src/uibase.cpp:69
-msgid "Your Bitcoin Address:"
-msgstr "Twój adres Bitcoin:"
-
-#: ../../../src/uibase.cpp:76
-msgid " &New... "
-msgstr " &Nowy..."
-
-#: ../../../src/uibase.cpp:79
-#: ../../../src/uibase.cpp:780
-#: ../../../src/uibase.cpp:883
-msgid " &Copy to Clipboard "
-msgstr " &Kopiuj do schowka "
-
-#: ../../../src/uibase.cpp:93
-msgid "Balance:"
-msgstr "Saldo:"
-
-#: ../../../src/uibase.cpp:109
-msgid " All"
-msgstr " Wszystko"
-
-#: ../../../src/uibase.cpp:109
-msgid " Sent"
-msgstr " Wysłano"
-
-#: ../../../src/uibase.cpp:109
-msgid " Received"
-msgstr " Otrzymano"
-
-#: ../../../src/uibase.cpp:109
-msgid " In Progress"
-msgstr "W realizacji"
-
-#: ../../../src/uibase.cpp:130
-msgid "All Transactions"
-msgstr "Wszystkie transakcje"
-
-#: ../../../src/uibase.cpp:141
-msgid "Sent/Received"
-msgstr "Wysłane/Otrzymane"
-
-#: ../../../src/uibase.cpp:152
-msgid "Sent"
-msgstr "Wysłane"
-
-#: ../../../src/uibase.cpp:163
-msgid "Received"
-msgstr "Otrzymane"
-
-#: ../../../src/uibase.cpp:302
-#: ../../../src/uibase.cpp:443
-#: ../../../src/uibase.cpp:542
-#: ../../../src/uibase.cpp:722
-#: ../../../src/uibase.cpp:783
-#: ../../../src/uibase.cpp:892
-#: ../../../src/uibase.cpp:981
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:345
-msgid "&Start Bitcoin on system startup"
-msgstr "&Uruchom Bitcoin wraz ze startem systemu"
-
-#: ../../../src/uibase.cpp:348
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimalizuj do obszaru powiadomień zamiast paska zadań"
-
-#: ../../../src/uibase.cpp:351
-msgid "Map port using &UPnP"
-msgstr "Mapuj port używając &UPnP"
-
-#: ../../../src/uibase.cpp:354
-msgid "M&inimize to the tray on close"
-msgstr "M&inimalizuj do obszaru powiadomień przy zamknięciu"
-
-#: ../../../src/uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Połącz przez proxy socks4:"
-
-#: ../../../src/uibase.cpp:371
-msgid "Proxy &IP:"
-msgstr "Proxy &IP:"
-
-#: ../../../src/uibase.cpp:379
-msgid " &Port:"
-msgstr " &Port:"
-
-#: ../../../src/uibase.cpp:392
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Opcjonalna prowizja określona na każdy KB transakcji, zapewniająca szybkie przetworzenie. Większość transakcji to 1KB. Rekomendowana prowizja to 0.01."
-
-#: ../../../src/uibase.cpp:399
-msgid "Pay transaction fee:"
-msgstr "Płać prowizję od transakcji:"
-
-#: ../../../src/uibase.cpp:420
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:424
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:446
-#: ../../../src/uibase.cpp:668
-#: ../../../src/uibase.cpp:727
-#: ../../../src/uibase.cpp:786
-#: ../../../src/uibase.cpp:895
-#: ../../../src/uibase.cpp:984
-msgid "Cancel"
-msgstr "Anuluj"
-
-#: ../../../src/uibase.cpp:449
-msgid "&Apply"
-msgstr "&Zastosuj"
-
-#: ../../../src/uibase.cpp:508
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:514
-msgid "version"
-msgstr "wersja"
-
-#: ../../../src/uibase.cpp:525
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"To oprogramowanie jest eksperymentalne.\n"
-"\n"
-"Dystrybuowane na licencji MIT/X11, zobacz towarzyszący plik \n"
-"license.txt lub http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Ten produkt zawiera oprogramowanie rozwijane przez OpenSSL Project w \n"
-"OpenSSL Toolkit (http://www.openssl.org/) i oprogramowanie kryptograficzne napisane przez \n"
-"Erica Younga (eay@cryptsoft.com) oraz oprogramowanie UPnP napisane przez Thomasa Bernarda."
-
-#: ../../../src/uibase.cpp:581
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Wprowadź adres Bitcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:595
-msgid "Pay &To:"
-msgstr "Wpłać &dla:"
-
-#: ../../../src/uibase.cpp:610
-msgid "&Paste"
-msgstr "&Wklej"
-
-#: ../../../src/uibase.cpp:613
-msgid " Address &Book..."
-msgstr " Książka &adresowa..."
-
-#: ../../../src/uibase.cpp:620
-msgid "&Amount:"
-msgstr "&Saldo:"
-
-#: ../../../src/uibase.cpp:630
-msgid "T&ransfer:"
-msgstr "T&ransfer:"
-
-#: ../../../src/uibase.cpp:636
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../src/uibase.cpp:663
-msgid "&Send"
-msgstr "&Wyślij"
-
-#: ../../../src/uibase.cpp:711
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Łączenie..."
-
-#: ../../../src/uibase.cpp:761
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "To są twoje adresy Bitcoin dla otrzymywania płatności. Możesz chcieć podawać inny dla każdego płacącego aby kontrolować kto ci płaci. Wyróżniony adres będzie wyświetlany w oknie głównym."
-
-#: ../../../src/uibase.cpp:774
-#: ../../../src/uibase.cpp:886
-msgid "&Edit..."
-msgstr "&Edytuj..."
-
-#: ../../../src/uibase.cpp:777
-#: ../../../src/uibase.cpp:889
-msgid " &New Address... "
-msgstr " &Nowy adres..."
-
-#: ../../../src/uibase.cpp:849
-msgid "Sending"
-msgstr "Wysyłanie"
-
-#: ../../../src/uibase.cpp:857
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "To są twoje adresy Bitcoin dla otrzymywania płatności. Możesz podać różne dla każdego płacącego aby kontrolować kto ci płaci. Wyróżniony adres będzie wyświetlany w oknie głównym."
-
-#: ../../../src/uibase.cpp:870
-msgid "Receiving"
-msgstr "Otrzymywanie"
-
-#: ../../../src/uibase.cpp:880
-msgid "&Delete"
-msgstr "&Usuń"
-
-#: ../../../src/wallet.cpp:917
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Błąd: Ta transakcja wymaga prowizji co najmniej %s z uwagi na kwotę, złożoność lub użycie niedawno otrzymanych funduszy"
-
-#: ../../../src/wallet.cpp:919
-msgid "Error: Transaction creation failed  "
-msgstr "Błąd: Nie udało się utworzyć transakcji"
-
-#: ../../../src/wallet.cpp:928
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Błąd: Transakcja została odrzucona. Może się tak zdarzyć jeżeli część monet w twoim portfelu zostało wydanych, np. gdy użyto kopii pliku wallet.dat i monety zostały wydane w kopii, a tutaj nie zostały oznaczone jako wydane."
-
-#: ../../../src/wallet.cpp:941
-msgid "Invalid amount"
-msgstr "Niewłaściwa kwota"
-
-#: ../../../src/wallet.cpp:948
-msgid "Invalid bitcoin address"
-msgstr "Niewłaściwy adres bitcoin"
-
-#: ../../../src/uibase.h:147
-msgid "Transaction Details"
-msgstr "Szczegóły transakcji"
-
-#: ../../../src/uibase.h:199
-msgid "Options"
-msgstr "Opcje"
-
-#: ../../../src/uibase.h:228
-msgid "About Bitcoin"
-msgstr "O Bitcoin"
-
-#: ../../../src/uibase.h:337
-msgid "Your Bitcoin Addresses"
-msgstr "Twoje adresy bitcoin"
-
diff --git a/locale/pt/LC_MESSAGES/bitcoin.mo b/locale/pt/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 35a3fd7..0000000
Binary files a/locale/pt/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/pt/LC_MESSAGES/bitcoin.po b/locale/pt/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 040fb1d..0000000
+++ /dev/null
@@ -1,811 +0,0 @@
-msgid ""\r
-msgstr ""\r
-"Project-Id-Version: \n"\r
-"Report-Msgid-Bugs-To: \n"\r
-"POT-Creation-Date: 2010-05-26 22:02-0000\n"\r
-"PO-Revision-Date: 2010-07-05 09:06+0100\n"\r
-"Last-Translator: Tiago Faria\n"\r
-"Language-Team: \n"\r
-"MIME-Version: 1.0\n"\r
-"Content-Type: text/plain; charset=UTF-8\n"\r
-"Content-Transfer-Encoding: 8bit\n"\r
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"\r
-"X-Poedit-Basepath: .\n"\r
-"X-Poedit-SearchPath-0: ../../..\n"\r
-\r
-#: ../../../init.cpp:342\r
-msgid "Usage: bitcoin [options]"\r
-msgstr "Utilização Bitcoin [opções]"\r
-\r
-#: ../../../init.cpp:343\r
-msgid "Options:\n"\r
-msgstr "Opções:\n"\r
-\r
-#: ../../../init.cpp:344\r
-msgid "Generate coins\n"\r
-msgstr "Gerar moedas\n"\r
-\r
-#: ../../../init.cpp:345\r
-msgid "Don't generate coins\n"\r
-msgstr "Não gerar moedas\n"\r
-\r
-#: ../../../init.cpp:346\r
-msgid "Start minimized\n"\r
-msgstr "Iniciar minimizado\n"\r
-\r
-#: ../../../init.cpp:347\r
-msgid "Specify data directory\n"\r
-msgstr "Especificar localização dos dados\n"\r
-\r
-#: ../../../init.cpp:348\r
-msgid "Connect through socks4 proxy\n"\r
-msgstr "Ligar através de um proxy socks4\n"\r
-\r
-#: ../../../init.cpp:349\r
-msgid "Add a node to connect to\n"\r
-msgstr "Adicionar um nó para efectuar ligação\n"\r
-\r
-#: ../../../init.cpp:350\r
-msgid "Connect only to the specified node\n"\r
-msgstr "Ligar apenas ao nó especificado\n"\r
-\r
-#: ../../../init.cpp:351\r
-msgid "This help message\n"\r
-msgstr "Esta mensagem de ajuda\n"\r
-\r
-#: ../../../init.cpp:455\r
-msgid "Error loading addr.dat      \n"\r
-msgstr "Erro ao carregar addr.dat      \n"\r
-\r
-#: ../../../init.cpp:461\r
-msgid "Error loading blkindex.dat      \n"\r
-msgstr "Erro ao carregar blkindex.dat      \n"\r
-\r
-#: ../../../init.cpp:468\r
-msgid "Error loading wallet.dat      \n"\r
-msgstr "Erro ao carregar wallet.dat      \n"\r
-\r
-#: ../../../init.cpp:536\r
-msgid "Invalid -proxy address"\r
-msgstr "Endereço -proxy inválido"\r
-\r
-#: ../../../init.cpp:629\r
-msgid "Program has crashed and will terminate.  "\r
-msgstr "A aplicação bloqueou e vai terminar.  "\r
-\r
-#: ../../../main.cpp:1465\r
-msgid "Warning: Disk space is low  "\r
-msgstr "Aviso: Espaço em disco limitado  "\r
-\r
-#: ../../../main.cpp:2994\r
-#, c-format\r
-msgid "Error: This is an oversized transaction that requires a transaction fee of %s  "\r
-msgstr "Erro: Esta transacção necessita de uma percentagem de transferência no valor de %s  "\r
-\r
-#: ../../../main.cpp:2996\r
-msgid "Error: Transaction creation failed  "\r
-msgstr "Erro: Criação da transacção falhou  "\r
-\r
-#: ../../../main.cpp:3001\r
-#: ../../../ui.cpp:1761\r
-#: ../../../ui.cpp:1763\r
-#: ../../../ui.cpp:1904\r
-#: ../../../ui.cpp:2053\r
-msgid "Sending..."\r
-msgstr "A enviar ..."\r
-\r
-#: ../../../main.cpp:3005\r
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."\r
-msgstr "Erro: A transacção foi rejeitada. Isto pode acontecer se algumas das moedas na sua carteira já tenham sido gastas, como por exemplo na utilização de uma cópia do wallet.dat onde as moedas foram gastas na cópia mas não aqui."\r
-\r
-#: ../../../main.cpp:3017\r
-msgid "Invalid amount"\r
-msgstr "Montante inválido"\r
-\r
-#: ../../../main.cpp:3019\r
-#: ../../../ui.cpp:1971\r
-#: ../../../ui.cpp:2038\r
-msgid "Insufficient funds"\r
-msgstr "Fundos insuficientes"\r
-\r
-#: ../../../main.cpp:3024\r
-msgid "Invalid bitcoin address"\r
-msgstr "Endereço Bitcoin inválido"\r
-\r
-#: ../../../ui.cpp:189\r
-#, c-format\r
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"\r
-msgstr "Esta transacção ultrapassa o limite. Pode, mesmo assim, efectuá-la, no entanto, uma percentagem de %s será enviada para os nós da rede que processam este pagamento. Quer pagar a percentagem?"\r
-\r
-#: ../../../ui.cpp:285\r
-msgid "Status"\r
-msgstr "Estado"\r
-\r
-#: ../../../ui.cpp:286\r
-msgid "Date"\r
-msgstr "Data"\r
-\r
-#: ../../../ui.cpp:287\r
-msgid "Description"\r
-msgstr "Descrição"\r
-\r
-#: ../../../ui.cpp:288\r
-msgid "Debit"\r
-msgstr "Débito"\r
-\r
-#: ../../../ui.cpp:289\r
-msgid "Credit"\r
-msgstr "Crédito"\r
-\r
-#: ../../../ui.cpp:489\r
-#, c-format\r
-msgid "Open for %d blocks"\r
-msgstr "Aberto para %d blocos"\r
-\r
-#: ../../../ui.cpp:491\r
-#, c-format\r
-msgid "Open until %s"\r
-msgstr "Aberto até %s"\r
-\r
-#: ../../../ui.cpp:497\r
-#, c-format\r
-msgid "%d/offline?"\r
-msgstr "%d/offline?"\r
-\r
-#: ../../../ui.cpp:499\r
-#, c-format\r
-msgid "%d/unconfirmed"\r
-msgstr "%d/não confirmado"\r
-\r
-#: ../../../ui.cpp:501\r
-#, c-format\r
-msgid "%d confirmations"\r
-msgstr "%d confirmados"\r
-\r
-#: ../../../ui.cpp:584\r
-msgid "Generated"\r
-msgstr "Gerado"\r
-\r
-#: ../../../ui.cpp:592\r
-#, c-format\r
-msgid "Generated (%s matures in %d more blocks)"\r
-msgstr "Gerado (%s maduras em mais %d blocos)"\r
-\r
-#: ../../../ui.cpp:596\r
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"\r
-msgstr "Gerado - Aviso: Este bloco não foi recebido por mais nenhum nó da rede e provavelmente não será aceite."\r
-\r
-#: ../../../ui.cpp:600\r
-msgid "Generated (not accepted)"\r
-msgstr "Gerado (não aceite)"\r
-\r
-#: ../../../ui.cpp:610\r
-msgid "From: "\r
-msgstr "Remetente: "\r
-\r
-#: ../../../ui.cpp:634\r
-msgid "Received with: "\r
-msgstr "Recebido por: "\r
-\r
-#: ../../../ui.cpp:676\r
-msgid "Payment to yourself"\r
-msgstr "Pagamento ao próprio"\r
-\r
-#: ../../../ui.cpp:713\r
-msgid "To: "\r
-msgstr "Destinatário: "\r
-\r
-#: ../../../ui.cpp:1009\r
-msgid "    Generating"\r
-msgstr "    A gerar"\r
-\r
-#: ../../../ui.cpp:1011\r
-msgid "(not connected)"\r
-msgstr "(sem ligação)"\r
-\r
-#: ../../../ui.cpp:1014\r
-#, c-format\r
-msgid "     %d connections     %d blocks     %d transactions"\r
-msgstr "     %d ligações     %d blocos     %d transacções"\r
-\r
-#: ../../../ui.cpp:1123\r
-#: ../../../ui.cpp:2351\r
-msgid "New Receiving Address"\r
-msgstr "Novo Endereço de Recepção"\r
-\r
-#: ../../../ui.cpp:1124\r
-#: ../../../ui.cpp:2352\r
-msgid ""\r
-"You should use a new address for each payment you receive.\n"\r
-"\n"\r
-"Label"\r
-msgstr ""\r
-"É uma boa política utilizar um endereço diferente para cada pagamento que recebe.\n"\r
-"\n"\r
-"Etiqueta"\r
-\r
-#: ../../../ui.cpp:1193\r
-msgid "<b>Status:</b> "\r
-msgstr "<b>Estado:</b> "\r
-\r
-#: ../../../ui.cpp:1198\r
-msgid ", has not been successfully broadcast yet"\r
-msgstr ", ainda não foram anunciadas com sucesso"\r
-\r
-#: ../../../ui.cpp:1200\r
-#, c-format\r
-msgid ", broadcast through %d node"\r
-msgstr ", anunciar por %d nó"\r
-\r
-#: ../../../ui.cpp:1202\r
-#, c-format\r
-msgid ", broadcast through %d nodes"\r
-msgstr ", anunciar por %d nós"\r
-\r
-#: ../../../ui.cpp:1206\r
-msgid "<b>Date:</b> "\r
-msgstr "<b>Data:</b> "\r
-\r
-#: ../../../ui.cpp:1214\r
-msgid "<b>Source:</b> Generated<br>"\r
-msgstr "<b>Fonte:</b> Gerado<br>"\r
-\r
-#: ../../../ui.cpp:1220\r
-#: ../../../ui.cpp:1238\r
-msgid "<b>From:</b> "\r
-msgstr "<b>Remetente:</b> "\r
-\r
-#: ../../../ui.cpp:1238\r
-msgid "unknown"\r
-msgstr "desconhecido"\r
-\r
-#: ../../../ui.cpp:1239\r
-#: ../../../ui.cpp:1263\r
-#: ../../../ui.cpp:1322\r
-msgid "<b>To:</b> "\r
-msgstr "<b>Destinatário:</b> "\r
-\r
-#: ../../../ui.cpp:1242\r
-msgid " (yours, label: "\r
-msgstr " (seu, etiqueta: "\r
-\r
-#: ../../../ui.cpp:1244\r
-msgid " (yours)"\r
-msgstr " (seu)"\r
-\r
-#: ../../../ui.cpp:1281\r
-#: ../../../ui.cpp:1293\r
-#: ../../../ui.cpp:1356\r
-msgid "<b>Credit:</b> "\r
-msgstr "<b>Crédito:</b> "\r
-\r
-#: ../../../ui.cpp:1283\r
-#, c-format\r
-msgid "(%s matures in %d more blocks)"\r
-msgstr "(%s maduras em mais %d blocos)"\r
-\r
-#: ../../../ui.cpp:1285\r
-msgid "(not accepted)"\r
-msgstr "(não aceite)"\r
-\r
-#: ../../../ui.cpp:1330\r
-#: ../../../ui.cpp:1353\r
-msgid "<b>Debit:</b> "\r
-msgstr "<b>Débito:</b> "\r
-\r
-#: ../../../ui.cpp:1344\r
-msgid "<b>Transaction fee:</b> "\r
-msgstr "<b>Percentagem da transacção:</b> "\r
-\r
-#: ../../../ui.cpp:1360\r
-msgid "<b>Net amount:</b> "\r
-msgstr "<b>Quantia Net:</b> "\r
-\r
-#: ../../../ui.cpp:1367\r
-msgid "Message:"\r
-msgstr "Mensagem:"\r
-\r
-#: ../../../ui.cpp:1370\r
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."\r
-msgstr "As moedas geradas necessitam de 120 blocos para que possam ser gastas. Quando gera um bloco, ele será anunciado pela rede para ser adicionado à cadeia de blocos. Se falhar, mudará para \"não aceite\" e não será possível utilizá-lo. Isto pode acontecer se um nó gerar outro bloco após alguns segundos do seu."\r
-\r
-#: ../../../ui.cpp:1437\r
-msgid "Main"\r
-msgstr "Principal"\r
-\r
-#: ../../../ui.cpp:1442\r
-msgid "&Minimize on close"\r
-msgstr "&Minimizar ao fechar"\r
-\r
-#: ../../../ui.cpp:1595\r
-#, c-format\r
-msgid "version %s%s BETA"\r
-msgstr "versão %s%s BETA"\r
-\r
-#: ../../../ui.cpp:1681\r
-msgid "Will appear as \"From: Unknown\""\r
-msgstr "Irá aparecer como \"De: Desconhecido\""\r
-\r
-#: ../../../ui.cpp:1681\r
-msgid "n/a"\r
-msgstr "Desconhecido"\r
-\r
-#: ../../../ui.cpp:1681\r
-msgid "Unknown"\r
-msgstr "Desconhecido"\r
-\r
-#: ../../../ui.cpp:1682\r
-msgid "Can't include a message when sending to a Bitcoin address"\r
-msgstr "Não é possível incluir uma mensagem ao enviar para um endereço Bitcoin"\r
-\r
-#: ../../../ui.cpp:1735\r
-msgid "Error in amount  "\r
-msgstr "Erro na quantia  "\r
-\r
-#: ../../../ui.cpp:1735\r
-#: ../../../ui.cpp:1740\r
-#: ../../../ui.cpp:1745\r
-#: ../../../ui.cpp:1771\r
-#: ../../../uibase.cpp:61\r
-msgid "Send Coins"\r
-msgstr "Enviar Moedas"\r
-\r
-#: ../../../ui.cpp:1740\r
-msgid "Amount exceeds your balance  "\r
-msgstr "A quantia excede o seu saldo  "\r
-\r
-#: ../../../ui.cpp:1745\r
-msgid "Total exceeds your balance when the "\r
-msgstr "O total excede o seu saldo quando a "\r
-\r
-#: ../../../ui.cpp:1745\r
-msgid " transaction fee is included  "\r
-msgstr " taxa de transacção for incluída  "\r
-\r
-#: ../../../ui.cpp:1761\r
-msgid "Payment sent  "\r
-msgstr "Pagamento enviado  "\r
-\r
-#: ../../../ui.cpp:1771\r
-msgid "Invalid address  "\r
-msgstr "Endereço inválido  "\r
-\r
-#: ../../../ui.cpp:1825\r
-#, c-format\r
-msgid "Sending %s to %s"\r
-msgstr "A enviar %s para %s"\r
-\r
-#: ../../../ui.cpp:1898\r
-#: ../../../ui.cpp:1931\r
-msgid "CANCELLED"\r
-msgstr "CANCELADO"\r
-\r
-#: ../../../ui.cpp:1902\r
-msgid "Cancelled"\r
-msgstr "Cancelado"\r
-\r
-#: ../../../ui.cpp:1904\r
-msgid "Transfer cancelled  "\r
-msgstr "Transferência cancelada  "\r
-\r
-#: ../../../ui.cpp:1957\r
-msgid "Error: "\r
-msgstr "Erro: "\r
-\r
-#: ../../../ui.cpp:1976\r
-msgid "Connecting..."\r
-msgstr "A estabelecer ligação ..."\r
-\r
-#: ../../../ui.cpp:1981\r
-msgid "Unable to connect"\r
-msgstr "Impossível estabelecer ligação"\r
-\r
-#: ../../../ui.cpp:1986\r
-msgid "Requesting public key..."\r
-msgstr "A requisitar a chave pública ..."\r
-\r
-#: ../../../ui.cpp:1998\r
-msgid "Received public key..."\r
-msgstr "Chave pública recebida"\r
-\r
-#: ../../../ui.cpp:2010\r
-msgid "Transfer was not accepted"\r
-msgstr "A transferência não foi aceite"\r
-\r
-#: ../../../ui.cpp:2019\r
-msgid "Invalid response received"\r
-msgstr "Resposta inválida recebida"\r
-\r
-#: ../../../ui.cpp:2034\r
-msgid "Creating transaction..."\r
-msgstr "A criar a transacção ..."\r
-\r
-#: ../../../ui.cpp:2046\r
-#, c-format\r
-msgid "This is an oversized transaction that requires a transaction fee of %s"\r
-msgstr "Esta transferência requer o pagamento de uma taxa de transacção de %s"\r
-\r
-#: ../../../ui.cpp:2048\r
-msgid "Transaction creation failed"\r
-msgstr "A criação da transacção falhou"\r
-\r
-#: ../../../ui.cpp:2055\r
-msgid "Transaction aborted"\r
-msgstr "Transacção cancelada"\r
-\r
-#: ../../../ui.cpp:2063\r
-msgid "Lost connection, transaction cancelled"\r
-msgstr "Perca de ligação, transacção cancelada"\r
-\r
-#: ../../../ui.cpp:2079\r
-msgid "Sending payment..."\r
-msgstr "A enviar pagamento ..."\r
-\r
-#: ../../../ui.cpp:2085\r
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."\r
-msgstr "A transacção foi rejeitada. Isto pode acontecer se algumas das moedas na sua carteira já foram utilizadas, como na utilização de uma cópia do wallet.dat, onde as moedas foram utilizadas na cópia do ficheiro e essas alterações não reflectem o estado desta carteira."\r
-\r
-#: ../../../ui.cpp:2092\r
-msgid "Waiting for confirmation..."\r
-msgstr "A aguardar confirmação ..."\r
-\r
-#: ../../../ui.cpp:2110\r
-msgid ""\r
-"The payment was sent, but the recipient was unable to verify it.\n"\r
-"The transaction is recorded and will credit to the recipient,\n"\r
-"but the comment information will be blank."\r
-msgstr ""\r
-"O pagamento foi enviado, mas o remetente não consegiu verificar o seu pagamento.\n"\r
-"A transacção foi entregue, e o remetente receberá as modeas,\n"\r
-"no entanto, o comentário de transacção estará vazio."\r
-\r
-#: ../../../ui.cpp:2119\r
-msgid "Payment was sent, but an invalid response was received"\r
-msgstr "O pagamento foi enviado, mas foi recebida uma resposta inválida"\r
-\r
-#: ../../../ui.cpp:2125\r
-msgid "Payment completed"\r
-msgstr "Pagamento completo"\r
-\r
-#: ../../../ui.cpp:2156\r
-#: ../../../ui.cpp:2302\r
-#: ../../../ui.cpp:2339\r
-msgid "Name"\r
-msgstr "Nome"\r
-\r
-#: ../../../ui.cpp:2157\r
-#: ../../../ui.cpp:2302\r
-#: ../../../ui.cpp:2339\r
-msgid "Address"\r
-msgstr "Endereço"\r
-\r
-#: ../../../ui.cpp:2159\r
-#: ../../../ui.cpp:2314\r
-msgid "Label"\r
-msgstr "Nota"\r
-\r
-#: ../../../ui.cpp:2160\r
-#: ../../../uibase.cpp:908\r
-msgid "Bitcoin Address"\r
-msgstr "Endereço Bitcoin"\r
-\r
-#: ../../../ui.cpp:2284\r
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "\r
-msgstr "Este endereço é seu (onde recebe pagamentos) e não pode ser introduzido no seu livros de endereços.  "\r
-\r
-#: ../../../ui.cpp:2302\r
-#: ../../../ui.cpp:2308\r
-msgid "Edit Address"\r
-msgstr "Editar endereço"\r
-\r
-#: ../../../ui.cpp:2314\r
-msgid "Edit Address Label"\r
-msgstr "Editar nota de endereço"\r
-\r
-#: ../../../ui.cpp:2339\r
-#: ../../../ui.cpp:2345\r
-msgid "Add Address"\r
-msgstr "Adicionar endereço"\r
-\r
-#: ../../../ui.cpp:2421\r
-msgid "Bitcoin"\r
-msgstr "Bitcoin"\r
-\r
-#: ../../../ui.cpp:2423\r
-msgid "Bitcoin - Generating"\r
-msgstr "Bitcoin - A gerar"\r
-\r
-#: ../../../ui.cpp:2425\r
-msgid "Bitcoin - (not connected)"\r
-msgstr "Bitcoin - (sem ligação)"\r
-\r
-#: ../../../ui.cpp:2500\r
-msgid "&Open Bitcoin"\r
-msgstr "&Abrir Bitcoin"\r
-\r
-#: ../../../ui.cpp:2501\r
-msgid "O&ptions..."\r
-msgstr "O&pções"\r
-\r
-#: ../../../ui.cpp:2505\r
-#: ../../../uibase.cpp:27\r
-msgid "E&xit"\r
-msgstr "S&air"\r
-\r
-#: ../../../uibase.cpp:30\r
-msgid "&File"\r
-msgstr "&Ficheiro"\r
-\r
-#: ../../../uibase.cpp:38\r
-msgid "&Your Receiving Addresses..."\r
-msgstr "&Os seus endereços"\r
-\r
-#: ../../../uibase.cpp:42\r
-msgid "&Options..."\r
-msgstr "&Opções ..."\r
-\r
-#: ../../../uibase.cpp:45\r
-msgid "&Settings"\r
-msgstr "&Definições"\r
-\r
-#: ../../../uibase.cpp:49\r
-msgid "&About..."\r
-msgstr "&Sobre ..."\r
-\r
-#: ../../../uibase.cpp:52\r
-msgid "&Help"\r
-msgstr "&Ajuda"\r
-\r
-#: ../../../uibase.cpp:62\r
-msgid "Address Book"\r
-msgstr "Livro de Endereços"\r
-\r
-#: ../../../uibase.cpp:77\r
-msgid "Your Bitcoin Address:"\r
-msgstr "O seu endereço Bitcoin:"\r
-\r
-#: ../../../uibase.cpp:84\r
-msgid " &New... "\r
-msgstr " &Novo ... "\r
-\r
-#: ../../../uibase.cpp:87\r
-#: ../../../uibase.cpp:851\r
-#: ../../../uibase.cpp:954\r
-msgid " &Copy to Clipboard "\r
-msgstr " &Copiar para o Clipboard "\r
-\r
-#: ../../../uibase.cpp:102\r
-msgid "Balance:"\r
-msgstr "Saldo:"\r
-\r
-#: ../../../uibase.cpp:121\r
-msgid " All"\r
-msgstr " Todos"\r
-\r
-#: ../../../uibase.cpp:121\r
-msgid " Sent"\r
-msgstr " Enviado"\r
-\r
-#: ../../../uibase.cpp:121\r
-msgid " Received"\r
-msgstr " Recebido"\r
-\r
-#: ../../../uibase.cpp:121\r
-msgid " In Progress"\r
-msgstr " Em progresso"\r
-\r
-#: ../../../uibase.cpp:142\r
-msgid "All Transactions"\r
-msgstr "Todas as transacções"\r
-\r
-#: ../../../uibase.cpp:153\r
-msgid "Sent/Received"\r
-msgstr "Enviadas/Recebidas"\r
-\r
-#: ../../../uibase.cpp:164\r
-msgid "Sent"\r
-msgstr "Enviado"\r
-\r
-#: ../../../uibase.cpp:175\r
-msgid "Received"\r
-msgstr "Recebido"\r
-\r
-#: ../../../uibase.cpp:318\r
-#: ../../../uibase.cpp:479\r
-#: ../../../uibase.cpp:580\r
-#: ../../../uibase.cpp:793\r
-#: ../../../uibase.cpp:854\r
-#: ../../../uibase.cpp:963\r
-#: ../../../uibase.cpp:1052\r
-msgid "OK"\r
-msgstr "OK"\r
-\r
-#: ../../../uibase.cpp:361\r
-msgid "Optional transaction fee you give to the nodes that process your transactions."\r
-msgstr "Pagamento de taxa de transacção opcional que é entregue aos nós que ajudam a processar o seu pagamento"\r
-\r
-#: ../../../uibase.cpp:370\r
-msgid "Transaction fee:"\r
-msgstr "Taxa de transacção:"\r
-\r
-#: ../../../uibase.cpp:386\r
-msgid "&Limit coin generation to"\r
-msgstr "&Limitar a geração de moedas a"\r
-\r
-#: ../../../uibase.cpp:393\r
-msgid "processors"\r
-msgstr "processadores"\r
-\r
-#: ../../../uibase.cpp:399\r
-msgid "&Start Bitcoin on system startup"\r
-msgstr "&Iniciar o Bitcoin no arranque do sistema"\r
-\r
-#: ../../../uibase.cpp:403\r
-msgid "&Minimize to the tray instead of the taskbar"\r
-msgstr "&Minimizar para a zona do relógio em vez da barra de janelas"\r
-\r
-#: ../../../uibase.cpp:407\r
-msgid "M&inimize to the tray on close"\r
-msgstr "M&inimizar para a zona do relógio ao fechar"\r
-\r
-#: ../../../uibase.cpp:414\r
-msgid "&Connect through socks4 proxy: "\r
-msgstr "&Ligar através de um prozy socks4: "\r
-\r
-#: ../../../uibase.cpp:426\r
-msgid "Proxy &IP:"\r
-msgstr "Proxy &IP:"\r
-\r
-#: ../../../uibase.cpp:434\r
-msgid " &Port:"\r
-msgstr " &Porto:"\r
-\r
-#: ../../../uibase.cpp:456\r
-msgid "// [don't translate] Test panel 2 for future expansion"\r
-msgstr ""\r
-\r
-#: ../../../uibase.cpp:460\r
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"\r
-msgstr ""\r
-\r
-#: ../../../uibase.cpp:482\r
-#: ../../../uibase.cpp:735\r
-#: ../../../uibase.cpp:798\r
-#: ../../../uibase.cpp:857\r
-#: ../../../uibase.cpp:966\r
-#: ../../../uibase.cpp:1055\r
-msgid "Cancel"\r
-msgstr "Cancelar"\r
-\r
-#: ../../../uibase.cpp:485\r
-msgid "&Apply"\r
-msgstr "&Aplicar"\r
-\r
-#: ../../../uibase.cpp:546\r
-msgid "Bitcoin "\r
-msgstr "Bitcoin "\r
-\r
-#: ../../../uibase.cpp:552\r
-msgid "version"\r
-msgstr "versão"\r
-\r
-#: ../../../uibase.cpp:563\r
-msgid ""\r
-"Copyright (c) 2009-2010 Bitcoin Developers\n"\r
-"\n"\r
-"This is experimental software.\n"\r
-"\n"\r
-"Distributed under the MIT/X11 software license, see the accompanying file \n"\r
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"\r
-"\n"\r
-"This product includes software developed by the OpenSSL Project for use in the \n"\r
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"\r
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."\r
-msgstr ""\r
-"Copyright (c) 2009-2010 Bitcoin Developers\n"\r
-"\n"\r
-"Este software é experimental.\n"\r
-"\n"\r
-"Distribuído sob a licença de software MIT/X11. Veja os seguintes ficheiros \n"\r
-"para mais informações license.txt ou \n"\r
-"http://www.opensource.org/licenses/mit-license.php.\n"\r
-"Este producto inclui software desenvolvido pelo projecto OpenSSL, para \n"\r
-"ser utilizado no OpenSSL Toolkit (http://www.openssl.org) e software de \n"\r
-"criptografia desenvolvido por Eric Young (eay@cryptsoft.com)\n"\r
-"e UPnP software escrito por Thomas Bernard."\r
-\r
-#: ../../../uibase.cpp:619\r
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJED9L) or IP address (e.g. 123.45.6.7)"\r
-msgstr "Introduza um endereço Bitcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJED9L) ou um endereço de IP (exemplo: 123.45.6.7)"\r
-\r
-#: ../../../uibase.cpp:633\r
-msgid "Pay &To:"\r
-msgstr "Pagar &a:"\r
-\r
-#: ../../../uibase.cpp:648\r
-msgid "&Paste"\r
-msgstr "&Colar"\r
-\r
-#: ../../../uibase.cpp:651\r
-msgid " Address &Book..."\r
-msgstr " Livro de endereços ..."\r
-\r
-#: ../../../uibase.cpp:658\r
-msgid "&Amount:"\r
-msgstr "&Quantia:"\r
-\r
-#: ../../../uibase.cpp:668\r
-msgid "T&ransfer:"\r
-msgstr "T&ransferência:"\r
-\r
-#: ../../../uibase.cpp:674\r
-msgid " Standard"\r
-msgstr " Standard"\r
-\r
-#: ../../../uibase.cpp:696\r
-msgid "&From:"\r
-msgstr "&De:"\r
-\r
-#: ../../../uibase.cpp:713\r
-msgid "&Message:"\r
-msgstr "&Mensagem:"\r
-\r
-#: ../../../uibase.cpp:730\r
-msgid "&Send"\r
-msgstr "&Enviar"\r
-\r
-#: ../../../uibase.cpp:782\r
-msgid ""\r
-"\n"\r
-"\n"\r
-"Connecting..."\r
-msgstr ""\r
-"\n"\r
-"\n"\r
-"A estabelecer ligação ..."\r
-\r
-#: ../../../uibase.cpp:832\r
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."\r
-msgstr "Estes são os seus endereços de Bitcoin onde poderá receber os seus pagamentos. Pode dar um endereço diferente a cada pessoa ou identidade para ter uma melhor ideia sobre quem o está a pagar. O endereço seleccionado será o que aparecerá na janela principal."\r
-\r
-#: ../../../uibase.cpp:845\r
-#: ../../../uibase.cpp:957\r
-msgid "&Edit..."\r
-msgstr "&Editar ..."\r
-\r
-#: ../../../uibase.cpp:848\r
-#: ../../../uibase.cpp:960\r
-msgid " &New Address... "\r
-msgstr " &Novo endereço ... "\r
-\r
-#: ../../../uibase.cpp:920\r
-msgid "Sending"\r
-msgstr "A enviar"\r
-\r
-#: ../../../uibase.cpp:928\r
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."\r
-msgstr "Estes são os seus endereços de Bitcoin onde poderá receber os seus pagamentos. Pode dar um endereço diferente a cada pessoa ou identidade para ter uma melhor ideia sobre quem o está a pagar. O endereço seleccionado será o que aparecerá na janela principal."\r
-\r
-#: ../../../uibase.cpp:941\r
-msgid "Receiving"\r
-msgstr "A receber"\r
-\r
-#: ../../../uibase.cpp:951\r
-msgid "&Delete"\r
-msgstr "&Remover"\r
-\r
-#: ../../../uibase.h:150\r
-msgid "Transaction Details"\r
-msgstr "Detalhes da transacção"\r
-\r
-#: ../../../uibase.h:203\r
-msgid "Options"\r
-msgstr "Opções"\r
-\r
-#: ../../../uibase.h:231\r
-msgid "About Bitcoin"\r
-msgstr "Sobre o Bitcoin"\r
-\r
-#: ../../../uibase.h:341\r
-msgid "Your Bitcoin Addresses"\r
-msgstr "O seu endereço de Bitcoin"\r
diff --git a/locale/readme.txt b/locale/readme.txt
deleted file mode 100644 (file)
index 4019bf4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-put bitcoin.po and bitcoin.mo files at:\r
-locale/<langcode>/LC_MESSAGES/bitcoin.mo and .po\r
-\r
-.po is the sourcefile\r
-.mo is the compiled translation\r
-\r
-Note: pull requests should only include the .po file. Do not include .mo file
\ No newline at end of file
diff --git a/locale/ro/LC_MESSAGES/bitcoin.mo b/locale/ro/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 0eb994b..0000000
Binary files a/locale/ro/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/ro/LC_MESSAGES/bitcoin.po b/locale/ro/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index e906e97..0000000
+++ /dev/null
@@ -1,1078 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-06 03:47+0100\n"
-"PO-Revision-Date: 2011-09-06 06:36+0100\n"
-"Last-Translator: Alex B <paraipanakos@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-Language: Romanian\n"
-"X-Poedit-SourceCharset: iso-8859-2\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/init.cpp:163
-msgid "Bitcoin version"
-msgstr "versiune Bitcoin"
-
-#: ../../../src/init.cpp:164
-msgid "Usage:"
-msgstr "Uz:"
-
-#: ../../../src/init.cpp:166
-msgid "Send command to -server or bitcoind\n"
-msgstr "Trimite comanda la bitcoin lansat cu -server sau bitcoind\n"
-
-#: ../../../src/init.cpp:167
-msgid "List commands\n"
-msgstr "Listeaza comenzi\n"
-
-#: ../../../src/init.cpp:168
-msgid "Get help for a command\n"
-msgstr "Ajutor pentru o comanda\n"
-
-#: ../../../src/init.cpp:169
-msgid "Options:\n"
-msgstr "Optiuni:\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Specifica fisier de configuratie (predeterminat: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Specifica fisier pid (predeterminat: bitcoin.pid)\n"
-
-#: ../../../src/init.cpp:172
-msgid "Generate coins\n"
-msgstr "Genereaza monede\n"
-
-#: ../../../src/init.cpp:173
-msgid "Don't generate coins\n"
-msgstr "Nu genera monede\n"
-
-#: ../../../src/init.cpp:174
-msgid "Start minimized\n"
-msgstr "Porneste minimizat\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify data directory\n"
-msgstr "Specifica directorul de date\n"
-
-#: ../../../src/init.cpp:176
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Specifica timpul maxim de conexiune (in milisecunde)\n"
-
-#: ../../../src/init.cpp:177
-msgid "Connect through socks4 proxy\n"
-msgstr "Conecteaza prin proxy socks4\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Permite cautare DNS pentru addnode si connect\n"
-
-#: ../../../src/init.cpp:179
-msgid "Add a node to connect to\n"
-msgstr "Adauga un nod de conectare\n"
-
-#: ../../../src/init.cpp:180
-msgid "Connect only to the specified node\n"
-msgstr "Conecteaza numai la nodul specificat\n"
-
-#: ../../../src/init.cpp:181
-msgid "Don't accept connections from outside\n"
-msgstr "Nu accepta conexiuni din exterior\n"
-
-#: ../../../src/init.cpp:184
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Nu utiliza UPnP pentru deschiderea portul de ascultare\n"
-
-#: ../../../src/init.cpp:186
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Incearca sa utilizezi UPnP pentru deschiderea portului de ascultare.\n"
-
-#: ../../../src/init.cpp:189
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Comision per KB ce se adauga la tranzactiile transmise\n"
-
-#: ../../../src/init.cpp:191
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Accepta comenzi de consola si JSON-RPC\n"
-
-#: ../../../src/init.cpp:194
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Executa ca daemon si accepta comenzi\n"
-
-#: ../../../src/init.cpp:196
-msgid "Use the test network\n"
-msgstr "Utilizeaza reteaua de probe\n"
-
-#: ../../../src/init.cpp:197
-msgid "Username for JSON-RPC connections\n"
-msgstr "Utilizator pentru conexiuni JSON-RPC\n"
-
-#: ../../../src/init.cpp:198
-msgid "Password for JSON-RPC connections\n"
-msgstr "Parola pentru conexiuni JSON-RPC\n"
-
-#: ../../../src/init.cpp:199
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Asculta conexiuni JSON-RPC pe portul <puerto> (predeterminat: 8332)\n"
-
-#: ../../../src/init.cpp:200
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Permite conexiuni JSON-RPC de la adresa IP specifica\n"
-
-#: ../../../src/init.cpp:201
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Trimite comanda la nod existent la <ip> (predeterminat: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Ajusteaza numarul de chei in rezerva (predeterminat: 100)\n"
-
-#: ../../../src/init.cpp:203
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Rescaneza lantul de blocuri in cautare de tranzacti lipsa din portofel\n"
-
-#: ../../../src/init.cpp:207
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"Optiuni SSL: (vezi la Wiki Bitcoin pentru instructiuni detaliate)\n"
-
-#: ../../../src/init.cpp:208
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Utilizeaza OpenSSL (https) pentru conexiunile JSON-RPC\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Arhiva certificat de server (predeterminat: server.cert)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Server private key (default: server.pem)\n"
-msgstr "Cheie privata de server (predeterminat: server.pem)\n"
-
-#: ../../../src/init.cpp:211
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Tipuri de cifrare acceptate (predeterminat: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:215
-msgid "This help message\n"
-msgstr "Acest mesaj de ajutor\n"
-
-#: ../../../src/init.cpp:353
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Nu se poate obtine permis de lucru in directorul de date %s. E posibil ca Bitcoin sa fie deja in executie."
-
-#: ../../../src/init.cpp:379
-msgid "Error loading addr.dat      \n"
-msgstr "Eroare la incarcare addr.dat      \n"
-
-#: ../../../src/init.cpp:385
-msgid "Error loading blkindex.dat      \n"
-msgstr "Eroare la incarcare blkindex.dat      \n"
-
-#: ../../../src/init.cpp:396
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "Eroare la incarcare wallet.dat      \n"
-
-#: ../../../src/init.cpp:398
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "Eroare la incarcare wallet.dat: E necesare o versiune mai noua de Bitcoin      \n"
-
-#: ../../../src/init.cpp:400
-msgid "Error loading wallet.dat      \n"
-msgstr "Eroare la incarcare wallet.dat      \n"
-
-#: ../../../src/init.cpp:489
-msgid "Invalid -proxy address"
-msgstr "Adresa -proxy invalida"
-
-#: ../../../src/init.cpp:514
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Cantitate invalida pentru -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:518
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Atentie: -paytxfee este prea mare. Acesta este comisionul platit la fiecare tranzactie."
-
-#: ../../../src/main.cpp:1398
-msgid "Warning: Disk space is low  "
-msgstr "Atentie: Spatiul pe hard disk este redus"
-
-#: ../../../src/net.cpp:1610
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Nu e posibila ascultarea pe portul %d in acest calculator. Probabil clientul Bitcoin este deja in executie."
-
-#: ../../../src/rpc.cpp:2005
-#: ../../../src/rpc.cpp:2007
-#, c-format
-msgid "To use the %s option"
-msgstr "Pentru a utiliza optiunea %s"
-
-#: ../../../src/rpc.cpp:2009
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Atentie: %s, trebuie sa specifici rpcpassword=<password>\n"
-"in fisierul de configuratie: %s\n"
-"Daca fisierul nu exista trebuie creat cu permisiuni de citire numai pentru autor.\n"
-
-#: ../../../src/rpc.cpp:2185
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Trebuie sa specifici rpcpassword=<password> in fisierul de configuratie:\n"
-"%s\n"
-"Daca fisierul nu exista trebuie creat cu permisiuni de citire numai pentru autor."
-
-#: ../../../src/ui.cpp:217
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Aceasta tranzactie trece peste limita de dimensiune. O poti trimite in continuare pentru %s, care taxa se imparte intre nodurile ce receptioneaza tranzactia si ajuta la mentinerea retelei. Continui tranzactia?"
-
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1247
-msgid "Enter the current passphrase to the wallet."
-msgstr "Introduce parola actuala de portofel"
-
-#: ../../../src/ui.cpp:262
-#: ../../../src/ui.cpp:1183
-#: ../../../src/ui.cpp:1200
-#: ../../../src/ui.cpp:1248
-#: ../../../src/ui.cpp:1272
-#: ../../../src/ui.cpp:1292
-msgid "Passphrase"
-msgstr "Parola"
-
-#: ../../../src/ui.cpp:268
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "Introduce parola actuala para decriptarea portofelului."
-
-#: ../../../src/ui.cpp:276
-#: ../../../src/ui.cpp:1257
-#: ../../../src/ui.cpp:1314
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "Parola introdusa pentru decriptarea portofelului nu este corecta."
-
-#: ../../../src/ui.cpp:353
-msgid "Status"
-msgstr "Stare"
-
-#: ../../../src/ui.cpp:354
-msgid "Date"
-msgstr "Data"
-
-#: ../../../src/ui.cpp:355
-msgid "Description"
-msgstr "Descriere"
-
-#: ../../../src/ui.cpp:356
-msgid "Debit"
-msgstr "Debit"
-
-#: ../../../src/ui.cpp:357
-msgid "Credit"
-msgstr "Credit"
-
-#: ../../../src/ui.cpp:568
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Deschis pentru %d blocuri"
-
-#: ../../../src/ui.cpp:570
-#, c-format
-msgid "Open until %s"
-msgstr "Deschis pana la %s"
-
-#: ../../../src/ui.cpp:576
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/desconectat?"
-
-#: ../../../src/ui.cpp:578
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/neconfirmat"
-
-#: ../../../src/ui.cpp:580
-#, c-format
-msgid "%d confirmations"
-msgstr "%d confirmari"
-
-#: ../../../src/ui.cpp:665
-msgid "Generated"
-msgstr "Generat"
-
-#: ../../../src/ui.cpp:673
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Generat (%s matureaza in %d blocuri)"
-
-#: ../../../src/ui.cpp:677
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Generat - Atentie: Acest block nu se a receptionat de la alte noduri si probabil nu va fi acceptat!"
-
-#: ../../../src/ui.cpp:681
-msgid "Generated (not accepted)"
-msgstr "Generat (neaceptat)"
-
-#: ../../../src/ui.cpp:691
-msgid "From: "
-msgstr "De: "
-
-#: ../../../src/ui.cpp:715
-msgid "Received with: "
-msgstr "Receptionat cu: "
-
-#: ../../../src/ui.cpp:760
-msgid "Payment to yourself"
-msgstr "Plata proprie"
-
-#: ../../../src/ui.cpp:794
-msgid "To: "
-msgstr "Pentru: "
-
-#: ../../../src/ui.cpp:1109
-msgid "    Generating"
-msgstr "    Genereaza"
-
-#: ../../../src/ui.cpp:1111
-msgid "(not connected)"
-msgstr "(neconectat)"
-
-#: ../../../src/ui.cpp:1114
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d conexiuni     %d blocuri     %d tranzactii"
-
-#: ../../../src/ui.cpp:1171
-msgid "Wallet already encrypted."
-msgstr "Portofel deja encriptat."
-
-#: ../../../src/ui.cpp:1182
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"Introduce noua parola de portofel.\n"
-"Te rugam sa utilizezi o parola de 10 sau mai multe caracter aleatoare sau minimum opt cuvinte."
-
-#: ../../../src/ui.cpp:1189
-#: ../../../src/ui.cpp:1280
-msgid "Error: The supplied passphrase was too short."
-msgstr "Eroare: Parola introdusa este prea scurta."
-
-#: ../../../src/ui.cpp:1193
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"ATENTIE: Daca encriptezi portofelul si uiti parola vei pierde TOATE MONEDELE!\n"
-"Esti sigur ca vrei sa encriptezi portofelul?"
-
-#: ../../../src/ui.cpp:1199
-msgid "Please re-enter your new wallet passphrase."
-msgstr "Reintroduce noua parola de portofel."
-
-#: ../../../src/ui.cpp:1208
-#: ../../../src/ui.cpp:1302
-msgid "Error: the supplied passphrases didn't match."
-msgstr "Eroare: parolele introduse nu sunt identice."
-
-#: ../../../src/ui.cpp:1218
-msgid "Wallet encryption failed."
-msgstr "Encriptare portofel esuata."
-
-#: ../../../src/ui.cpp:1225
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"Portofel encriptat.\n"
-"Retine ca encriptarea portofelului nu iti poate proteja complet monedele daca pc-ul este infectat de malware."
-
-#: ../../../src/ui.cpp:1236
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "Portofelul nu este encriptat, incearca sa-l encriptezi inainte."
-
-#: ../../../src/ui.cpp:1271
-msgid "Enter the new passphrase for the wallet."
-msgstr "Introduce noua parola de portofel."
-
-#: ../../../src/ui.cpp:1291
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "Reintroduce noua parola de portofel."
-
-#: ../../../src/ui.cpp:1323
-msgid "Wallet Passphrase Changed."
-msgstr "Parola de portofel schimbata."
-
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:2821
-msgid "New Receiving Address"
-msgstr "Adresa Noua de Primire"
-
-#: ../../../src/ui.cpp:1380
-#: ../../../src/ui.cpp:2822
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Cel mai indicat e sa utilizezi a adresa noua pentru fiecare plata primita.\n"
-"\n"
-"Eticheta"
-
-#: ../../../src/ui.cpp:1464
-msgid "<b>Status:</b> "
-msgstr "<b>Stare:</b> "
-
-#: ../../../src/ui.cpp:1469
-msgid ", has not been successfully broadcast yet"
-msgstr ", inca nu a fost trimisa cu succes"
-
-#: ../../../src/ui.cpp:1471
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", emis prin nod %d"
-
-#: ../../../src/ui.cpp:1473
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", emis prin noduri %d"
-
-#: ../../../src/ui.cpp:1477
-msgid "<b>Date:</b> "
-msgstr "<b>Data:</b> "
-
-#: ../../../src/ui.cpp:1485
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Sursa:</b> Generat<br>"
-
-#: ../../../src/ui.cpp:1491
-#: ../../../src/ui.cpp:1508
-msgid "<b>From:</b> "
-msgstr "<b>De:</b> "
-
-#: ../../../src/ui.cpp:1508
-msgid "unknown"
-msgstr "necunoscut"
-
-#: ../../../src/ui.cpp:1509
-#: ../../../src/ui.cpp:1533
-#: ../../../src/ui.cpp:1592
-msgid "<b>To:</b> "
-msgstr "<b>Pentru:</b> "
-
-#: ../../../src/ui.cpp:1512
-msgid " (yours, label: "
-msgstr "(tau, eticheta: "
-
-#: ../../../src/ui.cpp:1514
-msgid " (yours)"
-msgstr "(tau)"
-
-#: ../../../src/ui.cpp:1551
-#: ../../../src/ui.cpp:1563
-#: ../../../src/ui.cpp:1609
-#: ../../../src/ui.cpp:1626
-msgid "<b>Credit:</b> "
-msgstr "<b>Credit:</b> "
-
-#: ../../../src/ui.cpp:1553
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s matureaza in %d blocuri)"
-
-#: ../../../src/ui.cpp:1555
-msgid "(not accepted)"
-msgstr "(neaceptat)"
-
-#: ../../../src/ui.cpp:1600
-#: ../../../src/ui.cpp:1608
-#: ../../../src/ui.cpp:1623
-msgid "<b>Debit:</b> "
-msgstr "<b>Debit:</b> "
-
-#: ../../../src/ui.cpp:1614
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Comision tranzactie:</b> "
-
-#: ../../../src/ui.cpp:1630
-msgid "<b>Net amount:</b> "
-msgstr "<b>Cantitate neta:</b> "
-
-#: ../../../src/ui.cpp:1637
-msgid "Message:"
-msgstr "Mesaj:"
-
-#: ../../../src/ui.cpp:1639
-msgid "Comment:"
-msgstr "Comentariu:"
-
-#: ../../../src/ui.cpp:1642
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Monedele generate trebuie sa astepte 120 de blocuri inainte sa poata fi cheltuite. Cand ai generat acest block, s-a transmis in retea pentru a fi incul in lantul de blocuri. Daca nu este acceptat in lant, se va schimba in \"neaceptat\" si nu se va putea cheltui. Acest lucru se poate intampla rareori cand alt nod genereaza un bloc in acelasi moment cu al tau ."
-
-#: ../../../src/ui.cpp:1822
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Nu se poate scrie in fisierul autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1858
-msgid "Main"
-msgstr "Principal"
-
-#: ../../../src/ui.cpp:1868
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Porneste Bitcoin odata cu sistemul"
-
-#: ../../../src/ui.cpp:1875
-msgid "&Minimize on close"
-msgstr "&Minimizeaza la inchidere"
-
-#: ../../../src/ui.cpp:2017
-#, c-format
-msgid "version %s"
-msgstr "versiune %s"
-
-#: ../../../src/ui.cpp:2140
-msgid "Error in amount  "
-msgstr "Eroare in cantitate  "
-
-#: ../../../src/ui.cpp:2140
-#: ../../../src/ui.cpp:2145
-#: ../../../src/ui.cpp:2150
-#: ../../../src/ui.cpp:2203
-#: ../../../src/uibase.cpp:61
-msgid "Send Coins"
-msgstr "Trimite Monede"
-
-#: ../../../src/ui.cpp:2145
-msgid "Amount exceeds your balance  "
-msgstr "Cantitatea trece peste limita disponibila"
-
-#: ../../../src/ui.cpp:2150
-msgid "Total exceeds your balance when the "
-msgstr "Totalul trece peste limita cand"
-
-#: ../../../src/ui.cpp:2150
-msgid " transaction fee is included  "
-msgstr "comisionul de tranzactie este inclus"
-
-#: ../../../src/ui.cpp:2177
-msgid "Payment sent  "
-msgstr "Plata trimisa"
-
-#: ../../../src/ui.cpp:2177
-#: ../../../src/ui.cpp:2187
-#: ../../../src/ui.cpp:2337
-#: ../../../src/ui.cpp:2502
-#: ../../../src/wallet.cpp:1088
-msgid "Sending..."
-msgstr "Se trimite..."
-
-#: ../../../src/ui.cpp:2203
-msgid "Invalid address  "
-msgstr "Adresa incorecta"
-
-#: ../../../src/ui.cpp:2258
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Se trimite %s la %s"
-
-#: ../../../src/ui.cpp:2331
-#: ../../../src/ui.cpp:2364
-msgid "CANCELLED"
-msgstr "ANULAT"
-
-#: ../../../src/ui.cpp:2335
-msgid "Cancelled"
-msgstr "Anulat"
-
-#: ../../../src/ui.cpp:2337
-msgid "Transfer cancelled  "
-msgstr "Transfer anulat"
-
-#: ../../../src/ui.cpp:2390
-msgid "Error: "
-msgstr "Eroare: "
-
-#: ../../../src/ui.cpp:2404
-#: ../../../src/ui.cpp:2473
-#: ../../../src/wallet.cpp:1106
-msgid "Insufficient funds"
-msgstr "Fonduri insuficiente"
-
-#: ../../../src/ui.cpp:2409
-msgid "Connecting..."
-msgstr "Se conecteaza..."
-
-#: ../../../src/ui.cpp:2414
-msgid "Unable to connect"
-msgstr "Conectare imposibila"
-
-#: ../../../src/ui.cpp:2419
-msgid "Requesting public key..."
-msgstr "Se cere cheia publica..."
-
-#: ../../../src/ui.cpp:2431
-msgid "Received public key..."
-msgstr "Cheia publica primita..."
-
-#: ../../../src/ui.cpp:2445
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Destinatarul nu accepta tranzacti trimise la adresa IP"
-
-#: ../../../src/ui.cpp:2447
-msgid "Transfer was not accepted"
-msgstr "Transferul nu a fost acceptat"
-
-#: ../../../src/ui.cpp:2456
-msgid "Invalid response received"
-msgstr "Raspuns invalid receptionat"
-
-#: ../../../src/ui.cpp:2469
-msgid "Creating transaction..."
-msgstr "Se creeaza tranzactia..."
-
-#: ../../../src/ui.cpp:2492
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Aceasta tranzactie necesita un comision de cel putin %s datorita cantitatii, complexitatii sau uzului de fonduri primite recent"
-
-#: ../../../src/ui.cpp:2494
-msgid "Transaction creation failed"
-msgstr "Crearea tranzactiei a esuat."
-
-#: ../../../src/ui.cpp:2504
-msgid "Transaction aborted"
-msgstr "Tranzactie anulata"
-
-#: ../../../src/ui.cpp:2512
-msgid "Lost connection, transaction cancelled"
-msgstr "Conexiune pierduta, tranzactie anulata"
-
-#: ../../../src/ui.cpp:2528
-msgid "Sending payment..."
-msgstr "Se trimite plata..."
-
-#: ../../../src/ui.cpp:2540
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Tranzactia a fost respinsa. Acest lucru se poate intampla daca vreuna din monede a fost cheltuita sau s-a folosit o copie de portofel (wallet.dat) si monedele a fost cheltuite in copie dar nu s-au marcat cheltuite aici."
-
-#: ../../../src/ui.cpp:2549
-msgid "Waiting for confirmation..."
-msgstr "Se asteapta confirmare..."
-
-#: ../../../src/ui.cpp:2566
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Plata a fost trimisa dar destinatarul nu a putut sa o verifice.\n"
-"Tranzactia a fost inregistrata si creditul trimis la desinatar,\n"
-"dar informatia de comentarii va ramane in alb."
-
-#: ../../../src/ui.cpp:2575
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Plata a fost trimisa dar s-a receptionat un raspuns incorect"
-
-#: ../../../src/ui.cpp:2581
-msgid "Payment completed"
-msgstr "Plata completa"
-
-#: ../../../src/ui.cpp:2623
-#: ../../../src/ui.cpp:2769
-#: ../../../src/ui.cpp:2809
-msgid "Name"
-msgstr "Nume"
-
-#: ../../../src/ui.cpp:2624
-#: ../../../src/ui.cpp:2769
-#: ../../../src/ui.cpp:2809
-msgid "Address"
-msgstr "Adresa"
-
-#: ../../../src/ui.cpp:2626
-#: ../../../src/ui.cpp:2781
-msgid "Label"
-msgstr "Eticheta"
-
-#: ../../../src/ui.cpp:2627
-#: ../../../src/uibase.cpp:847
-msgid "Bitcoin Address"
-msgstr "Adresa Bitcoin"
-
-#: ../../../src/ui.cpp:2751
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Aceasta este o adresa pentru primire de plati de aceea nu se poate introduce manual in agenda"
-
-#: ../../../src/ui.cpp:2769
-#: ../../../src/ui.cpp:2775
-msgid "Edit Address"
-msgstr "Editeaza adresa"
-
-#: ../../../src/ui.cpp:2781
-msgid "Edit Address Label"
-msgstr "Editeaza eticheta de adresa"
-
-#: ../../../src/ui.cpp:2809
-#: ../../../src/ui.cpp:2815
-msgid "Add Address"
-msgstr "Adauga adresa"
-
-#: ../../../src/ui.cpp:2902
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2904
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Se genereaza"
-
-#: ../../../src/ui.cpp:2906
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (neconectat)"
-
-#: ../../../src/ui.cpp:2985
-msgid "&Open Bitcoin"
-msgstr "&Deschide Bitcoin"
-
-#: ../../../src/ui.cpp:2986
-msgid "&Send Bitcoins"
-msgstr "&Trimite Bitcoin"
-
-#: ../../../src/ui.cpp:2987
-msgid "O&ptions..."
-msgstr "O&ptiuni"
-
-#: ../../../src/ui.cpp:2990
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "I&esire"
-
-#: ../../../src/ui.cpp:3216
-msgid "Program has crashed and will terminate.  "
-msgstr "Programul a detectat o eroare si se va inchide."
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Arhiva"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Adresele de primire..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "&Encripteaza portofel..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "&Schimba parola de encriptare portofel..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "&Optiuni..."
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "&Cnfiguratie"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "&Despre..."
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "&Ajutor"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "Agenda cu adrese"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "Adresa Ta Bitcoin:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " &Nou... "
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " &Copiaza in Clipboard"
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "Balant:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr "Tot"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr "Trimis"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr "Primit"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr "In Curs"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "Toate Tranzactiile"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "Trimis/Primit"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "Trimis"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "Primit"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "OK"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "&Porneste Bitcoin odata cu sistemul"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimizeaza in tray nu in bara de aplicatii"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "Reserva portul utilizand &UPnP"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "M&inimizeaza in tray la inchidere"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "&Conecteaza prin proxy socks4 (repornire apl. necesara): "
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "&IP de proxy:"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " &Port:"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Comision optional per KB ce asigura ca tranzactiile tale sunt procesate rapid. Majoritatea tranzactiilor sunt de 1KB. Se recomanda un comision de 0.01."
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "Comision de tranzactie:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "Anuleaza"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "&Aplica"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "versiune"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"Acesta este un program experimental.\n"
-"\n"
-"Distribuit sub licenta MIT/X11, cauta fisierul adaugat de licenta \n"
-"license.txt sau http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Acest produs contine software creat deOpenSSL Project pentru uz in \n"
-"OpenSSL Toolkit (http://www.openssl.org/), software cryptografic scris de \n"
-"Eric Young (eay@cryptsoft.com) si software UPnP scris de Thomas Bernard."
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Introduce o a adresa Bitcoin (exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "Plateste &la:"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "&Lipeste (paste)"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr "Agenda de &adrese..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "&Cantitate:"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "T&ransfera:"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr "Standard"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "&Trimite"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Se conecteaza..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Acestea sunt adresele tale pentru primit plati. Poti sa folosesti o adresa diferita pentru fiecare persoana care iti trimite pentru a putea tine cont de unde vin platile. Adresa selectionata este afisata in fereastra principala."
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "&Editeaza..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " &Adresa noua... "
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "Se trimite"
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Acestea sunt adresele tale pentru primit plati. Poti sa folosesti o adresa diferita pentru fiecare persoana care iti trimite pentru a putea tine cont de unde vin platile. Adresa selectionata este afisata in fereastra principala."
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "Se receptioneaza"
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "&Sterge"
-
-#: ../../../src/util.cpp:870
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Atentie: Regleaza corect hora si data calculatorului pentru ca Bitcoin sa functioneze corect."
-
-#: ../../../src/util.cpp:904
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/wallet.cpp:1073
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "Eroare: Portofel blocat, nu se poate crea tranzactia"
-
-#: ../../../src/wallet.cpp:1081
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Eroare: Aceasta tranzactie necesita un comision de cel putin %s datorita cantitatii, complexitatii sau uzului de fonduri primite recent"
-
-#: ../../../src/wallet.cpp:1083
-msgid "Error: Transaction creation failed  "
-msgstr "Eroare: Crearea tranzactiei a esuat"
-
-#: ../../../src/wallet.cpp:1092
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Error: Tranzactia a fost respinsa. Acest lucru se poate intampla daca vreuna din monede a fost cheltuita sau s-a folosit o copie de portofel (wallet.dat) si monedele a fost cheltuite in copie dar nu s-au marcat cheltuite aici."
-
-#: ../../../src/wallet.cpp:1104
-msgid "Invalid amount"
-msgstr "Cantitate incorecta"
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "Detalii de Tranzactie"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "Optiuni"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "Despre Bitcoin"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "Adresele Tale Bitcoin"
-
-#~ msgid "Invalid bitcoin address"
-#~ msgstr "Dirección Bitcoin inválida"
diff --git a/locale/ru/LC_MESSAGES/bitcoin.mo b/locale/ru/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 4175fc4..0000000
Binary files a/locale/ru/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/ru/LC_MESSAGES/bitcoin.po b/locale/ru/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index 266e768..0000000
+++ /dev/null
@@ -1,1021 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: m0Ray <m0ray@nm.ru>\n"
-"POT-Creation-Date: 2011-05-15 18:24+0100\n"
-"PO-Revision-Date: 2011-07-17 04:18+0100\n"
-"Last-Translator: Michael Bemmerl <mail@mx-server.de>\n"
-"Language-Team: \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/net.cpp:1499
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Не могу открыть порт %d. Возможно, Bitcoin уже запущен."
-
-#: ../../../src/ui.cpp:202
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Этот перевод превышает допустимый лимит.  Вы можете провести его с комиссией %s, которую получат узлы, обрабатывающие перевод, и поможет поддерживать сеть. Вы хотите заплатить комиссию?"
-
-#: ../../../src/ui.cpp:301
-msgid "Status"
-msgstr "Статус"
-
-#: ../../../src/ui.cpp:302
-msgid "Date"
-msgstr "Дата"
-
-#: ../../../src/ui.cpp:303
-msgid "Description"
-msgstr "Описание"
-
-#: ../../../src/ui.cpp:304
-msgid "Debit"
-msgstr "Расход"
-
-#: ../../../src/ui.cpp:305
-msgid "Credit"
-msgstr "Приход"
-
-#: ../../../src/ui.cpp:511
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Открыто на %d блоков"
-
-#: ../../../src/ui.cpp:513
-#, c-format
-msgid "Open until %s"
-msgstr "Открыто до %s"
-
-#: ../../../src/ui.cpp:519
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/оффлайн?"
-
-#: ../../../src/ui.cpp:521
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/не подтверждено"
-
-#: ../../../src/ui.cpp:523
-#, c-format
-msgid "%d confirmations"
-msgstr "%d подтверждений"
-
-#: ../../../src/ui.cpp:608
-msgid "Generated"
-msgstr "Сгенерировано"
-
-#: ../../../src/ui.cpp:616
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Сгенерировано (%s станет доступно через %d блоков)"
-
-#: ../../../src/ui.cpp:620
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Сгенерировано - Внимание: этот блок не был получен ни одним узлом и, скорее всего, не будет принят!"
-
-#: ../../../src/ui.cpp:624
-msgid "Generated (not accepted)"
-msgstr "Сгенерировано (не принято)"
-
-#: ../../../src/ui.cpp:634
-msgid "From: "
-msgstr "От: "
-
-#: ../../../src/ui.cpp:658
-msgid "Received with: "
-msgstr "Получено для: "
-
-#: ../../../src/ui.cpp:704
-msgid "Payment to yourself"
-msgstr "Платёж самому себе"
-
-#: ../../../src/ui.cpp:738
-msgid "To: "
-msgstr "Кому: "
-
-#: ../../../src/ui.cpp:1053
-msgid "    Generating"
-msgstr "    Генерация"
-
-#: ../../../src/ui.cpp:1055
-msgid "(not connected)"
-msgstr "(не подключен)"
-
-#: ../../../src/ui.cpp:1058
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d подключений     %d блоков     %d переводов"
-
-#: ../../../src/ui.cpp:1163
-#: ../../../src/ui.cpp:2527
-msgid "New Receiving Address"
-msgstr "Новый адрес получения"
-
-#: ../../../src/ui.cpp:1164
-#: ../../../src/ui.cpp:2528
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Рекомендуется использовать новый адрес для каждого получаемого платежа.\n"
-"\n"
-"Метка"
-
-#: ../../../src/ui.cpp:1233
-msgid "<b>Status:</b> "
-msgstr "<b>Статус:</b> "
-
-#: ../../../src/ui.cpp:1238
-msgid ", has not been successfully broadcast yet"
-msgstr ", ещё не был успешно разослан"
-
-#: ../../../src/ui.cpp:1240
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", рассылка через %d узел"
-
-#: ../../../src/ui.cpp:1242
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", рассылка через %d узлов"
-
-#: ../../../src/ui.cpp:1246
-msgid "<b>Date:</b> "
-msgstr "<b>Дата:</b> "
-
-#: ../../../src/ui.cpp:1254
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Источник:</b> Сгенерировано<br>"
-
-#: ../../../src/ui.cpp:1260
-#: ../../../src/ui.cpp:1278
-msgid "<b>From:</b> "
-msgstr "<b>От:</b> "
-
-#: ../../../src/ui.cpp:1278
-msgid "unknown"
-msgstr "аноним"
-
-#: ../../../src/ui.cpp:1279
-#: ../../../src/ui.cpp:1303
-#: ../../../src/ui.cpp:1362
-msgid "<b>To:</b> "
-msgstr "<b>Кому:</b> "
-
-#: ../../../src/ui.cpp:1282
-msgid " (yours, label: "
-msgstr " (ваш, метка: "
-
-#: ../../../src/ui.cpp:1284
-msgid " (yours)"
-msgstr " (ваш)"
-
-#: ../../../src/ui.cpp:1321
-#: ../../../src/ui.cpp:1333
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:1396
-msgid "<b>Credit:</b> "
-msgstr "<b>Приход:</b> "
-
-#: ../../../src/ui.cpp:1323
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s станет доступно через %d блоков)"
-
-#: ../../../src/ui.cpp:1325
-msgid "(not accepted)"
-msgstr "(не принято)"
-
-#: ../../../src/ui.cpp:1370
-#: ../../../src/ui.cpp:1378
-#: ../../../src/ui.cpp:1393
-msgid "<b>Debit:</b> "
-msgstr "<b>Расход:</b> "
-
-#: ../../../src/ui.cpp:1384
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Комиссия:</b> "
-
-#: ../../../src/ui.cpp:1400
-msgid "<b>Net amount:</b> "
-msgstr "<b>Чистая сумма:</b> "
-
-#: ../../../src/ui.cpp:1407
-msgid "Message:"
-msgstr "Сообщение:"
-
-#: ../../../src/ui.cpp:1409
-msgid "Comment:"
-msgstr "Комментарий:"
-
-#: ../../../src/ui.cpp:1412
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Сгенерированные монеты должны ждать 120 блоков, прежде чем они могут быть потрачены. Когда вы сгенерировали этот блок, он был разослан в сети для добавления в цепь блоков. Если не удалось добавить этот блок в цепь, он будет обозначен как \"не принятый\" и не может быть потрачен. Такое может случиться, если другой узел сгенерировал блок примерно в то же время, что и вы."
-
-#: ../../../src/ui.cpp:1592
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Не удаётся записать файл autostart/bitcoin.desktop"
-
-#: ../../../src/ui.cpp:1628
-msgid "Main"
-msgstr "Основные"
-
-#: ../../../src/ui.cpp:1636
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Запускать Bitcoin при запуске оконной системы"
-
-#: ../../../src/ui.cpp:1643
-msgid "&Minimize on close"
-msgstr "&Сворачивать при закрытии"
-
-#: ../../../src/ui.cpp:1785
-#, c-format
-msgid "version %s"
-msgstr "версия %s"
-
-#: ../../../src/ui.cpp:1897
-msgid "Error in amount  "
-msgstr "Ошибка в количестве  "
-
-#: ../../../src/ui.cpp:1897
-#: ../../../src/ui.cpp:1902
-#: ../../../src/ui.cpp:1907
-#: ../../../src/ui.cpp:1942
-#: ../../../src/uibase.cpp:55
-msgid "Send Coins"
-msgstr "Отправить монеты"
-
-#: ../../../src/ui.cpp:1902
-msgid "Amount exceeds your balance  "
-msgstr "Количество превышает ваш баланс  "
-
-#: ../../../src/ui.cpp:1907
-msgid "Total exceeds your balance when the "
-msgstr "Общая сумма превышает ваш баланс, когда "
-
-#: ../../../src/ui.cpp:1907
-msgid " transaction fee is included  "
-msgstr " комиссия включена  "
-
-#: ../../../src/ui.cpp:1925
-msgid "Payment sent  "
-msgstr "Платёж отправлен  "
-
-#: ../../../src/ui.cpp:1925
-#: ../../../src/ui.cpp:1930
-#: ../../../src/ui.cpp:2074
-#: ../../../src/ui.cpp:2227
-#: ../../../src/main.cpp:3999
-msgid "Sending..."
-msgstr "Отправка..."
-
-#: ../../../src/ui.cpp:1942
-msgid "Invalid address  "
-msgstr "Неверный адрес  "
-
-#: ../../../src/ui.cpp:1995
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Отправка %s для %s"
-
-#: ../../../src/ui.cpp:2068
-#: ../../../src/ui.cpp:2101
-msgid "CANCELLED"
-msgstr "ОТМЕНЕНО"
-
-#: ../../../src/ui.cpp:2072
-msgid "Cancelled"
-msgstr "Отменено"
-
-#: ../../../src/ui.cpp:2074
-msgid "Transfer cancelled  "
-msgstr "Передача отменена  "
-
-#: ../../../src/ui.cpp:2127
-msgid "Error: "
-msgstr "Ошибка: "
-
-#: ../../../src/ui.cpp:2141
-#: ../../../src/ui.cpp:2212
-#: ../../../src/main.cpp:4018
-msgid "Insufficient funds"
-msgstr "Недостаточно средств"
-
-#: ../../../src/ui.cpp:2146
-msgid "Connecting..."
-msgstr "Подключение..."
-
-#: ../../../src/ui.cpp:2151
-msgid "Unable to connect"
-msgstr "Невозможно подключиться"
-
-#: ../../../src/ui.cpp:2156
-msgid "Requesting public key..."
-msgstr "Запрос публичного ключа..."
-
-#: ../../../src/ui.cpp:2168
-msgid "Received public key..."
-msgstr "Получен публичный ключ..."
-
-#: ../../../src/ui.cpp:2182
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Получатель не принимает переводы на IP-адрес"
-
-#: ../../../src/ui.cpp:2184
-msgid "Transfer was not accepted"
-msgstr "Передача не принята"
-
-#: ../../../src/ui.cpp:2193
-msgid "Invalid response received"
-msgstr "Получен неверный отклик"
-
-#: ../../../src/ui.cpp:2208
-msgid "Creating transaction..."
-msgstr "Создание перевода..."
-
-#: ../../../src/ui.cpp:2220
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Этот перевод требует уплаты комиссии минимум в %s, так как имеет большой объём, сложность или использует недавно полученные средства"
-
-#: ../../../src/ui.cpp:2222
-msgid "Transaction creation failed"
-msgstr "Не удалось создать перевод"
-
-#: ../../../src/ui.cpp:2229
-msgid "Transaction aborted"
-msgstr "Перевод прерван"
-
-#: ../../../src/ui.cpp:2237
-msgid "Lost connection, transaction cancelled"
-msgstr "Соединение разорвано, перевод отменён"
-
-#: ../../../src/ui.cpp:2253
-msgid "Sending payment..."
-msgstr "Отправка платежа..."
-
-#: ../../../src/ui.cpp:2259
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Перевод был отклонён.  Это могло произойти, если некоторые из монет в вашем кошельке уже были потрачены, например, если вы использовали копию wallet.dat, и монеты были потрачены в копии, но не отмечены израсходованными здесь."
-
-#: ../../../src/ui.cpp:2268
-msgid "Waiting for confirmation..."
-msgstr "Ожидание подтверждения..."
-
-#: ../../../src/ui.cpp:2286
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Платёж был отправлен, но получатель не смог проверить его.\n"
-"Перевод был записан и будет начислен получателю,\n"
-"но поле комментария будет пустое."
-
-#: ../../../src/ui.cpp:2295
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Платёж отправлен, но был получен неверный отклик"
-
-#: ../../../src/ui.cpp:2301
-msgid "Payment completed"
-msgstr "Платёж проведён"
-
-#: ../../../src/ui.cpp:2332
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2515
-msgid "Name"
-msgstr "Имя"
-
-#: ../../../src/ui.cpp:2333
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2515
-msgid "Address"
-msgstr "Адрес"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2490
-msgid "Label"
-msgstr "Метка"
-
-#: ../../../src/ui.cpp:2336
-#: ../../../src/uibase.cpp:837
-msgid "Bitcoin Address"
-msgstr "Адрес Bitcoin"
-
-#: ../../../src/ui.cpp:2460
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Это один из ваших собственных адресов для получения платежей, он не может быть внесён в адресную книгу.  "
-
-#: ../../../src/ui.cpp:2478
-#: ../../../src/ui.cpp:2484
-msgid "Edit Address"
-msgstr "Правка адреса"
-
-#: ../../../src/ui.cpp:2490
-msgid "Edit Address Label"
-msgstr "Правка метки адреса"
-
-#: ../../../src/ui.cpp:2515
-#: ../../../src/ui.cpp:2521
-msgid "Add Address"
-msgstr "Добавить адрес"
-
-#: ../../../src/ui.cpp:2598
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2600
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Генерация"
-
-#: ../../../src/ui.cpp:2602
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (не подключен)"
-
-#: ../../../src/ui.cpp:2681
-msgid "&Open Bitcoin"
-msgstr "&Открыть Bitcoin"
-
-#: ../../../src/ui.cpp:2682
-msgid "&Send Bitcoins"
-msgstr "&Отправить Bitcoins"
-
-#: ../../../src/ui.cpp:2683
-msgid "O&ptions..."
-msgstr "О&пции..."
-
-#: ../../../src/ui.cpp:2686
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "&Выход"
-
-#: ../../../src/ui.cpp:2902
-msgid "Program has crashed and will terminate.  "
-msgstr "Сбой программы, завершение.  "
-
-#: ../../../src/main.cpp:1868
-msgid "Warning: Disk space is low  "
-msgstr "Внимание: мало места на диске  "
-
-#: ../../../src/main.cpp:3992
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Ошибка: Этот перевод требует уплаты комиссии минимум в %s, так как имеет большой объём, сложность или использует недавно полученные средства  "
-
-#: ../../../src/main.cpp:3994
-msgid "Error: Transaction creation failed  "
-msgstr "Ошибка: не удалось создать перевод  "
-
-#: ../../../src/main.cpp:4003
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Перевод был отклонен. Это могло произойти, если некоторые из монет в вашем кошельке уже были потрачены, например, если вы использовали копию wallet.dat, и монеты были потрачены в копии, но не отмечены израсходованными здесь."
-
-#: ../../../src/main.cpp:4016
-msgid "Invalid amount"
-msgstr "Неверное количество"
-
-#: ../../../src/main.cpp:4023
-msgid "Invalid bitcoin address"
-msgstr "Неверный адрес bitcoin"
-
-#: ../../../src/rpc.cpp:1800
-#: ../../../src/rpc.cpp:1802
-#, c-format
-msgid "To use the %s option"
-msgstr "Чтобы использовать опцию %s"
-
-#: ../../../src/rpc.cpp:1804
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Внимание: %s, вы должны установить rpcpassword=<пароль>\n"
-"в конфигурационном файле: %s\n"
-"Если файл не существует, создайте его с правами \"чтение только владельцем\".\n"
-
-#: ../../../src/rpc.cpp:1972
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Вы должны установить rpcpassword=<пароль> в конфигурационном файле:\n"
-"%s\n"
-"Если файл не существует, создайте его с правами \"чтение только владельцем\"."
-
-#: ../../../src/util.cpp:865
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Внимание: пожалуйста, проверьте дату и время на вашем компьютере. Если часы идут неверно, Bitcoin не будет работать правильно."
-
-#: ../../../src/util.cpp:898
-msgid "beta"
-msgstr "beta"
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "&Файл"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Ваши адреса получения..."
-
-#: ../../../src/uibase.cpp:36
-msgid "&Options..."
-msgstr "&Опции"
-
-#: ../../../src/uibase.cpp:39
-msgid "&Settings"
-msgstr "&Настройки"
-
-#: ../../../src/uibase.cpp:43
-msgid "&About..."
-msgstr "&О программе..."
-
-#: ../../../src/uibase.cpp:46
-msgid "&Help"
-msgstr "&Справка"
-
-#: ../../../src/uibase.cpp:56
-msgid "Address Book"
-msgstr "Адресная книга"
-
-#: ../../../src/uibase.cpp:69
-msgid "Your Bitcoin Address:"
-msgstr "Ваш адрес Bitcoin:"
-
-#: ../../../src/uibase.cpp:76
-msgid " &New... "
-msgstr " &Новый... "
-
-#: ../../../src/uibase.cpp:79
-#: ../../../src/uibase.cpp:780
-#: ../../../src/uibase.cpp:883
-msgid " &Copy to Clipboard "
-msgstr " &Копировать в буфер обмена "
-
-#: ../../../src/uibase.cpp:93
-msgid "Balance:"
-msgstr "Баланс:"
-
-#: ../../../src/uibase.cpp:109
-msgid " All"
-msgstr " Все"
-
-#: ../../../src/uibase.cpp:109
-msgid " Sent"
-msgstr " Отправленные"
-
-#: ../../../src/uibase.cpp:109
-msgid " Received"
-msgstr " Полученные"
-
-#: ../../../src/uibase.cpp:109
-msgid " In Progress"
-msgstr " В процессе"
-
-#: ../../../src/uibase.cpp:130
-msgid "All Transactions"
-msgstr "Все переводы"
-
-#: ../../../src/uibase.cpp:141
-msgid "Sent/Received"
-msgstr "Отправленные/Полученные"
-
-#: ../../../src/uibase.cpp:152
-msgid "Sent"
-msgstr "Отправленные"
-
-#: ../../../src/uibase.cpp:163
-msgid "Received"
-msgstr "Полученные"
-
-#: ../../../src/uibase.cpp:302
-#: ../../../src/uibase.cpp:443
-#: ../../../src/uibase.cpp:542
-#: ../../../src/uibase.cpp:722
-#: ../../../src/uibase.cpp:783
-#: ../../../src/uibase.cpp:892
-#: ../../../src/uibase.cpp:981
-msgid "OK"
-msgstr "ОК"
-
-#: ../../../src/uibase.cpp:345
-msgid "&Start Bitcoin on system startup"
-msgstr "&Запускать Bitcoin при старте системы"
-
-#: ../../../src/uibase.cpp:348
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Сворачивать в трей вместо панели задач"
-
-#: ../../../src/uibase.cpp:351
-msgid "Map port using &UPnP"
-msgstr "Использовать &UPnP"
-
-#: ../../../src/uibase.cpp:354
-msgid "M&inimize to the tray on close"
-msgstr "С&ворачивать в трей при закрытии"
-
-#: ../../../src/uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Подключаться через socks4 прокси: "
-
-#: ../../../src/uibase.cpp:371
-msgid "Proxy &IP:"
-msgstr "IP п&рокси-сервера:"
-
-#: ../../../src/uibase.cpp:379
-msgid " &Port:"
-msgstr " &Порт"
-
-#: ../../../src/uibase.cpp:392
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Необязательная комиссия за килобайт обеспечивает приоритет обработки перевода. Большинство транзакций имеют размер в 1КБ. Рекомендуется значение в 0.01."
-
-#: ../../../src/uibase.cpp:399
-msgid "Pay transaction fee:"
-msgstr "Комиссия:"
-
-#: ../../../src/uibase.cpp:420
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:424
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:446
-#: ../../../src/uibase.cpp:668
-#: ../../../src/uibase.cpp:727
-#: ../../../src/uibase.cpp:786
-#: ../../../src/uibase.cpp:895
-#: ../../../src/uibase.cpp:984
-msgid "Cancel"
-msgstr "Отмена"
-
-#: ../../../src/uibase.cpp:449
-msgid "&Apply"
-msgstr "&Применить"
-
-#: ../../../src/uibase.cpp:508
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:514
-msgid "version"
-msgstr "версия"
-
-#: ../../../src/uibase.cpp:525
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Все права защищены (c) 2009-2010 Bitcoin Developers\n"
-"\n"
-"Это экспериментальное ПО.\n"
-"\n"
-"Распространяется под лицензией MIT/X11, см. файл\n"
-"license.txt или http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Этот продукт включает ПО, разработанное проектом OpenSSL для использования в\n"
-"OpenSSL Toolkit (http://www.openssl.org/), и криптографическое ПО, написанное\n"
-"Eric Young (eay@cryptsoft.com) и UPnP программного обеспечения, написанного Thomas Bernard."
-
-#: ../../../src/uibase.cpp:581
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Введите адрес Bitcoin (напр. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:595
-msgid "Pay &To:"
-msgstr "&Кому:"
-
-#: ../../../src/uibase.cpp:610
-msgid "&Paste"
-msgstr "&Вставить"
-
-#: ../../../src/uibase.cpp:613
-msgid " Address &Book..."
-msgstr " А&дресная книга..."
-
-#: ../../../src/uibase.cpp:620
-msgid "&Amount:"
-msgstr "К&оличество:"
-
-#: ../../../src/uibase.cpp:630
-msgid "T&ransfer:"
-msgstr "&Передача:"
-
-#: ../../../src/uibase.cpp:636
-msgid " Standard"
-msgstr " Стандарт"
-
-#: ../../../src/uibase.cpp:663
-msgid "&Send"
-msgstr "Отп&равить"
-
-#: ../../../src/uibase.cpp:711
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Подключение..."
-
-#: ../../../src/uibase.cpp:761
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Это ваши адреса для получения платежей.  Вы можете использовать разные для каждого отправителя, чтобы отслеживать, кто вам платит.  Выделенный адрес отображается в главном окне."
-
-#: ../../../src/uibase.cpp:774
-#: ../../../src/uibase.cpp:886
-msgid "&Edit..."
-msgstr "&Правка..."
-
-#: ../../../src/uibase.cpp:777
-#: ../../../src/uibase.cpp:889
-msgid " &New Address... "
-msgstr " &Новый адрес... "
-
-#: ../../../src/uibase.cpp:849
-msgid "Sending"
-msgstr "Отправка"
-
-#: ../../../src/uibase.cpp:857
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Это ваши адреса для получения платежей.  Вы можете использовать разные для каждого отправителя, чтобы отслеживать, кто вам платит.  Выделенный адрес отображается в главном окне."
-
-#: ../../../src/uibase.cpp:870
-msgid "Receiving"
-msgstr "Получение"
-
-#: ../../../src/uibase.cpp:880
-msgid "&Delete"
-msgstr "&Удалить"
-
-#: ../../../src/init.cpp:147
-msgid "Bitcoin version"
-msgstr "Bitcoin версия"
-
-#: ../../../src/init.cpp:148
-msgid "Usage:"
-msgstr "Использование"
-
-#: ../../../src/init.cpp:150
-msgid "Send command to -server or bitcoind\n"
-msgstr "Отправить команду bitcoin, запущенному с -server\n"
-
-#: ../../../src/init.cpp:151
-msgid "List commands\n"
-msgstr "Список команд\n"
-
-#: ../../../src/init.cpp:152
-msgid "Get help for a command\n"
-msgstr "Получить помощь для команды\n"
-
-#: ../../../src/init.cpp:153
-msgid "Options:\n"
-msgstr "Параметры:\n"
-
-#: ../../../src/init.cpp:154
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Укажите конфигурационный файл (по умолчанию: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:155
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Укажите конфигурационный файл (по умолчанию: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:156
-msgid "Generate coins\n"
-msgstr "Генерировать монеты\n"
-
-#: ../../../src/init.cpp:157
-msgid "Don't generate coins\n"
-msgstr "Не генерировать монеты\n"
-
-#: ../../../src/init.cpp:158
-msgid "Start minimized\n"
-msgstr "Запускать свёрнутым\n"
-
-#: ../../../src/init.cpp:159
-msgid "Specify data directory\n"
-msgstr "Указать каталог данных\n"
-
-#: ../../../src/init.cpp:160
-msgid "Connect through socks4 proxy\n"
-msgstr "Подключаться через socks4 прокси\n"
-
-#: ../../../src/init.cpp:161
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Использовать DNS для добавления узлов и соединения\n"
-
-#: ../../../src/init.cpp:162
-msgid "Add a node to connect to\n"
-msgstr "Добавить узел для подключения\n"
-
-#: ../../../src/init.cpp:163
-msgid "Connect only to the specified node\n"
-msgstr "Подключаться только к указанному узлу\n"
-
-#: ../../../src/init.cpp:164
-msgid "Don't accept connections from outside\n"
-msgstr "Не принимать входящие соединения\n"
-
-#: ../../../src/init.cpp:167
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Не использовать UPnP для отображения порта входящих соединений\n"
-
-#: ../../../src/init.cpp:169
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Использовать UPnP для отображения порта входящих соединений\n"
-
-#: ../../../src/init.cpp:172
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Комиссия за 1 килобайт отправляемых транзакций\n"
-
-#: ../../../src/init.cpp:174
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Принимать команды из командной строки и через JSON-RPC\n"
-
-#: ../../../src/init.cpp:177
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Запустить в фоне как демон и принимать команды\n"
-
-#: ../../../src/init.cpp:179
-msgid "Use the test network\n"
-msgstr "Использовать тестовую сеть (testnet)\n"
-
-#: ../../../src/init.cpp:180
-msgid "Username for JSON-RPC connections\n"
-msgstr "Имя пользователя для JSON-RPC\n"
-
-#: ../../../src/init.cpp:181
-msgid "Password for JSON-RPC connections\n"
-msgstr "Пароль для JSON-RPC\n"
-
-#: ../../../src/init.cpp:182
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Порт входящих соединений JSON-RPC (по умолчанию 8332)\n"
-
-#: ../../../src/init.cpp:183
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Разрешить соединения JSON-RPC со следующих IP-адресов\n"
-
-#: ../../../src/init.cpp:184
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Посылать команды узлу с указанным адресом (по умолчанию 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:185
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Установить размер пула адресов (по умолчанию 100)\n"
-
-#: ../../../src/init.cpp:181
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Просканировать цепочку блоков в поисках утерянных переводов\n"
-
-#: ../../../src/init.cpp:182
-msgid "Purge all transactions from wallet and rescan\n"
-msgstr "Удалить все транзакции из кошелька и пересканировать цепочку блоков в поисках транзакций\n"
-
-#: ../../../src/init.cpp:190
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"Опции SSL: (прочтите документацию для правильной настройки)\n"
-
-#: ../../../src/init.cpp:191
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Использовать OpenSSL (протокол https) для соединений JSON-RPC\n"
-
-#: ../../../src/init.cpp:192
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Файл сертификата сервера (по умолчанию server.cert)\n"
-
-#: ../../../src/init.cpp:193
-msgid "Server private key (default: server.pem)\n"
-msgstr "Приватный ключ сервера (по умолчанию server.pem)\n"
-
-#: ../../../src/init.cpp:194
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Приемлемые шифры (по умолчанию TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:198
-msgid "This help message\n"
-msgstr "Эта справка\n"
-
-#: ../../../src/init.cpp:335
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Не удаётся получить блокировку каталога с данными %s. Возможно, Bitcoin уже запущен."
-
-#: ../../../src/init.cpp:361
-msgid "Error loading addr.dat      \n"
-msgstr "Ошибка загрузки addr.dat      \n"
-
-#: ../../../src/init.cpp:367
-msgid "Error loading blkindex.dat      \n"
-msgstr "Ошибка загрузки blkindex.dat      \n"
-
-#: ../../../src/init.cpp:374
-msgid "Error loading wallet.dat      \n"
-msgstr "Ошибка загрузки wallet.dat      \n"
-
-#: ../../../src/init.cpp:454
-msgid "Invalid -proxy address"
-msgstr "Неверный адрес -proxy"
-
-#: ../../../src/init.cpp:477
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Неверное значение для -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:481
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Внимание: -paytxfee установлено в очень большое значение. Это комиссия, которую вы будете платить при переводе."
-
-#: ../../../src/uibase.h:147
-msgid "Transaction Details"
-msgstr "Подробности транзакции"
-
-#: ../../../src/uibase.h:199
-msgid "Options"
-msgstr "Опции"
-
-#: ../../../src/uibase.h:228
-msgid "About Bitcoin"
-msgstr "О Bitcoin"
-
-#: ../../../src/uibase.h:337
-msgid "Your Bitcoin Addresses"
-msgstr "Ваш адрес Bitcoin"
-
-#~ msgid ""
-#~ "Error: This is an oversized transaction that requires a transaction fee "
-#~ "of %s  "
-#~ msgstr ""
-#~ "Ошибка: этот перевод слишком большого размера, который требует комиссию "
-#~ "%s  "
-
-#~ msgid "version %s%s BETA"
-#~ msgstr "версия %s%s бета"
-
-#~ msgid "n/a"
-#~ msgstr "н/д"
-
-#~ msgid "Can't include a message when sending to a Bitcoin address"
-#~ msgstr "Не удаётся включить сообщение при отправке на адрес Bitcoin"
-
-#~ msgid ""
-#~ "This is an oversized transaction that requires a transaction fee of %s"
-#~ msgstr "Это слишком большой перевод, который требует комиссию в размере %s"
-
-#~ msgid ""
-#~ "Optional transaction fee you give to the nodes that process your "
-#~ "transactions."
-#~ msgstr ""
-#~ "Необязательная комиссия, которую вы даёте узлам, проводящим ваш перевод."
-
-#~ msgid "&Limit coin generation to"
-#~ msgstr "&Ограничить генерацию монет до"
-
-#~ msgid "processors"
-#~ msgstr "процессоров"
-
-#~ msgid "&From:"
-#~ msgstr "О&т:"
-
-#~ msgid "&Message:"
-#~ msgstr "&Сообщение:"
-
-#~ msgid ""
-#~ "It's good policy to use a new address for each payment you receive.\n"
-#~ "\n"
-#~ "Label"
-#~ msgstr ""
-#~ "Неплохо будет использовать новый адрес для каждого получаемого платежа.\n"
-#~ "\n"
-#~ "Метка"
-
-#~ msgid "Will appear as \"From: Unknown\""
-#~ msgstr "Будет отображаться как \"От: Аноним\""
diff --git a/locale/sv/LC_MESSAGES/bitcoin.mo b/locale/sv/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index b61914c..0000000
Binary files a/locale/sv/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/sv/LC_MESSAGES/bitcoin.po b/locale/sv/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index dc635f3..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-03 10:40+0100\n"
-"PO-Revision-Date: 2011-07-03 15:13+0100\n"
-"Last-Translator: Codler <github>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../init.cpp:162
-msgid "Bitcoin version"
-msgstr "Bitcoin version"
-
-#: ../../../init.cpp:163
-msgid "Usage:"
-msgstr "Användning:"
-
-#: ../../../init.cpp:165
-msgid "Send command to -server or bitcoind\n"
-msgstr "Skicka kommando till -server eller bitcoind\n"
-
-#: ../../../init.cpp:166
-msgid "List commands\n"
-msgstr "Lista kommandon\n"
-
-#: ../../../init.cpp:167
-msgid "Get help for a command\n"
-msgstr "Få hjälp om kommandon\n"
-
-#: ../../../init.cpp:168
-msgid "Options:\n"
-msgstr "Val:\n"
-
-#: ../../../init.cpp:169
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "Ange konfigurationsfil (standard: bitcoin.conf)\n"
-
-#: ../../../init.cpp:170
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "Ange pid-fil (standard: bitcoind.pid)\n"
-
-#: ../../../init.cpp:171
-msgid "Generate coins\n"
-msgstr "Generera mynt\n"
-
-#: ../../../init.cpp:172
-msgid "Don't generate coins\n"
-msgstr "Generera inte mynt\n"
-
-#: ../../../init.cpp:173
-msgid "Start minimized\n"
-msgstr "Starta minimerad\n"
-
-#: ../../../init.cpp:174
-msgid "Specify data directory\n"
-msgstr "Ange data mappen\n"
-
-#: ../../../init.cpp:175
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "Ange timeout för anslutning (i millisekunder)\n"
-
-#: ../../../init.cpp:176
-msgid "Connect through socks4 proxy\n"
-msgstr "Anslut via socks4 proxy\n"
-
-#: ../../../init.cpp:177
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "Tillåt DNS uppslagningar för addnode och connect\n"
-
-#: ../../../init.cpp:178
-msgid "Add a node to connect to\n"
-msgstr "Lägg till en nod att ansluta till\n"
-
-#: ../../../init.cpp:179
-msgid "Connect only to the specified node\n"
-msgstr "Anslut endast till specifik nod\n"
-
-#: ../../../init.cpp:180
-msgid "Don't accept connections from outside\n"
-msgstr "Acceptera ej anslutningar från utsidan\n"
-
-#: ../../../init.cpp:183
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "Försöker inte använda UPnP till avslyssningsport\n"
-
-#: ../../../init.cpp:185
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "Försöker använda UPnP till avlyssningsport\n"
-
-#: ../../../init.cpp:188
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "Avgift per KB som läggs på transaktionen när du sänder\n"
-
-#: ../../../init.cpp:190
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "Accepterar kommandorad och JSON-RPC kommando\n"
-
-#: ../../../init.cpp:193
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "Kör i bakgrund som daemon och accepterar kommando\n"
-
-#: ../../../init.cpp:195
-msgid "Use the test network\n"
-msgstr "Använd test nätverk\n"
-
-#: ../../../init.cpp:196
-msgid "Username for JSON-RPC connections\n"
-msgstr "Användarnamn till JSON-RPC anslutning\n"
-
-#: ../../../init.cpp:197
-msgid "Password for JSON-RPC connections\n"
-msgstr "Lösenord till JSON-RPC anslutning\n"
-
-#: ../../../init.cpp:198
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "Lyssnar på JSON-RPC anslutningar på <port> (standard: 8332)\n"
-
-#: ../../../init.cpp:199
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "Tillåt JSON-RPC anslutningar från specifik IP-adress\n"
-
-#: ../../../init.cpp:200
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "Skicka kommando till noden som körs på <ip> (standard: 127.0.0.1)\n"
-
-#: ../../../init.cpp:201
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "Sätt nyckel pool storlek till <n> (standard: 100)\n"
-
-#: ../../../init.cpp:202
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "Scanna om block kedja efter saknade plånbokstransaktioner\n"
-
-#: ../../../init.cpp:206
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"SSL val: (Se på Bitcoin Wiki för SSL installation instruktioner)\n"
-
-#: ../../../init.cpp:207
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "Använd OpenSSL (https) till JSON-RPC anslutningar\n"
-
-#: ../../../init.cpp:208
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "Server certifikatfil (standard: server.cert)\n"
-
-#: ../../../init.cpp:209
-msgid "Server private key (default: server.pem)\n"
-msgstr "Server privat nyckel (standard: server.pem)\n"
-
-#: ../../../init.cpp:210
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "Acceptabla krypteringar (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../init.cpp:214
-msgid "This help message\n"
-msgstr "Detta hjälpmeddelande\n"
-
-#: ../../../init.cpp:351
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "Kan inte sätta lås på data mappen %s.  Bitcoin körs troligen redan."
-
-#: ../../../init.cpp:377
-msgid "Error loading addr.dat      \n"
-msgstr "Fel vid laddning av addr.dat      \n"
-
-#: ../../../init.cpp:383
-msgid "Error loading blkindex.dat      \n"
-msgstr "Fel vid laddning av blkindex.dat      \n"
-
-#: ../../../init.cpp:391
-msgid "Error loading wallet.dat      \n"
-msgstr "Fel vid laddning av wallet.dat      \n"
-
-#: ../../../init.cpp:481
-msgid "Invalid -proxy address"
-msgstr "Ogiltig -proxy adress"
-
-#: ../../../init.cpp:506
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "Ogiltig belopp på -paytxfee=<belopp>"
-
-#: ../../../init.cpp:510
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "Varning: -paytxfee är satt väldigt högt.  Denna är transaktionsavgiften som du kommer att betala om du skickar en transaktion."
-
-#: ../../../main.cpp:1430
-msgid "Warning: Disk space is low  "
-msgstr "Varning: Diskutrymme är låg  "
-
-#: ../../../net.cpp:1598
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "Det gick inte att binda till port %d på denna dator.  Bitcoin körs troligen redan."
-
-#: ../../../rpc.cpp:1828
-#: ../../../rpc.cpp:1830
-#, c-format
-msgid "To use the %s option"
-msgstr "För att använda %s val"
-
-#: ../../../rpc.cpp:1832
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"Varning: %s, du måste sätta rpcpassword=<lösenord>\n"
-"i konfigurationsfilen: %s\n"
-"Om filen inte existerar, skapa med ägare med filbehörigheten -readable-only.\n"
-
-#: ../../../rpc.cpp:2005
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"Du måste sätta rpcpassword=<lösenord> i konfigurationsfilen:\n"
-"%s\n"
-"Om filen inte existerar, skapa med ägare med filbehörighete -readable-only."
-
-#: ../../../ui.cpp:216
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "Denna transaktion är över storleksbegränsningen.  Du kan fortfarande skicka mot en avgift på %s, som går till noderna som bearbetar din transaktion och hjälper att stödja nätverket. Vill du fortfarande betala avgiften?"
-
-#: ../../../ui.cpp:316
-msgid "Status"
-msgstr "Status"
-
-#: ../../../ui.cpp:317
-msgid "Date"
-msgstr "Datum"
-
-#: ../../../ui.cpp:318
-msgid "Description"
-msgstr "Beskrivning"
-
-#: ../../../ui.cpp:319
-msgid "Debit"
-msgstr "Debet"
-
-#: ../../../ui.cpp:320
-msgid "Credit"
-msgstr "Kredit"
-
-#: ../../../ui.cpp:526
-#, c-format
-msgid "Open for %d blocks"
-msgstr "Öppen för %d block"
-
-#: ../../../ui.cpp:528
-#, c-format
-msgid "Open until %s"
-msgstr "Öppen tills %s"
-
-#: ../../../ui.cpp:534
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/offline?"
-
-#: ../../../ui.cpp:536
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/obekräftade"
-
-#: ../../../ui.cpp:538
-#, c-format
-msgid "%d confirmations"
-msgstr "%d bekräftelser"
-
-#: ../../../ui.cpp:623
-msgid "Generated"
-msgstr "Genererad"
-
-#: ../../../ui.cpp:631
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "Genererad (%s mognar om %d block)"
-
-#: ../../../ui.cpp:635
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "Genererad - Varning: Denna block har inte blivit mottagen av någon annan nod och kommer troligtvis inte bli accepterad"
-
-#: ../../../ui.cpp:639
-msgid "Generated (not accepted)"
-msgstr "Genererad (ej accepterad)"
-
-#: ../../../ui.cpp:649
-msgid "From: "
-msgstr "Från: "
-
-#: ../../../ui.cpp:673
-msgid "Received with: "
-msgstr "Mottagen med: "
-
-#: ../../../ui.cpp:719
-msgid "Payment to yourself"
-msgstr "Betalning till dig själv"
-
-#: ../../../ui.cpp:753
-msgid "To: "
-msgstr "Till: "
-
-#: ../../../ui.cpp:1068
-msgid "    Generating"
-msgstr "    Generering"
-
-#: ../../../ui.cpp:1070
-msgid "(not connected)"
-msgstr "(inte ansluten)"
-
-#: ../../../ui.cpp:1073
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d anslutningar     %d block     %d transaktioner"
-
-#: ../../../ui.cpp:1178
-#: ../../../ui.cpp:2577
-msgid "New Receiving Address"
-msgstr "Ny Mottagningsadress"
-
-#: ../../../ui.cpp:1179
-#: ../../../ui.cpp:2578
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"Du borde använda en ny adress för varje betalning som du mottagit.\n"
-"\n"
-"Etikett"
-
-#: ../../../ui.cpp:1252
-msgid "<b>Status:</b> "
-msgstr "<b>Status:</b> "
-
-#: ../../../ui.cpp:1257
-msgid ", has not been successfully broadcast yet"
-msgstr ", har inte lyckats broadcast än"
-
-#: ../../../ui.cpp:1259
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ", broadcast genom %d nod"
-
-#: ../../../ui.cpp:1261
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ", broadcast genom %d noder"
-
-#: ../../../ui.cpp:1265
-msgid "<b>Date:</b> "
-msgstr "<b>Datum:</b> "
-
-#: ../../../ui.cpp:1273
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>Källa:</b> Genererad<br>"
-
-#: ../../../ui.cpp:1279
-#: ../../../ui.cpp:1297
-msgid "<b>From:</b> "
-msgstr "<b>Från:</b> "
-
-#: ../../../ui.cpp:1297
-msgid "unknown"
-msgstr "okänd"
-
-#: ../../../ui.cpp:1298
-#: ../../../ui.cpp:1322
-#: ../../../ui.cpp:1381
-msgid "<b>To:</b> "
-msgstr "<b>Till:</b> "
-
-#: ../../../ui.cpp:1301
-msgid " (yours, label: "
-msgstr " (din, etikett: "
-
-#: ../../../ui.cpp:1303
-msgid " (yours)"
-msgstr " (ditt)"
-
-#: ../../../ui.cpp:1340
-#: ../../../ui.cpp:1352
-#: ../../../ui.cpp:1398
-#: ../../../ui.cpp:1415
-msgid "<b>Credit:</b> "
-msgstr "<b>Kredit:</b> "
-
-#: ../../../ui.cpp:1342
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s mognar om %d block)"
-
-#: ../../../ui.cpp:1344
-msgid "(not accepted)"
-msgstr "(ej accepterad)"
-
-#: ../../../ui.cpp:1389
-#: ../../../ui.cpp:1397
-#: ../../../ui.cpp:1412
-msgid "<b>Debit:</b> "
-msgstr "<b>Debet:</b> "
-
-#: ../../../ui.cpp:1403
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>Transaktionsavgift:</b> "
-
-#: ../../../ui.cpp:1419
-msgid "<b>Net amount:</b> "
-msgstr "<b>Nät belopp:</b> "
-
-#: ../../../ui.cpp:1426
-msgid "Message:"
-msgstr "Meddelande:"
-
-#: ../../../ui.cpp:1428
-msgid "Comment:"
-msgstr "Kommentar:"
-
-#: ../../../ui.cpp:1431
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "Genererad mynt måste vänta 120 block innan dem kan användas.När du genererat denna block, skickades en broadcast till nätet och lades till block kedjan. Om den misslyckas att lägga till kedjan så kommer det ändras till \"not accepted\" och är icke brukbar.  Detta kan hända om en annan nod genererat en block några sekunder efter din."
-
-#: ../../../ui.cpp:1611
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "Kan inte skriva autostart/bitcoin.desktop fil"
-
-#: ../../../ui.cpp:1647
-msgid "Main"
-msgstr "Allmänt"
-
-#: ../../../ui.cpp:1657
-msgid "&Start Bitcoin on window system startup"
-msgstr "&Starta Bitcoin vid system uppstart"
-
-#: ../../../ui.cpp:1664
-msgid "&Minimize on close"
-msgstr "&Minimera vid stängning"
-
-#: ../../../ui.cpp:1806
-#, c-format
-msgid "version %s"
-msgstr "version %s"
-
-#: ../../../ui.cpp:1929
-msgid "Error in amount  "
-msgstr "Fel i belopp  "
-
-#: ../../../ui.cpp:1929
-#: ../../../ui.cpp:1934
-#: ../../../ui.cpp:1939
-#: ../../../ui.cpp:1974
-#: ../../../uibase.cpp:55
-msgid "Send Coins"
-msgstr "Skicka mynt"
-
-#: ../../../ui.cpp:1934
-msgid "Amount exceeds your balance  "
-msgstr "Belopp överskrider din balans  "
-
-#: ../../../ui.cpp:1939
-msgid "Total exceeds your balance when the "
-msgstr "Totalt överskrider din balans när "
-
-#: ../../../ui.cpp:1939
-msgid " transaction fee is included  "
-msgstr " transaktionsavgift är inkluderad  "
-
-#: ../../../ui.cpp:1957
-msgid "Payment sent  "
-msgstr "Betalning skickad  "
-
-#: ../../../ui.cpp:1957
-#: ../../../ui.cpp:1962
-#: ../../../ui.cpp:2108
-#: ../../../ui.cpp:2261
-#: ../../../wallet.cpp:924
-msgid "Sending..."
-msgstr "Skickar..."
-
-#: ../../../ui.cpp:1974
-msgid "Invalid address  "
-msgstr "Ogiltig adress  "
-
-#: ../../../ui.cpp:2029
-#, c-format
-msgid "Sending %s to %s"
-msgstr "Skickar %s till %s"
-
-#: ../../../ui.cpp:2102
-#: ../../../ui.cpp:2135
-msgid "CANCELLED"
-msgstr "AVBRUTEN"
-
-#: ../../../ui.cpp:2106
-msgid "Cancelled"
-msgstr "Avbruten"
-
-#: ../../../ui.cpp:2108
-msgid "Transfer cancelled  "
-msgstr "Överföring avbruten  "
-
-#: ../../../ui.cpp:2161
-msgid "Error: "
-msgstr "Fel: "
-
-#: ../../../ui.cpp:2175
-#: ../../../ui.cpp:2246
-#: ../../../wallet.cpp:943
-msgid "Insufficient funds"
-msgstr "Otillräckligt med pengar"
-
-#: ../../../ui.cpp:2180
-msgid "Connecting..."
-msgstr "Ansluter..."
-
-#: ../../../ui.cpp:2185
-msgid "Unable to connect"
-msgstr "Det gick inte att ansluta"
-
-#: ../../../ui.cpp:2190
-msgid "Requesting public key..."
-msgstr "Efterfrågar publik nyckel..."
-
-#: ../../../ui.cpp:2202
-msgid "Received public key..."
-msgstr "Mottagen publik nyckel..."
-
-#: ../../../ui.cpp:2216
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "Mottagaren accepterar inte transaktioner skickat från IP adress"
-
-#: ../../../ui.cpp:2218
-msgid "Transfer was not accepted"
-msgstr "Överföringen var inte accepterad"
-
-#: ../../../ui.cpp:2227
-msgid "Invalid response received"
-msgstr "Ogiltig respons mottagen"
-
-#: ../../../ui.cpp:2242
-msgid "Creating transaction..."
-msgstr "Skapar transation..."
-
-#: ../../../ui.cpp:2254
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "Denna transaktion kräver en transaktionsavgift minst %s för dess belopp, komplexitet, eller användning av nyligen mottagna pengar"
-
-#: ../../../ui.cpp:2256
-msgid "Transaction creation failed"
-msgstr "Misslyckades skapa transaktion"
-
-#: ../../../ui.cpp:2263
-msgid "Transaction aborted"
-msgstr "Transaktion avbruten"
-
-#: ../../../ui.cpp:2271
-msgid "Lost connection, transaction cancelled"
-msgstr "Förlorad anslutning, transaktionen avbruten"
-
-#: ../../../ui.cpp:2287
-msgid "Sending payment..."
-msgstr "Skickar betalning..."
-
-#: ../../../ui.cpp:2293
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Transaktionen blev nekad.  Detta kan hända om några av dina mynt i din plånbok var redan spenderad. Till exempel om du använde en kopia av wallet.dat och mynten var redan spenderad i kopian, men som inte var markerad som spenderad här."
-
-#: ../../../ui.cpp:2302
-msgid "Waiting for confirmation..."
-msgstr "Väntar på bekräftelse..."
-
-#: ../../../ui.cpp:2320
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"Betalning var skickat, men mottagaren kunde inte verifiera det.\n"
-"Transaktionen är registrerad och kommer att kreditera mottagaren,\n"
-"men kommentar informationen kommer att vara tom."
-
-#: ../../../ui.cpp:2329
-msgid "Payment was sent, but an invalid response was received"
-msgstr "Betalning var skickad, men en ogiltig respons var mottagen"
-
-#: ../../../ui.cpp:2335
-msgid "Payment completed"
-msgstr "Betalning slutförd"
-
-#: ../../../ui.cpp:2377
-#: ../../../ui.cpp:2525
-#: ../../../ui.cpp:2565
-msgid "Name"
-msgstr "Namn"
-
-#: ../../../ui.cpp:2378
-#: ../../../ui.cpp:2525
-#: ../../../ui.cpp:2565
-msgid "Address"
-msgstr "Adress"
-
-#: ../../../ui.cpp:2380
-#: ../../../ui.cpp:2537
-msgid "Label"
-msgstr "Etikett"
-
-#: ../../../ui.cpp:2381
-#: ../../../uibase.cpp:837
-msgid "Bitcoin Address"
-msgstr "Bitcoin Adress"
-
-#: ../../../ui.cpp:2507
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "Denna är en av dina egna adresser för mottagning av betalningar och kan inte slås in i adressboken.  "
-
-#: ../../../ui.cpp:2525
-#: ../../../ui.cpp:2531
-msgid "Edit Address"
-msgstr "Ändra Adress"
-
-#: ../../../ui.cpp:2537
-msgid "Edit Address Label"
-msgstr "Ändra Address Etikett"
-
-#: ../../../ui.cpp:2565
-#: ../../../ui.cpp:2571
-msgid "Add Address"
-msgstr "Lägg till Adress"
-
-#: ../../../ui.cpp:2649
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../ui.cpp:2651
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - Genererar"
-
-#: ../../../ui.cpp:2653
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (ej ansluten)"
-
-#: ../../../ui.cpp:2732
-msgid "&Open Bitcoin"
-msgstr "&Öppna Bitcoin"
-
-#: ../../../ui.cpp:2733
-msgid "&Send Bitcoins"
-msgstr "&Skicka Bitcoins"
-
-#: ../../../ui.cpp:2734
-msgid "O&ptions..."
-msgstr "&Inställningar..."
-
-#: ../../../ui.cpp:2737
-#: ../../../uibase.cpp:25
-msgid "E&xit"
-msgstr "&Avsluta"
-
-#: ../../../ui.cpp:2963
-msgid "Program has crashed and will terminate.  "
-msgstr "Programmet har krachat och kommer att avslutas.  "
-
-#: ../../../uibase.cpp:28
-msgid "&File"
-msgstr "&Fil"
-
-#: ../../../uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "&Dina Mottagningsadresser..."
-
-#: ../../../uibase.cpp:36
-msgid "&Options..."
-msgstr "&Inställningar..."
-
-#: ../../../uibase.cpp:39
-msgid "&Settings"
-msgstr "&Inställningar"
-
-#: ../../../uibase.cpp:43
-msgid "&About..."
-msgstr "&Om..."
-
-#: ../../../uibase.cpp:46
-msgid "&Help"
-msgstr "&Hjälp"
-
-#: ../../../uibase.cpp:56
-msgid "Address Book"
-msgstr "Adressbok"
-
-#: ../../../uibase.cpp:69
-msgid "Your Bitcoin Address:"
-msgstr "Din Bitcoin Adress:"
-
-#: ../../../uibase.cpp:76
-msgid " &New... "
-msgstr " &Nytt... "
-
-#: ../../../uibase.cpp:79
-#: ../../../uibase.cpp:780
-#: ../../../uibase.cpp:883
-msgid " &Copy to Clipboard "
-msgstr " &Kopiera till Urklipp "
-
-#: ../../../uibase.cpp:93
-msgid "Balance:"
-msgstr "Balans:"
-
-#: ../../../uibase.cpp:109
-msgid " All"
-msgstr " Alla"
-
-#: ../../../uibase.cpp:109
-msgid " Sent"
-msgstr " Skickat"
-
-#: ../../../uibase.cpp:109
-msgid " Received"
-msgstr " Mottagen"
-
-#: ../../../uibase.cpp:109
-msgid " In Progress"
-msgstr " Pågående"
-
-#: ../../../uibase.cpp:130
-msgid "All Transactions"
-msgstr "Alla Transaktioner"
-
-#: ../../../uibase.cpp:141
-msgid "Sent/Received"
-msgstr "Skickat/Mottagen"
-
-#: ../../../uibase.cpp:152
-msgid "Sent"
-msgstr "Skickat"
-
-#: ../../../uibase.cpp:163
-msgid "Received"
-msgstr "Mottagen"
-
-#: ../../../uibase.cpp:302
-#: ../../../uibase.cpp:443
-#: ../../../uibase.cpp:542
-#: ../../../uibase.cpp:722
-#: ../../../uibase.cpp:783
-#: ../../../uibase.cpp:892
-#: ../../../uibase.cpp:981
-msgid "OK"
-msgstr "OK"
-
-#: ../../../uibase.cpp:345
-msgid "&Start Bitcoin on system startup"
-msgstr "&Starta Bitcoin vid system uppstart"
-
-#: ../../../uibase.cpp:348
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "&Minimerar till systemfältet istället för aktivitetsfält"
-
-#: ../../../uibase.cpp:351
-msgid "Map port using &UPnP"
-msgstr "Mapp port använder &UPnP"
-
-#: ../../../uibase.cpp:354
-msgid "M&inimize to the tray on close"
-msgstr "M&inimera till systemfältet vid stängning"
-
-#: ../../../uibase.cpp:360
-msgid "&Connect through socks4 proxy: "
-msgstr "&Anslut via socks4 proxy: "
-
-#: ../../../uibase.cpp:371
-msgid "Proxy &IP:"
-msgstr "Proxy &IP:"
-
-#: ../../../uibase.cpp:379
-msgid " &Port:"
-msgstr " &Port:"
-
-#: ../../../uibase.cpp:392
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "Frivillig transaktionsavgift per KB som garanterar att din transaktion bearbetas snabbt. Flesta transaktioner är 1KB.   Avgift 0.01 rekommenderas."
-
-#: ../../../uibase.cpp:399
-msgid "Pay transaction fee:"
-msgstr "Betala transaktionsavgift:"
-
-#: ../../../uibase.cpp:420
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../uibase.cpp:424
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../uibase.cpp:446
-#: ../../../uibase.cpp:668
-#: ../../../uibase.cpp:727
-#: ../../../uibase.cpp:786
-#: ../../../uibase.cpp:895
-#: ../../../uibase.cpp:984
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: ../../../uibase.cpp:449
-msgid "&Apply"
-msgstr "&Använd"
-
-#: ../../../uibase.cpp:508
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../uibase.cpp:514
-msgid "version"
-msgstr "version"
-
-#: ../../../uibase.cpp:525
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"Detta är en experimentell mjukvara.\n"
-"\n"
-"Distribuerad under MIT/X11 mjukvarulicens, se medföljande fil \n"
-"license.txt eller http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"Denna produkt inkluderar mjukvara utvecklad av OpenSSL Project för användning i \n"
-"OpenSSL Toolkit (http://www.openssl.org/) och kryptografisk mjukvara skriven av \n"
-"Eric Young (eay@cryptsoft.com) och UPnP mjukvara skriven av Thomas Bernard.\n"
-"\n"
-"Översatt av Han Lin Yap."
-
-#: ../../../uibase.cpp:581
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "Ange en Bitcoin adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../uibase.cpp:595
-msgid "Pay &To:"
-msgstr "Betala &Till:"
-
-#: ../../../uibase.cpp:610
-msgid "&Paste"
-msgstr "&Klistra in"
-
-#: ../../../uibase.cpp:613
-msgid " Address &Book..."
-msgstr " Adress&bok..."
-
-#: ../../../uibase.cpp:620
-msgid "&Amount:"
-msgstr "&Belopp:"
-
-#: ../../../uibase.cpp:630
-msgid "T&ransfer:"
-msgstr "&Överföring:"
-
-#: ../../../uibase.cpp:636
-msgid " Standard"
-msgstr " Standard"
-
-#: ../../../uibase.cpp:663
-msgid "&Send"
-msgstr "&Skicka"
-
-#: ../../../uibase.cpp:711
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"Ansluter..."
-
-#: ../../../uibase.cpp:761
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "Dessa är dina Bitcoin adresser för mottagning av betalningar.  Du rekommenderas att ge olika till varje avsändare så du kan ha koll på vem som betalar dig.  Den markerade adressen visas i huvudfönstret."
-
-#: ../../../uibase.cpp:774
-#: ../../../uibase.cpp:886
-msgid "&Edit..."
-msgstr "&Redigera..."
-
-#: ../../../uibase.cpp:777
-#: ../../../uibase.cpp:889
-msgid " &New Address... "
-msgstr " &Ny Adress... "
-
-#: ../../../uibase.cpp:849
-msgid "Sending"
-msgstr "Skickar"
-
-#: ../../../uibase.cpp:857
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "Dessa är dina Bitcoin adresser för mottagning av betalningar.  Du kan ge olika till varje avsändare så du kan ha koll på vem som betalar dig.  Den markerade adressen visas i huvudfönstret."
-
-#: ../../../uibase.cpp:870
-msgid "Receiving"
-msgstr "Mottagning"
-
-#: ../../../uibase.cpp:880
-msgid "&Delete"
-msgstr "&Ta bort"
-
-#: ../../../util.cpp:874
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "Varning: Var god och kolla att din dator har rätt datum och klockslag.  Om din klocka är fel så kommer Bitcoin inte att fungera ordentligt."
-
-#: ../../../util.cpp:908
-msgid "beta"
-msgstr "beta"
-
-#: ../../../wallet.cpp:917
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "Fel: Denna transaktion kräver en transaktionsavgift minst %s för dess belopp, komplexitet, eller användning av nyligen mottagna pengar  "
-
-#: ../../../wallet.cpp:919
-msgid "Error: Transaction creation failed  "
-msgstr "Fel: Misslyckades att skapa transaktion  "
-
-#: ../../../wallet.cpp:928
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "Fel: Transaktionen blev nekad.  Detta kan hända om några av dina mynt i din plånbok var redan spenderad. Till exempel om du använde en kopia av wallet.dat och mynten var redan spenderad i kopian, men som inte var markerad som spenderad här."
-
-#: ../../../wallet.cpp:941
-msgid "Invalid amount"
-msgstr "Ogiltig belopp"
-
-#: ../../../wallet.cpp:948
-msgid "Invalid bitcoin address"
-msgstr "Ogiltig bitcoin adress"
-
-#: ../../../uibase.h:147
-msgid "Transaction Details"
-msgstr "Transaktion detaljer"
-
-#: ../../../uibase.h:199
-msgid "Options"
-msgstr "Inställningar"
-
-#: ../../../uibase.h:228
-msgid "About Bitcoin"
-msgstr "Om Bitcoin"
-
-#: ../../../uibase.h:337
-msgid "Your Bitcoin Addresses"
-msgstr "Dina Bitcoin Adresser"
-
diff --git a/locale/zh_cn/LC_MESSAGES/bitcoin.mo b/locale/zh_cn/LC_MESSAGES/bitcoin.mo
deleted file mode 100644 (file)
index 87538f0..0000000
Binary files a/locale/zh_cn/LC_MESSAGES/bitcoin.mo and /dev/null differ
diff --git a/locale/zh_cn/LC_MESSAGES/bitcoin.po b/locale/zh_cn/LC_MESSAGES/bitcoin.po
deleted file mode 100644 (file)
index f53367e..0000000
+++ /dev/null
@@ -1,1076 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-09-06 21:58+0100\n"
-"PO-Revision-Date: 2011-09-17 19:08+0800\n"
-"Last-Translator: Dean Lee <xslidian@gmail.com>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Language: zh_CN\n"
-"X-Source-Language: C\n"
-"X-Poedit-Bookmarks: 77,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
-"X-Poedit-SearchPath-0: ../../..\n"
-
-#: ../../../src/init.cpp:163
-msgid "Bitcoin version"
-msgstr "Bitcoin 版本"
-
-#: ../../../src/init.cpp:164
-msgid "Usage:"
-msgstr "用法:"
-
-#: ../../../src/init.cpp:166
-msgid "Send command to -server or bitcoind\n"
-msgstr "发送命令给 -server 或 bitcoin\n"
-
-#: ../../../src/init.cpp:167
-msgid "List commands\n"
-msgstr "列出命令\n"
-
-#: ../../../src/init.cpp:168
-msgid "Get help for a command\n"
-msgstr "获取命令的帮助\n"
-
-#: ../../../src/init.cpp:169
-msgid "Options:\n"
-msgstr "选项:\n"
-
-#: ../../../src/init.cpp:170
-msgid "Specify configuration file (default: bitcoin.conf)\n"
-msgstr "指定配置文件 (默认: bitcoin.conf)\n"
-
-#: ../../../src/init.cpp:171
-msgid "Specify pid file (default: bitcoind.pid)\n"
-msgstr "指定 pid 文件 (默认: bitcoin.pid)\n"
-
-#: ../../../src/init.cpp:172
-msgid "Generate coins\n"
-msgstr "生成货币\n"
-
-#: ../../../src/init.cpp:173
-msgid "Don't generate coins\n"
-msgstr "不要生成货币\n"
-
-#: ../../../src/init.cpp:174
-msgid "Start minimized\n"
-msgstr "启动时最小化\n"
-
-#: ../../../src/init.cpp:175
-msgid "Specify data directory\n"
-msgstr "指定数据目录\n"
-
-#: ../../../src/init.cpp:176
-msgid "Specify connection timeout (in milliseconds)\n"
-msgstr "指定连接超时时间 (毫秒)\n"
-
-#: ../../../src/init.cpp:177
-msgid "Connect through socks4 proxy\n"
-msgstr "通过 socks4 代理连接\n"
-
-#: ../../../src/init.cpp:178
-msgid "Allow DNS lookups for addnode and connect\n"
-msgstr "允许 DNS 查找新增结点和连接\n"
-
-#: ../../../src/init.cpp:179
-msgid "Add a node to connect to\n"
-msgstr "添加一个连接结点\n"
-
-#: ../../../src/init.cpp:180
-msgid "Connect only to the specified node\n"
-msgstr "只连接特定结点\n"
-
-#: ../../../src/init.cpp:181
-msgid "Don't accept connections from outside\n"
-msgstr "不要接受外部传来的连接\n"
-
-#: ../../../src/init.cpp:184
-msgid "Don't attempt to use UPnP to map the listening port\n"
-msgstr "不要尝试使用 UPnP 映射监听端口\n"
-
-#: ../../../src/init.cpp:186
-msgid "Attempt to use UPnP to map the listening port\n"
-msgstr "尝试使用 UPnP 映射监听端口\n"
-
-#: ../../../src/init.cpp:189
-msgid "Fee per KB to add to transactions you send\n"
-msgstr "您为每 KB 支付所增加的交易佣金\n"
-
-#: ../../../src/init.cpp:191
-msgid "Accept command line and JSON-RPC commands\n"
-msgstr "允许命令行和 JSON-RPC 控制\n"
-
-#: ../../../src/init.cpp:194
-msgid "Run in the background as a daemon and accept commands\n"
-msgstr "在后台运行并接收命令\n"
-
-#: ../../../src/init.cpp:196
-msgid "Use the test network\n"
-msgstr "使用测试网络\n"
-
-#: ../../../src/init.cpp:197
-msgid "Username for JSON-RPC connections\n"
-msgstr "JSON-RPC 连接的用户名\n"
-
-#: ../../../src/init.cpp:198
-msgid "Password for JSON-RPC connections\n"
-msgstr "JSON-RPC 连接的密码\n"
-
-#: ../../../src/init.cpp:199
-msgid "Listen for JSON-RPC connections on <port> (default: 8332)\n"
-msgstr "在端口 <port> 监听 JSON-RPC 连接 (默认: 8332)\n"
-
-#: ../../../src/init.cpp:200
-msgid "Allow JSON-RPC connections from specified IP address\n"
-msgstr "允许来自特定 IP 地址的 JSON-RPC 连接\n"
-
-#: ../../../src/init.cpp:201
-msgid "Send commands to node running on <ip> (default: 127.0.0.1)\n"
-msgstr "发送命令给运行的结点,IP 地址 <ip> (默认: 127.0.0.1)\n"
-
-#: ../../../src/init.cpp:202
-msgid "Set key pool size to <n> (default: 100)\n"
-msgstr "设置密钥池大小为 <n> (默认: 100)\n"
-
-#: ../../../src/init.cpp:203
-msgid "Rescan the block chain for missing wallet transactions\n"
-msgstr "重新扫描货币包链来检测丢失的钱包交易\n"
-
-#: ../../../src/init.cpp:207
-msgid ""
-"\n"
-"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"
-msgstr ""
-"\n"
-"SSL 选项: (SSL 设置步骤请参见 Bitcoin Wiki)\n"
-
-#: ../../../src/init.cpp:208
-msgid "Use OpenSSL (https) for JSON-RPC connections\n"
-msgstr "使用 OpenSSL (https) 进行 JSON-RPC 连接\n"
-
-#: ../../../src/init.cpp:209
-msgid "Server certificate file (default: server.cert)\n"
-msgstr "服务器证书 (默认: server.cert)\n"
-
-#: ../../../src/init.cpp:210
-msgid "Server private key (default: server.pem)\n"
-msgstr "服务器私有密钥 (默认: server.pem)\n"
-
-#: ../../../src/init.cpp:211
-msgid "Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-msgstr "许可密码 (默认: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)\n"
-
-#: ../../../src/init.cpp:215
-msgid "This help message\n"
-msgstr "本帮助信息\n"
-
-#: ../../../src/init.cpp:353
-#, c-format
-msgid "Cannot obtain a lock on data directory %s.  Bitcoin is probably already running."
-msgstr "无法获取数据目录 %s 的锁。 Bitcoin 可能已经启动。"
-
-#: ../../../src/init.cpp:379
-msgid "Error loading addr.dat      \n"
-msgstr "加载 addr.dat 出错      \n"
-
-#: ../../../src/init.cpp:385
-msgid "Error loading blkindex.dat      \n"
-msgstr "加载 blkindex.dat 出错      \n"
-
-#: ../../../src/init.cpp:396
-msgid "Error loading wallet.dat: Wallet corrupted      \n"
-msgstr "加载 wallet.dat 出错: 钱包已损坏      \n"
-
-#: ../../../src/init.cpp:398
-msgid "Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"
-msgstr "加载 wallet.dat 出错: 钱包要求更高版本的 Bitcoin      \n"
-
-#: ../../../src/init.cpp:400
-msgid "Error loading wallet.dat      \n"
-msgstr "加载 wallet.dat 出错      \n"
-
-#: ../../../src/init.cpp:489
-msgid "Invalid -proxy address"
-msgstr "无效 -proxy 地址"
-
-#: ../../../src/init.cpp:514
-msgid "Invalid amount for -paytxfee=<amount>"
-msgstr "无效的金额 -paytxfee=<amount>"
-
-#: ../../../src/init.cpp:518
-msgid "Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction."
-msgstr "警告: -paytxfee 设置得过高。 这个参数是您发送一笔交易要支付的佣金。"
-
-#: ../../../src/main.cpp:1398
-msgid "Warning: Disk space is low  "
-msgstr "警告: 磁盘空间不足"
-
-#: ../../../src/net.cpp:1610
-#, c-format
-msgid "Unable to bind to port %d on this computer.  Bitcoin is probably already running."
-msgstr "无法在这台电脑上绑定 %d 端口。 Bitcoin 可能已经在运行。"
-
-#: ../../../src/rpc.cpp:2005
-#: ../../../src/rpc.cpp:2007
-#, c-format
-msgid "To use the %s option"
-msgstr "使用 %s 选项"
-
-#: ../../../src/rpc.cpp:2009
-#, c-format
-msgid ""
-"Warning: %s, you must set rpcpassword=<password>\n"
-"in the configuration file: %s\n"
-"If the file does not exist, create it with owner-readable-only file permissions.\n"
-msgstr ""
-"警告: %s,您必须在配置文件中设置 rpcpassword=<password>\n"
-"配置文件为: %s\n"
-"如果文件不存在,请创建文件并只给创建者提供只读访问权限。\n"
-
-#: ../../../src/rpc.cpp:2185
-#, c-format
-msgid ""
-"You must set rpcpassword=<password> in the configuration file:\n"
-"%s\n"
-"If the file does not exist, create it with owner-readable-only file permissions."
-msgstr ""
-"您必须在配置文件中设置 rpcpassword=<password> :\n"
-"%s\n"
-"如果文件不存在,请创建文件并只给创建者提供只读访问权限。"
-
-#: ../../../src/ui.cpp:217
-#, c-format
-msgid "This transaction is over the size limit.  You can still send it for a fee of %s, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?"
-msgstr "这笔交易超过了大小限制。 您依然可以通过支付 %s 的佣金来进行,佣金用来支付为您的交易计算的结点来帮助支撑网络。 您是否要支付佣金?"
-
-#: ../../../src/ui.cpp:261
-#: ../../../src/ui.cpp:1247
-msgid "Enter the current passphrase to the wallet."
-msgstr "输入钱包当前的口令。"
-
-#: ../../../src/ui.cpp:262
-#: ../../../src/ui.cpp:1183
-#: ../../../src/ui.cpp:1200
-#: ../../../src/ui.cpp:1248
-#: ../../../src/ui.cpp:1272
-#: ../../../src/ui.cpp:1292
-msgid "Passphrase"
-msgstr "口令"
-
-#: ../../../src/ui.cpp:268
-msgid "Please supply the current wallet decryption passphrase."
-msgstr "请输入钱包当前的解密口令。"
-
-#: ../../../src/ui.cpp:276
-#: ../../../src/ui.cpp:1257
-#: ../../../src/ui.cpp:1314
-msgid "The passphrase entered for the wallet decryption was incorrect."
-msgstr "钱包解密口令不正确。"
-
-#: ../../../src/ui.cpp:353
-msgid "Status"
-msgstr "状态"
-
-#: ../../../src/ui.cpp:354
-msgid "Date"
-msgstr "日期"
-
-#: ../../../src/ui.cpp:355
-msgid "Description"
-msgstr "描述"
-
-#: ../../../src/ui.cpp:356
-msgid "Debit"
-msgstr "付款人"
-
-#: ../../../src/ui.cpp:357
-msgid "Credit"
-msgstr "信用"
-
-#: ../../../src/ui.cpp:568
-#, c-format
-msgid "Open for %d blocks"
-msgstr "%d 个货币包开放"
-
-#: ../../../src/ui.cpp:570
-#, c-format
-msgid "Open until %s"
-msgstr "开放直到 %s"
-
-#: ../../../src/ui.cpp:576
-#, c-format
-msgid "%d/offline?"
-msgstr "%d/离线?"
-
-#: ../../../src/ui.cpp:578
-#, c-format
-msgid "%d/unconfirmed"
-msgstr "%d/未确认"
-
-#: ../../../src/ui.cpp:580
-#, c-format
-msgid "%d confirmations"
-msgstr "%d 确认"
-
-#: ../../../src/ui.cpp:665
-msgid "Generated"
-msgstr "已生成"
-
-#: ../../../src/ui.cpp:673
-#, c-format
-msgid "Generated (%s matures in %d more blocks)"
-msgstr "已生成 (%s 成熟 %d 新增货币包)"
-
-#: ../../../src/ui.cpp:677
-msgid "Generated - Warning: This block was not received by any other nodes and will probably not be accepted!"
-msgstr "已生成 - 警告: 这个货币包没有被任何其他结点收到,因此很可能不会被接受!"
-
-#: ../../../src/ui.cpp:681
-msgid "Generated (not accepted)"
-msgstr "已生成 (未被接受)"
-
-#: ../../../src/ui.cpp:691
-msgid "From: "
-msgstr "来自: "
-
-#: ../../../src/ui.cpp:715
-msgid "Received with: "
-msgstr "伴随接收: "
-
-#: ../../../src/ui.cpp:760
-msgid "Payment to yourself"
-msgstr "支付给您自己"
-
-#: ../../../src/ui.cpp:794
-msgid "To: "
-msgstr "到: "
-
-#: ../../../src/ui.cpp:1109
-msgid "    Generating"
-msgstr "    生成中"
-
-#: ../../../src/ui.cpp:1111
-msgid "(not connected)"
-msgstr "(未连接)"
-
-#: ../../../src/ui.cpp:1114
-#, c-format
-msgid "     %d connections     %d blocks     %d transactions"
-msgstr "     %d 个连接     %d 个货币包     %d 个交易 "
-
-#: ../../../src/ui.cpp:1171
-msgid "Wallet already encrypted."
-msgstr "钱包已加密。"
-
-#: ../../../src/ui.cpp:1182
-msgid ""
-"Enter the new passphrase to the wallet.\n"
-"Please use a passphrase of 10 or more random characters, or eight or more words."
-msgstr ""
-"输入钱包的新口令。\n"
-"请使用 10 个或更多字符,或 8 个或更多单词的口令。"
-
-#: ../../../src/ui.cpp:1189
-#: ../../../src/ui.cpp:1280
-msgid "Error: The supplied passphrase was too short."
-msgstr "错误: 所输口令太短。"
-
-#: ../../../src/ui.cpp:1193
-msgid ""
-"WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\n"
-"Are you sure you wish to encrypt your wallet?"
-msgstr ""
-"警告: 如果您加密钱包又丢失口令,将失去全部 BITCOINS!\n"
-"是否确实想加密钱包?"
-
-#: ../../../src/ui.cpp:1199
-msgid "Please re-enter your new wallet passphrase."
-msgstr "请重新输入新的钱包口令。"
-
-#: ../../../src/ui.cpp:1208
-#: ../../../src/ui.cpp:1302
-msgid "Error: the supplied passphrases didn't match."
-msgstr "错误: 所输口令不匹配。"
-
-#: ../../../src/ui.cpp:1218
-msgid "Wallet encryption failed."
-msgstr "钱包加密失败。"
-
-#: ../../../src/ui.cpp:1225
-msgid ""
-"Wallet Encrypted.\n"
-"Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."
-msgstr ""
-"钱包已加密。\n"
-"请记住,加密钱包无法完全保护您的 bitcoins 不被计算机感染的恶意软件窃取。"
-
-#: ../../../src/ui.cpp:1236
-msgid "Wallet is unencrypted, please encrypt it first."
-msgstr "钱包未加密,请先加密。"
-
-#: ../../../src/ui.cpp:1271
-msgid "Enter the new passphrase for the wallet."
-msgstr "输入钱包的新口令。"
-
-#: ../../../src/ui.cpp:1291
-msgid "Re-enter the new passphrase for the wallet."
-msgstr "重新输入钱包的新口令。"
-
-#: ../../../src/ui.cpp:1323
-msgid "Wallet Passphrase Changed."
-msgstr "钱包口令已更改。"
-
-#: ../../../src/ui.cpp:1379
-#: ../../../src/ui.cpp:2825
-msgid "New Receiving Address"
-msgstr "新建接收地址"
-
-#: ../../../src/ui.cpp:1380
-#: ../../../src/ui.cpp:2826
-msgid ""
-"You should use a new address for each payment you receive.\n"
-"\n"
-"Label"
-msgstr ""
-"您应该为您收到的每次付款使用不同的地址。\n"
-"\n"
-"标签"
-
-#: ../../../src/ui.cpp:1464
-msgid "<b>Status:</b> "
-msgstr "<b>状态:</b> "
-
-#: ../../../src/ui.cpp:1469
-msgid ", has not been successfully broadcast yet"
-msgstr ",尚未被成功广播"
-
-#: ../../../src/ui.cpp:1471
-#, c-format
-msgid ", broadcast through %d node"
-msgstr ",通过 %d 个结点广播"
-
-#: ../../../src/ui.cpp:1473
-#, c-format
-msgid ", broadcast through %d nodes"
-msgstr ",通过 %d 个结点广播"
-
-#: ../../../src/ui.cpp:1477
-msgid "<b>Date:</b> "
-msgstr "<b>日期:</b>"
-
-#: ../../../src/ui.cpp:1485
-msgid "<b>Source:</b> Generated<br>"
-msgstr "<b>来源:</b> 生成<br>"
-
-#: ../../../src/ui.cpp:1491
-#: ../../../src/ui.cpp:1508
-msgid "<b>From:</b> "
-msgstr "<b>从:</b> "
-
-#: ../../../src/ui.cpp:1508
-msgid "unknown"
-msgstr "未知"
-
-#: ../../../src/ui.cpp:1509
-#: ../../../src/ui.cpp:1533
-#: ../../../src/ui.cpp:1592
-msgid "<b>To:</b> "
-msgstr "<b>到:</b> "
-
-#: ../../../src/ui.cpp:1512
-msgid " (yours, label: "
-msgstr " (您的标签: "
-
-#: ../../../src/ui.cpp:1514
-msgid " (yours)"
-msgstr " (您的)"
-
-#: ../../../src/ui.cpp:1551
-#: ../../../src/ui.cpp:1563
-#: ../../../src/ui.cpp:1609
-#: ../../../src/ui.cpp:1626
-msgid "<b>Credit:</b> "
-msgstr "<b>信用:</b> "
-
-#: ../../../src/ui.cpp:1553
-#, c-format
-msgid "(%s matures in %d more blocks)"
-msgstr "(%s 收获在 %d 更多的货币包)"
-
-#: ../../../src/ui.cpp:1555
-msgid "(not accepted)"
-msgstr "(未被接受)"
-
-#: ../../../src/ui.cpp:1600
-#: ../../../src/ui.cpp:1608
-#: ../../../src/ui.cpp:1623
-msgid "<b>Debit:</b> "
-msgstr "<b>付款人:</b> "
-
-#: ../../../src/ui.cpp:1614
-msgid "<b>Transaction fee:</b> "
-msgstr "<b>交易佣金:</b> "
-
-#: ../../../src/ui.cpp:1630
-msgid "<b>Net amount:</b> "
-msgstr "<b>网络金额:</b> "
-
-#: ../../../src/ui.cpp:1637
-msgid "Message:"
-msgstr "消息:"
-
-#: ../../../src/ui.cpp:1639
-msgid "Comment:"
-msgstr "评论"
-
-#: ../../../src/ui.cpp:1642
-msgid "Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours."
-msgstr "生成的货币必须等待 120 个货币包之后才能够使用。 当您生成了一个货币包后,它被广播给网络来加入货币包链中。 如果它无法加入货币包链中,他将会标记为\"不被接受\"且不能被支付。 这种情况可能因为在您生成这个货币包之后的几秒钟内有别人也生成了货币包而发生。"
-
-#: ../../../src/ui.cpp:1826
-msgid "Cannot write autostart/bitcoin.desktop file"
-msgstr "无法写入 autostart/bitcoin.desktop 文件"
-
-#: ../../../src/ui.cpp:1862
-msgid "Main"
-msgstr "主要"
-
-#: ../../../src/ui.cpp:1872
-msgid "&Start Bitcoin on window system startup"
-msgstr "开机自动启动 Bitcoin(&S)"
-
-#: ../../../src/ui.cpp:1879
-msgid "&Minimize on close"
-msgstr "关闭时最小化(&M)"
-
-#: ../../../src/ui.cpp:2021
-#, c-format
-msgid "version %s"
-msgstr "版本 %s"
-
-#: ../../../src/ui.cpp:2144
-msgid "Error in amount  "
-msgstr "金额有误  "
-
-#: ../../../src/ui.cpp:2144
-#: ../../../src/ui.cpp:2149
-#: ../../../src/ui.cpp:2154
-#: ../../../src/ui.cpp:2207
-#: ../../../src/uibase.cpp:61
-msgid "Send Coins"
-msgstr "发送货币"
-
-#: ../../../src/ui.cpp:2149
-msgid "Amount exceeds your balance  "
-msgstr "金额超出您的账户余额"
-
-#: ../../../src/ui.cpp:2154
-msgid "Total exceeds your balance when the "
-msgstr "总费用超出您的账户余额当 "
-
-#: ../../../src/ui.cpp:2154
-msgid " transaction fee is included  "
-msgstr " 交易佣金已包括"
-
-#: ../../../src/ui.cpp:2181
-msgid "Payment sent  "
-msgstr "付款已发送"
-
-#: ../../../src/ui.cpp:2181
-#: ../../../src/ui.cpp:2191
-#: ../../../src/ui.cpp:2341
-#: ../../../src/ui.cpp:2506
-#: ../../../src/wallet.cpp:1088
-msgid "Sending..."
-msgstr "正在发送..."
-
-#: ../../../src/ui.cpp:2207
-msgid "Invalid address  "
-msgstr "无效地址  "
-
-#: ../../../src/ui.cpp:2262
-#, c-format
-msgid "Sending %s to %s"
-msgstr "发送 %s 给 %s"
-
-#: ../../../src/ui.cpp:2335
-#: ../../../src/ui.cpp:2368
-msgid "CANCELLED"
-msgstr "已取消"
-
-#: ../../../src/ui.cpp:2339
-msgid "Cancelled"
-msgstr "已取消"
-
-#: ../../../src/ui.cpp:2341
-msgid "Transfer cancelled  "
-msgstr "传输已取消  "
-
-#: ../../../src/ui.cpp:2394
-msgid "Error: "
-msgstr "错误: "
-
-#: ../../../src/ui.cpp:2408
-#: ../../../src/ui.cpp:2477
-#: ../../../src/wallet.cpp:1106
-msgid "Insufficient funds"
-msgstr "余额不足"
-
-#: ../../../src/ui.cpp:2413
-msgid "Connecting..."
-msgstr "正在连接..."
-
-#: ../../../src/ui.cpp:2418
-msgid "Unable to connect"
-msgstr "无法连接"
-
-#: ../../../src/ui.cpp:2423
-msgid "Requesting public key..."
-msgstr "正在请求公共密钥..."
-
-#: ../../../src/ui.cpp:2435
-msgid "Received public key..."
-msgstr "收到公共密钥..."
-
-#: ../../../src/ui.cpp:2449
-msgid "Recipient is not accepting transactions sent by IP address"
-msgstr "收款人不接受来自 IP 地址的交易"
-
-#: ../../../src/ui.cpp:2451
-msgid "Transfer was not accepted"
-msgstr "传输没有被接受"
-
-#: ../../../src/ui.cpp:2460
-msgid "Invalid response received"
-msgstr "接收到无效回复"
-
-#: ../../../src/ui.cpp:2473
-msgid "Creating transaction..."
-msgstr "正在创建交易..."
-
-#: ../../../src/ui.cpp:2496
-#, c-format
-msgid "This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"
-msgstr "这笔交易因为它最近收到的付款的数量,交易难度或者使用情况,需要至少 %s 交易佣金"
-
-#: ../../../src/ui.cpp:2498
-msgid "Transaction creation failed"
-msgstr "交易创建失败"
-
-#: ../../../src/ui.cpp:2508
-msgid "Transaction aborted"
-msgstr "交易中止"
-
-#: ../../../src/ui.cpp:2516
-msgid "Lost connection, transaction cancelled"
-msgstr "失去连接,交易已取消"
-
-#: ../../../src/ui.cpp:2532
-msgid "Sending payment..."
-msgstr "正在发送付款..."
-
-#: ../../../src/ui.cpp:2544
-msgid "The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "交易被拒绝。 这可能是因为您账户中的一部分货币已经被使用,比如您使用了一个复制的 wallet.dat 文件,而且货币在另一个副本里支付但没有在这里标记。"
-
-#: ../../../src/ui.cpp:2553
-msgid "Waiting for confirmation..."
-msgstr "正在等待确认..."
-
-#: ../../../src/ui.cpp:2570
-msgid ""
-"The payment was sent, but the recipient was unable to verify it.\n"
-"The transaction is recorded and will credit to the recipient,\n"
-"but the comment information will be blank."
-msgstr ""
-"付款已发送,但是收款人无法进行确认。\n"
-"交易已经被记录,并且支付给收款人,\n"
-"但是评论信息可能是空的。"
-
-#: ../../../src/ui.cpp:2579
-msgid "Payment was sent, but an invalid response was received"
-msgstr "支付已发送,但是收到无效回复"
-
-#: ../../../src/ui.cpp:2585
-msgid "Payment completed"
-msgstr "付款完成"
-
-#: ../../../src/ui.cpp:2627
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-msgid "Name"
-msgstr "姓名"
-
-#: ../../../src/ui.cpp:2628
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2813
-msgid "Address"
-msgstr "地址"
-
-#: ../../../src/ui.cpp:2630
-#: ../../../src/ui.cpp:2785
-msgid "Label"
-msgstr "标签"
-
-#: ../../../src/ui.cpp:2631
-#: ../../../src/uibase.cpp:847
-msgid "Bitcoin Address"
-msgstr "Bitcoin 地址"
-
-#: ../../../src/ui.cpp:2755
-msgid "This is one of your own addresses for receiving payments and cannot be entered in the address book.  "
-msgstr "这是您拥有的接收付款的地址之一,它不能够进入这个地址簿。 "
-
-#: ../../../src/ui.cpp:2773
-#: ../../../src/ui.cpp:2779
-msgid "Edit Address"
-msgstr "编辑地址"
-
-#: ../../../src/ui.cpp:2785
-msgid "Edit Address Label"
-msgstr "编辑地址标签"
-
-#: ../../../src/ui.cpp:2813
-#: ../../../src/ui.cpp:2819
-msgid "Add Address"
-msgstr "添加地址"
-
-#: ../../../src/ui.cpp:2906
-msgid "Bitcoin"
-msgstr "Bitcoin"
-
-#: ../../../src/ui.cpp:2908
-msgid "Bitcoin - Generating"
-msgstr "Bitcoin - 生成中"
-
-#: ../../../src/ui.cpp:2910
-msgid "Bitcoin - (not connected)"
-msgstr "Bitcoin - (未连接)"
-
-#: ../../../src/ui.cpp:2989
-msgid "&Open Bitcoin"
-msgstr "打开 Bitcoin(&O)"
-
-#: ../../../src/ui.cpp:2990
-msgid "&Send Bitcoins"
-msgstr "发送 Bitcoins(&S)"
-
-#: ../../../src/ui.cpp:2991
-msgid "O&ptions..."
-msgstr "选项(&P)..."
-
-#: ../../../src/ui.cpp:2994
-#: ../../../src/uibase.cpp:25
-msgid "E&xit"
-msgstr "退出(&X)"
-
-#: ../../../src/ui.cpp:3220
-msgid "Program has crashed and will terminate.  "
-msgstr "程序崩溃,即将关闭。 "
-
-#: ../../../src/uibase.cpp:28
-msgid "&File"
-msgstr "文件(&F)"
-
-#: ../../../src/uibase.cpp:32
-msgid "&Your Receiving Addresses..."
-msgstr "您的接收地址(&Y)..."
-
-#: ../../../src/uibase.cpp:35
-msgid "&Encrypt Wallet..."
-msgstr "加密钱包(&E)..."
-
-#: ../../../src/uibase.cpp:38
-msgid "&Change Wallet Encryption Passphrase..."
-msgstr "更改钱包加密口令(&C)..."
-
-#: ../../../src/uibase.cpp:42
-msgid "&Options..."
-msgstr "选项(&O)..."
-
-#: ../../../src/uibase.cpp:45
-msgid "&Settings"
-msgstr "设置(&S)"
-
-#: ../../../src/uibase.cpp:49
-msgid "&About..."
-msgstr "关于(&A)..."
-
-#: ../../../src/uibase.cpp:52
-msgid "&Help"
-msgstr "帮助(&H)"
-
-#: ../../../src/uibase.cpp:62
-msgid "Address Book"
-msgstr "地址簿"
-
-#: ../../../src/uibase.cpp:75
-msgid "Your Bitcoin Address:"
-msgstr "您的 Bitcoin 地址:"
-
-#: ../../../src/uibase.cpp:82
-msgid " &New... "
-msgstr " 新建(&N)... "
-
-#: ../../../src/uibase.cpp:85
-#: ../../../src/uibase.cpp:790
-#: ../../../src/uibase.cpp:893
-msgid " &Copy to Clipboard "
-msgstr " 复制到剪贴板(&C)"
-
-#: ../../../src/uibase.cpp:99
-msgid "Balance:"
-msgstr "账户余额:"
-
-#: ../../../src/uibase.cpp:115
-msgid " All"
-msgstr "全部"
-
-#: ../../../src/uibase.cpp:115
-msgid " Sent"
-msgstr " 已发送"
-
-#: ../../../src/uibase.cpp:115
-msgid " Received"
-msgstr " 已接收"
-
-#: ../../../src/uibase.cpp:115
-msgid " In Progress"
-msgstr "处理中"
-
-#: ../../../src/uibase.cpp:136
-msgid "All Transactions"
-msgstr "所有交易"
-
-#: ../../../src/uibase.cpp:147
-msgid "Sent/Received"
-msgstr "已发送/已接收"
-
-#: ../../../src/uibase.cpp:158
-msgid "Sent"
-msgstr "已发送"
-
-#: ../../../src/uibase.cpp:169
-msgid "Received"
-msgstr "已接收"
-
-#: ../../../src/uibase.cpp:312
-#: ../../../src/uibase.cpp:453
-#: ../../../src/uibase.cpp:552
-#: ../../../src/uibase.cpp:732
-#: ../../../src/uibase.cpp:793
-#: ../../../src/uibase.cpp:902
-#: ../../../src/uibase.cpp:991
-msgid "OK"
-msgstr "确定"
-
-#: ../../../src/uibase.cpp:355
-msgid "&Start Bitcoin on system startup"
-msgstr "开机自动启动(&S)"
-
-#: ../../../src/uibase.cpp:358
-msgid "&Minimize to the tray instead of the taskbar"
-msgstr "最小化到系统托盘(&M)"
-
-#: ../../../src/uibase.cpp:361
-msgid "Map port using &UPnP"
-msgstr "使用 &UPnP 映射端口"
-
-#: ../../../src/uibase.cpp:364
-msgid "M&inimize to the tray on close"
-msgstr "关闭时最小化到托盘(&I)"
-
-#: ../../../src/uibase.cpp:370
-msgid "&Connect through socks4 proxy (requires restart to apply): "
-msgstr "通过 socks4 代理连接 (重启生效) (&C): "
-
-#: ../../../src/uibase.cpp:381
-msgid "Proxy &IP:"
-msgstr "代理服务器(&I):"
-
-#: ../../../src/uibase.cpp:389
-msgid " &Port:"
-msgstr " 端口(&P):"
-
-#: ../../../src/uibase.cpp:402
-msgid "Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."
-msgstr "可以选择按照KB支付交易佣金来确保您的交易得到迅速处理。 大多数交易需要 1KB。 建议支付 0.01。"
-
-#: ../../../src/uibase.cpp:409
-msgid "Pay transaction fee:"
-msgstr "支付交易佣金:"
-
-#: ../../../src/uibase.cpp:430
-msgid "// [don't translate] Test panel 2 for future expansion"
-msgstr ""
-
-#: ../../../src/uibase.cpp:434
-msgid "// [don't translate] Let's not start multiple pages until the first page is filled up"
-msgstr ""
-
-#: ../../../src/uibase.cpp:456
-#: ../../../src/uibase.cpp:678
-#: ../../../src/uibase.cpp:737
-#: ../../../src/uibase.cpp:796
-#: ../../../src/uibase.cpp:905
-#: ../../../src/uibase.cpp:994
-msgid "Cancel"
-msgstr "取消"
-
-#: ../../../src/uibase.cpp:459
-msgid "&Apply"
-msgstr "应用(&A)"
-
-#: ../../../src/uibase.cpp:518
-msgid "Bitcoin "
-msgstr "Bitcoin "
-
-#: ../../../src/uibase.cpp:524
-msgid "version"
-msgstr "版本"
-
-#: ../../../src/uibase.cpp:535
-msgid ""
-"Copyright (c) 2009-2011 Bitcoin Developers\n"
-"\n"
-"This is experimental software.\n"
-"\n"
-"Distributed under the MIT/X11 software license, see the accompanying file \n"
-"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
-"\n"
-"This product includes software developed by the OpenSSL Project for use in the \n"
-"OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \n"
-"Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."
-msgstr ""
-"版权所有 (c) 2009-2010 Bitcoin 开发人员\n"
-"这是一个实验软件。\n"
-"分发遵循 MIT/X11 软件许可协议,请参见附带的 license.txt 文件或访问\n"
-"http://www.opensource.org/licenses/mit-license.php。\n"
-"本产品使用了 OpenSSL Project 开发的 OpenSSL Toolkit\n"
-"(http://www.openssl.org/),以及 Eric Young(eay@cryptsoft.com)\n"
-"编写的加密软件和 Thomas Bernard 编写的 UPnP 软件。"
-
-#: ../../../src/uibase.cpp:591
-msgid "Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-msgstr "输入 Bitcoin 地址 (比如 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
-
-#: ../../../src/uibase.cpp:605
-msgid "Pay &To:"
-msgstr "付款给(&T):"
-
-#: ../../../src/uibase.cpp:620
-msgid "&Paste"
-msgstr "粘贴(&P)"
-
-#: ../../../src/uibase.cpp:623
-msgid " Address &Book..."
-msgstr " 地址簿(&B)..."
-
-#: ../../../src/uibase.cpp:630
-msgid "&Amount:"
-msgstr "数量(&A):"
-
-#: ../../../src/uibase.cpp:640
-msgid "T&ransfer:"
-msgstr "传输(&R):"
-
-#: ../../../src/uibase.cpp:646
-msgid " Standard"
-msgstr "标准"
-
-#: ../../../src/uibase.cpp:673
-msgid "&Send"
-msgstr "发送(&S)"
-
-#: ../../../src/uibase.cpp:721
-msgid ""
-"\n"
-"\n"
-"Connecting..."
-msgstr ""
-"\n"
-"\n"
-"正在连接..."
-
-#: ../../../src/uibase.cpp:771
-msgid "These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."
-msgstr "这些是您用来接收付款的 Bitcoin 地址。 您可能需要给每一个付款人一个不同的地址从而可以最终每一笔交易是谁支付的。 下面高亮的地址是您的主窗口正在使用的地址。"
-
-#: ../../../src/uibase.cpp:784
-#: ../../../src/uibase.cpp:896
-msgid "&Edit..."
-msgstr "编辑(&E)..."
-
-#: ../../../src/uibase.cpp:787
-#: ../../../src/uibase.cpp:899
-msgid " &New Address... "
-msgstr " 新建地址(&N)..."
-
-#: ../../../src/uibase.cpp:859
-msgid "Sending"
-msgstr "发送人地址"
-
-#: ../../../src/uibase.cpp:867
-msgid "These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."
-msgstr "这些是您用来接收付款的 Bitcoin 地址。 您可以给每一个付款人一个不同的地址从而可以最终每一笔交易是谁支付的。 下面高亮的地址是您的主窗口正在使用的地址。"
-
-#: ../../../src/uibase.cpp:880
-msgid "Receiving"
-msgstr "我的接收地址"
-
-#: ../../../src/uibase.cpp:890
-msgid "&Delete"
-msgstr "删除(&D)"
-
-#: ../../../src/util.cpp:870
-msgid "Warning: Please check that your computer's date and time are correct.  If your clock is wrong Bitcoin will not work properly."
-msgstr "警告: 请检查您的电脑日期和时间是否正确。 如果您的时钟不正确 Bitcoin 将无法正常工作。"
-
-#: ../../../src/util.cpp:904
-msgid "beta"
-msgstr "测试版"
-
-#: ../../../src/wallet.cpp:1073
-msgid "Error: Wallet locked, unable to create transaction  "
-msgstr "错误: 钱包已锁定,无法创建交易  "
-
-#: ../../../src/wallet.cpp:1081
-#, c-format
-msgid "Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds  "
-msgstr "错误: 这个交易因为近期收到支付的数量,难度或者使用而需要支付至少 %s 交易佣金 "
-
-#: ../../../src/wallet.cpp:1083
-msgid "Error: Transaction creation failed  "
-msgstr "错误: 交易创建失败"
-
-#: ../../../src/wallet.cpp:1092
-msgid "Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."
-msgstr "错误: 交易被拒绝。 这可能是因为您账户里的一些货币应经被使用,比如您使用了一个复制的 wallet.dat 文件,一些货币在另一个副本里支付了但是没有在这里更新。"
-
-#: ../../../src/wallet.cpp:1104
-msgid "Invalid amount"
-msgstr "无效金额"
-
-#: ../../../src/uibase.h:151
-msgid "Transaction Details"
-msgstr "交易详情"
-
-#: ../../../src/uibase.h:203
-msgid "Options"
-msgstr "选项"
-
-#: ../../../src/uibase.h:232
-msgid "About Bitcoin"
-msgstr "关于 Bitcoin"
-
-#: ../../../src/uibase.h:341
-msgid "Your Bitcoin Addresses"
-msgstr "您的 Bitcoin 地址"
-
-#~ msgid "Invalid bitcoin address"
-#~ msgstr "无效 bitcoin 地址"
diff --git a/scripts/qt/extract_strings_qt.py b/scripts/qt/extract_strings_qt.py
new file mode 100755 (executable)
index 0000000..b047869
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+'''
+Extract _("...") strings for translation and convert to Qt4 stringdefs so that
+they can be picked up by Qt linguist.
+'''
+from subprocess import Popen, PIPE
+
+OUT_CPP="src/qt/bitcoinstrings.cpp"
+EMPTY=['""']
+
+def parse_po(text):
+    """
+    Parse 'po' format produced by xgettext.
+    Return a list of (msgid,msgstr) tuples.
+    """
+    messages = []
+    msgid = []
+    msgstr = []
+    in_msgid = False
+    in_msgstr = False
+
+    for line in text.split('\n'):
+        line = line.rstrip('\r')
+        if line.startswith('msgid '):
+            if in_msgstr:
+                messages.append((msgid, msgstr))
+                in_msgstr = False
+            # message start
+            in_msgid = True
+            
+            msgid = [line[6:]]
+        elif line.startswith('msgstr '):
+            in_msgid = False
+            in_msgstr = True
+            msgstr = [line[7:]]
+        elif line.startswith('"'):
+            if in_msgid:
+                msgid.append(line)
+            if in_msgstr:
+                msgstr.append(line)
+
+    if in_msgstr:
+        messages.append((msgid, msgstr))
+
+    return messages
+
+files = ['src/base58.h', 'src/bignum.h', 'src/db.cpp', 'src/db.h', 'src/headers.h', 'src/init.cpp', 'src/init.h', 'src/irc.cpp', 'src/irc.h', 'src/key.h', 'src/main.cpp', 'src/main.h', 'src/net.cpp', 'src/net.h', 'src/noui.h', 'src/script.cpp', 'src/script.h', 'src/serialize.h', 'src/strlcpy.h', 'src/uint256.h', 'src/util.cpp', 'src/util.h']
+
+# xgettext -n --keyword=_ $FILES
+child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE)
+(out, err) = child.communicate()
+
+messages = parse_po(out) 
+
+f = open(OUT_CPP, 'w')
+f.write("""#include <QtGlobal>
+// Automatically generated by extract_strings.py
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+""")
+f.write('static const char UNUSED *bitcoin_strings[] = {')
+for (msgid, msgstr) in messages:
+    if msgid != EMPTY:
+        f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid)))
+f.write('};')
+f.close()
diff --git a/scripts/qt/img/reload.xcf b/scripts/qt/img/reload.xcf
new file mode 100644 (file)
index 0000000..dc8be62
Binary files /dev/null and b/scripts/qt/img/reload.xcf differ
diff --git a/scripts/qt/make_spinner.py b/scripts/qt/make_spinner.py
new file mode 100755 (executable)
index 0000000..136aff3
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# W.J. van der Laan, 2011
+# Make spinning .mng animation from a .png
+# Requires imagemagick 6.7+
+from __future__ import division
+from os import path
+from PIL import Image
+from subprocess import Popen
+
+SRC='img/reload_scaled.png'
+DST='../../src/qt/res/movies/update_spinner.mng'
+TMPDIR='/tmp'
+TMPNAME='tmp-%03i.png'
+NUMFRAMES=35
+FRAMERATE=10.0
+CONVERT='convert'
+CLOCKWISE=True
+DSIZE=(16,16)
+
+im_src = Image.open(SRC)
+
+if CLOCKWISE:
+    im_src = im_src.transpose(Image.FLIP_LEFT_RIGHT)
+
+def frame_to_filename(frame):
+    return path.join(TMPDIR, TMPNAME % frame)
+
+frame_files = []
+for frame in xrange(NUMFRAMES):
+    rotation = (frame + 0.5) / NUMFRAMES * 360.0
+    if CLOCKWISE:
+        rotation = -rotation
+    im_new = im_src.rotate(rotation, Image.BICUBIC)
+    im_new.thumbnail(DSIZE, Image.ANTIALIAS)
+    outfile = frame_to_filename(frame)
+    im_new.save(outfile, 'png')
+    frame_files.append(outfile)
+
+p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST])
+p.communicate()
+
+
+
diff --git a/scripts/qt/make_windows_icon.py b/scripts/qt/make_windows_icon.py
new file mode 120000 (symlink)
index 0000000..f51c32a
--- /dev/null
@@ -0,0 +1 @@
+make_windows_icon.sh
\ No newline at end of file
diff --git a/scripts/qt/make_windows_icon.sh b/scripts/qt/make_windows_icon.sh
new file mode 100755 (executable)
index 0000000..bf607b1
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+# create multiresolution windows icon
+ICON_SRC=../../src/qt/res/icons/bitcoin.png
+ICON_DST=../../src/qt/res/icons/bitcoin.ico
+convert ${ICON_SRC} -resize 16x16 bitcoin-16.png
+convert ${ICON_SRC} -resize 32x32 bitcoin-32.png
+convert ${ICON_SRC} -resize 48x48 bitcoin-48.png
+convert bitcoin-16.png bitcoin-32.png bitcoin-48.png ${ICON_DST}
+
index c044083..83be1e0 100644 (file)
@@ -5,7 +5,7 @@ SetCompressor /SOLID lzma
 \r
 # General Symbol Definitions\r
 !define REGKEY "SOFTWARE\$(^Name)"\r
-!define VERSION 0.4.7\r
+!define VERSION 0.5.6\r
 !define COMPANY "Bitcoin project"\r
 !define URL http://www.bitcoin.org/\r
 \r
@@ -20,7 +20,7 @@ SetCompressor /SOLID lzma
 !define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY}\r
 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup\r
 !define MUI_STARTMENUPAGE_DEFAULTFOLDER Bitcoin\r
-!define MUI_FINISHPAGE_RUN $INSTDIR\bitcoin.exe\r
+!define MUI_FINISHPAGE_RUN $INSTDIR\bitcoin-qt.exe\r
 !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"\r
 !define MUI_UNWELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp"\r
 !define MUI_UNFINISHPAGE_NOAUTOCLOSE\r
@@ -45,13 +45,13 @@ Var StartMenuGroup
 !insertmacro MUI_LANGUAGE English\r
 \r
 # Installer attributes\r
-OutFile bitcoin-0.4.7-win32-setup.exe\r
+OutFile bitcoin-0.5.6-win32-setup.exe\r
 InstallDir $PROGRAMFILES\Bitcoin\r
 CRCCheck on\r
 XPStyle on\r
 BrandingText " "\r
 ShowInstDetails show\r
-VIProductVersion 0.4.7.0\r
+VIProductVersion 0.5.6.0\r
 VIAddVersionKey ProductName Bitcoin\r
 VIAddVersionKey ProductVersion "${VERSION}"\r
 VIAddVersionKey CompanyName "${COMPANY}"\r
@@ -66,17 +66,19 @@ ShowUninstDetails show
 Section -Main SEC0000\r
     SetOutPath $INSTDIR\r
     SetOverwrite on\r
-    File ../src/bitcoin.exe\r
+    File ../release/bitcoin-qt.exe\r
     File /oname=license.txt ../COPYING\r
     File /oname=readme.txt ../doc/README_windows.txt\r
     SetOutPath $INSTDIR\daemon\r
     File ../src/bitcoind.exe\r
-    SetOutPath $INSTDIR\locale\r
-    File /r ../locale/*.*\r
     SetOutPath $INSTDIR\src\r
     File /r /x *.exe /x *.o ../src\*.*\r
     SetOutPath $INSTDIR\r
     WriteRegStr HKCU "${REGKEY}\Components" Main 1\r
+\r
+    # Remove old wxwidgets-based-bitcoin executable and locales:\r
+    Delete /REBOOTOK $INSTDIR\bitcoin.exe\r
+    RMDir /r /REBOOTOK $INSTDIR\locale\r
 SectionEnd\r
 \r
 Section -post SEC0001\r
@@ -85,7 +87,7 @@ Section -post SEC0001
     WriteUninstaller $INSTDIR\uninstall.exe\r
     !insertmacro MUI_STARTMENU_WRITE_BEGIN Application\r
     CreateDirectory $SMPROGRAMS\$StartMenuGroup\r
-    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" $INSTDIR\bitcoin.exe\r
+    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" $INSTDIR\bitcoin-qt.exe\r
     CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall Bitcoin.lnk" $INSTDIR\uninstall.exe\r
     !insertmacro MUI_STARTMENU_WRITE_END\r
     WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"\r
@@ -113,11 +115,10 @@ done${UNSECTION_ID}:
 \r
 # Uninstaller sections\r
 Section /o -un.Main UNSEC0000\r
-    Delete /REBOOTOK $INSTDIR\bitcoin.exe\r
+    Delete /REBOOTOK $INSTDIR\bitcoin-qt.exe\r
     Delete /REBOOTOK $INSTDIR\license.txt\r
     Delete /REBOOTOK $INSTDIR\readme.txt\r
     RMDir /r /REBOOTOK $INSTDIR\daemon\r
-    RMDir /r /REBOOTOK $INSTDIR\locale\r
     RMDir /r /REBOOTOK $INSTDIR\src\r
     DeleteRegValue HKCU "${REGKEY}\Components" Main\r
 SectionEnd\r
diff --git a/share/uiproject.fbp b/share/uiproject.fbp
deleted file mode 100644 (file)
index 7d2c258..0000000
+++ /dev/null
@@ -1,6388 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\r
-<wxFormBuilder_Project>\r
-    <FileVersion major="1" minor="9" />\r
-    <object class="Project" expanded="1">\r
-        <property name="class_decoration"></property>\r
-        <property name="code_generation">C++</property>\r
-        <property name="disconnect_events">1</property>\r
-        <property name="encoding">UTF-8</property>\r
-        <property name="event_generation">connect</property>\r
-        <property name="event_handler">impl_virtual</property>\r
-        <property name="file">uibase</property>\r
-        <property name="first_id">1000</property>\r
-        <property name="help_provider">none</property>\r
-        <property name="internationalize">1</property>\r
-        <property name="name"></property>\r
-        <property name="namespace"></property>\r
-        <property name="path">.</property>\r
-        <property name="precompiled_header"></property>\r
-        <property name="relative_path">1</property>\r
-        <property name="use_enum">0</property>\r
-        <property name="use_microsoft_bom">0</property>\r
-        <object class="Frame" expanded="0">\r
-            <property name="bg">wxSYS_COLOUR_BTNFACE</property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_MAINFRAME</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CMainFrameBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">723,484</property>\r
-            <property name="style">wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Bitcoin</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style">wxTAB_TRAVERSAL</property>\r
-            <property name="xrc_skip_sizer">1</property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose">OnClose</event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize">OnIconize</event>\r
-            <event name="OnIdle">OnIdle</event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents">OnMouseEvents</event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint">OnPaint</event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxMenuBar" expanded="1">\r
-                <property name="bg"></property>\r
-                <property name="context_help"></property>\r
-                <property name="enabled">1</property>\r
-                <property name="fg"></property>\r
-                <property name="font"></property>\r
-                <property name="hidden">0</property>\r
-                <property name="id">wxID_ANY</property>\r
-                <property name="label">MyMenuBar</property>\r
-                <property name="maximum_size"></property>\r
-                <property name="minimum_size"></property>\r
-                <property name="name">m_menubar</property>\r
-                <property name="permission">protected</property>\r
-                <property name="pos"></property>\r
-                <property name="size"></property>\r
-                <property name="style"></property>\r
-                <property name="subclass"></property>\r
-                <property name="tooltip"></property>\r
-                <property name="validator_data_type"></property>\r
-                <property name="validator_style">wxFILTER_NONE</property>\r
-                <property name="validator_type">wxDefaultValidator</property>\r
-                <property name="validator_variable"></property>\r
-                <property name="window_extra_style"></property>\r
-                <property name="window_name"></property>\r
-                <property name="window_style"></property>\r
-                <event name="OnChar"></event>\r
-                <event name="OnEnterWindow"></event>\r
-                <event name="OnEraseBackground"></event>\r
-                <event name="OnKeyDown"></event>\r
-                <event name="OnKeyUp"></event>\r
-                <event name="OnKillFocus"></event>\r
-                <event name="OnLeaveWindow"></event>\r
-                <event name="OnLeftDClick"></event>\r
-                <event name="OnLeftDown"></event>\r
-                <event name="OnLeftUp"></event>\r
-                <event name="OnMiddleDClick"></event>\r
-                <event name="OnMiddleDown"></event>\r
-                <event name="OnMiddleUp"></event>\r
-                <event name="OnMotion"></event>\r
-                <event name="OnMouseEvents"></event>\r
-                <event name="OnMouseWheel"></event>\r
-                <event name="OnPaint"></event>\r
-                <event name="OnRightDClick"></event>\r
-                <event name="OnRightDown"></event>\r
-                <event name="OnRightUp"></event>\r
-                <event name="OnSetFocus"></event>\r
-                <event name="OnSize"></event>\r
-                <event name="OnUpdateUI"></event>\r
-                <object class="wxMenu" expanded="1">\r
-                    <property name="label">&amp;File</property>\r
-                    <property name="name">m_menuFile</property>\r
-                    <property name="permission">protected</property>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_EXIT</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">E&amp;xit</property>\r
-                        <property name="name">m_menuFileExit</property>\r
-                        <property name="permission">none</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuFileExit</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="wxMenu" expanded="1">\r
-                    <property name="label">&amp;Settings</property>\r
-                    <property name="name">m_menuOptions</property>\r
-                    <property name="permission">public</property>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">&amp;Your Receiving Addresses...</property>\r
-                        <property name="name">m_menuOptionsChangeYourAddress</property>\r
-                        <property name="permission">none</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuOptionsChangeYourAddress</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">&amp;Encrypt Wallet...</property>\r
-                        <property name="name">m_menuOptionsEncryptWallet</property>\r
-                        <property name="permission">public</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuOptionsEncryptWallet</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">&amp;Change Wallet Encryption Passphrase...</property>\r
-                        <property name="name">m_menuOptionsChangeWalletPassphrase</property>\r
-                        <property name="permission">public</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuOptionsChangeWalletPassphrase</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_PREFERENCES</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">&amp;Options...</property>\r
-                        <property name="name">m_menuOptionsOptions</property>\r
-                        <property name="permission">none</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuOptionsOptions</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="wxMenu" expanded="1">\r
-                    <property name="label">&amp;Help</property>\r
-                    <property name="name">m_menuHelp</property>\r
-                    <property name="permission">protected</property>\r
-                    <object class="wxMenuItem" expanded="1">\r
-                        <property name="bitmap"></property>\r
-                        <property name="checked">0</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="help"></property>\r
-                        <property name="id">wxID_ABOUT</property>\r
-                        <property name="kind">wxITEM_NORMAL</property>\r
-                        <property name="label">&amp;About...</property>\r
-                        <property name="name">m_menuHelpAbout</property>\r
-                        <property name="permission">none</property>\r
-                        <property name="shortcut"></property>\r
-                        <property name="unchecked_bitmap"></property>\r
-                        <event name="OnMenuSelection">OnMenuHelpAbout</event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-            <object class="wxToolBar" expanded="1">\r
-                <property name="bg"></property>\r
-                <property name="bitmapsize">20,20</property>\r
-                <property name="context_help"></property>\r
-                <property name="enabled">1</property>\r
-                <property name="fg"></property>\r
-                <property name="font">,90,90,-1,70,0</property>\r
-                <property name="hidden">0</property>\r
-                <property name="id">wxID_ANY</property>\r
-                <property name="margins"></property>\r
-                <property name="maximum_size"></property>\r
-                <property name="minimum_size"></property>\r
-                <property name="name">m_toolBar</property>\r
-                <property name="packing">1</property>\r
-                <property name="permission">protected</property>\r
-                <property name="pos"></property>\r
-                <property name="separation">1</property>\r
-                <property name="size">-1,-1</property>\r
-                <property name="style">wxTB_FLAT|wxTB_HORZ_TEXT</property>\r
-                <property name="subclass"></property>\r
-                <property name="tooltip"></property>\r
-                <property name="validator_data_type"></property>\r
-                <property name="validator_style">wxFILTER_NONE</property>\r
-                <property name="validator_type">wxDefaultValidator</property>\r
-                <property name="validator_variable"></property>\r
-                <property name="window_extra_style"></property>\r
-                <property name="window_name"></property>\r
-                <property name="window_style"></property>\r
-                <event name="OnChar"></event>\r
-                <event name="OnEnterWindow"></event>\r
-                <event name="OnEraseBackground"></event>\r
-                <event name="OnKeyDown"></event>\r
-                <event name="OnKeyUp"></event>\r
-                <event name="OnKillFocus"></event>\r
-                <event name="OnLeaveWindow"></event>\r
-                <event name="OnLeftDClick"></event>\r
-                <event name="OnLeftDown"></event>\r
-                <event name="OnLeftUp"></event>\r
-                <event name="OnMiddleDClick"></event>\r
-                <event name="OnMiddleDown"></event>\r
-                <event name="OnMiddleUp"></event>\r
-                <event name="OnMotion"></event>\r
-                <event name="OnMouseEvents"></event>\r
-                <event name="OnMouseWheel"></event>\r
-                <event name="OnPaint"></event>\r
-                <event name="OnRightDClick"></event>\r
-                <event name="OnRightDown"></event>\r
-                <event name="OnRightUp"></event>\r
-                <event name="OnSetFocus"></event>\r
-                <event name="OnSize"></event>\r
-                <event name="OnUpdateUI"></event>\r
-                <object class="tool" expanded="1">\r
-                    <property name="bitmap">xpm/send20.xpm; Load From File</property>\r
-                    <property name="id">wxID_BUTTONSEND</property>\r
-                    <property name="kind">wxITEM_NORMAL</property>\r
-                    <property name="label">Send Coins</property>\r
-                    <property name="name">m_tool1</property>\r
-                    <property name="statusbar"></property>\r
-                    <property name="tooltip"></property>\r
-                    <event name="OnMenuSelection"></event>\r
-                    <event name="OnToolClicked">OnButtonSend</event>\r
-                    <event name="OnToolEnter"></event>\r
-                    <event name="OnToolRClicked"></event>\r
-                    <event name="OnUpdateUI"></event>\r
-                </object>\r
-                <object class="tool" expanded="1">\r
-                    <property name="bitmap">xpm/addressbook20.xpm; Load From File</property>\r
-                    <property name="id">wxID_BUTTONRECEIVE</property>\r
-                    <property name="kind">wxITEM_NORMAL</property>\r
-                    <property name="label">Address Book</property>\r
-                    <property name="name">m_tool2</property>\r
-                    <property name="statusbar"></property>\r
-                    <property name="tooltip"></property>\r
-                    <event name="OnMenuSelection"></event>\r
-                    <event name="OnToolClicked">OnButtonAddressBook</event>\r
-                    <event name="OnToolEnter"></event>\r
-                    <event name="OnToolRClicked"></event>\r
-                    <event name="OnUpdateUI"></event>\r
-                </object>\r
-            </object>\r
-            <object class="wxStatusBar" expanded="1">\r
-                <property name="bg"></property>\r
-                <property name="context_help"></property>\r
-                <property name="enabled">1</property>\r
-                <property name="fg"></property>\r
-                <property name="fields">1</property>\r
-                <property name="font"></property>\r
-                <property name="hidden">0</property>\r
-                <property name="id">wxID_ANY</property>\r
-                <property name="maximum_size"></property>\r
-                <property name="minimum_size"></property>\r
-                <property name="name">m_statusBar</property>\r
-                <property name="permission">public</property>\r
-                <property name="pos"></property>\r
-                <property name="size"></property>\r
-                <property name="style">wxST_SIZEGRIP</property>\r
-                <property name="subclass"></property>\r
-                <property name="tooltip"></property>\r
-                <property name="validator_data_type"></property>\r
-                <property name="validator_style">wxFILTER_NONE</property>\r
-                <property name="validator_type">wxDefaultValidator</property>\r
-                <property name="validator_variable"></property>\r
-                <property name="window_extra_style"></property>\r
-                <property name="window_name"></property>\r
-                <property name="window_style"></property>\r
-                <event name="OnChar"></event>\r
-                <event name="OnEnterWindow"></event>\r
-                <event name="OnEraseBackground"></event>\r
-                <event name="OnKeyDown"></event>\r
-                <event name="OnKeyUp"></event>\r
-                <event name="OnKillFocus"></event>\r
-                <event name="OnLeaveWindow"></event>\r
-                <event name="OnLeftDClick"></event>\r
-                <event name="OnLeftDown"></event>\r
-                <event name="OnLeftUp"></event>\r
-                <event name="OnMiddleDClick"></event>\r
-                <event name="OnMiddleDown"></event>\r
-                <event name="OnMiddleUp"></event>\r
-                <event name="OnMotion"></event>\r
-                <event name="OnMouseEvents"></event>\r
-                <event name="OnMouseWheel"></event>\r
-                <event name="OnPaint"></event>\r
-                <event name="OnRightDClick"></event>\r
-                <event name="OnRightDown"></event>\r
-                <event name="OnRightUp"></event>\r
-                <event name="OnSetFocus"></event>\r
-                <event name="OnSize"></event>\r
-                <event name="OnUpdateUI"></event>\r
-            </object>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer2</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="spacer" expanded="1">\r
-                        <property name="height">2</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="width">0</property>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer85</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label">Your Bitcoin Address:</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticText32</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxTextCtrl" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_TEXTCTRLADDRESS</property>\r
-                                <property name="maximum_size">-1,-1</property>\r
-                                <property name="maxlength">0</property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_textCtrlAddress</property>\r
-                                <property name="permission">public</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">340,-1</property>\r
-                                <property name="style">wxTE_READONLY</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="value"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown">OnKeyDown</event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents">OnMouseEventsAddress</event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus">OnSetFocusAddress</event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnText"></event>\r
-                                <event name="OnTextEnter"></event>\r
-                                <event name="OnTextMaxLen"></event>\r
-                                <event name="OnTextURL"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxRIGHT|wxALIGN_CENTER_VERTICAL</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONNEW</property>\r
-                                <property name="label"> &amp;New... </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_buttonNew</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style">wxBU_EXACTFIT</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonNew</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONCOPY</property>\r
-                                <property name="label"> &amp;Copy to Clipboard </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_buttonCopy</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style">wxBU_EXACTFIT</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCopy</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer3</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND|wxALL</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxBoxSizer" expanded="1">\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">bSizer66</property>\r
-                                <property name="orient">wxHORIZONTAL</property>\r
-                                <property name="permission">none</property>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxStaticText" expanded="1">\r
-                                        <property name="bg"></property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font"></property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_ANY</property>\r
-                                        <property name="label">Balance:</property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_staticText41</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size">-1,15</property>\r
-                                        <property name="style"></property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <property name="wrap">-1</property>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown"></event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxStaticText" expanded="1">\r
-                                        <property name="bg">255,255,255</property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font">,90,90,8,70,0</property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_ANY</property>\r
-                                        <property name="label"></property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_staticTextBalance</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size">120,15</property>\r
-                                        <property name="style">wxALIGN_RIGHT|wxST_NO_AUTORESIZE</property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <property name="wrap">-1</property>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown"></event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_BOTTOM|wxTOP|wxRIGHT|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxChoice" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="choices">&quot; All&quot; &quot; Sent&quot; &quot; Received&quot; &quot; In Progress&quot;</property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_choiceFilter</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="selection">0</property>\r
-                                <property name="size">110,-1</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnChoice"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxNotebook" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="bitmapsize"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_notebook</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnNotebookPageChanged">OnNotebookPageChanged</event>\r
-                        <event name="OnNotebookPageChanging"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">All Transactions</property>\r
-                            <property name="select">1</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panel9</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer11</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlAll</property>\r
-                                            <property name="permission">public</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag">OnListColBeginDrag</event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit"></event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected"></event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint">OnPaintListCtrl</event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">Sent/Received</property>\r
-                            <property name="select">0</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panel91</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer111</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlSentReceived</property>\r
-                                            <property name="permission">public</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag">OnListColBeginDrag</event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit"></event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected"></event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint">OnPaintListCtrl</event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">Sent</property>\r
-                            <property name="select">0</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panel92</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer112</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlSent</property>\r
-                                            <property name="permission">public</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag">OnListColBeginDrag</event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit"></event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected"></event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint">OnPaintListCtrl</event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">Received</property>\r
-                            <property name="select">0</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panel93</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer113</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlReceived</property>\r
-                                            <property name="permission">public</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag">OnListColBeginDrag</event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit"></event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected"></event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint">OnPaintListCtrl</event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CTxDetailsDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">620,450</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Transaction Details</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose"></event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer64</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer66</property>\r
-                        <property name="orient">wxVERTICAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxHtmlWindow" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_htmlWin</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style">wxHW_SCROLLBAR_AUTO</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnHtmlCellClicked"></event>\r
-                                <event name="OnHtmlCellHover"></event>\r
-                                <event name="OnHtmlLinkClicked"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxALIGN_RIGHT</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer65</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_OK</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">COptionsDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">540,360</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Options</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose"></event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer55</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">9</property>\r
-                    <property name="flag">wxEXPAND|wxALL</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer66</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND|wxRIGHT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxListBox" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="choices"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_listBox</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">110,-1</property>\r
-                                <property name="style">wxLB_NEEDED_SB|wxLB_SINGLE</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnListBox">OnListBox</event>\r
-                                <event name="OnListBoxDClick"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND|wxLEFT</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxScrolledWindow" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_scrolledWindow</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="scroll_rate_x">5</property>\r
-                                <property name="scroll_rate_y">5</property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer63</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="wxPanel" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_panelMain</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                            <object class="wxBoxSizer" expanded="1">\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">bSizer69</property>\r
-                                                <property name="orient">wxVERTICAL</property>\r
-                                                <property name="permission">none</property>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxEXPAND</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="spacer" expanded="1">\r
-                                                        <property name="height">16</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="width">0</property>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxCheckBox" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="checked">0</property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">&amp;Start Bitcoin on system startup</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_checkBoxStartOnSystemStartup</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnCheckBox"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxCheckBox" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="checked">0</property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">&amp;Minimize to the tray instead of the taskbar</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_checkBoxMinimizeToTray</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnCheckBox">OnCheckBoxMinimizeToTray</event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxCheckBox" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="checked">0</property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">Map port using &amp;UPnP</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_checkBoxUseUPnP</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnCheckBox"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxCheckBox" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="checked">0</property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">M&amp;inimize to the tray on close</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_checkBoxMinimizeOnClose</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnCheckBox"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxEXPAND</property>\r
-                                                    <property name="proportion">1</property>\r
-                                                    <object class="wxBoxSizer" expanded="1">\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">bSizer102</property>\r
-                                                        <property name="orient">wxHORIZONTAL</property>\r
-                                                        <property name="permission">none</property>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxCheckBox" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="checked">0</property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_ANY</property>\r
-                                                                <property name="label">&amp;Connect through socks4 proxy (requires restart to apply): </property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_checkBoxUseProxy</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size"></property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnCheckBox">OnCheckBoxUseProxy</event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus"></event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxEXPAND</property>\r
-                                                    <property name="proportion">1</property>\r
-                                                    <object class="wxBoxSizer" expanded="1">\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">bSizer103</property>\r
-                                                        <property name="orient">wxHORIZONTAL</property>\r
-                                                        <property name="permission">none</property>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag"></property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="spacer" expanded="1">\r
-                                                                <property name="height">0</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="width">18</property>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxStaticText" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_ANY</property>\r
-                                                                <property name="label">Proxy &amp;IP:</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_staticTextProxyIP</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size"></property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <property name="wrap">-1</property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus"></event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALIGN_CENTER_VERTICAL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxTextCtrl" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_PROXYIP</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="maxlength">15</property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_textCtrlProxyIP</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size">140,-1</property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="value"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus">OnKillFocusProxy</event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnText"></event>\r
-                                                                <event name="OnTextEnter"></event>\r
-                                                                <event name="OnTextMaxLen"></event>\r
-                                                                <event name="OnTextURL"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxStaticText" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_ANY</property>\r
-                                                                <property name="label"> &amp;Port:</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_staticTextProxyPort</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size"></property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <property name="wrap">-1</property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus"></event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALIGN_CENTER_VERTICAL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxTextCtrl" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_PROXYPORT</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="maxlength">5</property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_textCtrlProxyPort</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size">55,-1</property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="value"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus">OnKillFocusProxy</event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnText"></event>\r
-                                                                <event name="OnTextEnter"></event>\r
-                                                                <event name="OnTextMaxLen"></event>\r
-                                                                <event name="OnTextURL"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag"></property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="spacer" expanded="1">\r
-                                                        <property name="height">1</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="width">0</property>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxStaticText" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended.</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_staticText32</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <property name="wrap">365</property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxEXPAND</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxBoxSizer" expanded="1">\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">bSizer56</property>\r
-                                                        <property name="orient">wxHORIZONTAL</property>\r
-                                                        <property name="permission">none</property>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxStaticText" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_ANY</property>\r
-                                                                <property name="label">Pay transaction fee:</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_staticText31</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size"></property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <property name="wrap">-1</property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus"></event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                        <object class="sizeritem" expanded="1">\r
-                                                            <property name="border">5</property>\r
-                                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                                                            <property name="proportion">0</property>\r
-                                                            <object class="wxTextCtrl" expanded="1">\r
-                                                                <property name="bg"></property>\r
-                                                                <property name="context_help"></property>\r
-                                                                <property name="enabled">1</property>\r
-                                                                <property name="fg"></property>\r
-                                                                <property name="font"></property>\r
-                                                                <property name="hidden">0</property>\r
-                                                                <property name="id">wxID_TRANSACTIONFEE</property>\r
-                                                                <property name="maximum_size"></property>\r
-                                                                <property name="maxlength">0</property>\r
-                                                                <property name="minimum_size"></property>\r
-                                                                <property name="name">m_textCtrlTransactionFee</property>\r
-                                                                <property name="permission">protected</property>\r
-                                                                <property name="pos"></property>\r
-                                                                <property name="size">70,-1</property>\r
-                                                                <property name="style"></property>\r
-                                                                <property name="subclass"></property>\r
-                                                                <property name="tooltip"></property>\r
-                                                                <property name="validator_data_type"></property>\r
-                                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                                <property name="validator_variable"></property>\r
-                                                                <property name="value"></property>\r
-                                                                <property name="window_extra_style"></property>\r
-                                                                <property name="window_name"></property>\r
-                                                                <property name="window_style"></property>\r
-                                                                <event name="OnChar"></event>\r
-                                                                <event name="OnEnterWindow"></event>\r
-                                                                <event name="OnEraseBackground"></event>\r
-                                                                <event name="OnKeyDown"></event>\r
-                                                                <event name="OnKeyUp"></event>\r
-                                                                <event name="OnKillFocus">OnKillFocusTransactionFee</event>\r
-                                                                <event name="OnLeaveWindow"></event>\r
-                                                                <event name="OnLeftDClick"></event>\r
-                                                                <event name="OnLeftDown"></event>\r
-                                                                <event name="OnLeftUp"></event>\r
-                                                                <event name="OnMiddleDClick"></event>\r
-                                                                <event name="OnMiddleDown"></event>\r
-                                                                <event name="OnMiddleUp"></event>\r
-                                                                <event name="OnMotion"></event>\r
-                                                                <event name="OnMouseEvents"></event>\r
-                                                                <event name="OnMouseWheel"></event>\r
-                                                                <event name="OnPaint"></event>\r
-                                                                <event name="OnRightDClick"></event>\r
-                                                                <event name="OnRightDown"></event>\r
-                                                                <event name="OnRightUp"></event>\r
-                                                                <event name="OnSetFocus"></event>\r
-                                                                <event name="OnSize"></event>\r
-                                                                <event name="OnText"></event>\r
-                                                                <event name="OnTextEnter"></event>\r
-                                                                <event name="OnTextMaxLen"></event>\r
-                                                                <event name="OnTextURL"></event>\r
-                                                                <event name="OnUpdateUI"></event>\r
-                                                            </object>\r
-                                                        </object>\r
-                                                    </object>\r
-                                                </object>\r
-                                            </object>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="wxPanel" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_panelTest2</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                            <object class="wxBoxSizer" expanded="1">\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">bSizer64</property>\r
-                                                <property name="orient">wxVERTICAL</property>\r
-                                                <property name="permission">none</property>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxEXPAND</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="spacer" expanded="1">\r
-                                                        <property name="height">16</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="width">0</property>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxStaticText" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">// [don&apos;t translate] Test panel 2 for future expansion</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_staticText321</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <property name="wrap">-1</property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALL</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxStaticText" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font"></property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">// [don&apos;t translate] Let&apos;s not start multiple pages until the first page is filled up</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_staticText69</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <property name="wrap">-1</property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                            </object>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxALIGN_RIGHT</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer58</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_OK</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_APPLY</property>\r
-                                <property name="label">&amp;Apply</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonApply</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonApply</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CAboutDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">532,333</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">About Bitcoin</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose"></event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer63</property>\r
-                <property name="orient">wxHORIZONTAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag"></property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxStaticBitmap" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="bitmap">xpm/about.xpm; Load From File</property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_bitmap</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND|wxLEFT</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer60</property>\r
-                        <property name="orient">wxVERTICAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxBoxSizer" expanded="1">\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">bSizer62</property>\r
-                                <property name="orient">wxHORIZONTAL</property>\r
-                                <property name="permission">none</property>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxEXPAND</property>\r
-                                    <property name="proportion">1</property>\r
-                                    <object class="wxBoxSizer" expanded="1">\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">bSizer631</property>\r
-                                        <property name="orient">wxVERTICAL</property>\r
-                                        <property name="permission">none</property>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="spacer" expanded="1">\r
-                                                <property name="height">65</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="width">0</property>\r
-                                            </object>\r
-                                        </object>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="wxBoxSizer" expanded="1">\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">bSizer64</property>\r
-                                                <property name="orient">wxHORIZONTAL</property>\r
-                                                <property name="permission">none</property>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALIGN_BOTTOM|wxTOP|wxBOTTOM|wxLEFT</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxStaticText" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font">Tahoma,90,92,10,74,0</property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">Bitcoin </property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_staticText40</property>\r
-                                                        <property name="permission">protected</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <property name="wrap">-1</property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                                <object class="sizeritem" expanded="1">\r
-                                                    <property name="border">5</property>\r
-                                                    <property name="flag">wxALIGN_BOTTOM|wxTOP|wxBOTTOM|wxRIGHT</property>\r
-                                                    <property name="proportion">0</property>\r
-                                                    <object class="wxStaticText" expanded="1">\r
-                                                        <property name="bg"></property>\r
-                                                        <property name="context_help"></property>\r
-                                                        <property name="enabled">1</property>\r
-                                                        <property name="fg"></property>\r
-                                                        <property name="font">Tahoma,90,90,10,74,0</property>\r
-                                                        <property name="hidden">0</property>\r
-                                                        <property name="id">wxID_ANY</property>\r
-                                                        <property name="label">version</property>\r
-                                                        <property name="maximum_size"></property>\r
-                                                        <property name="minimum_size"></property>\r
-                                                        <property name="name">m_staticTextVersion</property>\r
-                                                        <property name="permission">public</property>\r
-                                                        <property name="pos"></property>\r
-                                                        <property name="size"></property>\r
-                                                        <property name="style"></property>\r
-                                                        <property name="subclass"></property>\r
-                                                        <property name="tooltip"></property>\r
-                                                        <property name="validator_data_type"></property>\r
-                                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                                        <property name="validator_variable"></property>\r
-                                                        <property name="window_extra_style"></property>\r
-                                                        <property name="window_name"></property>\r
-                                                        <property name="window_style"></property>\r
-                                                        <property name="wrap">-1</property>\r
-                                                        <event name="OnChar"></event>\r
-                                                        <event name="OnEnterWindow"></event>\r
-                                                        <event name="OnEraseBackground"></event>\r
-                                                        <event name="OnKeyDown"></event>\r
-                                                        <event name="OnKeyUp"></event>\r
-                                                        <event name="OnKillFocus"></event>\r
-                                                        <event name="OnLeaveWindow"></event>\r
-                                                        <event name="OnLeftDClick"></event>\r
-                                                        <event name="OnLeftDown"></event>\r
-                                                        <event name="OnLeftUp"></event>\r
-                                                        <event name="OnMiddleDClick"></event>\r
-                                                        <event name="OnMiddleDown"></event>\r
-                                                        <event name="OnMiddleUp"></event>\r
-                                                        <event name="OnMotion"></event>\r
-                                                        <event name="OnMouseEvents"></event>\r
-                                                        <event name="OnMouseWheel"></event>\r
-                                                        <event name="OnPaint"></event>\r
-                                                        <event name="OnRightDClick"></event>\r
-                                                        <event name="OnRightDown"></event>\r
-                                                        <event name="OnRightUp"></event>\r
-                                                        <event name="OnSetFocus"></event>\r
-                                                        <event name="OnSize"></event>\r
-                                                        <event name="OnUpdateUI"></event>\r
-                                                    </object>\r
-                                                </object>\r
-                                            </object>\r
-                                        </object>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="spacer" expanded="1">\r
-                                                <property name="height">4</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="width">0</property>\r
-                                            </object>\r
-                                        </object>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxALL</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="wxStaticText" expanded="1">\r
-                                                <property name="bg"></property>\r
-                                                <property name="context_help"></property>\r
-                                                <property name="enabled">1</property>\r
-                                                <property name="fg"></property>\r
-                                                <property name="font"></property>\r
-                                                <property name="hidden">0</property>\r
-                                                <property name="id">wxID_ANY</property>\r
-                                                <property name="label">Copyright (c) 2009-2011 Bitcoin Developers&#x0A;&#x0A;This is experimental software.&#x0A;&#x0A;Distributed under the MIT/X11 software license, see the accompanying file &#x0A;license.txt or http://www.opensource.org/licenses/mit-license.php.&#x0A;&#x0A;This product includes software developed by the OpenSSL Project for use in the &#x0A;OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by &#x0A;Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</property>\r
-                                                <property name="maximum_size"></property>\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">m_staticTextMain</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="pos"></property>\r
-                                                <property name="size"></property>\r
-                                                <property name="style"></property>\r
-                                                <property name="subclass"></property>\r
-                                                <property name="tooltip"></property>\r
-                                                <property name="validator_data_type"></property>\r
-                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                <property name="validator_variable"></property>\r
-                                                <property name="window_extra_style"></property>\r
-                                                <property name="window_name"></property>\r
-                                                <property name="window_style"></property>\r
-                                                <property name="wrap">-1</property>\r
-                                                <event name="OnChar"></event>\r
-                                                <event name="OnEnterWindow"></event>\r
-                                                <event name="OnEraseBackground"></event>\r
-                                                <event name="OnKeyDown"></event>\r
-                                                <event name="OnKeyUp"></event>\r
-                                                <event name="OnKillFocus"></event>\r
-                                                <event name="OnLeaveWindow"></event>\r
-                                                <event name="OnLeftDClick"></event>\r
-                                                <event name="OnLeftDown"></event>\r
-                                                <event name="OnLeftUp"></event>\r
-                                                <event name="OnMiddleDClick"></event>\r
-                                                <event name="OnMiddleDown"></event>\r
-                                                <event name="OnMiddleUp"></event>\r
-                                                <event name="OnMotion"></event>\r
-                                                <event name="OnMouseEvents"></event>\r
-                                                <event name="OnMouseWheel"></event>\r
-                                                <event name="OnPaint"></event>\r
-                                                <event name="OnRightDClick"></event>\r
-                                                <event name="OnRightDown"></event>\r
-                                                <event name="OnRightUp"></event>\r
-                                                <event name="OnSetFocus"></event>\r
-                                                <event name="OnSize"></event>\r
-                                                <event name="OnUpdateUI"></event>\r
-                                            </object>\r
-                                        </object>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="spacer" expanded="1">\r
-                                                <property name="height">0</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="width">0</property>\r
-                                            </object>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">2</property>\r
-                            <property name="flag">wxALIGN_RIGHT|wxEXPAND|wxRIGHT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxBoxSizer" expanded="1">\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">bSizer61</property>\r
-                                <property name="orient">wxHORIZONTAL</property>\r
-                                <property name="permission">none</property>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxEXPAND</property>\r
-                                    <property name="proportion">1</property>\r
-                                    <object class="spacer" expanded="1">\r
-                                        <property name="height">0</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="width">0</property>\r
-                                    </object>\r
-                                </object>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">6</property>\r
-                                    <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxButton" expanded="1">\r
-                                        <property name="bg"></property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="default">0</property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font"></property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_OK</property>\r
-                                        <property name="label">OK</property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_buttonOK</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size">-1,-1</property>\r
-                                        <property name="style"></property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <event name="OnButtonClick">OnButtonOK</event>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown"></event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="1">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CSendDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">498,157</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Send Coins</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose"></event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer21</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="spacer" expanded="1">\r
-                        <property name="height">5</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="width">0</property>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND|wxLEFT</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxFlexGridSizer" expanded="1">\r
-                        <property name="cols">2</property>\r
-                        <property name="flexible_direction">wxBOTH</property>\r
-                        <property name="growablecols">1</property>\r
-                        <property name="growablerows"></property>\r
-                        <property name="hgap">0</property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">fgSizer1</property>\r
-                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>\r
-                        <property name="permission">none</property>\r
-                        <property name="rows">0</property>\r
-                        <property name="vgap">0</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label">Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticTextInstructions</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND|wxLEFT</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxBoxSizer" expanded="1">\r
-                                <property name="minimum_size">70,-1</property>\r
-                                <property name="name">bSizer47</property>\r
-                                <property name="orient">wxHORIZONTAL</property>\r
-                                <property name="permission">none</property>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxEXPAND</property>\r
-                                    <property name="proportion">1</property>\r
-                                    <object class="spacer" expanded="1">\r
-                                        <property name="height">0</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="width">0</property>\r
-                                    </object>\r
-                                </object>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxStaticBitmap" expanded="1">\r
-                                        <property name="bg"></property>\r
-                                        <property name="bitmap">xpm/check.xpm; Load From File</property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font"></property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_ANY</property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_bitmapCheckMark</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size">16,16</property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown"></event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxStaticText" expanded="1">\r
-                                        <property name="bg"></property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font"></property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_ANY</property>\r
-                                        <property name="label">Pay &amp;To:</property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_staticText36</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size">-1,-1</property>\r
-                                        <property name="style">wxALIGN_RIGHT</property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <property name="wrap">-1</property>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown"></event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND|wxRIGHT</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="wxBoxSizer" expanded="1">\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">bSizer19</property>\r
-                                <property name="orient">wxHORIZONTAL</property>\r
-                                <property name="permission">none</property>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                                    <property name="proportion">1</property>\r
-                                    <object class="wxTextCtrl" expanded="1">\r
-                                        <property name="bg"></property>\r
-                                        <property name="context_help"></property>\r
-                                        <property name="enabled">1</property>\r
-                                        <property name="fg"></property>\r
-                                        <property name="font"></property>\r
-                                        <property name="hidden">0</property>\r
-                                        <property name="id">wxID_TEXTCTRLPAYTO</property>\r
-                                        <property name="maximum_size"></property>\r
-                                        <property name="maxlength">0</property>\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">m_textCtrlAddress</property>\r
-                                        <property name="permission">protected</property>\r
-                                        <property name="pos"></property>\r
-                                        <property name="size"></property>\r
-                                        <property name="style"></property>\r
-                                        <property name="subclass"></property>\r
-                                        <property name="tooltip"></property>\r
-                                        <property name="validator_data_type"></property>\r
-                                        <property name="validator_style">wxFILTER_NONE</property>\r
-                                        <property name="validator_type">wxDefaultValidator</property>\r
-                                        <property name="validator_variable"></property>\r
-                                        <property name="value"></property>\r
-                                        <property name="window_extra_style"></property>\r
-                                        <property name="window_name"></property>\r
-                                        <property name="window_style"></property>\r
-                                        <event name="OnChar"></event>\r
-                                        <event name="OnEnterWindow"></event>\r
-                                        <event name="OnEraseBackground"></event>\r
-                                        <event name="OnKeyDown">OnKeyDown</event>\r
-                                        <event name="OnKeyUp"></event>\r
-                                        <event name="OnKillFocus"></event>\r
-                                        <event name="OnLeaveWindow"></event>\r
-                                        <event name="OnLeftDClick"></event>\r
-                                        <event name="OnLeftDown"></event>\r
-                                        <event name="OnLeftUp"></event>\r
-                                        <event name="OnMiddleDClick"></event>\r
-                                        <event name="OnMiddleDown"></event>\r
-                                        <event name="OnMiddleUp"></event>\r
-                                        <event name="OnMotion"></event>\r
-                                        <event name="OnMouseEvents"></event>\r
-                                        <event name="OnMouseWheel"></event>\r
-                                        <event name="OnPaint"></event>\r
-                                        <event name="OnRightDClick"></event>\r
-                                        <event name="OnRightDown"></event>\r
-                                        <event name="OnRightUp"></event>\r
-                                        <event name="OnSetFocus"></event>\r
-                                        <event name="OnSize"></event>\r
-                                        <event name="OnText">OnTextAddress</event>\r
-                                        <event name="OnTextEnter"></event>\r
-                                        <event name="OnTextMaxLen"></event>\r
-                                        <event name="OnTextURL"></event>\r
-                                        <event name="OnUpdateUI"></event>\r
-                                    </object>\r
-                                </object>\r
-                                <object class="sizeritem" expanded="1">\r
-                                    <property name="border">5</property>\r
-                                    <property name="flag">wxALIGN_CENTER_VERTICAL</property>\r
-                                    <property name="proportion">0</property>\r
-                                    <object class="wxBoxSizer" expanded="1">\r
-                                        <property name="minimum_size"></property>\r
-                                        <property name="name">bSizer66</property>\r
-                                        <property name="orient">wxHORIZONTAL</property>\r
-                                        <property name="permission">none</property>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="wxButton" expanded="1">\r
-                                                <property name="bg"></property>\r
-                                                <property name="context_help"></property>\r
-                                                <property name="default">0</property>\r
-                                                <property name="enabled">1</property>\r
-                                                <property name="fg"></property>\r
-                                                <property name="font"></property>\r
-                                                <property name="hidden">0</property>\r
-                                                <property name="id">wxID_BUTTONPASTE</property>\r
-                                                <property name="label">&amp;Paste</property>\r
-                                                <property name="maximum_size"></property>\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">m_buttonPaste</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="pos"></property>\r
-                                                <property name="size">-1,-1</property>\r
-                                                <property name="style">wxBU_EXACTFIT</property>\r
-                                                <property name="subclass"></property>\r
-                                                <property name="tooltip"></property>\r
-                                                <property name="validator_data_type"></property>\r
-                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                <property name="validator_variable"></property>\r
-                                                <property name="window_extra_style"></property>\r
-                                                <property name="window_name"></property>\r
-                                                <property name="window_style"></property>\r
-                                                <event name="OnButtonClick">OnButtonPaste</event>\r
-                                                <event name="OnChar"></event>\r
-                                                <event name="OnEnterWindow"></event>\r
-                                                <event name="OnEraseBackground"></event>\r
-                                                <event name="OnKeyDown"></event>\r
-                                                <event name="OnKeyUp"></event>\r
-                                                <event name="OnKillFocus"></event>\r
-                                                <event name="OnLeaveWindow"></event>\r
-                                                <event name="OnLeftDClick"></event>\r
-                                                <event name="OnLeftDown"></event>\r
-                                                <event name="OnLeftUp"></event>\r
-                                                <event name="OnMiddleDClick"></event>\r
-                                                <event name="OnMiddleDown"></event>\r
-                                                <event name="OnMiddleUp"></event>\r
-                                                <event name="OnMotion"></event>\r
-                                                <event name="OnMouseEvents"></event>\r
-                                                <event name="OnMouseWheel"></event>\r
-                                                <event name="OnPaint"></event>\r
-                                                <event name="OnRightDClick"></event>\r
-                                                <event name="OnRightDown"></event>\r
-                                                <event name="OnRightUp"></event>\r
-                                                <event name="OnSetFocus"></event>\r
-                                                <event name="OnSize"></event>\r
-                                                <event name="OnUpdateUI"></event>\r
-                                            </object>\r
-                                        </object>\r
-                                        <object class="sizeritem" expanded="1">\r
-                                            <property name="border">5</property>\r
-                                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND</property>\r
-                                            <property name="proportion">0</property>\r
-                                            <object class="wxButton" expanded="1">\r
-                                                <property name="bg"></property>\r
-                                                <property name="context_help"></property>\r
-                                                <property name="default">0</property>\r
-                                                <property name="enabled">1</property>\r
-                                                <property name="fg"></property>\r
-                                                <property name="font"></property>\r
-                                                <property name="hidden">0</property>\r
-                                                <property name="id">wxID_BUTTONADDRESSBOOK</property>\r
-                                                <property name="label"> Address &amp;Book...</property>\r
-                                                <property name="maximum_size"></property>\r
-                                                <property name="minimum_size"></property>\r
-                                                <property name="name">m_buttonAddress</property>\r
-                                                <property name="permission">protected</property>\r
-                                                <property name="pos"></property>\r
-                                                <property name="size"></property>\r
-                                                <property name="style"></property>\r
-                                                <property name="subclass"></property>\r
-                                                <property name="tooltip"></property>\r
-                                                <property name="validator_data_type"></property>\r
-                                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                                <property name="validator_type">wxDefaultValidator</property>\r
-                                                <property name="validator_variable"></property>\r
-                                                <property name="window_extra_style"></property>\r
-                                                <property name="window_name"></property>\r
-                                                <property name="window_style"></property>\r
-                                                <event name="OnButtonClick">OnButtonAddressBook</event>\r
-                                                <event name="OnChar"></event>\r
-                                                <event name="OnEnterWindow"></event>\r
-                                                <event name="OnEraseBackground"></event>\r
-                                                <event name="OnKeyDown"></event>\r
-                                                <event name="OnKeyUp"></event>\r
-                                                <event name="OnKillFocus"></event>\r
-                                                <event name="OnLeaveWindow"></event>\r
-                                                <event name="OnLeftDClick"></event>\r
-                                                <event name="OnLeftDown"></event>\r
-                                                <event name="OnLeftUp"></event>\r
-                                                <event name="OnMiddleDClick"></event>\r
-                                                <event name="OnMiddleDown"></event>\r
-                                                <event name="OnMiddleUp"></event>\r
-                                                <event name="OnMotion"></event>\r
-                                                <event name="OnMouseEvents"></event>\r
-                                                <event name="OnMouseWheel"></event>\r
-                                                <event name="OnPaint"></event>\r
-                                                <event name="OnRightDClick"></event>\r
-                                                <event name="OnRightDown"></event>\r
-                                                <event name="OnRightUp"></event>\r
-                                                <event name="OnSetFocus"></event>\r
-                                                <event name="OnSize"></event>\r
-                                                <event name="OnUpdateUI"></event>\r
-                                            </object>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT|wxALIGN_RIGHT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label">&amp;Amount:</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticText19</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style">wxALIGN_RIGHT</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxTextCtrl" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font">,90,90,-1,70,0</property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_TEXTCTRLAMOUNT</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="maxlength">20</property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_textCtrlAmount</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">145,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="value"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown">OnKeyDown</event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus">OnKillFocusAmount</event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnText"></event>\r
-                                <event name="OnTextEnter"></event>\r
-                                <event name="OnTextMaxLen"></event>\r
-                                <event name="OnTextURL"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label">T&amp;ransfer:</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticText20</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style">wxALIGN_RIGHT</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxChoice" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="choices">&quot; Standard&quot;</property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_CHOICETRANSFERTYPE</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_choiceTransferType</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="selection">0</property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnChoice"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">3</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="0">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer672</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="0">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer23</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font">,90,90,-1,70,0</property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONSEND</property>\r
-                                <property name="label">&amp;Send</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonSend</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonSend</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CSendingDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">442,151</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Sending...</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose">OnClose</event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint">OnPaint</event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer68</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">8</property>\r
-                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxStaticText" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="label"></property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_staticTextSending</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size">-1,14</property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <property name="wrap">-1</property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">10</property>\r
-                    <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxTextCtrl" expanded="1">\r
-                        <property name="bg">wxSYS_COLOUR_BTNFACE</property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="maxlength">0</property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_textCtrlStatus</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style">wxTE_CENTRE|wxTE_MULTILINE|wxTE_NO_VSCROLL|wxTE_READONLY</property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="value">&#x0A;&#x0A;Connecting...</property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style">wxNO_BORDER</property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnText"></event>\r
-                        <event name="OnTextEnter"></event>\r
-                        <event name="OnTextMaxLen"></event>\r
-                        <event name="OnTextURL"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer69</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">0</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CYourAddressDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">610,390</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Your Bitcoin Addresses</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose">OnClose</event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer68</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="spacer" expanded="1">\r
-                        <property name="height">5</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="width">0</property>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxALL</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxStaticText" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="label">These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window.</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_staticText45</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <property name="wrap">590</property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxALL|wxEXPAND</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxListCtrl" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_LISTCTRL</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_listCtrl</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnListBeginDrag"></event>\r
-                        <event name="OnListBeginLabelEdit"></event>\r
-                        <event name="OnListBeginRDrag"></event>\r
-                        <event name="OnListCacheHint"></event>\r
-                        <event name="OnListColBeginDrag"></event>\r
-                        <event name="OnListColClick"></event>\r
-                        <event name="OnListColDragging"></event>\r
-                        <event name="OnListColEndDrag"></event>\r
-                        <event name="OnListColRightClick"></event>\r
-                        <event name="OnListDeleteAllItems"></event>\r
-                        <event name="OnListDeleteItem"></event>\r
-                        <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
-                        <event name="OnListInsertItem"></event>\r
-                        <event name="OnListItemActivated">OnListItemActivated</event>\r
-                        <event name="OnListItemDeselected"></event>\r
-                        <event name="OnListItemFocused"></event>\r
-                        <event name="OnListItemMiddleClick"></event>\r
-                        <event name="OnListItemRightClick"></event>\r
-                        <event name="OnListItemSelected">OnListItemSelected</event>\r
-                        <event name="OnListKeyDown"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer69</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONRENAME</property>\r
-                                <property name="label">&amp;Edit...</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonRename</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonRename</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONNEW</property>\r
-                                <property name="label"> &amp;New Address... </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonNew</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonNew</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONCOPY</property>\r
-                                <property name="label"> &amp;Copy to Clipboard </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCopy</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCopy</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_OK</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CAddressBookDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">610,390</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>\r
-            <property name="subclass"></property>\r
-            <property name="title">Address Book</property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose">OnClose</event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer58</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxNotebook" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="bitmapsize"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="maximum_size"></property>\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">m_notebook</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnNotebookPageChanged">OnNotebookPageChanged</event>\r
-                        <event name="OnNotebookPageChanging"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">Sending</property>\r
-                            <property name="select">0</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_PANELSENDING</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panelSending</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer68</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="spacer" expanded="1">\r
-                                            <property name="height">0</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="width">0</property>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="wxStaticText" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">1</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="label">Bitcoin Address</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_staticText55</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style"></property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <property name="wrap">-1</property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxALL|wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_LISTCTRLSENDING</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlSending</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag"></event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected">OnListItemSelected</event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                        <object class="notebookpage" expanded="1">\r
-                            <property name="bitmap"></property>\r
-                            <property name="label">Receiving</property>\r
-                            <property name="select">1</property>\r
-                            <object class="wxPanel" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_PANELRECEIVING</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_panelReceiving</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style">wxTAB_TRAVERSAL</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                                <object class="wxBoxSizer" expanded="1">\r
-                                    <property name="minimum_size"></property>\r
-                                    <property name="name">bSizer681</property>\r
-                                    <property name="orient">wxVERTICAL</property>\r
-                                    <property name="permission">none</property>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="spacer" expanded="1">\r
-                                            <property name="height">0</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="width">0</property>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">6</property>\r
-                                        <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="wxStaticText" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_ANY</property>\r
-                                            <property name="label">These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window.</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_staticText45</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style"></property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <property name="wrap">570</property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxEXPAND</property>\r
-                                        <property name="proportion">0</property>\r
-                                        <object class="spacer" expanded="1">\r
-                                            <property name="height">2</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="width">0</property>\r
-                                        </object>\r
-                                    </object>\r
-                                    <object class="sizeritem" expanded="1">\r
-                                        <property name="border">5</property>\r
-                                        <property name="flag">wxALL|wxEXPAND</property>\r
-                                        <property name="proportion">1</property>\r
-                                        <object class="wxListCtrl" expanded="1">\r
-                                            <property name="bg"></property>\r
-                                            <property name="context_help"></property>\r
-                                            <property name="enabled">1</property>\r
-                                            <property name="fg"></property>\r
-                                            <property name="font"></property>\r
-                                            <property name="hidden">0</property>\r
-                                            <property name="id">wxID_LISTCTRLRECEIVING</property>\r
-                                            <property name="maximum_size"></property>\r
-                                            <property name="minimum_size"></property>\r
-                                            <property name="name">m_listCtrlReceiving</property>\r
-                                            <property name="permission">protected</property>\r
-                                            <property name="pos"></property>\r
-                                            <property name="size"></property>\r
-                                            <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
-                                            <property name="subclass"></property>\r
-                                            <property name="tooltip"></property>\r
-                                            <property name="validator_data_type"></property>\r
-                                            <property name="validator_style">wxFILTER_NONE</property>\r
-                                            <property name="validator_type">wxDefaultValidator</property>\r
-                                            <property name="validator_variable"></property>\r
-                                            <property name="window_extra_style"></property>\r
-                                            <property name="window_name"></property>\r
-                                            <property name="window_style"></property>\r
-                                            <event name="OnChar"></event>\r
-                                            <event name="OnEnterWindow"></event>\r
-                                            <event name="OnEraseBackground"></event>\r
-                                            <event name="OnKeyDown"></event>\r
-                                            <event name="OnKeyUp"></event>\r
-                                            <event name="OnKillFocus"></event>\r
-                                            <event name="OnLeaveWindow"></event>\r
-                                            <event name="OnLeftDClick"></event>\r
-                                            <event name="OnLeftDown"></event>\r
-                                            <event name="OnLeftUp"></event>\r
-                                            <event name="OnListBeginDrag"></event>\r
-                                            <event name="OnListBeginLabelEdit"></event>\r
-                                            <event name="OnListBeginRDrag"></event>\r
-                                            <event name="OnListCacheHint"></event>\r
-                                            <event name="OnListColBeginDrag"></event>\r
-                                            <event name="OnListColClick"></event>\r
-                                            <event name="OnListColDragging"></event>\r
-                                            <event name="OnListColEndDrag"></event>\r
-                                            <event name="OnListColRightClick"></event>\r
-                                            <event name="OnListDeleteAllItems"></event>\r
-                                            <event name="OnListDeleteItem"></event>\r
-                                            <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
-                                            <event name="OnListInsertItem"></event>\r
-                                            <event name="OnListItemActivated">OnListItemActivated</event>\r
-                                            <event name="OnListItemDeselected"></event>\r
-                                            <event name="OnListItemFocused"></event>\r
-                                            <event name="OnListItemMiddleClick"></event>\r
-                                            <event name="OnListItemRightClick"></event>\r
-                                            <event name="OnListItemSelected">OnListItemSelected</event>\r
-                                            <event name="OnListKeyDown"></event>\r
-                                            <event name="OnMiddleDClick"></event>\r
-                                            <event name="OnMiddleDown"></event>\r
-                                            <event name="OnMiddleUp"></event>\r
-                                            <event name="OnMotion"></event>\r
-                                            <event name="OnMouseEvents"></event>\r
-                                            <event name="OnMouseWheel"></event>\r
-                                            <event name="OnPaint"></event>\r
-                                            <event name="OnRightDClick"></event>\r
-                                            <event name="OnRightDown"></event>\r
-                                            <event name="OnRightUp"></event>\r
-                                            <event name="OnSetFocus"></event>\r
-                                            <event name="OnSize"></event>\r
-                                            <event name="OnUpdateUI"></event>\r
-                                        </object>\r
-                                    </object>\r
-                                </object>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer69</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONDELETE</property>\r
-                                <property name="label">&amp;Delete</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonDelete</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonDelete</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONCOPY</property>\r
-                                <property name="label"> &amp;Copy to Clipboard </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCopy</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCopy</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONEDIT</property>\r
-                                <property name="label">&amp;Edit...</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonEdit</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonEdit</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_BUTTONNEW</property>\r
-                                <property name="label"> &amp;New Address... </property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonNew</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonNew</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_OK</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">public</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-        <object class="Dialog" expanded="0">\r
-            <property name="bg"></property>\r
-            <property name="center"></property>\r
-            <property name="context_help"></property>\r
-            <property name="enabled">1</property>\r
-            <property name="extra_style"></property>\r
-            <property name="fg"></property>\r
-            <property name="font"></property>\r
-            <property name="hidden">0</property>\r
-            <property name="id">wxID_ANY</property>\r
-            <property name="maximum_size"></property>\r
-            <property name="minimum_size"></property>\r
-            <property name="name">CGetTextFromUserDialogBase</property>\r
-            <property name="pos"></property>\r
-            <property name="size">440,138</property>\r
-            <property name="style">wxDEFAULT_DIALOG_STYLE</property>\r
-            <property name="subclass"></property>\r
-            <property name="title"></property>\r
-            <property name="tooltip"></property>\r
-            <property name="validator_data_type"></property>\r
-            <property name="validator_style">wxFILTER_NONE</property>\r
-            <property name="validator_type">wxDefaultValidator</property>\r
-            <property name="validator_variable"></property>\r
-            <property name="window_extra_style"></property>\r
-            <property name="window_name"></property>\r
-            <property name="window_style"></property>\r
-            <event name="OnActivate"></event>\r
-            <event name="OnActivateApp"></event>\r
-            <event name="OnChar"></event>\r
-            <event name="OnClose">OnClose</event>\r
-            <event name="OnEnterWindow"></event>\r
-            <event name="OnEraseBackground"></event>\r
-            <event name="OnHibernate"></event>\r
-            <event name="OnIconize"></event>\r
-            <event name="OnIdle"></event>\r
-            <event name="OnInitDialog"></event>\r
-            <event name="OnKeyDown"></event>\r
-            <event name="OnKeyUp"></event>\r
-            <event name="OnKillFocus"></event>\r
-            <event name="OnLeaveWindow"></event>\r
-            <event name="OnLeftDClick"></event>\r
-            <event name="OnLeftDown"></event>\r
-            <event name="OnLeftUp"></event>\r
-            <event name="OnMiddleDClick"></event>\r
-            <event name="OnMiddleDown"></event>\r
-            <event name="OnMiddleUp"></event>\r
-            <event name="OnMotion"></event>\r
-            <event name="OnMouseEvents"></event>\r
-            <event name="OnMouseWheel"></event>\r
-            <event name="OnPaint"></event>\r
-            <event name="OnRightDClick"></event>\r
-            <event name="OnRightDown"></event>\r
-            <event name="OnRightUp"></event>\r
-            <event name="OnSetFocus"></event>\r
-            <event name="OnSize"></event>\r
-            <event name="OnUpdateUI"></event>\r
-            <object class="wxBoxSizer" expanded="1">\r
-                <property name="minimum_size"></property>\r
-                <property name="name">bSizer79</property>\r
-                <property name="orient">wxVERTICAL</property>\r
-                <property name="permission">none</property>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">10</property>\r
-                    <property name="flag">wxEXPAND|wxALL</property>\r
-                    <property name="proportion">1</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer81</property>\r
-                        <property name="orient">wxVERTICAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label"></property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticTextMessage1</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxTextCtrl" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_TEXTCTRL</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="maxlength">0</property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_textCtrl1</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style">wxTE_PROCESS_ENTER</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="value"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown">OnKeyDown</event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnText"></event>\r
-                                <event name="OnTextEnter"></event>\r
-                                <event name="OnTextMaxLen"></event>\r
-                                <event name="OnTextURL"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxStaticText" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_ANY</property>\r
-                                <property name="label"></property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_staticTextMessage2</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <property name="wrap">-1</property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxTextCtrl" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">1</property>\r
-                                <property name="id">wxID_TEXTCTRL</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="maxlength">0</property>\r
-                                <property name="minimum_size"></property>\r
-                                <property name="name">m_textCtrl2</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style">wxTE_PROCESS_ENTER</property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="value"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown">OnKeyDown</event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnText"></event>\r
-                                <event name="OnTextEnter"></event>\r
-                                <event name="OnTextMaxLen"></event>\r
-                                <event name="OnTextURL"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-                <object class="sizeritem" expanded="1">\r
-                    <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
-                    <property name="proportion">0</property>\r
-                    <object class="wxBoxSizer" expanded="1">\r
-                        <property name="minimum_size"></property>\r
-                        <property name="name">bSizer80</property>\r
-                        <property name="orient">wxHORIZONTAL</property>\r
-                        <property name="permission">none</property>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
-                            <property name="proportion">1</property>\r
-                            <object class="spacer" expanded="1">\r
-                                <property name="height">0</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="width">0</property>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_OK</property>\r
-                                <property name="label">OK</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonOK</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size">-1,-1</property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonOK</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                        <object class="sizeritem" expanded="1">\r
-                            <property name="border">5</property>\r
-                            <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
-                            <property name="proportion">0</property>\r
-                            <object class="wxButton" expanded="1">\r
-                                <property name="bg"></property>\r
-                                <property name="context_help"></property>\r
-                                <property name="default">0</property>\r
-                                <property name="enabled">1</property>\r
-                                <property name="fg"></property>\r
-                                <property name="font"></property>\r
-                                <property name="hidden">0</property>\r
-                                <property name="id">wxID_CANCEL</property>\r
-                                <property name="label">Cancel</property>\r
-                                <property name="maximum_size"></property>\r
-                                <property name="minimum_size">-1,-1</property>\r
-                                <property name="name">m_buttonCancel</property>\r
-                                <property name="permission">protected</property>\r
-                                <property name="pos"></property>\r
-                                <property name="size"></property>\r
-                                <property name="style"></property>\r
-                                <property name="subclass"></property>\r
-                                <property name="tooltip"></property>\r
-                                <property name="validator_data_type"></property>\r
-                                <property name="validator_style">wxFILTER_NONE</property>\r
-                                <property name="validator_type">wxDefaultValidator</property>\r
-                                <property name="validator_variable"></property>\r
-                                <property name="window_extra_style"></property>\r
-                                <property name="window_name"></property>\r
-                                <property name="window_style"></property>\r
-                                <event name="OnButtonClick">OnButtonCancel</event>\r
-                                <event name="OnChar"></event>\r
-                                <event name="OnEnterWindow"></event>\r
-                                <event name="OnEraseBackground"></event>\r
-                                <event name="OnKeyDown"></event>\r
-                                <event name="OnKeyUp"></event>\r
-                                <event name="OnKillFocus"></event>\r
-                                <event name="OnLeaveWindow"></event>\r
-                                <event name="OnLeftDClick"></event>\r
-                                <event name="OnLeftDown"></event>\r
-                                <event name="OnLeftUp"></event>\r
-                                <event name="OnMiddleDClick"></event>\r
-                                <event name="OnMiddleDown"></event>\r
-                                <event name="OnMiddleUp"></event>\r
-                                <event name="OnMotion"></event>\r
-                                <event name="OnMouseEvents"></event>\r
-                                <event name="OnMouseWheel"></event>\r
-                                <event name="OnPaint"></event>\r
-                                <event name="OnRightDClick"></event>\r
-                                <event name="OnRightDown"></event>\r
-                                <event name="OnRightUp"></event>\r
-                                <event name="OnSetFocus"></event>\r
-                                <event name="OnSize"></event>\r
-                                <event name="OnUpdateUI"></event>\r
-                            </object>\r
-                        </object>\r
-                    </object>\r
-                </object>\r
-            </object>\r
-        </object>\r
-    </object>\r
-</wxFormBuilder_Project>\r
index 43f3ac2..d92054d 100644 (file)
@@ -21,7 +21,7 @@
 
 static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
 
-
+// Encode a byte sequence as a base58-encoded string
 inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend)
 {
     CAutoBN_CTX pctx;
@@ -62,11 +62,14 @@ inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char
     return str;
 }
 
+// Encode a byte vector as a base58-encoded string
 inline std::string EncodeBase58(const std::vector<unsigned char>& vch)
 {
     return EncodeBase58(&vch[0], &vch[0] + vch.size());
 }
 
+// Decode a base58-encoded string psz into byte vector vchRet
+// returns true if decoding is succesful
 inline bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet)
 {
     CAutoBN_CTX pctx;
@@ -113,6 +116,8 @@ inline bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet)
     return true;
 }
 
+// Decode a base58-encoded string str into byte vector vchRet
+// returns true if decoding is succesful
 inline bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vchRet)
 {
     return DecodeBase58(str.c_str(), vchRet);
@@ -121,7 +126,7 @@ inline bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vch
 
 
 
-
+// Encode a byte vector to a base58-encoded string, including checksum
 inline std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn)
 {
     // add 4-byte hash check to the end
@@ -131,6 +136,8 @@ inline std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn)
     return EncodeBase58(vch);
 }
 
+// Decode a base58-encoded string psz that includes a checksum, into byte vector vchRet
+// returns true if decoding is succesful
 inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRet)
 {
     if (!DecodeBase58(psz, vchRet))
@@ -150,6 +157,8 @@ inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRe
     return true;
 }
 
+// Decode a base58-encoded string str that includes a checksum, into byte vector vchRet
+// returns true if decoding is succesful
 inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRet)
 {
     return DecodeBase58Check(str.c_str(), vchRet);
@@ -159,11 +168,14 @@ inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>
 
 
 
-
+// Base class for all base58-encoded data
 class CBase58Data
 {
 protected:
+    // the version byte
     unsigned char nVersion;
+
+    // the actually encoded data
     std::vector<unsigned char> vchData;
 
     CBase58Data()
@@ -174,6 +186,7 @@ protected:
 
     ~CBase58Data()
     {
+        // zero the memory, as it may contain sensitive data
         if (!vchData.empty())
             memset(&vchData[0], 0, vchData.size());
     }
@@ -238,7 +251,9 @@ public:
     bool operator> (const CBase58Data& b58) const { return CompareTo(b58) >  0; }
 };
 
-
+// base58-encoded bitcoin addresses
+// Addresses have version 0 or 111 (testnet)
+// The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key
 class CBitcoinAddress : public CBase58Data
 {
 public:
similarity index 88%
rename from src/rpc.cpp
rename to src/bitcoinrpc.cpp
index acd7a89..38f102e 100644 (file)
@@ -4,7 +4,6 @@
 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 
 #include "headers.h"
-#include "cryptopp/sha.h"
 #include "db.h"
 #include "net.h"
 #include "init.h"
@@ -37,6 +36,8 @@ void ThreadRPCServer2(void* parg);
 typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
 extern map<string, rpcfn_type> mapCallTable;
 
+static std::string strRPCUserColonPass;
+
 static int64 nWalletUnlockTime;
 static CCriticalSection cs_nWalletUnlockTime;
 
@@ -50,13 +51,13 @@ Object JSONRPCError(int code, const string& message)
 }
 
 
-void PrintConsole(const char* format, ...)
+void PrintConsole(const std::string &format, ...)
 {
     char buffer[50000];
     int limit = sizeof(buffer);
     va_list arg_ptr;
     va_start(arg_ptr, format);
-    int ret = _vsnprintf(buffer, limit, format, arg_ptr);
+    int ret = _vsnprintf(buffer, limit, format.c_str(), arg_ptr);
     va_end(arg_ptr);
     if (ret < 0 || ret >= limit)
     {
@@ -64,11 +65,7 @@ void PrintConsole(const char* format, ...)
         buffer[limit-1] = 0;
     }
     printf("%s", buffer);
-#if defined(__WXMSW__) && defined(GUI)
-    MyMessageBox(buffer, "Bitcoin", wxOK | wxICON_EXCLAMATION);
-#else
     fprintf(stdout, "%s", buffer);
-#endif
 }
 
 
@@ -131,6 +128,7 @@ Value help(const Array& params, bool fHelp)
         // We already filter duplicates, but these deprecated screw up the sort order
         if (strMethod == "getamountreceived" ||
             strMethod == "getallreceived" ||
+            strMethod == "getblocknumber" || // deprecated
             (strMethod.find("label") != string::npos))
             continue;
         if (strCommand != "" && strMethod != strCommand)
@@ -165,10 +163,14 @@ Value stop(const Array& params, bool fHelp)
         throw runtime_error(
             "stop\n"
             "Stop bitcoin server.");
-
+#ifndef QT_GUI
     // Shutdown will take long enough that the response should get back
-    CreateThread(Shutdown, NULL);
+    // NOTE: This should actually work with Bitcoin-Qt too now, but 0.5.0 didn't allow it
+    StartShutdown();
     return "bitcoin server stopping";
+#else
+    throw runtime_error("NYI: cannot shut down GUI with RPC command");
+#endif
 }
 
 
@@ -183,12 +185,13 @@ Value getblockcount(const Array& params, bool fHelp)
 }
 
 
+// deprecated
 Value getblocknumber(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() != 0)
         throw runtime_error(
             "getblocknumber\n"
-            "Returns the block number of the latest block in the longest block chain.");
+            "Deprecated.  Use getblockcount.");
 
     return nBestHeight;
 }
@@ -530,6 +533,72 @@ Value sendtoaddress(const Array& params, bool fHelp)
     return wtx.GetHash().GetHex();
 }
 
+static const string strMessageMagic = "Bitcoin Signed Message:\n";
+
+Value signmessage(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() != 2)
+        throw runtime_error(
+            "signmessage <bitcoinaddress> <message>\n"
+            "Sign a message with the private key of an address");
+
+    if (pwalletMain->IsLocked())
+        throw JSONRPCError(-13, "Error: Please enter the wallet passphrase with walletpassphrase first.");
+
+    string strAddress = params[0].get_str();
+    string strMessage = params[1].get_str();
+
+    CBitcoinAddress addr(strAddress);
+    if (!addr.IsValid())
+        throw JSONRPCError(-3, "Invalid address");
+
+    CKey key;
+    if (!pwalletMain->GetKey(addr, key))
+        throw JSONRPCError(-4, "Private key not available");
+
+    CDataStream ss(SER_GETHASH);
+    ss << strMessageMagic;
+    ss << strMessage;
+
+    vector<unsigned char> vchSig;
+    if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig))
+        throw JSONRPCError(-5, "Sign failed");
+
+    return EncodeBase64(&vchSig[0], vchSig.size());
+}
+
+Value verifymessage(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() != 3)
+        throw runtime_error(
+            "verifymessage <bitcoinaddress> <signature> <message>\n"
+            "Verify a signed message");
+
+    string strAddress  = params[0].get_str();
+    string strSign     = params[1].get_str();
+    string strMessage  = params[2].get_str();
+
+    CBitcoinAddress addr(strAddress);
+    if (!addr.IsValid())
+        throw JSONRPCError(-3, "Invalid address");
+
+    bool fInvalid = false;
+    vector<unsigned char> vchSig = DecodeBase64(strSign.c_str(), &fInvalid);
+
+    if (fInvalid)
+        throw JSONRPCError(-5, "Malformed base64 encoding");
+
+    CDataStream ss(SER_GETHASH);
+    ss << strMessageMagic;
+    ss << strMessage;
+
+    CKey key;
+    if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig))
+        return false;
+
+    return (key.GetAddress() == addr);
+}
+
 
 Value getreceivedbyaddress(const Array& params, bool fHelp)
 {
@@ -945,7 +1014,6 @@ Value ListReceived(const Array& params, bool fByAccounts)
             Object obj;
             obj.push_back(Pair("address",       address.ToString()));
             obj.push_back(Pair("account",       strAccount));
-            obj.push_back(Pair("label",         strAccount)); // deprecated
             obj.push_back(Pair("amount",        ValueFromAmount(nAmount)));
             obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf)));
             ret.push_back(obj);
@@ -960,7 +1028,6 @@ Value ListReceived(const Array& params, bool fByAccounts)
             int nConf = (*it).second.nConf;
             Object obj;
             obj.push_back(Pair("account",       (*it).first));
-            obj.push_back(Pair("label",         (*it).first)); // deprecated
             obj.push_back(Pair("amount",        ValueFromAmount(nAmount)));
             obj.push_back(Pair("confirmations", (nConf == INT_MAX ? 0 : nConf)));
             ret.push_back(obj);
@@ -1212,6 +1279,69 @@ Value listaccounts(const Array& params, bool fHelp)
     return ret;
 }
 
+Value listsinceblock(const Array& params, bool fHelp)
+{
+    if (fHelp)
+        throw runtime_error(
+            "listsinceblock [blockhash] [target-confirmations]\n"
+            "Get all transactions in blocks since block [blockhash], or all transactions if omitted");
+
+    CBlockIndex *pindex = NULL;
+    int target_confirms = 1;
+
+    if (params.size() > 0)
+    {
+        uint256 blockId = 0;
+
+        blockId.SetHex(params[0].get_str());
+        pindex = CBlockLocator(blockId).GetBlockIndex();
+    }
+
+    if (params.size() > 1)
+    {
+        target_confirms = params[1].get_int();
+
+        if (target_confirms < 1)
+            throw JSONRPCError(-8, "Invalid parameter");
+    }
+
+    int depth = pindex ? (1 + nBestHeight - pindex->nHeight) : -1;
+
+    Array transactions;
+
+    for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); it++)
+    {
+        CWalletTx tx = (*it).second;
+
+        if (depth == -1 || tx.GetDepthInMainChain() < depth)
+            ListTransactions(tx, "*", 0, true, transactions);
+    }
+
+    uint256 lastblock;
+
+    if (target_confirms == 1)
+    {
+        lastblock = hashBestChain;
+    }
+    else
+    {
+        int target_height = pindexBest->nHeight + 1 - target_confirms;
+
+        CBlockIndex *block;
+        for (block = pindexBest;
+             block && block->nHeight > target_height;
+             block = block->pprev)  { }
+
+        lastblock = block ? block->GetBlockHash() : 0;
+    }
+
+    Object ret;
+    ret.push_back(Pair("transactions", transactions));
+    ret.push_back(Pair("lastblock", lastblock.GetHex()));
+
+    return ret;
+}
+
 Value gettransaction(const Array& params, bool fHelp)
 {
     if (fHelp || params.size() != 1)
@@ -1345,21 +1475,16 @@ Value walletpassphrase(const Array& params, bool fHelp)
         throw JSONRPCError(-17, "Error: Wallet is already unlocked.");
 
     // Note that the walletpassphrase is stored in params[0] which is not mlock()ed
-    string strWalletPass;
+    SecureString strWalletPass;
     strWalletPass.reserve(100);
-    mlock(&strWalletPass[0], strWalletPass.capacity());
-    strWalletPass = params[0].get_str();
+    // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string)
+    // Alternately, find a way to make params[0] mlock()'d to begin with.
+    strWalletPass = params[0].get_str().c_str();
 
     if (strWalletPass.length() > 0)
     {
         if (!pwalletMain->Unlock(strWalletPass))
-        {
-            fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-            munlock(&strWalletPass[0], strWalletPass.capacity());
             throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect.");
-        }
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
     }
     else
         throw runtime_error(
@@ -1385,15 +1510,15 @@ Value walletpassphrasechange(const Array& params, bool fHelp)
     if (!pwalletMain->IsCrypted())
         throw JSONRPCError(-15, "Error: running with an unencrypted wallet, but walletpassphrasechange was called.");
 
-    string strOldWalletPass;
+    // TODO: get rid of these .c_str() calls by implementing SecureString::operator=(std::string)
+    // Alternately, find a way to make params[0] mlock()'d to begin with.
+    SecureString strOldWalletPass;
     strOldWalletPass.reserve(100);
-    mlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-    strOldWalletPass = params[0].get_str();
+    strOldWalletPass = params[0].get_str().c_str();
 
-    string strNewWalletPass;
+    SecureString strNewWalletPass;
     strNewWalletPass.reserve(100);
-    mlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-    strNewWalletPass = params[1].get_str();
+    strNewWalletPass = params[1].get_str().c_str();
 
     if (strOldWalletPass.length() < 1 || strNewWalletPass.length() < 1)
         throw runtime_error(
@@ -1401,17 +1526,7 @@ Value walletpassphrasechange(const Array& params, bool fHelp)
             "Changes the wallet passphrase from <oldpassphrase> to <newpassphrase>.");
 
     if (!pwalletMain->ChangeWalletPassphrase(strOldWalletPass, strNewWalletPass))
-    {
-        fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-        fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-        munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-        munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
         throw JSONRPCError(-14, "Error: The wallet passphrase entered was incorrect.");
-    }
-    fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-    fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-    munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-    munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
 
     return Value::null;
 }
@@ -1451,15 +1566,16 @@ Value encryptwallet(const Array& params, bool fHelp)
     if (pwalletMain->IsCrypted())
         throw JSONRPCError(-15, "Error: running with an encrypted wallet, but encryptwallet was called.");
 
-#ifdef GUI
+#ifdef QT_GUI
     // shutting down via RPC while the GUI is running does not work (yet):
     throw runtime_error("Not Yet Implemented: use GUI to encrypt wallet, not RPC command");
 #endif
 
-    string strWalletPass;
+    // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string)
+    // Alternately, find a way to make params[0] mlock()'d to begin with.
+    SecureString strWalletPass;
     strWalletPass.reserve(100);
-    mlock(&strWalletPass[0], strWalletPass.capacity());
-    strWalletPass = params[0].get_str();
+    strWalletPass = params[0].get_str().c_str();
 
     if (strWalletPass.length() < 1)
         throw runtime_error(
@@ -1467,18 +1583,12 @@ Value encryptwallet(const Array& params, bool fHelp)
             "Encrypts the wallet with <passphrase>.");
 
     if (!pwalletMain->EncryptWallet(strWalletPass))
-    {
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
         throw JSONRPCError(-16, "Error: Failed to encrypt the wallet.");
-    }
-    fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-    munlock(&strWalletPass[0], strWalletPass.capacity());
 
     // BDB seems to have a bad habit of writing old data into
     // slack space in .dat files; that is bad if the old data is
     // unencrypted private keys.  So:
-    CreateThread(Shutdown, NULL);
+    StartShutdown();
     return "wallet encrypted; bitcoin server stopping, restart to run with encrypted wallet";
 }
 
@@ -1515,9 +1625,9 @@ Value getwork(const Array& params, bool fHelp)
         throw runtime_error(
             "getwork [data]\n"
             "If [data] is not specified, returns formatted hash data to work on:\n"
-            "  \"midstate\" : precomputed hash state after hashing the first half of the data\n"
+            "  \"midstate\" : precomputed hash state after hashing the first half of the data (DEPRECATED)\n" // deprecated
             "  \"data\" : block data\n"
-            "  \"hash1\" : formatted hash buffer for second hash\n"
+            "  \"hash1\" : formatted hash buffer for second hash (DEPRECATED)\n" // deprecated
             "  \"target\" : little endian hash target\n"
             "If [data] is specified, tries to solve the block and returns true if it was successful.");
 
@@ -1581,9 +1691,9 @@ Value getwork(const Array& params, bool fHelp)
         uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
 
         Object result;
-        result.push_back(Pair("midstate", HexStr(BEGIN(pmidstate), END(pmidstate))));
+        result.push_back(Pair("midstate", HexStr(BEGIN(pmidstate), END(pmidstate)))); // deprecated
         result.push_back(Pair("data",     HexStr(BEGIN(pdata), END(pdata))));
-        result.push_back(Pair("hash1",    HexStr(BEGIN(phash1), END(phash1))));
+        result.push_back(Pair("hash1",    HexStr(BEGIN(phash1), END(phash1)))); // deprecated
         result.push_back(Pair("target",   HexStr(BEGIN(hashTarget), END(hashTarget))));
         return result;
     }
@@ -1597,7 +1707,7 @@ Value getwork(const Array& params, bool fHelp)
 
         // Byte reverse
         for (int i = 0; i < 128/4; i++)
-            ((unsigned int*)pdata)[i] = CryptoPP::ByteReverse(((unsigned int*)pdata)[i]);
+            ((unsigned int*)pdata)[i] = ByteReverse(((unsigned int*)pdata)[i]);
 
         // Get saved block
         if (!mapNewBlock.count(pdata->hashMerkleRoot))
@@ -1614,6 +1724,93 @@ Value getwork(const Array& params, bool fHelp)
 }
 
 
+Value getmemorypool(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() > 1)
+        throw runtime_error(
+            "getmemorypool [data]\n"
+            "If [data] is not specified, returns data needed to construct a block to work on:\n"
+            "  \"version\" : block version\n"
+            "  \"previousblockhash\" : hash of current highest block\n"
+            "  \"transactions\" : contents of non-coinbase transactions that should be included in the next block\n"
+            "  \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n"
+            "  \"time\" : timestamp appropriate for next block\n"
+            "  \"bits\" : compressed target of next block\n"
+            "If [data] is specified, tries to solve the block and returns true if it was successful.");
+
+    if (params.size() == 0)
+    {
+        if (vNodes.empty())
+            throw JSONRPCError(-9, "Bitcoin is not connected!");
+
+        if (IsInitialBlockDownload())
+            throw JSONRPCError(-10, "Bitcoin is downloading blocks...");
+
+        static CReserveKey reservekey(pwalletMain);
+
+        // Update block
+        static unsigned int nTransactionsUpdatedLast;
+        static CBlockIndex* pindexPrev;
+        static int64 nStart;
+        static CBlock* pblock;
+        if (pindexPrev != pindexBest ||
+            (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5))
+        {
+            nTransactionsUpdatedLast = nTransactionsUpdated;
+            pindexPrev = pindexBest;
+            nStart = GetTime();
+
+            // Create new block
+            if(pblock)
+                delete pblock;
+            pblock = CreateNewBlock(reservekey);
+            if (!pblock)
+                throw JSONRPCError(-7, "Out of memory");
+        }
+
+        // Update nTime
+        pblock->UpdateTime(pindexPrev);
+        pblock->nNonce = 0;
+
+        Array transactions;
+        BOOST_FOREACH(CTransaction tx, pblock->vtx) {
+            if(tx.IsCoinBase())
+                continue;
+
+            CDataStream ssTx;
+            ssTx << tx;
+
+            transactions.push_back(HexStr(ssTx.begin(), ssTx.end()));
+        }
+
+        Object result;
+        result.push_back(Pair("version", pblock->nVersion));
+        result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex()));
+        result.push_back(Pair("transactions", transactions));
+        result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue));
+        result.push_back(Pair("time", (int64_t)pblock->nTime));
+
+        union {
+            int32_t nBits;
+            char cBits[4];
+        } uBits;
+        uBits.nBits = htonl((int32_t)pblock->nBits);
+        result.push_back(Pair("bits", HexStr(BEGIN(uBits.cBits), END(uBits.cBits))));
+
+        return result;
+    }
+    else
+    {
+        // Parse parameters
+        CDataStream ssBlock(ParseHex(params[0].get_str()));
+        CBlock pblock;
+        ssBlock >> pblock;
+
+        return ProcessBlock(NULL, &pblock);
+    }
+}
+
+
 
 
 
@@ -1642,20 +1839,13 @@ pair<string, rpcfn_type> pCallTable[] =
     make_pair("getnewaddress",          &getnewaddress),
     make_pair("getaccountaddress",      &getaccountaddress),
     make_pair("setaccount",             &setaccount),
-    make_pair("setlabel",               &setaccount), // deprecated
     make_pair("getaccount",             &getaccount),
-    make_pair("getlabel",               &getaccount), // deprecated
     make_pair("getaddressesbyaccount",  &getaddressesbyaccount),
-    make_pair("getaddressesbylabel",    &getaddressesbyaccount), // deprecated
     make_pair("sendtoaddress",          &sendtoaddress),
-    make_pair("getamountreceived",      &getreceivedbyaddress), // deprecated, renamed to getreceivedbyaddress
-    make_pair("getallreceived",         &listreceivedbyaddress), // deprecated, renamed to listreceivedbyaddress
     make_pair("getreceivedbyaddress",   &getreceivedbyaddress),
     make_pair("getreceivedbyaccount",   &getreceivedbyaccount),
-    make_pair("getreceivedbylabel",     &getreceivedbyaccount), // deprecated
     make_pair("listreceivedbyaddress",  &listreceivedbyaddress),
     make_pair("listreceivedbyaccount",  &listreceivedbyaccount),
-    make_pair("listreceivedbylabel",    &listreceivedbyaccount), // deprecated
     make_pair("backupwallet",           &backupwallet),
     make_pair("keypoolrefill",          &keypoolrefill),
     make_pair("walletpassphrase",       &walletpassphrase),
@@ -1669,9 +1859,13 @@ pair<string, rpcfn_type> pCallTable[] =
     make_pair("sendmany",               &sendmany),
     make_pair("gettransaction",         &gettransaction),
     make_pair("listtransactions",       &listtransactions),
+    make_pair("signmessage",           &signmessage),
+    make_pair("verifymessage",         &verifymessage),
     make_pair("getwork",                &getwork),
     make_pair("listaccounts",           &listaccounts),
     make_pair("settxfee",               &settxfee),
+    make_pair("getmemorypool",          &getmemorypool),
+    make_pair("listsinceblock",        &listsinceblock),
 };
 map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0]));
 
@@ -1680,7 +1874,7 @@ string pAllowInSafeMode[] =
     "help",
     "stop",
     "getblockcount",
-    "getblocknumber",
+    "getblocknumber",  // deprecated
     "getconnectioncount",
     "getdifficulty",
     "getgenerate",
@@ -1689,17 +1883,15 @@ string pAllowInSafeMode[] =
     "getinfo",
     "getnewaddress",
     "getaccountaddress",
-    "setlabel", // deprecated
     "getaccount",
-    "getlabel", // deprecated
     "getaddressesbyaccount",
-    "getaddressesbylabel", // deprecated
     "backupwallet",
     "keypoolrefill",
     "walletpassphrase",
     "walletlock",
     "validateaddress",
     "getwork",
+    "getmemorypool",
 };
 set<string> setAllowInSafeMode(pAllowInSafeMode, pAllowInSafeMode + sizeof(pAllowInSafeMode)/sizeof(pAllowInSafeMode[0]));
 
@@ -1721,6 +1913,7 @@ string HTTPPost(const string& strMsg, const map<string,string>& mapRequestHeader
       << "Host: 127.0.0.1\r\n"
       << "Content-Type: application/json\r\n"
       << "Content-Length: " << strMsg.size() << "\r\n"
+      << "Connection: close\r\n"
       << "Accept: application/json\r\n";
     BOOST_FOREACH(const PAIRTYPE(string, string)& item, mapRequestHeaders)
         s << item.first << ": " << item.second << "\r\n";
@@ -1761,12 +1954,13 @@ static string HTTPReply(int nStatus, const string& strMsg)
             "</HEAD>\r\n"
             "<BODY><H1>401 Unauthorized.</H1></BODY>\r\n"
             "</HTML>\r\n", rfc1123Time().c_str(), FormatFullVersion().c_str());
-    string strStatus;
-         if (nStatus == 200) strStatus = "OK";
-    else if (nStatus == 400) strStatus = "Bad Request";
-    else if (nStatus == 403) strStatus = "Forbidden";
-    else if (nStatus == 404) strStatus = "Not Found";
-    else if (nStatus == 500) strStatus = "Internal Server Error";
+    const char *cStatus;
+         if (nStatus == 200) cStatus = "OK";
+    else if (nStatus == 400) cStatus = "Bad Request";
+    else if (nStatus == 403) cStatus = "Forbidden";
+    else if (nStatus == 404) cStatus = "Not Found";
+    else if (nStatus == 500) cStatus = "Internal Server Error";
+    else cStatus = "";
     return strprintf(
             "HTTP/1.1 %d %s\r\n"
             "Date: %s\r\n"
@@ -1777,7 +1971,7 @@ static string HTTPReply(int nStatus, const string& strMsg)
             "\r\n"
             "%s",
         nStatus,
-        strStatus.c_str(),
+        cStatus,
         rfc1123Time().c_str(),
         strMsg.size(),
         FormatFullVersion().c_str(),
@@ -1844,43 +2038,6 @@ int ReadHTTP(std::basic_istream<char>& stream, map<string, string>& mapHeadersRe
     return nStatus;
 }
 
-string EncodeBase64(string s)
-{
-    BIO *b64, *bmem;
-    BUF_MEM *bptr;
-
-    b64 = BIO_new(BIO_f_base64());
-    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
-    bmem = BIO_new(BIO_s_mem());
-    b64 = BIO_push(b64, bmem);
-    BIO_write(b64, s.c_str(), s.size());
-    BIO_flush(b64);
-    BIO_get_mem_ptr(b64, &bptr);
-
-    string result(bptr->data, bptr->length);
-    BIO_free_all(b64);
-
-    return result;
-}
-
-string DecodeBase64(string s)
-{
-    BIO *b64, *bmem;
-
-    char* buffer = static_cast<char*>(calloc(s.size(), sizeof(char)));
-
-    b64 = BIO_new(BIO_f_base64());
-    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
-    bmem = BIO_new_mem_buf(const_cast<char*>(s.c_str()), s.size());
-    bmem = BIO_push(b64, bmem);
-    BIO_read(bmem, buffer, s.size());
-    BIO_free_all(bmem);
-
-    string result(buffer);
-    free(buffer);
-    return result;
-}
-
 bool HTTPAuthorized(map<string, string>& mapHeaders)
 {
     string strAuth = mapHeaders["authorization"];
@@ -1888,12 +2045,7 @@ bool HTTPAuthorized(map<string, string>& mapHeaders)
         return false;
     string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64);
     string strUserPass = DecodeBase64(strUserPass64);
-    string::size_type nColon = strUserPass.find(":");
-    if (nColon == string::npos)
-        return false;
-    string strUser = strUserPass.substr(0, nColon);
-    string strPassword = strUserPass.substr(nColon+1);
-    return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]);
+    return strUserPass == strRPCUserColonPass;
 }
 
 //
@@ -2026,7 +2178,8 @@ void ThreadRPCServer2(void* parg)
 {
     printf("ThreadRPCServer started\n");
 
-    if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "")
+    strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"];
+    if (strRPCUserColonPass == ":")
     {
         unsigned char rand_pwd[32];
         RAND_bytes(rand_pwd, 32);
@@ -2035,8 +2188,8 @@ void ThreadRPCServer2(void* parg)
             strWhatAmI = strprintf(_("To use the %s option"), "\"-server\"");
         else if (mapArgs.count("-daemon"))
             strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\"");
-        PrintConsole(
-            _("Warning: %s, you must set a rpcpassword in the configuration file:\n %s\n"
+        ThreadSafeMessageBox(strprintf(
+            _("Error: %s, you must set a rpcpassword in the configuration file:\n %s\n"
               "It is recommended you use the following random password:\n"
               "rpcuser=bitcoinrpc\n"
               "rpcpassword=%s\n"
@@ -2044,8 +2197,11 @@ void ThreadRPCServer2(void* parg)
               "If the file does not exist, create it with owner-readable-only file permissions.\n"),
                 strWhatAmI.c_str(),
                 GetConfigFile().c_str(),
-                EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str());
-        CreateThread(Shutdown, NULL);
+                EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()),
+            _("Error"), wxOK | wxMODAL);
+#ifndef QT_GUI
+        StartShutdown();
+#endif
         return;
     }
 
@@ -2054,9 +2210,27 @@ void ThreadRPCServer2(void* parg)
 
     asio::io_service io_service;
     ip::tcp::endpoint endpoint(bindAddress, GetArg("-rpcport", 8332));
+#ifndef QT_GUI
     ip::tcp::acceptor acceptor(io_service, endpoint);
 
     acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+#else
+    ip::tcp::acceptor acceptor(io_service);
+    try
+    {
+        acceptor.open(endpoint.protocol());
+        acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+        acceptor.bind(endpoint);
+        acceptor.listen(socket_base::max_connections);
+    }
+    catch(boost::system::system_error &e)
+    {
+        ThreadSafeMessageBox(strprintf(_("An error occured while setting up the RPC port %i for listening: %s"), endpoint.port(), e.what()),
+                             _("Error"), wxOK | wxMODAL);
+        StartShutdown();
+        return;
+    }
+#endif
 
 #ifdef USE_SSL
     ssl::context context(io_service, ssl::context::sslv23);
@@ -2161,7 +2335,7 @@ void ThreadRPCServer2(void* parg)
             if (valMethod.type() != str_type)
                 throw JSONRPCError(-32600, "Method must be a string");
             string strMethod = valMethod.get_str();
-            if (strMethod != "getwork")
+            if (strMethod != "getwork" && strMethod != "getmemorypool")
                 printf("ThreadRPCServer method=%s\n", strMethod.c_str());
 
             // Parse params
@@ -2327,18 +2501,12 @@ int CommandLineRPC(int argc, char *argv[])
         if (strMethod == "setgenerate"            && n > 1) ConvertTo<boost::int64_t>(params[1]);
         if (strMethod == "sendtoaddress"          && n > 1) ConvertTo<double>(params[1]);
         if (strMethod == "settxfee"               && n > 0) ConvertTo<double>(params[0]);
-        if (strMethod == "getamountreceived"      && n > 1) ConvertTo<boost::int64_t>(params[1]); // deprecated
         if (strMethod == "getreceivedbyaddress"   && n > 1) ConvertTo<boost::int64_t>(params[1]);
         if (strMethod == "getreceivedbyaccount"   && n > 1) ConvertTo<boost::int64_t>(params[1]);
-        if (strMethod == "getreceivedbylabel"     && n > 1) ConvertTo<boost::int64_t>(params[1]); // deprecated
-        if (strMethod == "getallreceived"         && n > 0) ConvertTo<boost::int64_t>(params[0]); // deprecated
-        if (strMethod == "getallreceived"         && n > 1) ConvertTo<bool>(params[1]); // deprecated
         if (strMethod == "listreceivedbyaddress"  && n > 0) ConvertTo<boost::int64_t>(params[0]);
         if (strMethod == "listreceivedbyaddress"  && n > 1) ConvertTo<bool>(params[1]);
         if (strMethod == "listreceivedbyaccount"  && n > 0) ConvertTo<boost::int64_t>(params[0]);
         if (strMethod == "listreceivedbyaccount"  && n > 1) ConvertTo<bool>(params[1]);
-        if (strMethod == "listreceivedbylabel"    && n > 0) ConvertTo<boost::int64_t>(params[0]); // deprecated
-        if (strMethod == "listreceivedbylabel"    && n > 1) ConvertTo<bool>(params[1]); // deprecated
         if (strMethod == "getbalance"             && n > 1) ConvertTo<boost::int64_t>(params[1]);
         if (strMethod == "move"                   && n > 2) ConvertTo<double>(params[2]);
         if (strMethod == "move"                   && n > 3) ConvertTo<boost::int64_t>(params[3]);
@@ -2348,6 +2516,7 @@ int CommandLineRPC(int argc, char *argv[])
         if (strMethod == "listtransactions"       && n > 2) ConvertTo<boost::int64_t>(params[2]);
         if (strMethod == "listaccounts"           && n > 0) ConvertTo<boost::int64_t>(params[0]);
         if (strMethod == "walletpassphrase"       && n > 1) ConvertTo<boost::int64_t>(params[1]);
+        if (strMethod == "listsinceblock"         && n > 1) ConvertTo<boost::int64_t>(params[1]);
         if (strMethod == "sendmany"               && n > 1)
         {
             string s = params[1].get_str();
@@ -2395,13 +2564,7 @@ int CommandLineRPC(int argc, char *argv[])
 
     if (strPrint != "")
     {
-#if defined(__WXMSW__) && defined(GUI)
-        // Windows GUI apps can't print to command line,
-        // so settle for a message box yuck
-        MyMessageBox(strPrint, "Bitcoin", wxOK);
-#else
         fprintf((nRet == 0 ? stdout : stderr), "%s\n", strPrint.c_str());
-#endif
     }
     return nRet;
 }
similarity index 100%
rename from src/rpc.h
rename to src/bitcoinrpc.h
index e821b08..727cf09 100644 (file)
@@ -7,7 +7,7 @@
 #include <vector>
 #include <string>
 #include "headers.h"
-#ifdef __WXMSW__
+#ifdef WIN32
 #include <windows.h>
 #endif
 
@@ -15,7 +15,7 @@
 #include "main.h"
 #include "util.h"
 
-bool CCrypter::SetKeyFromPassphrase(const std::string& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod)
+bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod)
 {
     if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE)
         return false;
index 5b95ea4..d7f8a39 100644 (file)
@@ -13,15 +13,15 @@ const unsigned int WALLET_CRYPTO_SALT_SIZE = 8;
 Private key encryption is done based on a CMasterKey,
 which holds a salt and random encryption key.
 
-CMasterKeys is encrypted using AES-256-CBC using a key
+CMasterKeys are encrypted using AES-256-CBC using a key
 derived using derivation method nDerivationMethod
 (0 == EVP_sha512()) and derivation iterations nDeriveIterations.
 vchOtherDerivationParameters is provided for alternative algorithms
 which may require more parameters (such as scrypt).
 
 Wallet Private Keys are then encrypted using AES-256-CBC
-with the double-sha256 of the private key as the IV, and the
-master key's key as the encryption key.
+with the double-sha256 of the public key as the IV, and the
+master key's key as the encryption key (see keystore.[ch]).
 */
 
 class CMasterKey
@@ -65,7 +65,7 @@ private:
     bool fKeySet;
 
 public:
-    bool SetKeyFromPassphrase(const std::string &strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod);
+    bool SetKeyFromPassphrase(const SecureString &strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod);
     bool Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned char> &vchCiphertext);
     bool Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingMaterial& vchPlaintext);
     bool SetKey(const CKeyingMaterial& chNewKey, const std::vector<unsigned char>& chNewIV);
diff --git a/src/cryptopp/License.txt b/src/cryptopp/License.txt
deleted file mode 100644 (file)
index fc3f054..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-Compilation Copyright (c) 1995-2009 by Wei Dai.  All rights reserved.
-This copyright applies only to this software distribution package 
-as a compilation, and does not imply a copyright on any particular 
-file in the package.
-
-The following files are copyrighted by their respective original authors,
-and their use is subject to additional licenses included in these files.
-
-mars.cpp - Copyright 1998 Brian Gladman.
-
-All other files in this compilation are placed in the public domain by
-Wei Dai and other contributors.
-
-I would like to thank the following authors for placing their works into
-the public domain:
-
-Joan Daemen - 3way.cpp
-Leonard Janke - cast.cpp, seal.cpp
-Steve Reid - cast.cpp
-Phil Karn - des.cpp
-Andrew M. Kuchling - md2.cpp, md4.cpp
-Colin Plumb - md5.cpp
-Seal Woods - rc6.cpp
-Chris Morgan - rijndael.cpp
-Paulo Baretto - rijndael.cpp, skipjack.cpp, square.cpp
-Richard De Moliner - safer.cpp
-Matthew Skala - twofish.cpp
-Kevin Springle - camellia.cpp, shacal2.cpp, ttmac.cpp, whrlpool.cpp, ripemd.cpp
-
-Permission to use, copy, modify, and distribute this compilation for
-any purpose, including commercial applications, is hereby granted
-without fee, subject to the following restrictions:
-
-1. Any copy or modification of this compilation in any form, except
-in object code form as part of an application software, must include
-the above copyright notice and this license.
-
-2. Users of this software agree that any modification or extension
-they provide to Wei Dai will be considered public domain and not
-copyrighted unless it includes an explicit copyright notice.
-
-3. Wei Dai makes no warranty or representation that the operation of the
-software in this compilation will be error-free, and Wei Dai is under no
-obligation to provide any services, by way of maintenance, update, or
-otherwise.  THE SOFTWARE AND ANY DOCUMENTATION ARE PROVIDED "AS IS"
-WITHOUT EXPRESS OR IMPLIED WARRANTY INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. IN NO EVENT WILL WEI DAI OR ANY OTHER CONTRIBUTOR BE LIABLE FOR
-DIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-4. Users will not use Wei Dai or any other contributor's name in any 
-publicity or advertising, without prior written consent in each case.
-
-5. Export of this software from the United States may require a
-specific license from the United States Government.  It is the
-responsibility of any person or organization contemplating export
-to obtain such a license before exporting.
-
-6. Certain parts of this software may be protected by patents.  It
-is the users' responsibility to obtain the appropriate
-licenses before using those parts.
-
-If this compilation is used in object code form in an application
-software, acknowledgement of the author is not required but would be
-appreciated. The contribution of any useful modifications or extensions
-to Wei Dai is not required but would also be appreciated.
diff --git a/src/cryptopp/Readme.txt b/src/cryptopp/Readme.txt
deleted file mode 100644 (file)
index 861c036..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-Crypto++: a C++ Class Library of Cryptographic Schemes
-Version 5.6.0 (3/15/2009)
-
-Crypto++ Library is a free C++ class library of cryptographic schemes.
-Currently the library contains the following algorithms:
-
-                   algorithm type  name
-
- authenticated encryption schemes  GCM, CCM, EAX
-        high speed stream ciphers  Panama, Sosemanuk, Salsa20, XSalsa20
-
-           AES and AES candidates  AES (Rijndael), RC6, MARS, Twofish, Serpent,
-                                   CAST-256
-
-                                   IDEA, Triple-DES (DES-EDE2 and DES-EDE3),
-              other block ciphers  Camellia, SEED, RC5, Blowfish, TEA, XTEA,
-                                   Skipjack, SHACAL-2
-
-  block cipher modes of operation  ECB, CBC, CBC ciphertext stealing (CTS),
-                                   CFB, OFB, counter mode (CTR)
-
-     message authentication codes  VMAC, HMAC, CMAC, CBC-MAC, DMAC, 
-                                   Two-Track-MAC
-
-                                   SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, and
-                   hash functions  SHA-512), Tiger, WHIRLPOOL, RIPEMD-128,
-                                   RIPEMD-256, RIPEMD-160, RIPEMD-320
-
-                                   RSA, DSA, ElGamal, Nyberg-Rueppel (NR),
-          public-key cryptography  Rabin, Rabin-Williams (RW), LUC, LUCELG,
-                                   DLIES (variants of DHAES), ESIGN
-
-   padding schemes for public-key  PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363
-                          systems  EMSA2 and EMSA5
-
-                                   Diffie-Hellman (DH), Unified Diffie-Hellman
-            key agreement schemes  (DH2), Menezes-Qu-Vanstone (MQV), LUCDIF,
-                                   XTR-DH
-
-      elliptic curve cryptography  ECDSA, ECNR, ECIES, ECDH, ECMQV
-
-          insecure or obsolescent  MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL
-algorithms retained for backwards  3.0, WAKE, WAKE-OFB, DESX (DES-XEX3), RC2,
-     compatibility and historical  SAFER, 3-WAY, GOST, SHARK, CAST-128, Square
-                            value
-
-Other features include:
-
-  * pseudo random number generators (PRNG): ANSI X9.17 appendix C, RandomPool
-  * password based key derivation functions: PBKDF1 and PBKDF2 from PKCS #5,
-    PBKDF from PKCS #12 appendix B
-  * Shamir's secret sharing scheme and Rabin's information dispersal algorithm
-    (IDA)
-  * fast multi-precision integer (bignum) and polynomial operations
-  * finite field arithmetics, including GF(p) and GF(2^n)
-  * prime number generation and verification
-  * useful non-cryptographic algorithms
-      + DEFLATE (RFC 1951) compression/decompression with gzip (RFC 1952) and
-        zlib (RFC 1950) format support
-      + hex, base-32, and base-64 coding/decoding
-      + 32-bit CRC and Adler32 checksum
-  * class wrappers for these operating system features (optional):
-      + high resolution timers on Windows, Unix, and Mac OS
-      + Berkeley and Windows style sockets
-      + Windows named pipes
-      + /dev/random, /dev/urandom, /dev/srandom
-      + Microsoft's CryptGenRandom on Windows
-  * A high level interface for most of the above, using a filter/pipeline
-    metaphor
-  * benchmarks and validation testing
-  * x86, x86-64 (x64), MMX, and SSE2 assembly code for the most commonly used
-    algorithms, with run-time CPU feature detection and code selection
-  * some versions are available in FIPS 140-2 validated form
-
-You are welcome to use it for any purpose without paying me, but see
-License.txt for the fine print.
-
-The following compilers are supported for this release. Please visit
-http://www.cryptopp.com the most up to date build instructions and porting notes.
-
-  * MSVC 6.0 - 2008
-  * GCC 3.3 - 4.3
-  * C++Builder 2009
-  * Intel C++ Compiler 9 - 11
-  * Sun Studio 12 (CC 5.9)
-
-*** Important Usage Notes ***
-
-1. If a constructor for A takes a pointer to an object B (except primitive
-types such as int and char), then A owns B and will delete B at A's
-destruction.  If a constructor for A takes a reference to an object B,
-then the caller retains ownership of B and should not destroy it until
-A no longer needs it. 
-
-2. Crypto++ is thread safe at the class level. This means you can use
-Crypto++ safely in a multithreaded application, but you must provide
-synchronization when multiple threads access a common Crypto++ object.
-
-*** MSVC-Specific Information ***
-
-On Windows, Crypto++ can be compiled into 3 forms: a static library
-including all algorithms, a DLL with only FIPS Approved algorithms, and
-a static library with only algorithms not in the DLL.
-(FIPS Approved means Approved according to the FIPS 140-2 standard.)
-The DLL may be used by itself, or it may be used together with the second
-form of the static library. MSVC project files are included to build
-all three forms, and sample applications using each of the three forms
-are also included.
-
-To compile Crypto++ with MSVC, open the "cryptest.dsw" (for MSVC 6 and MSVC .NET 
-2003) or "cryptest.sln" (for MSVC .NET 2005) workspace file and build one or 
-more of the following projects:
-
-cryptdll - This builds the DLL. Please note that if you wish to use Crypto++
-  as a FIPS validated module, you must use a pre-built DLL that has undergone
-  the FIPS validation process instead of building your own.
-dlltest - This builds a sample application that only uses the DLL.
-cryptest Non-DLL-Import Configuration - This builds the full static library
-  along with a full test driver.
-cryptest DLL-Import Configuration - This builds a static library containing
-  only algorithms not in the DLL, along with a full test driver that uses
-  both the DLL and the static library.
-
-To use the Crypto++ DLL in your application, #include "dll.h" before including
-any other Crypto++ header files, and place the DLL in the same directory as
-your .exe file. dll.h includes the line #pragma comment(lib, "cryptopp")
-so you don't have to explicitly list the import library in your project
-settings. To use a static library form of Crypto++, specify it as
-an additional library to link with in your project settings.
-In either case you should check the compiler options to
-make sure that the library and your application are using the same C++
-run-time libraries and calling conventions.
-
-*** DLL Memory Management ***
-
-Because it's possible for the Crypto++ DLL to delete objects allocated 
-by the calling application, they must use the same C++ memory heap. Three 
-methods are provided to achieve this.
-1.  The calling application can tell Crypto++ what heap to use. This method 
-    is required when the calling application uses a non-standard heap.
-2.  Crypto++ can tell the calling application what heap to use. This method 
-    is required when the calling application uses a statically linked C++ Run 
-    Time Library. (Method 1 does not work in this case because the Crypto++ DLL 
-    is initialized before the calling application's heap is initialized.)
-3.  Crypto++ can automatically use the heap provided by the calling application's 
-    dynamically linked C++ Run Time Library. The calling application must
-    make sure that the dynamically linked C++ Run Time Library is initialized
-    before Crypto++ is loaded. (At this time it is not clear if it is possible
-    to control the order in which DLLs are initialized on Windows 9x machines,
-    so it might be best to avoid using this method.)
-
-When Crypto++ attaches to a new process, it searches all modules loaded 
-into the process space for exported functions "GetNewAndDeleteForCryptoPP" 
-and "SetNewAndDeleteFromCryptoPP". If one of these functions is found, 
-Crypto++ uses methods 1 or 2, respectively, by calling the function. 
-Otherwise, method 3 is used. 
-
-*** GCC-Specific Information ***
-
-A makefile is included for you to compile Crypto++ with GCC. Make sure
-you are using GNU Make and GNU ld. The make process will produce two files,
-libcryptopp.a and cryptest.exe. Run "cryptest.exe v" for the validation
-suite.
-
-*** Documentation and Support ***
-
-Crypto++ is documented through inline comments in header files, which are
-processed through Doxygen to produce an HTML reference manual. You can find
-a link to the manual from http://www.cryptopp.com. Also at that site is
-the Crypto++ FAQ, which you should browse through before attempting to 
-use this library, because it will likely answer many of questions that
-may come up.
-
-If you run into any problems, please try the Crypto++ mailing list.
-The subscription information and the list archive are available on
-http://www.cryptopp.com. You can also email me directly by visiting
-http://www.weidai.com, but you will probably get a faster response through
-the mailing list.
-
-*** History ***
-
-1.0 - First public release.  Withdrawn at the request of RSA DSI.
-    - included Blowfish, BBS, DES, DH, Diamond, DSA, ElGamal, IDEA,
-      MD5, RC4, RC5, RSA, SHA, WAKE, secret sharing, DEFLATE compression
-    - had a serious bug in the RSA key generation code.
-
-1.1 - Removed RSA, RC4, RC5
-    - Disabled calls to RSAREF's non-public functions
-    - Minor bugs fixed
-
-2.0 - a completely new, faster multiprecision integer class
-    - added MD5-MAC, HAVAL, 3-WAY, TEA, SAFER, LUC, Rabin, BlumGoldwasser,
-      elliptic curve algorithms
-    - added the Lucas strong probable primality test
-    - ElGamal encryption and signature schemes modified to avoid weaknesses
-    - Diamond changed to Diamond2 because of key schedule weakness
-    - fixed bug in WAKE key setup
-    - SHS class renamed to SHA
-    - lots of miscellaneous optimizations
-
-2.1 - added Tiger, HMAC, GOST, RIPE-MD160, LUCELG, LUCDIF, XOR-MAC,
-      OAEP, PSSR, SHARK
-    - added precomputation to DH, ElGamal, DSA, and elliptic curve algorithms
-    - added back RC5 and a new RSA
-    - optimizations in elliptic curves over GF(p)
-    - changed Rabin to use OAEP and PSSR
-    - changed many classes to allow copy constructors to work correctly
-    - improved exception generation and handling
-
-2.2 - added SEAL, CAST-128, Square
-    - fixed bug in HAVAL (padding problem)
-    - fixed bug in triple-DES (decryption order was reversed)
-    - fixed bug in RC5 (couldn't handle key length not a multiple of 4)
-    - changed HMAC to conform to RFC-2104 (which is not compatible
-      with the original HMAC)
-    - changed secret sharing and information dispersal to use GF(2^32)
-      instead of GF(65521)
-    - removed zero knowledge prover/verifier for graph isomorphism
-    - removed several utility classes in favor of the C++ standard library
-
-2.3 - ported to EGCS
-    - fixed incomplete workaround of min/max conflict in MSVC
-
-3.0 - placed all names into the "CryptoPP" namespace
-    - added MD2, RC2, RC6, MARS, RW, DH2, MQV, ECDHC, CBC-CTS
-    - added abstract base classes PK_SimpleKeyAgreementDomain and
-      PK_AuthenticatedKeyAgreementDomain
-    - changed DH and LUCDIF to implement the PK_SimpleKeyAgreementDomain
-      interface and to perform domain parameter and key validation
-    - changed interfaces of PK_Signer and PK_Verifier to sign and verify
-      messages instead of message digests
-    - changed OAEP to conform to PKCS#1 v2.0
-    - changed benchmark code to produce HTML tables as output
-    - changed PSSR to track IEEE P1363a
-    - renamed ElGamalSignature to NR and changed it to track IEEE P1363
-    - renamed ECKEP to ECMQVC and changed it to track IEEE P1363
-    - renamed several other classes for clarity
-    - removed support for calling RSAREF
-    - removed option to compile old SHA (SHA-0)
-    - removed option not to throw exceptions
-
-3.1 - added ARC4, Rijndael, Twofish, Serpent, CBC-MAC, DMAC
-    - added interface for querying supported key lengths of symmetric ciphers
-      and MACs
-    - added sample code for RSA signature and verification
-    - changed CBC-CTS to be compatible with RFC 2040
-    - updated SEAL to version 3.0 of the cipher specification
-    - optimized multiprecision squaring and elliptic curves over GF(p)
-    - fixed bug in MARS key setup
-    - fixed bug with attaching objects to Deflator
-
-3.2 - added DES-XEX3, ECDSA, DefaultEncryptorWithMAC
-    - renamed DES-EDE to DES-EDE2 and TripleDES to DES-EDE3
-    - optimized ARC4
-    - generalized DSA to allow keys longer than 1024 bits
-    - fixed bugs in GF2N and ModularArithmetic that can cause calculation errors
-    - fixed crashing bug in Inflator when given invalid inputs
-    - fixed endian bug in Serpent
-    - fixed padding bug in Tiger
-
-4.0 - added Skipjack, CAST-256, Panama, SHA-2 (SHA-256, SHA-384, and SHA-512),
-      and XTR-DH
-    - added a faster variant of Rabin's Information Dispersal Algorithm (IDA)
-    - added class wrappers for these operating system features:
-      - high resolution timers on Windows, Unix, and MacOS
-      - Berkeley and Windows style sockets
-      - Windows named pipes
-      - /dev/random and /dev/urandom on Linux and FreeBSD
-      - Microsoft's CryptGenRandom on Windows
-    - added support for SEC 1 elliptic curve key format and compressed points
-    - added support for X.509 public key format (subjectPublicKeyInfo) for
-      RSA, DSA, and elliptic curve schemes
-    - added support for DER and OpenPGP signature format for DSA
-    - added support for ZLIB compressed data format (RFC 1950)
-    - changed elliptic curve encryption to use ECIES (as defined in SEC 1)
-    - changed MARS key schedule to reflect the latest specification
-    - changed BufferedTransformation interface to support multiple channels
-      and messages
-    - changed CAST and SHA-1 implementations to use public domain source code
-    - fixed bug in StringSource
-    - optmized multi-precision integer code for better performance
-
-4.1 - added more support for the recommended elliptic curve parameters in SEC 2
-    - added Panama MAC, MARC4
-    - added IV stealing feature to CTS mode
-    - added support for PKCS #8 private key format for RSA, DSA, and elliptic
-      curve schemes
-    - changed Deflate, MD5, Rijndael, and Twofish to use public domain code
-    - fixed a bug with flushing compressed streams
-    - fixed a bug with decompressing stored blocks
-    - fixed a bug with EC point decompression using non-trinomial basis
-    - fixed a bug in NetworkSource::GeneralPump()
-    - fixed a performance issue with EC over GF(p) decryption
-    - fixed syntax to allow GCC to compile without -fpermissive
-    - relaxed some restrictions in the license
-
-4.2 - added support for longer HMAC keys
-    - added MD4 (which is not secure so use for compatibility purposes only)
-    - added compatibility fixes/workarounds for STLport 4.5, GCC 3.0.2,
-      and MSVC 7.0
-    - changed MD2 to use public domain code
-    - fixed a bug with decompressing multiple messages with the same object
-    - fixed a bug in CBC-MAC with MACing multiple messages with the same object
-    - fixed a bug in RC5 and RC6 with zero-length keys
-    - fixed a bug in Adler32 where incorrect checksum may be generated
-
-5.0 - added ESIGN, DLIES, WAKE-OFB, PBKDF1 and PBKDF2 from PKCS #5
-    - added key validation for encryption and signature public/private keys
-    - renamed StreamCipher interface to SymmetricCipher, which is now implemented
-      by both stream ciphers and block cipher modes including ECB and CBC
-    - added keying interfaces to support resetting of keys and IVs without
-      having to destroy and recreate objects
-    - changed filter interface to support non-blocking input/output
-    - changed SocketSource and SocketSink to use overlapped I/O on Microsoft Windows
-    - grouped related classes inside structs to help templates, for example
-      AESEncryption and AESDecryption are now AES::Encryption and AES::Decryption
-    - where possible, typedefs have been added to improve backwards 
-      compatibility when the CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY macro is defined
-    - changed Serpent, HAVAL and IDEA to use public domain code
-    - implemented SSE2 optimizations for Integer operations
-    - fixed a bug in HMAC::TruncatedFinal()
-    - fixed SKIPJACK byte ordering following NIST clarification dated 5/9/02
-
-5.01 - added known answer test for X9.17 RNG in FIPS 140 power-up self test
-     - submitted to NIST/CSE, but not publicly released
-
-5.02 - changed EDC test to MAC integrity check using HMAC/SHA1
-     - improved performance of integrity check
-     - added blinding to defend against RSA timing attack
-
-5.03 - created DLL version of Crypto++ for FIPS 140-2 validation
-     - fixed vulnerabilities in GetNextIV for CTR and OFB modes
-
-5.0.4 - Removed DES, SHA-256, SHA-384, SHA-512 from DLL
-
-5.1 - added PSS padding and changed PSSR to track IEEE P1363a draft standard
-    - added blinding for RSA and Rabin to defend against timing attacks
-      on decryption operations
-    - changed signing and decryption APIs to support the above
-    - changed WaitObjectContainer to allow waiting for more than 64
-      objects at a time on Win32 platforms
-    - fixed a bug in CBC and ECB modes with processing non-aligned data
-    - fixed standard conformance bugs in DLIES (DHAES mode) and RW/EMSA2
-      signature scheme (these fixes are not backwards compatible)
-    - fixed a number of compiler warnings, minor bugs, and portability problems
-    - removed Sapphire
-
-5.2 - merged in changes for 5.01 - 5.0.4
-    - added support for using encoding parameters and key derivation parameters
-      with public key encryption (implemented by OAEP and DL/ECIES)
-    - added Camellia, SHACAL-2, Two-Track-MAC, Whirlpool, RIPEMD-320,
-      RIPEMD-128, RIPEMD-256, Base-32 coding, FIPS variant of CFB mode
-    - added ThreadUserTimer for timing thread CPU usage
-    - added option for password-based key derivation functions
-      to iterate until a mimimum elapsed thread CPU time is reached
-    - added option (on by default) for DEFLATE compression to detect
-      uncompressible files and process them more quickly
-    - improved compatibility and performance on 64-bit platforms,
-      including Alpha, IA-64, x86-64, PPC64, Sparc64, and MIPS64
-    - fixed ONE_AND_ZEROS_PADDING to use 0x80 instead 0x01 as padding.
-    - fixed encoding/decoding of PKCS #8 privateKeyInfo to properly
-      handle optional attributes
-
-5.2.1 - fixed bug in the "dlltest" DLL testing program
-      - fixed compiling with STLport using VC .NET
-      - fixed compiling with -fPIC using GCC
-      - fixed compiling with -msse2 on systems without memalign()
-      - fixed inability to instantiate PanamaMAC
-      - fixed problems with inline documentation
-
-5.2.2 - added SHA-224
-      - put SHA-256, SHA-384, SHA-512, RSASSA-PSS into DLL
-      
-5.2.3 - fixed issues with FIPS algorithm test vectors
-      - put RSASSA-ISO into DLL
-
-5.3 - ported to MSVC 2005 with support for x86-64
-    - added defense against AES timing attacks, and more AES test vectors
-    - changed StaticAlgorithmName() of Rijndael to "AES", CTR to "CTR"
-
-5.4 - added Salsa20
-    - updated Whirlpool to version 3.0
-    - ported to GCC 4.1, Sun C++ 5.8, and Borland C++Builder 2006
-
-5.5 - added VMAC and Sosemanuk (with x86-64 and SSE2 assembly)
-    - improved speed of integer arithmetic, AES, SHA-512, Tiger, Salsa20,
-      Whirlpool, and PANAMA cipher using assembly (x86-64, MMX, SSE2)
-    - optimized Camellia and added defense against timing attacks
-    - updated benchmarks code to show cycles per byte and to time key/IV setup
-    - started using OpenMP for increased multi-core speed
-    - enabled GCC optimization flags by default in GNUmakefile
-    - added blinding and computational error checking for RW signing
-    - changed RandomPool, X917RNG, GetNextIV, DSA/NR/ECDSA/ECNR to reduce
-      the risk of reusing random numbers and IVs after virtual machine state
-      rollback
-    - changed default FIPS mode RNG from AutoSeededX917RNG<DES_EDE3> to
-      AutoSeededX917RNG<AES>
-    - fixed PANAMA cipher interface to accept 256-bit key and 256-bit IV
-    - moved MD2, MD4, MD5, PanamaHash, ARC4, WAKE_CFB into the namespace "Weak"
-    - removed HAVAL, MD5-MAC, XMAC
-
-5.5.1 - fixed VMAC validation failure on 32-bit big-endian machines
-
-5.5.2 - ported x64 assembly language code for AES, Salsa20, Sosemanuk, and Panama
-        to MSVC 2005 (using MASM since MSVC doesn't support inline assembly on x64)
-      - fixed Salsa20 initialization crash on non-SSE2 machines
-      - fixed Whirlpool crash on Pentium 2 machines
-      - fixed possible branch prediction analysis (BPA) vulnerability in
-        MontgomeryReduce(), which may affect security of RSA, RW, LUC
-      - fixed link error with MSVC 2003 when using "debug DLL" form of runtime library
-      - fixed crash in SSE2_Add on P4 machines when compiled with 
-        MSVC 6.0 SP5 with Processor Pack
-      - ported to MSVC 2008, GCC 4.2, Sun CC 5.9, Intel C++ Compiler 10.0, 
-        and Borland C++Builder 2007
-
-5.6 - added AuthenticatedSymmetricCipher interface class and Filter wrappers
-    - added CCM, GCM (with SSE2 assembly), EAX, CMAC, XSalsa20, and SEED
-    - added support for variable length IVs
-    - improved AES and SHA-256 speed on x86 and x64
-    - fixed incorrect VMAC computation on message lengths 
-      that are >64 mod 128 (x86 assembly version is not affected)
-    - fixed compiler error in vmac.cpp on x86 with GCC -fPIC
-    - fixed run-time validation error on x86-64 with GCC 4.3.2 -O2
-    - fixed HashFilter bug when putMessage=true
-    - removed WORD64_AVAILABLE; compiler support for 64-bit int is now required
-    - ported to GCC 4.3, C++Builder 2009, Sun CC 5.10, Intel C++ Compiler 11
-
-Written by Wei Dai
diff --git a/src/cryptopp/config.h b/src/cryptopp/config.h
deleted file mode 100644 (file)
index 0737027..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-#ifndef CRYPTOPP_CONFIG_H
-#define CRYPTOPP_CONFIG_H
-
-//// Bitcoin: disable SSE2 on 32-bit
-#if !defined(_M_X64) && !defined(__x86_64__)
-#define CRYPTOPP_DISABLE_SSE2  1
-#endif
-//////////// end of Bitcoin changes
-
-
-// ***************** Important Settings ********************
-
-// define this if running on a big-endian CPU
-#if !defined(IS_LITTLE_ENDIAN) && (defined(__BIG_ENDIAN__) || defined(__sparc) || defined(__sparc__) || defined(__hppa__) || defined(__mips__) || (defined(__MWERKS__) && !defined(__INTEL__)))
-#      define IS_BIG_ENDIAN
-#endif
-
-// define this if running on a little-endian CPU
-// big endian will be assumed if IS_LITTLE_ENDIAN is not defined
-#ifndef IS_BIG_ENDIAN
-#      define IS_LITTLE_ENDIAN
-#endif
-
-// define this if you want to disable all OS-dependent features,
-// such as sockets and OS-provided random number generators
-// #define NO_OS_DEPENDENCE
-
-// Define this to use features provided by Microsoft's CryptoAPI.
-// Currently the only feature used is random number generation.
-// This macro will be ignored if NO_OS_DEPENDENCE is defined.
-#define USE_MS_CRYPTOAPI
-
-// Define this to 1 to enforce the requirement in FIPS 186-2 Change Notice 1 that only 1024 bit moduli be used
-#ifndef DSA_1024_BIT_MODULUS_ONLY
-#      define DSA_1024_BIT_MODULUS_ONLY 1
-#endif
-
-// ***************** Less Important Settings ***************
-
-// define this to retain (as much as possible) old deprecated function and class names
-// #define CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-
-#define GZIP_OS_CODE 0
-
-// Try this if your CPU has 256K internal cache or a slow multiply instruction
-// and you want a (possibly) faster IDEA implementation using log tables
-// #define IDEA_LARGECACHE
-
-// Define this if, for the linear congruential RNG, you want to use
-// the original constants as specified in S.K. Park and K.W. Miller's
-// CACM paper.
-// #define LCRNG_ORIGINAL_NUMBERS
-
-// choose which style of sockets to wrap (mostly useful for cygwin which has both)
-#define PREFER_BERKELEY_STYLE_SOCKETS
-// #define PREFER_WINDOWS_STYLE_SOCKETS
-
-// set the name of Rijndael cipher, was "Rijndael" before version 5.3
-#define CRYPTOPP_RIJNDAEL_NAME "AES"
-
-// ***************** Important Settings Again ********************
-// But the defaults should be ok.
-
-// namespace support is now required
-#ifdef NO_NAMESPACE
-#      error namespace support is now required
-#endif
-
-// Define this to workaround a Microsoft CryptoAPI bug where
-// each call to CryptAcquireContext causes a 100 KB memory leak.
-// Defining this will cause Crypto++ to make only one call to CryptAcquireContext.
-#define WORKAROUND_MS_BUG_Q258000
-
-#ifdef CRYPTOPP_DOXYGEN_PROCESSING
-// Avoid putting "CryptoPP::" in front of everything in Doxygen output
-#      define CryptoPP
-#      define NAMESPACE_BEGIN(x)
-#      define NAMESPACE_END
-// Get Doxygen to generate better documentation for these typedefs
-#      define DOCUMENTED_TYPEDEF(x, y) class y : public x {};
-#else
-#      define NAMESPACE_BEGIN(x) namespace x {
-#      define NAMESPACE_END }
-#      define DOCUMENTED_TYPEDEF(x, y) typedef x y;
-#endif
-#define ANONYMOUS_NAMESPACE_BEGIN namespace {
-#define USING_NAMESPACE(x) using namespace x;
-#define DOCUMENTED_NAMESPACE_BEGIN(x) namespace x {
-#define DOCUMENTED_NAMESPACE_END }
-
-// What is the type of the third parameter to bind?
-// For Unix, the new standard is ::socklen_t (typically unsigned int), and the old standard is int.
-// Unfortunately there is no way to tell whether or not socklen_t is defined.
-// To work around this, TYPE_OF_SOCKLEN_T is a macro so that you can change it from the makefile.
-#ifndef TYPE_OF_SOCKLEN_T
-#      if defined(_WIN32) || defined(__CYGWIN__)
-#              define TYPE_OF_SOCKLEN_T int
-#      else
-#              define TYPE_OF_SOCKLEN_T ::socklen_t
-#      endif
-#endif
-
-#if defined(__CYGWIN__) && defined(PREFER_WINDOWS_STYLE_SOCKETS)
-#      define __USE_W32_SOCKETS
-#endif
-
-typedef unsigned char byte;            // put in global namespace to avoid ambiguity with other byte typedefs
-
-NAMESPACE_BEGIN(CryptoPP)
-
-typedef unsigned short word16;
-typedef unsigned int word32;
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-       typedef unsigned __int64 word64;
-       #define W64LIT(x) x##ui64
-#else
-       typedef unsigned long long word64;
-       #define W64LIT(x) x##ULL
-#endif
-
-// define large word type, used for file offsets and such
-typedef word64 lword;
-const lword LWORD_MAX = W64LIT(0xffffffffffffffff);
-
-#ifdef __GNUC__
-       #define CRYPTOPP_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
-#endif
-
-// define hword, word, and dword. these are used for multiprecision integer arithmetic
-// Intel compiler won't have _umul128 until version 10.0. See http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30231625.aspx
-#if (defined(_MSC_VER) && (!defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1000) && (defined(_M_X64) || defined(_M_IA64))) || (defined(__DECCXX) && defined(__alpha__)) || (defined(__INTEL_COMPILER) && defined(__x86_64__)) || (defined(__SUNPRO_CC) && defined(__x86_64__))
-       typedef word32 hword;
-       typedef word64 word;
-#else
-       #define CRYPTOPP_NATIVE_DWORD_AVAILABLE
-       #if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || defined(__x86_64__) || defined(__mips64) || defined(__sparc64__)
-               #if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !(CRYPTOPP_GCC_VERSION == 40001 && defined(__APPLE__)) && CRYPTOPP_GCC_VERSION >= 30400
-                       // GCC 4.0.1 on MacOS X is missing __umodti3 and __udivti3
-                       // mode(TI) division broken on amd64 with GCC earlier than GCC 3.4
-                       typedef word32 hword;
-                       typedef word64 word;
-                       typedef __uint128_t dword;
-                       typedef __uint128_t word128;
-                       #define CRYPTOPP_WORD128_AVAILABLE
-               #else
-                       // if we're here, it means we're on a 64-bit CPU but we don't have a way to obtain 128-bit multiplication results
-                       typedef word16 hword;
-                       typedef word32 word;
-                       typedef word64 dword;
-               #endif
-       #else
-               // being here means the native register size is probably 32 bits or less
-               #define CRYPTOPP_BOOL_SLOW_WORD64 1
-               typedef word16 hword;
-               typedef word32 word;
-               typedef word64 dword;
-       #endif
-#endif
-#ifndef CRYPTOPP_BOOL_SLOW_WORD64
-       #define CRYPTOPP_BOOL_SLOW_WORD64 0
-#endif
-
-const unsigned int WORD_SIZE = sizeof(word);
-const unsigned int WORD_BITS = WORD_SIZE * 8;
-
-NAMESPACE_END
-
-#ifndef CRYPTOPP_L1_CACHE_LINE_SIZE
-       // This should be a lower bound on the L1 cache line size. It's used for defense against timing attacks.
-       #if defined(_M_X64) || defined(__x86_64__)
-               #define CRYPTOPP_L1_CACHE_LINE_SIZE 64
-       #else
-               // L1 cache line size is 32 on Pentium III and earlier
-               #define CRYPTOPP_L1_CACHE_LINE_SIZE 32
-       #endif
-#endif
-
-#if defined(_MSC_VER)
-       #if _MSC_VER == 1200
-               #include <malloc.h>
-       #endif
-       #if _MSC_VER > 1200 || defined(_mm_free)
-               #define CRYPTOPP_MSVC6PP_OR_LATER               // VC 6 processor pack or later
-       #else
-               #define CRYPTOPP_MSVC6_NO_PP                    // VC 6 without processor pack
-       #endif
-#endif
-
-#ifndef CRYPTOPP_ALIGN_DATA
-       #if defined(CRYPTOPP_MSVC6PP_OR_LATER)
-               #define CRYPTOPP_ALIGN_DATA(x) __declspec(align(x))
-       #elif defined(__GNUC__)
-               #define CRYPTOPP_ALIGN_DATA(x) __attribute__((aligned(x)))
-       #else
-               #define CRYPTOPP_ALIGN_DATA(x)
-       #endif
-#endif
-
-#ifndef CRYPTOPP_SECTION_ALIGN16
-       #if defined(__GNUC__) && !defined(__APPLE__)
-               // the alignment attribute doesn't seem to work without this section attribute when -fdata-sections is turned on
-               #define CRYPTOPP_SECTION_ALIGN16 __attribute__((section ("CryptoPP_Align16")))
-       #else
-               #define CRYPTOPP_SECTION_ALIGN16
-       #endif
-#endif
-
-#if defined(_MSC_VER) || defined(__fastcall)
-       #define CRYPTOPP_FASTCALL __fastcall
-#else
-       #define CRYPTOPP_FASTCALL
-#endif
-
-// VC60 workaround: it doesn't allow typename in some places
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
-#define CPP_TYPENAME
-#else
-#define CPP_TYPENAME typename
-#endif
-
-// VC60 workaround: can't cast unsigned __int64 to float or double
-#if defined(_MSC_VER) && !defined(CRYPTOPP_MSVC6PP_OR_LATER)
-#define CRYPTOPP_VC6_INT64 (__int64)
-#else
-#define CRYPTOPP_VC6_INT64
-#endif
-
-#ifdef _MSC_VER
-#define CRYPTOPP_NO_VTABLE __declspec(novtable)
-#else
-#define CRYPTOPP_NO_VTABLE
-#endif
-
-#ifdef _MSC_VER
-       // 4231: nonstandard extension used : 'extern' before template explicit instantiation
-       // 4250: dominance
-       // 4251: member needs to have dll-interface
-       // 4275: base needs to have dll-interface
-       // 4660: explicitly instantiating a class that's already implicitly instantiated
-       // 4661: no suitable definition provided for explicit template instantiation request
-       // 4786: identifer was truncated in debug information
-       // 4355: 'this' : used in base member initializer list
-       // 4910: '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation
-#      pragma warning(disable: 4231 4250 4251 4275 4660 4661 4786 4355 4910)
-#endif
-
-#ifdef __BORLANDC__
-// 8037: non-const function called for const object. needed to work around BCB2006 bug
-#      pragma warn -8037
-#endif
-
-#if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__MWERKS__) || defined(_STLPORT_VERSION)
-#define CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION
-#endif
-
-#ifndef CRYPTOPP_DISABLE_UNCAUGHT_EXCEPTION
-#define CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE
-#endif
-
-#ifdef CRYPTOPP_DISABLE_X86ASM         // for backwards compatibility: this macro had both meanings
-#define CRYPTOPP_DISABLE_ASM
-#define CRYPTOPP_DISABLE_SSE2
-#endif
-
-#if !defined(CRYPTOPP_DISABLE_ASM) && ((defined(_MSC_VER) && defined(_M_IX86)) || (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))))
-       #define CRYPTOPP_X86_ASM_AVAILABLE
-
-       #if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(CRYPTOPP_MSVC6PP_OR_LATER) || CRYPTOPP_GCC_VERSION >= 30300)
-               #define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 1
-       #else
-               #define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 0
-       #endif
-
-       // SSSE3 was actually introduced in GNU as 2.17, which was released 6/23/2006, but we can't tell what version of binutils is installed.
-       // GCC 4.1.2 was released on 2/13/2007, so we'll use that as a proxy for the binutils version.
-       #if !defined(CRYPTOPP_DISABLE_SSSE3) && (_MSC_VER >= 1400 || CRYPTOPP_GCC_VERSION >= 40102)
-               #define CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE 1
-       #else
-               #define CRYPTOPP_BOOL_SSSE3_ASM_AVAILABLE 0
-       #endif
-#endif
-
-#if !defined(CRYPTOPP_DISABLE_ASM) && defined(_MSC_VER) && defined(_M_X64)
-       #define CRYPTOPP_X64_MASM_AVAILABLE
-#endif
-
-#if !defined(CRYPTOPP_DISABLE_ASM) && defined(__GNUC__) && defined(__x86_64__)
-       #define CRYPTOPP_X64_ASM_AVAILABLE
-#endif
-
-#if !defined(CRYPTOPP_DISABLE_SSE2) && (defined(CRYPTOPP_MSVC6PP_OR_LATER) || defined(__SSE2__))
-       #define CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE 1
-#else
-       #define CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE 0
-#endif
-
-#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE || CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE || defined(CRYPTOPP_X64_MASM_AVAILABLE)
-       #define CRYPTOPP_BOOL_ALIGN16_ENABLED 1
-#else
-       #define CRYPTOPP_BOOL_ALIGN16_ENABLED 0
-#endif
-
-// how to allocate 16-byte aligned memory (for SSE2)
-#if defined(CRYPTOPP_MSVC6PP_OR_LATER)
-       #define CRYPTOPP_MM_MALLOC_AVAILABLE
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
-       #define CRYPTOPP_MALLOC_ALIGNMENT_IS_16
-#elif defined(__linux__) || defined(__sun__) || defined(__CYGWIN__)
-       #define CRYPTOPP_MEMALIGN_AVAILABLE
-#else
-       #define CRYPTOPP_NO_ALIGNED_ALLOC
-#endif
-
-// how to disable inlining
-#if defined(_MSC_VER) && _MSC_VER >= 1300
-#      define CRYPTOPP_NOINLINE_DOTDOTDOT
-#      define CRYPTOPP_NOINLINE __declspec(noinline)
-#elif defined(__GNUC__)
-#      define CRYPTOPP_NOINLINE_DOTDOTDOT
-#      define CRYPTOPP_NOINLINE __attribute__((noinline))
-#else
-#      define CRYPTOPP_NOINLINE_DOTDOTDOT ...
-#      define CRYPTOPP_NOINLINE 
-#endif
-
-// how to declare class constants
-#if (defined(_MSC_VER) && _MSC_VER <= 1300) || defined(__INTEL_COMPILER)
-#      define CRYPTOPP_CONSTANT(x) enum {x};
-#else
-#      define CRYPTOPP_CONSTANT(x) static const int x;
-#endif
-
-#if defined(_M_X64) || defined(__x86_64__)
-       #define CRYPTOPP_BOOL_X64 1
-#else
-       #define CRYPTOPP_BOOL_X64 0
-#endif
-
-// see http://predef.sourceforge.net/prearch.html
-#if defined(_M_IX86) || defined(__i386__) || defined(__i386) || defined(_X86_) || defined(__I86__) || defined(__INTEL__)
-       #define CRYPTOPP_BOOL_X86 1
-#else
-       #define CRYPTOPP_BOOL_X86 0
-#endif
-
-#if CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X86 || defined(__powerpc__)
-       #define CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-#endif
-
-#define CRYPTOPP_VERSION 560
-
-// ***************** determine availability of OS features ********************
-
-#ifndef NO_OS_DEPENDENCE
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define CRYPTOPP_WIN32_AVAILABLE
-#endif
-
-#if defined(__unix__) || defined(__MACH__) || defined(__NetBSD__) || defined(__sun)
-#define CRYPTOPP_UNIX_AVAILABLE
-#endif
-
-#if defined(CRYPTOPP_WIN32_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE)
-#      define HIGHRES_TIMER_AVAILABLE
-#endif
-
-#ifdef CRYPTOPP_UNIX_AVAILABLE
-#      define HAS_BERKELEY_STYLE_SOCKETS
-#endif
-
-#ifdef CRYPTOPP_WIN32_AVAILABLE
-#      define HAS_WINDOWS_STYLE_SOCKETS
-#endif
-
-#if defined(HIGHRES_TIMER_AVAILABLE) && (defined(HAS_BERKELEY_STYLE_SOCKETS) || defined(HAS_WINDOWS_STYLE_SOCKETS))
-#      define SOCKETS_AVAILABLE
-#endif
-
-#if defined(HAS_WINDOWS_STYLE_SOCKETS) && (!defined(HAS_BERKELEY_STYLE_SOCKETS) || defined(PREFER_WINDOWS_STYLE_SOCKETS))
-#      define USE_WINDOWS_STYLE_SOCKETS
-#else
-#      define USE_BERKELEY_STYLE_SOCKETS
-#endif
-
-#if defined(HIGHRES_TIMER_AVAILABLE) && defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(USE_BERKELEY_STYLE_SOCKETS)
-#      define WINDOWS_PIPES_AVAILABLE
-#endif
-
-#if defined(CRYPTOPP_WIN32_AVAILABLE) && defined(USE_MS_CRYPTOAPI)
-#      define NONBLOCKING_RNG_AVAILABLE
-#      define OS_RNG_AVAILABLE
-#endif
-
-#if defined(CRYPTOPP_UNIX_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING)
-#      define NONBLOCKING_RNG_AVAILABLE
-#      define BLOCKING_RNG_AVAILABLE
-#      define OS_RNG_AVAILABLE
-#      define HAS_PTHREADS
-#      define THREADS_AVAILABLE
-#endif
-
-#ifdef CRYPTOPP_WIN32_AVAILABLE
-#      define HAS_WINTHREADS
-#      define THREADS_AVAILABLE
-#endif
-
-#endif // NO_OS_DEPENDENCE
-
-// ***************** DLL related ********************
-
-#ifdef CRYPTOPP_WIN32_AVAILABLE
-
-#ifdef CRYPTOPP_EXPORTS
-#define CRYPTOPP_IS_DLL
-#define CRYPTOPP_DLL __declspec(dllexport)
-#elif defined(CRYPTOPP_IMPORTS)
-#define CRYPTOPP_IS_DLL
-#define CRYPTOPP_DLL __declspec(dllimport)
-#else
-#define CRYPTOPP_DLL
-#endif
-
-#define CRYPTOPP_API __cdecl
-
-#else  // CRYPTOPP_WIN32_AVAILABLE
-
-#define CRYPTOPP_DLL
-#define CRYPTOPP_API
-
-#endif // CRYPTOPP_WIN32_AVAILABLE
-
-#if defined(__MWERKS__)
-#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern class CRYPTOPP_DLL
-#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
-#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL
-#else
-#define CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS extern template class CRYPTOPP_DLL
-#endif
-
-#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_IMPORTS)
-#define CRYPTOPP_DLL_TEMPLATE_CLASS template class CRYPTOPP_DLL
-#else
-#define CRYPTOPP_DLL_TEMPLATE_CLASS CRYPTOPP_EXTERN_DLL_TEMPLATE_CLASS
-#endif
-
-#if defined(__MWERKS__)
-#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern class
-#elif defined(__BORLANDC__) || defined(__SUNPRO_CC)
-#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS template class
-#else
-#define CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS extern template class
-#endif
-
-#if defined(CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES) && !defined(CRYPTOPP_EXPORTS)
-#define CRYPTOPP_STATIC_TEMPLATE_CLASS template class
-#else
-#define CRYPTOPP_STATIC_TEMPLATE_CLASS CRYPTOPP_EXTERN_STATIC_TEMPLATE_CLASS
-#endif
-
-#endif
diff --git a/src/cryptopp/cpu.cpp b/src/cryptopp/cpu.cpp
deleted file mode 100644 (file)
index 8789dc3..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-// cpu.cpp - written and placed in the public domain by Wei Dai
-
-#include "pch.h"
-
-#ifndef CRYPTOPP_IMPORTS
-
-#include "cpu.h"
-#include "misc.h"
-#include <algorithm>
-
-#ifdef __GNUC__
-#include <signal.h>
-#include <setjmp.h>
-#endif
-
-#ifdef CRYPTOPP_MSVC6PP_OR_LATER
-#include <emmintrin.h>
-#endif
-
-NAMESPACE_BEGIN(CryptoPP)
-
-#ifdef CRYPTOPP_X86_ASM_AVAILABLE
-
-#ifndef _MSC_VER
-typedef void (*SigHandler)(int);
-
-static jmp_buf s_jmpNoCPUID;
-static void SigIllHandlerCPUID(int)
-{
-       longjmp(s_jmpNoCPUID, 1);
-}
-#endif
-
-bool CpuId(word32 input, word32 *output)
-{
-#ifdef _MSC_VER
-    __try
-       {
-               __asm
-               {
-                       mov eax, input
-                       cpuid
-                       mov edi, output
-                       mov [edi], eax
-                       mov [edi+4], ebx
-                       mov [edi+8], ecx
-                       mov [edi+12], edx
-               }
-       }
-    __except (1)
-       {
-               return false;
-    }
-       return true;
-#else
-       SigHandler oldHandler = signal(SIGILL, SigIllHandlerCPUID);
-       if (oldHandler == SIG_ERR)
-               return false;
-
-       bool result = true;
-       if (setjmp(s_jmpNoCPUID))
-               result = false;
-       else
-       {
-               __asm__
-               (
-                       // save ebx in case -fPIC is being used
-#if CRYPTOPP_BOOL_X86
-                       "push %%ebx; cpuid; mov %%ebx, %%edi; pop %%ebx"
-#else
-                       "pushq %%rbx; cpuid; mov %%ebx, %%edi; popq %%rbx"
-#endif
-                       : "=a" (output[0]), "=D" (output[1]), "=c" (output[2]), "=d" (output[3])
-                       : "a" (input)
-               );
-       }
-
-       signal(SIGILL, oldHandler);
-       return result;
-#endif
-}
-
-#if !CRYPTOPP_BOOL_X64 && !defined(_MSC_VER) && defined(__GNUC__)
-static jmp_buf s_jmpNoSSE2;
-static void SigIllHandlerSSE2(int)
-{
-       longjmp(s_jmpNoSSE2, 1);
-}
-#endif
-
-#elif _MSC_VER >= 1400 && CRYPTOPP_BOOL_X64
-
-bool CpuId(word32 input, word32 *output)
-{
-       __cpuid((int *)output, input);
-       return true;
-}
-
-#endif
-
-#ifdef CRYPTOPP_CPUID_AVAILABLE
-
-static bool TrySSE2()
-{
-#if CRYPTOPP_BOOL_X64
-       return true;
-#elif defined(_MSC_VER)
-    __try
-       {
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-        AS2(por xmm0, xmm0)        // executing SSE2 instruction
-#elif CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
-               __mm128i x = _mm_setzero_si128();
-               return _mm_cvtsi128_si32(x) == 0;
-#endif
-       }
-    __except (1)
-       {
-               return false;
-    }
-       return true;
-#elif defined(__GNUC__)
-       SigHandler oldHandler = signal(SIGILL, SigIllHandlerSSE2);
-       if (oldHandler == SIG_ERR)
-               return false;
-
-       bool result = true;
-       if (setjmp(s_jmpNoSSE2))
-               result = false;
-       else
-       {
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-               __asm __volatile ("por %xmm0, %xmm0");
-#elif CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
-               __mm128i x = _mm_setzero_si128();
-               result = _mm_cvtsi128_si32(x) == 0;
-#endif
-       }
-
-       signal(SIGILL, oldHandler);
-       return result;
-#else
-       return false;
-#endif
-}
-
-bool g_x86DetectionDone = false;
-bool g_hasISSE = false, g_hasSSE2 = false, g_hasSSSE3 = false, g_hasMMX = false, g_isP4 = false;
-word32 g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
-
-void DetectX86Features()
-{
-       word32 cpuid[4], cpuid1[4];
-       if (!CpuId(0, cpuid))
-               return;
-       if (!CpuId(1, cpuid1))
-               return;
-
-       g_hasMMX = (cpuid1[3] & (1 << 23)) != 0;
-       if ((cpuid1[3] & (1 << 26)) != 0)
-               g_hasSSE2 = TrySSE2();
-       g_hasSSSE3 = g_hasSSE2 && (cpuid1[2] & (1<<9));
-
-       if ((cpuid1[3] & (1 << 25)) != 0)
-               g_hasISSE = true;
-       else
-       {
-               word32 cpuid2[4];
-               CpuId(0x080000000, cpuid2);
-               if (cpuid2[0] >= 0x080000001)
-               {
-                       CpuId(0x080000001, cpuid2);
-                       g_hasISSE = (cpuid2[3] & (1 << 22)) != 0;
-               }
-       }
-
-       std::swap(cpuid[2], cpuid[3]);
-       if (memcmp(cpuid+1, "GenuineIntel", 12) == 0)
-       {
-               g_isP4 = ((cpuid1[0] >> 8) & 0xf) == 0xf;
-               g_cacheLineSize = 8 * GETBYTE(cpuid1[1], 1);
-       }
-       else if (memcmp(cpuid+1, "AuthenticAMD", 12) == 0)
-       {
-               CpuId(0x80000005, cpuid);
-               g_cacheLineSize = GETBYTE(cpuid[2], 0);
-       }
-
-       if (!g_cacheLineSize)
-               g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
-
-       g_x86DetectionDone = true;
-}
-
-#endif
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/cpu.h b/src/cryptopp/cpu.h
deleted file mode 100644 (file)
index 7f01dad..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-#ifndef CRYPTOPP_CPU_H
-#define CRYPTOPP_CPU_H
-
-#ifdef CRYPTOPP_GENERATE_X64_MASM
-
-#define CRYPTOPP_X86_ASM_AVAILABLE
-#define CRYPTOPP_BOOL_X64 1
-#define CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE 1
-#define NAMESPACE_END
-
-#else
-
-#include "config.h"
-
-#ifdef CRYPTOPP_MSVC6PP_OR_LATER
-       #include <emmintrin.h>
-#endif
-
-NAMESPACE_BEGIN(CryptoPP)
-
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || (_MSC_VER >= 1400 && CRYPTOPP_BOOL_X64)
-
-#define CRYPTOPP_CPUID_AVAILABLE
-
-// these should not be used directly
-extern CRYPTOPP_DLL bool g_x86DetectionDone;
-extern CRYPTOPP_DLL bool g_hasSSE2;
-extern CRYPTOPP_DLL bool g_hasISSE;
-extern CRYPTOPP_DLL bool g_hasMMX;
-extern CRYPTOPP_DLL bool g_hasSSSE3;
-extern CRYPTOPP_DLL bool g_isP4;
-extern CRYPTOPP_DLL word32 g_cacheLineSize;
-CRYPTOPP_DLL void CRYPTOPP_API DetectX86Features();
-
-CRYPTOPP_DLL bool CRYPTOPP_API CpuId(word32 input, word32 *output);
-
-#if CRYPTOPP_BOOL_X64
-inline bool HasSSE2()  {return true;}
-inline bool HasISSE()  {return true;}
-inline bool HasMMX()   {return true;}
-#else
-
-inline bool HasSSE2()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_hasSSE2;
-}
-
-inline bool HasISSE()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_hasISSE;
-}
-
-inline bool HasMMX()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_hasMMX;
-}
-
-#endif
-
-inline bool HasSSSE3()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_hasSSSE3;
-}
-
-inline bool IsP4()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_isP4;
-}
-
-inline int GetCacheLineSize()
-{
-       if (!g_x86DetectionDone)
-               DetectX86Features();
-       return g_cacheLineSize;
-}
-
-#else
-
-inline int GetCacheLineSize()
-{
-       return CRYPTOPP_L1_CACHE_LINE_SIZE;
-}
-
-inline bool HasSSSE3() {return false;}
-inline bool IsP4()             {return false;}
-
-// assume MMX and SSE2 if intrinsics are enabled
-#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE || CRYPTOPP_BOOL_X64
-inline bool HasSSE2()  {return true;}
-inline bool HasISSE()  {return true;}
-inline bool HasMMX()   {return true;}
-#else
-inline bool HasSSE2()  {return false;}
-inline bool HasISSE()  {return false;}
-inline bool HasMMX()   {return false;}
-#endif
-
-#endif         // #ifdef CRYPTOPP_X86_ASM_AVAILABLE || _MSC_VER >= 1400
-
-#endif
-
-#ifdef CRYPTOPP_GENERATE_X64_MASM
-       #define AS1(x) x*newline*
-       #define AS2(x, y) x, y*newline*
-       #define AS3(x, y, z) x, y, z*newline*
-       #define ASS(x, y, a, b, c, d) x, y, a*64+b*16+c*4+d*newline*
-       #define ASL(x) label##x:*newline*
-       #define ASJ(x, y, z) x label##y*newline*
-       #define ASC(x, y) x label##y*newline*
-       #define AS_HEX(y) 0##y##h
-#elif defined(__GNUC__)
-       // define these in two steps to allow arguments to be expanded
-       #define GNU_AS1(x) #x ";"
-       #define GNU_AS2(x, y) #x ", " #y ";"
-       #define GNU_AS3(x, y, z) #x ", " #y ", " #z ";"
-       #define GNU_ASL(x) "\n" #x ":"
-       #define GNU_ASJ(x, y, z) #x " " #y #z ";"
-       #define AS1(x) GNU_AS1(x)
-       #define AS2(x, y) GNU_AS2(x, y)
-       #define AS3(x, y, z) GNU_AS3(x, y, z)
-       #define ASS(x, y, a, b, c, d) #x ", " #y ", " #a "*64+" #b "*16+" #c "*4+" #d ";"
-       #define ASL(x) GNU_ASL(x)
-       #define ASJ(x, y, z) GNU_ASJ(x, y, z)
-       #define ASC(x, y) #x " " #y ";"
-       #define CRYPTOPP_NAKED
-       #define AS_HEX(y) 0x##y
-#else
-       #define AS1(x) __asm {x}
-       #define AS2(x, y) __asm {x, y}
-       #define AS3(x, y, z) __asm {x, y, z}
-       #define ASS(x, y, a, b, c, d) __asm {x, y, _MM_SHUFFLE(a, b, c, d)}
-       #define ASL(x) __asm {label##x:}
-       #define ASJ(x, y, z) __asm {x label##y}
-       #define ASC(x, y) __asm {x label##y}
-       #define CRYPTOPP_NAKED __declspec(naked)
-       #define AS_HEX(y) 0x##y
-#endif
-
-#define IF0(y)
-#define IF1(y) y
-
-#ifdef CRYPTOPP_GENERATE_X64_MASM
-#define ASM_MOD(x, y) ((x) MOD (y))
-#define XMMWORD_PTR XMMWORD PTR
-#else
-// GNU assembler doesn't seem to have mod operator
-#define ASM_MOD(x, y) ((x)-((x)/(y))*(y))
-// GAS 2.15 doesn't support XMMWORD PTR. it seems necessary only for MASM
-#define XMMWORD_PTR
-#endif
-
-#if CRYPTOPP_BOOL_X86
-       #define AS_REG_1 ecx
-       #define AS_REG_2 edx
-       #define AS_REG_3 esi
-       #define AS_REG_4 edi
-       #define AS_REG_5 eax
-       #define AS_REG_6 ebx
-       #define AS_REG_7 ebp
-       #define AS_REG_1d ecx
-       #define AS_REG_2d edx
-       #define AS_REG_3d esi
-       #define AS_REG_4d edi
-       #define AS_REG_5d eax
-       #define AS_REG_6d ebx
-       #define AS_REG_7d ebp
-       #define WORD_SZ 4
-       #define WORD_REG(x)     e##x
-       #define WORD_PTR DWORD PTR
-       #define AS_PUSH_IF86(x) AS1(push e##x)
-       #define AS_POP_IF86(x) AS1(pop e##x)
-       #define AS_JCXZ jecxz
-#elif CRYPTOPP_BOOL_X64
-       #ifdef CRYPTOPP_GENERATE_X64_MASM
-               #define AS_REG_1 rcx
-               #define AS_REG_2 rdx
-               #define AS_REG_3 r8
-               #define AS_REG_4 r9
-               #define AS_REG_5 rax
-               #define AS_REG_6 r10
-               #define AS_REG_7 r11
-               #define AS_REG_1d ecx
-               #define AS_REG_2d edx
-               #define AS_REG_3d r8d
-               #define AS_REG_4d r9d
-               #define AS_REG_5d eax
-               #define AS_REG_6d r10d
-               #define AS_REG_7d r11d
-       #else
-               #define AS_REG_1 rdi
-               #define AS_REG_2 rsi
-               #define AS_REG_3 rdx
-               #define AS_REG_4 rcx
-               #define AS_REG_5 r8
-               #define AS_REG_6 r9
-               #define AS_REG_7 r10
-               #define AS_REG_1d edi
-               #define AS_REG_2d esi
-               #define AS_REG_3d edx
-               #define AS_REG_4d ecx
-               #define AS_REG_5d r8d
-               #define AS_REG_6d r9d
-               #define AS_REG_7d r10d
-       #endif
-       #define WORD_SZ 8
-       #define WORD_REG(x)     r##x
-       #define WORD_PTR QWORD PTR
-       #define AS_PUSH_IF86(x)
-       #define AS_POP_IF86(x)
-       #define AS_JCXZ jrcxz
-#endif
-
-// helper macro for stream cipher output
-#define AS_XMM_OUTPUT4(labelPrefix, inputPtr, outputPtr, x0, x1, x2, x3, t, p0, p1, p2, p3, increment)\
-       AS2(    test    inputPtr, inputPtr)\
-       ASC(    jz,             labelPrefix##3)\
-       AS2(    test    inputPtr, 15)\
-       ASC(    jnz,    labelPrefix##7)\
-       AS2(    pxor    xmm##x0, [inputPtr+p0*16])\
-       AS2(    pxor    xmm##x1, [inputPtr+p1*16])\
-       AS2(    pxor    xmm##x2, [inputPtr+p2*16])\
-       AS2(    pxor    xmm##x3, [inputPtr+p3*16])\
-       AS2(    add             inputPtr, increment*16)\
-       ASC(    jmp,    labelPrefix##3)\
-       ASL(labelPrefix##7)\
-       AS2(    movdqu  xmm##t, [inputPtr+p0*16])\
-       AS2(    pxor    xmm##x0, xmm##t)\
-       AS2(    movdqu  xmm##t, [inputPtr+p1*16])\
-       AS2(    pxor    xmm##x1, xmm##t)\
-       AS2(    movdqu  xmm##t, [inputPtr+p2*16])\
-       AS2(    pxor    xmm##x2, xmm##t)\
-       AS2(    movdqu  xmm##t, [inputPtr+p3*16])\
-       AS2(    pxor    xmm##x3, xmm##t)\
-       AS2(    add             inputPtr, increment*16)\
-       ASL(labelPrefix##3)\
-       AS2(    test    outputPtr, 15)\
-       ASC(    jnz,    labelPrefix##8)\
-       AS2(    movdqa  [outputPtr+p0*16], xmm##x0)\
-       AS2(    movdqa  [outputPtr+p1*16], xmm##x1)\
-       AS2(    movdqa  [outputPtr+p2*16], xmm##x2)\
-       AS2(    movdqa  [outputPtr+p3*16], xmm##x3)\
-       ASC(    jmp,    labelPrefix##9)\
-       ASL(labelPrefix##8)\
-       AS2(    movdqu  [outputPtr+p0*16], xmm##x0)\
-       AS2(    movdqu  [outputPtr+p1*16], xmm##x1)\
-       AS2(    movdqu  [outputPtr+p2*16], xmm##x2)\
-       AS2(    movdqu  [outputPtr+p3*16], xmm##x3)\
-       ASL(labelPrefix##9)\
-       AS2(    add             outputPtr, increment*16)
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/cryptlib.h b/src/cryptopp/cryptlib.h
deleted file mode 100644 (file)
index 15cd6da..0000000
+++ /dev/null
@@ -1,1668 +0,0 @@
-// cryptlib.h - written and placed in the public domain by Wei Dai
-/*! \file
-       This file contains the declarations for the abstract base
-       classes that provide a uniform interface to this library.
-*/
-
-/*!    \mainpage Crypto++ Library 5.6.0 API Reference
-<dl>
-<dt>Abstract Base Classes<dd>
-       cryptlib.h
-<dt>Authenticated Encryption<dd>
-       AuthenticatedSymmetricCipherDocumentation
-<dt>Symmetric Ciphers<dd>
-       SymmetricCipherDocumentation
-<dt>Hash Functions<dd>
-       SHA1, SHA224, SHA256, SHA384, SHA512, Tiger, Whirlpool, RIPEMD160, RIPEMD320, RIPEMD128, RIPEMD256, Weak1::MD2, Weak1::MD4, Weak1::MD5
-<dt>Non-Cryptographic Checksums<dd>
-       CRC32, Adler32
-<dt>Message Authentication Codes<dd>
-       VMAC, HMAC, CBC_MAC, CMAC, DMAC, TTMAC, GCM (GMAC)
-<dt>Random Number Generators<dd>
-       NullRNG(), LC_RNG, RandomPool, BlockingRng, NonblockingRng, AutoSeededRandomPool, AutoSeededX917RNG, DefaultAutoSeededRNG
-<dt>Password-based Cryptography<dd>
-       PasswordBasedKeyDerivationFunction
-<dt>Public Key Cryptosystems<dd>
-       DLIES, ECIES, LUCES, RSAES, RabinES, LUC_IES
-<dt>Public Key Signature Schemes<dd>
-       DSA, GDSA, ECDSA, NR, ECNR, LUCSS, RSASS, RSASS_ISO, RabinSS, RWSS, ESIGN
-<dt>Key Agreement<dd>
-       #DH, DH2, #MQV, ECDH, ECMQV, XTR_DH
-<dt>Algebraic Structures<dd>
-       Integer, PolynomialMod2, PolynomialOver, RingOfPolynomialsOver,
-       ModularArithmetic, MontgomeryRepresentation, GFP2_ONB,
-       GF2NP, GF256, GF2_32, EC2N, ECP
-<dt>Secret Sharing and Information Dispersal<dd>
-       SecretSharing, SecretRecovery, InformationDispersal, InformationRecovery
-<dt>Compression<dd>
-       Deflator, Inflator, Gzip, Gunzip, ZlibCompressor, ZlibDecompressor
-<dt>Input Source Classes<dd>
-       StringSource, ArraySource, FileSource, SocketSource, WindowsPipeSource, RandomNumberSource
-<dt>Output Sink Classes<dd>
-       StringSinkTemplate, ArraySink, FileSink, SocketSink, WindowsPipeSink, RandomNumberSink
-<dt>Filter Wrappers<dd>
-       StreamTransformationFilter, HashFilter, HashVerificationFilter, SignerFilter, SignatureVerificationFilter
-<dt>Binary to Text Encoders and Decoders<dd>
-       HexEncoder, HexDecoder, Base64Encoder, Base64Decoder, Base32Encoder, Base32Decoder
-<dt>Wrappers for OS features<dd>
-       Timer, Socket, WindowsHandle, ThreadLocalStorage, ThreadUserTimer
-<dt>FIPS 140 related<dd>
-       fips140.h
-</dl>
-
-In the FIPS 140-2 validated DLL version of Crypto++, only the following implementation class are available.
-<dl>
-<dt>Block Ciphers<dd>
-       AES, DES_EDE2, DES_EDE3, SKIPJACK
-<dt>Cipher Modes (replace template parameter BC with one of the block ciphers above)<dd>
-       ECB_Mode\<BC\>, CTR_Mode\<BC\>, CBC_Mode\<BC\>, CFB_FIPS_Mode\<BC\>, OFB_Mode\<BC\>
-<dt>Hash Functions<dd>
-       SHA1, SHA224, SHA256, SHA384, SHA512
-<dt>Public Key Signature Schemes (replace template parameter H with one of the hash functions above)<dd>
-       RSASS\<PKCS1v15, H\>, RSASS\<PSS, H\>, RSASS_ISO\<H\>, RWSS\<P1363_EMSA2, H\>, DSA, ECDSA\<ECP, H\>, ECDSA\<EC2N, H\>
-<dt>Message Authentication Codes (replace template parameter H with one of the hash functions above)<dd>
-       HMAC\<H\>, CBC_MAC\<DES_EDE2\>, CBC_MAC\<DES_EDE3\>
-<dt>Random Number Generators<dd>
-       DefaultAutoSeededRNG (AutoSeededX917RNG\<AES\>)
-<dt>Key Agreement<dd>
-       #DH
-<dt>Public Key Cryptosystems<dd>
-       RSAES\<OAEP\<SHA1\> \>
-</dl>
-
-<p>This reference manual is a work in progress. Some classes are still lacking detailed descriptions.
-<p>Click <a href="CryptoPPRef.zip">here</a> to download a zip archive containing this manual.
-<p>Thanks to Ryan Phillips for providing the Doxygen configuration file
-and getting me started with this manual.
-*/
-
-#ifndef CRYPTOPP_CRYPTLIB_H
-#define CRYPTOPP_CRYPTLIB_H
-
-#include "config.h"
-#include "stdcpp.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-// forward declarations
-class Integer;
-class RandomNumberGenerator;
-class BufferedTransformation;
-
-//! used to specify a direction for a cipher to operate in (encrypt or decrypt)
-enum CipherDir {ENCRYPTION, DECRYPTION};
-
-//! used to represent infinite time
-const unsigned long INFINITE_TIME = ULONG_MAX;
-
-// VC60 workaround: using enums as template parameters causes problems
-template <typename ENUM_TYPE, int VALUE>
-struct EnumToType
-{
-       static ENUM_TYPE ToEnum() {return (ENUM_TYPE)VALUE;}
-};
-
-enum ByteOrder {LITTLE_ENDIAN_ORDER = 0, BIG_ENDIAN_ORDER = 1};
-typedef EnumToType<ByteOrder, LITTLE_ENDIAN_ORDER> LittleEndian;
-typedef EnumToType<ByteOrder, BIG_ENDIAN_ORDER> BigEndian;
-
-//! base class for all exceptions thrown by Crypto++
-class CRYPTOPP_DLL Exception : public std::exception
-{
-public:
-       //! error types
-       enum ErrorType {
-               //! a method is not implemented
-               NOT_IMPLEMENTED,
-               //! invalid function argument
-               INVALID_ARGUMENT,
-               //! BufferedTransformation received a Flush(true) signal but can't flush buffers
-               CANNOT_FLUSH,
-               //! data integerity check (such as CRC or MAC) failed
-               DATA_INTEGRITY_CHECK_FAILED,
-               //! received input data that doesn't conform to expected format
-               INVALID_DATA_FORMAT,
-               //! error reading from input device or writing to output device
-               IO_ERROR,
-               //! some error not belong to any of the above categories
-               OTHER_ERROR
-       };
-
-       explicit Exception(ErrorType errorType, const std::string &s) : m_errorType(errorType), m_what(s) {}
-       virtual ~Exception() throw() {}
-       const char *what() const throw() {return (m_what.c_str());}
-       const std::string &GetWhat() const {return m_what;}
-       void SetWhat(const std::string &s) {m_what = s;}
-       ErrorType GetErrorType() const {return m_errorType;}
-       void SetErrorType(ErrorType errorType) {m_errorType = errorType;}
-
-private:
-       ErrorType m_errorType;
-       std::string m_what;
-};
-
-//! exception thrown when an invalid argument is detected
-class CRYPTOPP_DLL InvalidArgument : public Exception
-{
-public:
-       explicit InvalidArgument(const std::string &s) : Exception(INVALID_ARGUMENT, s) {}
-};
-
-//! exception thrown when input data is received that doesn't conform to expected format
-class CRYPTOPP_DLL InvalidDataFormat : public Exception
-{
-public:
-       explicit InvalidDataFormat(const std::string &s) : Exception(INVALID_DATA_FORMAT, s) {}
-};
-
-//! exception thrown by decryption filters when trying to decrypt an invalid ciphertext
-class CRYPTOPP_DLL InvalidCiphertext : public InvalidDataFormat
-{
-public:
-       explicit InvalidCiphertext(const std::string &s) : InvalidDataFormat(s) {}
-};
-
-//! exception thrown by a class if a non-implemented method is called
-class CRYPTOPP_DLL NotImplemented : public Exception
-{
-public:
-       explicit NotImplemented(const std::string &s) : Exception(NOT_IMPLEMENTED, s) {}
-};
-
-//! exception thrown by a class when Flush(true) is called but it can't completely flush its buffers
-class CRYPTOPP_DLL CannotFlush : public Exception
-{
-public:
-       explicit CannotFlush(const std::string &s) : Exception(CANNOT_FLUSH, s) {}
-};
-
-//! error reported by the operating system
-class CRYPTOPP_DLL OS_Error : public Exception
-{
-public:
-       OS_Error(ErrorType errorType, const std::string &s, const std::string& operation, int errorCode)
-               : Exception(errorType, s), m_operation(operation), m_errorCode(errorCode) {}
-       ~OS_Error() throw() {}
-
-       // the operating system API that reported the error
-       const std::string & GetOperation() const {return m_operation;}
-       // the error code return by the operating system
-       int GetErrorCode() const {return m_errorCode;}
-
-protected:
-       std::string m_operation;
-       int m_errorCode;
-};
-
-//! used to return decoding results
-struct CRYPTOPP_DLL DecodingResult
-{
-       explicit DecodingResult() : isValidCoding(false), messageLength(0) {}
-       explicit DecodingResult(size_t len) : isValidCoding(true), messageLength(len) {}
-
-       bool operator==(const DecodingResult &rhs) const {return isValidCoding == rhs.isValidCoding && messageLength == rhs.messageLength;}
-       bool operator!=(const DecodingResult &rhs) const {return !operator==(rhs);}
-
-       bool isValidCoding;
-       size_t messageLength;
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-       operator size_t() const {return isValidCoding ? messageLength : 0;}
-#endif
-};
-
-//! interface for retrieving values given their names
-/*! \note This class is used to safely pass a variable number of arbitrarily typed arguments to functions
-       and to read values from keys and crypto parameters.
-       \note To obtain an object that implements NameValuePairs for the purpose of parameter
-       passing, use the MakeParameters() function.
-       \note To get a value from NameValuePairs, you need to know the name and the type of the value. 
-       Call GetValueNames() on a NameValuePairs object to obtain a list of value names that it supports.
-       Then look at the Name namespace documentation to see what the type of each value is, or
-       alternatively, call GetIntValue() with the value name, and if the type is not int, a
-       ValueTypeMismatch exception will be thrown and you can get the actual type from the exception object.
-*/
-class CRYPTOPP_NO_VTABLE NameValuePairs
-{
-public:
-       virtual ~NameValuePairs() {}
-
-       //! exception thrown when trying to retrieve a value using a different type than expected
-       class CRYPTOPP_DLL ValueTypeMismatch : public InvalidArgument
-       {
-       public:
-               ValueTypeMismatch(const std::string &name, const std::type_info &stored, const std::type_info &retrieving)
-                       : InvalidArgument("NameValuePairs: type mismatch for '" + name + "', stored '" + stored.name() + "', trying to retrieve '" + retrieving.name() + "'")
-                       , m_stored(stored), m_retrieving(retrieving) {}
-
-               const std::type_info & GetStoredTypeInfo() const {return m_stored;}
-               const std::type_info & GetRetrievingTypeInfo() const {return m_retrieving;}
-
-       private:
-               const std::type_info &m_stored;
-               const std::type_info &m_retrieving;
-       };
-
-       //! get a copy of this object or a subobject of it
-       template <class T>
-       bool GetThisObject(T &object) const
-       {
-               return GetValue((std::string("ThisObject:")+typeid(T).name()).c_str(), object);
-       }
-
-       //! get a pointer to this object, as a pointer to T
-       template <class T>
-       bool GetThisPointer(T *&p) const
-       {
-               return GetValue((std::string("ThisPointer:")+typeid(T).name()).c_str(), p);
-       }
-
-       //! get a named value, returns true if the name exists
-       template <class T>
-       bool GetValue(const char *name, T &value) const
-       {
-               return GetVoidValue(name, typeid(T), &value);
-       }
-
-       //! get a named value, returns the default if the name doesn't exist
-       template <class T>
-       T GetValueWithDefault(const char *name, T defaultValue) const
-       {
-               GetValue(name, defaultValue);
-               return defaultValue;
-       }
-
-       //! get a list of value names that can be retrieved
-       CRYPTOPP_DLL std::string GetValueNames() const
-               {std::string result; GetValue("ValueNames", result); return result;}
-
-       //! get a named value with type int
-       /*! used to ensure we don't accidentally try to get an unsigned int
-               or some other type when we mean int (which is the most common case) */
-       CRYPTOPP_DLL bool GetIntValue(const char *name, int &value) const
-               {return GetValue(name, value);}
-
-       //! get a named value with type int, with default
-       CRYPTOPP_DLL int GetIntValueWithDefault(const char *name, int defaultValue) const
-               {return GetValueWithDefault(name, defaultValue);}
-
-       //! used by derived classes to check for type mismatch
-       CRYPTOPP_DLL static void CRYPTOPP_API ThrowIfTypeMismatch(const char *name, const std::type_info &stored, const std::type_info &retrieving)
-               {if (stored != retrieving) throw ValueTypeMismatch(name, stored, retrieving);}
-
-       template <class T>
-       void GetRequiredParameter(const char *className, const char *name, T &value) const
-       {
-               if (!GetValue(name, value))
-                       throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'");
-       }
-
-       CRYPTOPP_DLL void GetRequiredIntParameter(const char *className, const char *name, int &value) const
-       {
-               if (!GetIntValue(name, value))
-                       throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'");
-       }
-
-       //! to be implemented by derived classes, users should use one of the above functions instead
-       CRYPTOPP_DLL virtual bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const =0;
-};
-
-//! namespace containing value name definitions
-/*!    value names, types and semantics:
-
-       ThisObject:ClassName (ClassName, copy of this object or a subobject)
-       ThisPointer:ClassName (const ClassName *, pointer to this object or a subobject)
-*/
-DOCUMENTED_NAMESPACE_BEGIN(Name)
-// more names defined in argnames.h
-DOCUMENTED_NAMESPACE_END
-
-//! empty set of name-value pairs
-class CRYPTOPP_DLL NullNameValuePairs : public NameValuePairs
-{
-public:
-       bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const {return false;}
-};
-
-//! _
-extern CRYPTOPP_DLL const NullNameValuePairs g_nullNameValuePairs;
-
-// ********************************************************
-
-//! interface for cloning objects, this is not implemented by most classes yet
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Clonable
-{
-public:
-       virtual ~Clonable() {}
-       //! this is not implemented by most classes yet
-       virtual Clonable* Clone() const {throw NotImplemented("Clone() is not implemented yet.");}      // TODO: make this =0
-};
-
-//! interface for all crypto algorithms
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE Algorithm : public Clonable
-{
-public:
-       /*! When FIPS 140-2 compliance is enabled and checkSelfTestStatus == true,
-               this constructor throws SelfTestFailure if the self test hasn't been run or fails. */
-       Algorithm(bool checkSelfTestStatus = true);
-       //! returns name of this algorithm, not universally implemented yet
-       virtual std::string AlgorithmName() const {return "unknown";}
-};
-
-//! keying interface for crypto algorithms that take byte strings as keys
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SimpleKeyingInterface
-{
-public:
-       virtual ~SimpleKeyingInterface() {}
-
-       //! returns smallest valid key length in bytes */
-       virtual size_t MinKeyLength() const =0;
-       //! returns largest valid key length in bytes */
-       virtual size_t MaxKeyLength() const =0;
-       //! returns default (recommended) key length in bytes */
-       virtual size_t DefaultKeyLength() const =0;
-
-       //! returns the smallest valid key length in bytes that is >= min(n, GetMaxKeyLength())
-       virtual size_t GetValidKeyLength(size_t n) const =0;
-
-       //! returns whether n is a valid key length
-       virtual bool IsValidKeyLength(size_t n) const
-               {return n == GetValidKeyLength(n);}
-
-       //! set or reset the key of this object
-       /*! \param params is used to specify Rounds, BlockSize, etc. */
-       virtual void SetKey(const byte *key, size_t length, const NameValuePairs &params = g_nullNameValuePairs);
-
-       //! calls SetKey() with an NameValuePairs object that just specifies "Rounds"
-       void SetKeyWithRounds(const byte *key, size_t length, int rounds);
-
-       //! calls SetKey() with an NameValuePairs object that just specifies "IV"
-       void SetKeyWithIV(const byte *key, size_t length, const byte *iv, size_t ivLength);
-
-       //! calls SetKey() with an NameValuePairs object that just specifies "IV"
-       void SetKeyWithIV(const byte *key, size_t length, const byte *iv)
-               {SetKeyWithIV(key, length, iv, IVSize());}
-
-       enum IV_Requirement {UNIQUE_IV = 0, RANDOM_IV, UNPREDICTABLE_RANDOM_IV, INTERNALLY_GENERATED_IV, NOT_RESYNCHRONIZABLE};
-       //! returns the minimal requirement for secure IVs
-       virtual IV_Requirement IVRequirement() const =0;
-
-       //! returns whether this object can be resynchronized (i.e. supports initialization vectors)
-       /*! If this function returns true, and no IV is passed to SetKey() and CanUseStructuredIVs()==true, an IV of all 0's will be assumed. */
-       bool IsResynchronizable() const {return IVRequirement() < NOT_RESYNCHRONIZABLE;}
-       //! returns whether this object can use random IVs (in addition to ones returned by GetNextIV)
-       bool CanUseRandomIVs() const {return IVRequirement() <= UNPREDICTABLE_RANDOM_IV;}
-       //! returns whether this object can use random but possibly predictable IVs (in addition to ones returned by GetNextIV)
-       bool CanUsePredictableIVs() const {return IVRequirement() <= RANDOM_IV;}
-       //! returns whether this object can use structured IVs, for example a counter (in addition to ones returned by GetNextIV)
-       bool CanUseStructuredIVs() const {return IVRequirement() <= UNIQUE_IV;}
-
-       virtual unsigned int IVSize() const {throw NotImplemented(GetAlgorithm().AlgorithmName() + ": this object doesn't support resynchronization");}
-       //! returns default length of IVs accepted by this object
-       unsigned int DefaultIVLength() const {return IVSize();}
-       //! returns minimal length of IVs accepted by this object
-       virtual unsigned int MinIVLength() const {return IVSize();}
-       //! returns maximal length of IVs accepted by this object
-       virtual unsigned int MaxIVLength() const {return IVSize();}
-       //! resynchronize with an IV. ivLength=-1 means use IVSize()
-       virtual void Resynchronize(const byte *iv, int ivLength=-1) {throw NotImplemented(GetAlgorithm().AlgorithmName() + ": this object doesn't support resynchronization");}
-       //! get a secure IV for the next message
-       /*! This method should be called after you finish encrypting one message and are ready to start the next one.
-               After calling it, you must call SetKey() or Resynchronize() before using this object again. 
-               This method is not implemented on decryption objects. */
-       virtual void GetNextIV(RandomNumberGenerator &rng, byte *IV);
-
-protected:
-       virtual const Algorithm & GetAlgorithm() const =0;
-       virtual void UncheckedSetKey(const byte *key, unsigned int length, const NameValuePairs &params) =0;
-
-       void ThrowIfInvalidKeyLength(size_t length);
-       void ThrowIfResynchronizable();                 // to be called when no IV is passed
-       void ThrowIfInvalidIV(const byte *iv);  // check for NULL IV if it can't be used
-       size_t ThrowIfInvalidIVLength(int size);
-       const byte * GetIVAndThrowIfInvalid(const NameValuePairs &params, size_t &size);
-       inline void AssertValidKeyLength(size_t length) const
-               {assert(IsValidKeyLength(length));}
-};
-
-//! interface for the data processing part of block ciphers
-
-/*! Classes derived from BlockTransformation are block ciphers
-       in ECB mode (for example the DES::Encryption class), which are stateless.
-       These classes should not be used directly, but only in combination with
-       a mode class (see CipherModeDocumentation in modes.h).
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockTransformation : public Algorithm
-{
-public:
-       //! encrypt or decrypt inBlock, xor with xorBlock, and write to outBlock
-       virtual void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const =0;
-
-       //! encrypt or decrypt one block
-       /*! \pre size of inBlock and outBlock == BlockSize() */
-       void ProcessBlock(const byte *inBlock, byte *outBlock) const
-               {ProcessAndXorBlock(inBlock, NULL, outBlock);}
-
-       //! encrypt or decrypt one block in place
-       void ProcessBlock(byte *inoutBlock) const
-               {ProcessAndXorBlock(inoutBlock, NULL, inoutBlock);}
-
-       //! block size of the cipher in bytes
-       virtual unsigned int BlockSize() const =0;
-
-       //! returns how inputs and outputs should be aligned for optimal performance
-       virtual unsigned int OptimalDataAlignment() const;
-
-       //! returns true if this is a permutation (i.e. there is an inverse transformation)
-       virtual bool IsPermutation() const {return true;}
-
-       //! returns true if this is an encryption object
-       virtual bool IsForwardTransformation() const =0;
-
-       //! return number of blocks that can be processed in parallel, for bit-slicing implementations
-       virtual unsigned int OptimalNumberOfParallelBlocks() const {return 1;}
-
-       enum {BT_InBlockIsCounter=1, BT_DontIncrementInOutPointers=2, BT_XorInput=4, BT_ReverseDirection=8} FlagsForAdvancedProcessBlocks;
-
-       //! encrypt and xor blocks according to flags (see FlagsForAdvancedProcessBlocks)
-       /*! /note If BT_InBlockIsCounter is set, last byte of inBlocks may be modified. */
-       virtual size_t AdvancedProcessBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const;
-
-       inline CipherDir GetCipherDirection() const {return IsForwardTransformation() ? ENCRYPTION : DECRYPTION;}
-};
-
-//! interface for the data processing part of stream ciphers
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE StreamTransformation : public Algorithm
-{
-public:
-       //! return a reference to this object, 
-       /*! This function is useful for passing a temporary StreamTransformation object to a 
-               function that takes a non-const reference. */
-       StreamTransformation& Ref() {return *this;}
-
-       //! returns block size, if input must be processed in blocks, otherwise 1
-       virtual unsigned int MandatoryBlockSize() const {return 1;}
-
-       //! returns the input block size that is most efficient for this cipher
-       /*! \note optimal input length is n * OptimalBlockSize() - GetOptimalBlockSizeUsed() for any n > 0 */
-       virtual unsigned int OptimalBlockSize() const {return MandatoryBlockSize();}
-       //! returns how much of the current block is used up
-       virtual unsigned int GetOptimalBlockSizeUsed() const {return 0;}
-
-       //! returns how input should be aligned for optimal performance
-       virtual unsigned int OptimalDataAlignment() const;
-
-       //! encrypt or decrypt an array of bytes of specified length
-       /*! \note either inString == outString, or they don't overlap */
-       virtual void ProcessData(byte *outString, const byte *inString, size_t length) =0;
-
-       //! for ciphers where the last block of data is special, encrypt or decrypt the last block of data
-       /*! For now the only use of this function is for CBC-CTS mode. */
-       virtual void ProcessLastBlock(byte *outString, const byte *inString, size_t length);
-       //! returns the minimum size of the last block, 0 indicating the last block is not special
-       virtual unsigned int MinLastBlockSize() const {return 0;}
-
-       //! same as ProcessData(inoutString, inoutString, length)
-       inline void ProcessString(byte *inoutString, size_t length)
-               {ProcessData(inoutString, inoutString, length);}
-       //! same as ProcessData(outString, inString, length)
-       inline void ProcessString(byte *outString, const byte *inString, size_t length)
-               {ProcessData(outString, inString, length);}
-       //! implemented as {ProcessData(&input, &input, 1); return input;}
-       inline byte ProcessByte(byte input)
-               {ProcessData(&input, &input, 1); return input;}
-
-       //! returns whether this cipher supports random access
-       virtual bool IsRandomAccess() const =0;
-       //! for random access ciphers, seek to an absolute position
-       virtual void Seek(lword n)
-       {
-               assert(!IsRandomAccess());
-               throw NotImplemented("StreamTransformation: this object doesn't support random access");
-       }
-
-       //! returns whether this transformation is self-inverting (e.g. xor with a keystream)
-       virtual bool IsSelfInverting() const =0;
-       //! returns whether this is an encryption object
-       virtual bool IsForwardTransformation() const =0;
-};
-
-//! interface for hash functions and data processing part of MACs
-
-/*! HashTransformation objects are stateful.  They are created in an initial state,
-       change state as Update() is called, and return to the initial
-       state when Final() is called.  This interface allows a large message to
-       be hashed in pieces by calling Update() on each piece followed by
-       calling Final().
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HashTransformation : public Algorithm
-{
-public:
-       //! return a reference to this object, 
-       /*! This function is useful for passing a temporary HashTransformation object to a 
-               function that takes a non-const reference. */
-       HashTransformation& Ref() {return *this;}
-
-       //! process more input
-       virtual void Update(const byte *input, size_t length) =0;
-
-       //! request space to write input into
-       virtual byte * CreateUpdateSpace(size_t &size) {size=0; return NULL;}
-
-       //! compute hash for current message, then restart for a new message
-       /*!     \pre size of digest == DigestSize(). */
-       virtual void Final(byte *digest)
-               {TruncatedFinal(digest, DigestSize());}
-
-       //! discard the current state, and restart with a new message
-       virtual void Restart()
-               {TruncatedFinal(NULL, 0);}
-
-       //! size of the hash/digest/MAC returned by Final()
-       virtual unsigned int DigestSize() const =0;
-
-       //! same as DigestSize()
-       unsigned int TagSize() const {return DigestSize();}
-
-
-       //! block size of underlying compression function, or 0 if not block based
-       virtual unsigned int BlockSize() const {return 0;}
-
-       //! input to Update() should have length a multiple of this for optimal speed
-       virtual unsigned int OptimalBlockSize() const {return 1;}
-
-       //! returns how input should be aligned for optimal performance
-       virtual unsigned int OptimalDataAlignment() const;
-
-       //! use this if your input is in one piece and you don't want to call Update() and Final() separately
-       virtual void CalculateDigest(byte *digest, const byte *input, size_t length)
-               {Update(input, length); Final(digest);}
-
-       //! verify that digest is a valid digest for the current message, then reinitialize the object
-       /*! Default implementation is to call Final() and do a bitwise comparison
-               between its output and digest. */
-       virtual bool Verify(const byte *digest)
-               {return TruncatedVerify(digest, DigestSize());}
-
-       //! use this if your input is in one piece and you don't want to call Update() and Verify() separately
-       virtual bool VerifyDigest(const byte *digest, const byte *input, size_t length)
-               {Update(input, length); return Verify(digest);}
-
-       //! truncated version of Final()
-       virtual void TruncatedFinal(byte *digest, size_t digestSize) =0;
-
-       //! truncated version of CalculateDigest()
-       virtual void CalculateTruncatedDigest(byte *digest, size_t digestSize, const byte *input, size_t length)
-               {Update(input, length); TruncatedFinal(digest, digestSize);}
-
-       //! truncated version of Verify()
-       virtual bool TruncatedVerify(const byte *digest, size_t digestLength);
-
-       //! truncated version of VerifyDigest()
-       virtual bool VerifyTruncatedDigest(const byte *digest, size_t digestLength, const byte *input, size_t length)
-               {Update(input, length); return TruncatedVerify(digest, digestLength);}
-
-protected:
-       void ThrowIfInvalidTruncatedSize(size_t size) const;
-};
-
-typedef HashTransformation HashFunction;
-
-//! interface for one direction (encryption or decryption) of a block cipher
-/*! \note These objects usually should not be used directly. See BlockTransformation for more details. */
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BlockCipher : public SimpleKeyingInterface, public BlockTransformation
-{
-protected:
-       const Algorithm & GetAlgorithm() const {return *this;}
-};
-
-//! interface for one direction (encryption or decryption) of a stream cipher or cipher mode
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SymmetricCipher : public SimpleKeyingInterface, public StreamTransformation
-{
-protected:
-       const Algorithm & GetAlgorithm() const {return *this;}
-};
-
-//! interface for message authentication codes
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE MessageAuthenticationCode : public SimpleKeyingInterface, public HashTransformation
-{
-protected:
-       const Algorithm & GetAlgorithm() const {return *this;}
-};
-
-//! interface for for one direction (encryption or decryption) of a stream cipher or block cipher mode with authentication
-/*! The StreamTransformation part of this interface is used to encrypt/decrypt the data, and the MessageAuthenticationCode part of this
-       interface is used to input additional authenticated data (AAD, which is MAC'ed but not encrypted), and to generate/verify the MAC. */
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AuthenticatedSymmetricCipher : public MessageAuthenticationCode, public StreamTransformation
-{
-public:
-       //! this indicates that a member function was called in the wrong state, for example trying to encrypt a message before having set the key or IV
-       class BadState : public Exception
-       {
-       public:
-               explicit BadState(const std::string &name, const char *message) : Exception(OTHER_ERROR, name + ": " + message) {}
-               explicit BadState(const std::string &name, const char *function, const char *state) : Exception(OTHER_ERROR, name + ": " + function + " was called before " + state) {}
-       };
-
-       //! the maximum length of AAD that can be input before the encrypted data
-       virtual lword MaxHeaderLength() const =0;
-       //! the maximum length of encrypted data
-       virtual lword MaxMessageLength() const =0;
-       //! the maximum length of AAD that can be input after the encrypted data
-       virtual lword MaxFooterLength() const {return 0;}
-       //! if this function returns true, SpecifyDataLengths() must be called before attempting to input data
-       /*! This is the case for some schemes, such as CCM. */
-       virtual bool NeedsPrespecifiedDataLengths() const {return false;}
-       //! this function only needs to be called if NeedsPrespecifiedDataLengths() returns true
-       void SpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength=0);
-       //! encrypt and generate MAC in one call. will truncate MAC if macSize < TagSize()
-       virtual void EncryptAndAuthenticate(byte *ciphertext, byte *mac, size_t macSize, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *message, size_t messageLength);
-       //! decrypt and verify MAC in one call, returning true iff MAC is valid. will assume MAC is truncated if macLength < TagSize()
-       virtual bool DecryptAndVerify(byte *message, const byte *mac, size_t macLength, const byte *iv, int ivLength, const byte *header, size_t headerLength, const byte *ciphertext, size_t ciphertextLength);
-
-       // redeclare this to avoid compiler ambiguity errors
-       virtual std::string AlgorithmName() const =0;
-
-protected:
-       const Algorithm & GetAlgorithm() const {return *static_cast<const MessageAuthenticationCode *>(this);}
-       virtual void UncheckedSpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength) {}
-};
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-typedef SymmetricCipher StreamCipher;
-#endif
-
-//! interface for random number generators
-/*! All return values are uniformly distributed over the range specified.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE RandomNumberGenerator : public Algorithm
-{
-public:
-       //! update RNG state with additional unpredictable values
-       virtual void IncorporateEntropy(const byte *input, size_t length) {throw NotImplemented("RandomNumberGenerator: IncorporateEntropy not implemented");}
-
-       //! returns true if IncorporateEntropy is implemented
-       virtual bool CanIncorporateEntropy() const {return false;}
-
-       //! generate new random byte and return it
-       virtual byte GenerateByte();
-
-       //! generate new random bit and return it
-       /*! Default implementation is to call GenerateByte() and return its lowest bit. */
-       virtual unsigned int GenerateBit();
-
-       //! generate a random 32 bit word in the range min to max, inclusive
-       virtual word32 GenerateWord32(word32 a=0, word32 b=0xffffffffL);
-
-       //! generate random array of bytes
-       virtual void GenerateBlock(byte *output, size_t size);
-
-       //! generate and discard n bytes
-       virtual void DiscardBytes(size_t n);
-
-       //! generate random bytes as input to a BufferedTransformation
-       virtual void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword length);
-
-       //! randomly shuffle the specified array, resulting permutation is uniformly distributed
-       template <class IT> void Shuffle(IT begin, IT end)
-       {
-               for (; begin != end; ++begin)
-                       std::iter_swap(begin, begin + GenerateWord32(0, end-begin-1));
-       }
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-       byte GetByte() {return GenerateByte();}
-       unsigned int GetBit() {return GenerateBit();}
-       word32 GetLong(word32 a=0, word32 b=0xffffffffL) {return GenerateWord32(a, b);}
-       word16 GetShort(word16 a=0, word16 b=0xffff) {return (word16)GenerateWord32(a, b);}
-       void GetBlock(byte *output, size_t size) {GenerateBlock(output, size);}
-#endif
-};
-
-//! returns a reference that can be passed to functions that ask for a RNG but doesn't actually use it
-CRYPTOPP_DLL RandomNumberGenerator & CRYPTOPP_API NullRNG();
-
-class WaitObjectContainer;
-class CallStack;
-
-//! interface for objects that you can wait for
-
-class CRYPTOPP_NO_VTABLE Waitable
-{
-public:
-       virtual ~Waitable() {}
-
-       //! maximum number of wait objects that this object can return
-       virtual unsigned int GetMaxWaitObjectCount() const =0;
-       //! put wait objects into container
-       /*! \param callStack is used for tracing no wait loops, example:
-                    something.GetWaitObjects(c, CallStack("my func after X", 0));
-                          - or in an outer GetWaitObjects() method that itself takes a callStack parameter:
-                            innerThing.GetWaitObjects(c, CallStack("MyClass::GetWaitObjects at X", &callStack)); */
-       virtual void GetWaitObjects(WaitObjectContainer &container, CallStack const& callStack) =0;
-       //! wait on this object
-       /*! same as creating an empty container, calling GetWaitObjects(), and calling Wait() on the container */
-       bool Wait(unsigned long milliseconds, CallStack const& callStack);
-};
-
-//! the default channel for BufferedTransformation, equal to the empty string
-extern CRYPTOPP_DLL const std::string DEFAULT_CHANNEL;
-
-//! channel for additional authenticated data, equal to "AAD"
-extern CRYPTOPP_DLL const std::string AAD_CHANNEL;
-
-//! interface for buffered transformations
-
-/*! BufferedTransformation is a generalization of BlockTransformation,
-       StreamTransformation, and HashTransformation.
-
-       A buffered transformation is an object that takes a stream of bytes
-       as input (this may be done in stages), does some computation on them, and
-       then places the result into an internal buffer for later retrieval.  Any
-       partial result already in the output buffer is not modified by further
-       input.
-
-       If a method takes a "blocking" parameter, and you
-       pass "false" for it, the method will return before all input has been processed if
-       the input cannot be processed without waiting (for network buffers to become available, for example).
-       In this case the method will return true
-       or a non-zero integer value. When this happens you must continue to call the method with the same
-       parameters until it returns false or zero, before calling any other method on it or
-       attached BufferedTransformation. The integer return value in this case is approximately
-       the number of bytes left to be processed, and can be used to implement a progress bar.
-
-       For functions that take a "propagation" parameter, propagation != 0 means pass on the signal to attached
-       BufferedTransformation objects, with propagation decremented at each step until it reaches 0.
-       -1 means unlimited propagation.
-
-       \nosubgrouping
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE BufferedTransformation : public Algorithm, public Waitable
-{
-public:
-       // placed up here for CW8
-       static const std::string &NULL_CHANNEL; // same as DEFAULT_CHANNEL, for backwards compatibility
-
-       BufferedTransformation() : Algorithm(false) {}
-
-       //! return a reference to this object
-       /*! This function is useful for passing a temporary BufferedTransformation object to a 
-               function that takes a non-const reference. */
-       BufferedTransformation& Ref() {return *this;}
-
-       //!     \name INPUT
-       //@{
-               //! input a byte for processing
-               size_t Put(byte inByte, bool blocking=true)
-                       {return Put(&inByte, 1, blocking);}
-               //! input multiple bytes
-               size_t Put(const byte *inString, size_t length, bool blocking=true)
-                       {return Put2(inString, length, 0, blocking);}
-
-               //! input a 16-bit word
-               size_t PutWord16(word16 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true);
-               //! input a 32-bit word
-               size_t PutWord32(word32 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true);
-
-               //! request space which can be written into by the caller, and then used as input to Put()
-               /*! \param size is requested size (as a hint) for input, and size of the returned space for output */
-               /*! \note The purpose of this method is to help avoid doing extra memory allocations. */
-               virtual byte * CreatePutSpace(size_t &size) {size=0; return NULL;}
-
-               virtual bool CanModifyInput() const {return false;}
-
-               //! input multiple bytes that may be modified by callee
-               size_t PutModifiable(byte *inString, size_t length, bool blocking=true)
-                       {return PutModifiable2(inString, length, 0, blocking);}
-
-               bool MessageEnd(int propagation=-1, bool blocking=true)
-                       {return !!Put2(NULL, 0, propagation < 0 ? -1 : propagation+1, blocking);}
-               size_t PutMessageEnd(const byte *inString, size_t length, int propagation=-1, bool blocking=true)
-                       {return Put2(inString, length, propagation < 0 ? -1 : propagation+1, blocking);}
-
-               //! input multiple bytes for blocking or non-blocking processing
-               /*! \param messageEnd means how many filters to signal MessageEnd to, including this one */
-               virtual size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) =0;
-               //! input multiple bytes that may be modified by callee for blocking or non-blocking processing
-               /*! \param messageEnd means how many filters to signal MessageEnd to, including this one */
-               virtual size_t PutModifiable2(byte *inString, size_t length, int messageEnd, bool blocking)
-                       {return Put2(inString, length, messageEnd, blocking);}
-
-               //! thrown by objects that have not implemented nonblocking input processing
-               struct BlockingInputOnly : public NotImplemented
-                       {BlockingInputOnly(const std::string &s) : NotImplemented(s + ": Nonblocking input is not implemented by this object.") {}};
-       //@}
-
-       //!     \name WAITING
-       //@{
-               unsigned int GetMaxWaitObjectCount() const;
-               void GetWaitObjects(WaitObjectContainer &container, CallStack const& callStack);
-       //@}
-
-       //!     \name SIGNALS
-       //@{
-               virtual void IsolatedInitialize(const NameValuePairs &parameters) {throw NotImplemented("BufferedTransformation: this object can't be reinitialized");}
-               virtual bool IsolatedFlush(bool hardFlush, bool blocking) =0;
-               virtual bool IsolatedMessageSeriesEnd(bool blocking) {return false;}
-
-               //! initialize or reinitialize this object
-               virtual void Initialize(const NameValuePairs &parameters=g_nullNameValuePairs, int propagation=-1);
-               //! flush buffered input and/or output
-               /*! \param hardFlush is used to indicate whether all data should be flushed
-                       \note Hard flushes must be used with care. It means try to process and output everything, even if
-                       there may not be enough data to complete the action. For example, hard flushing a HexDecoder would
-                       cause an error if you do it after inputing an odd number of hex encoded characters.
-                       For some types of filters, for example ZlibDecompressor, hard flushes can only
-                       be done at "synchronization points". These synchronization points are positions in the data
-                       stream that are created by hard flushes on the corresponding reverse filters, in this
-                       example ZlibCompressor. This is useful when zlib compressed data is moved across a
-                       network in packets and compression state is preserved across packets, as in the ssh2 protocol.
-               */
-               virtual bool Flush(bool hardFlush, int propagation=-1, bool blocking=true);
-               //! mark end of a series of messages
-               /*! There should be a MessageEnd immediately before MessageSeriesEnd. */
-               virtual bool MessageSeriesEnd(int propagation=-1, bool blocking=true);
-
-               //! set propagation of automatically generated and transferred signals
-               /*! propagation == 0 means do not automaticly generate signals */
-               virtual void SetAutoSignalPropagation(int propagation) {}
-
-               //!
-               virtual int GetAutoSignalPropagation() const {return 0;}
-public:
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-               void Close() {MessageEnd();}
-#endif
-       //@}
-
-       //!     \name RETRIEVAL OF ONE MESSAGE
-       //@{
-               //! returns number of bytes that is currently ready for retrieval
-               /*! All retrieval functions return the actual number of bytes
-                       retrieved, which is the lesser of the request number and
-                       MaxRetrievable(). */
-               virtual lword MaxRetrievable() const;
-
-               //! returns whether any bytes are currently ready for retrieval
-               virtual bool AnyRetrievable() const;
-
-               //! try to retrieve a single byte
-               virtual size_t Get(byte &outByte);
-               //! try to retrieve multiple bytes
-               virtual size_t Get(byte *outString, size_t getMax);
-
-               //! peek at the next byte without removing it from the output buffer
-               virtual size_t Peek(byte &outByte) const;
-               //! peek at multiple bytes without removing them from the output buffer
-               virtual size_t Peek(byte *outString, size_t peekMax) const;
-
-               //! try to retrieve a 16-bit word
-               size_t GetWord16(word16 &value, ByteOrder order=BIG_ENDIAN_ORDER);
-               //! try to retrieve a 32-bit word
-               size_t GetWord32(word32 &value, ByteOrder order=BIG_ENDIAN_ORDER);
-
-               //! try to peek at a 16-bit word
-               size_t PeekWord16(word16 &value, ByteOrder order=BIG_ENDIAN_ORDER) const;
-               //! try to peek at a 32-bit word
-               size_t PeekWord32(word32 &value, ByteOrder order=BIG_ENDIAN_ORDER) const;
-
-               //! move transferMax bytes of the buffered output to target as input
-               lword TransferTo(BufferedTransformation &target, lword transferMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL)
-                       {TransferTo2(target, transferMax, channel); return transferMax;}
-
-               //! discard skipMax bytes from the output buffer
-               virtual lword Skip(lword skipMax=LWORD_MAX);
-
-               //! copy copyMax bytes of the buffered output to target as input
-               lword CopyTo(BufferedTransformation &target, lword copyMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL) const
-                       {return CopyRangeTo(target, 0, copyMax, channel);}
-
-               //! copy copyMax bytes of the buffered output, starting at position (relative to current position), to target as input
-               lword CopyRangeTo(BufferedTransformation &target, lword position, lword copyMax=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL) const
-                       {lword i = position; CopyRangeTo2(target, i, i+copyMax, channel); return i-position;}
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-               unsigned long MaxRetrieveable() const {return MaxRetrievable();}
-#endif
-       //@}
-
-       //!     \name RETRIEVAL OF MULTIPLE MESSAGES
-       //@{
-               //!
-               virtual lword TotalBytesRetrievable() const;
-               //! number of times MessageEnd() has been received minus messages retrieved or skipped
-               virtual unsigned int NumberOfMessages() const;
-               //! returns true if NumberOfMessages() > 0
-               virtual bool AnyMessages() const;
-               //! start retrieving the next message
-               /*!
-                       Returns false if no more messages exist or this message 
-                       is not completely retrieved.
-               */
-               virtual bool GetNextMessage();
-               //! skip count number of messages
-               virtual unsigned int SkipMessages(unsigned int count=UINT_MAX);
-               //!
-               unsigned int TransferMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL)
-                       {TransferMessagesTo2(target, count, channel); return count;}
-               //!
-               unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const;
-
-               //!
-               virtual void SkipAll();
-               //!
-               void TransferAllTo(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL)
-                       {TransferAllTo2(target, channel);}
-               //!
-               void CopyAllTo(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL) const;
-
-               virtual bool GetNextMessageSeries() {return false;}
-               virtual unsigned int NumberOfMessagesInThisSeries() const {return NumberOfMessages();}
-               virtual unsigned int NumberOfMessageSeries() const {return 0;}
-       //@}
-
-       //!     \name NON-BLOCKING TRANSFER OF OUTPUT
-       //@{
-               //! upon return, byteCount contains number of bytes that have finished being transfered, and returns the number of bytes left in the current transfer block
-               virtual size_t TransferTo2(BufferedTransformation &target, lword &byteCount, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) =0;
-               //! upon return, begin contains the start position of data yet to be finished copying, and returns the number of bytes left in the current transfer block
-               virtual size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const =0;
-               //! upon return, messageCount contains number of messages that have finished being transfered, and returns the number of bytes left in the current transfer block
-               size_t TransferMessagesTo2(BufferedTransformation &target, unsigned int &messageCount, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true);
-               //! returns the number of bytes left in the current transfer block
-               size_t TransferAllTo2(BufferedTransformation &target, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true);
-       //@}
-
-       //!     \name CHANNELS
-       //@{
-               struct NoChannelSupport : public NotImplemented
-                       {NoChannelSupport(const std::string &name) : NotImplemented(name + ": this object doesn't support multiple channels") {}};
-               struct InvalidChannelName : public InvalidArgument
-                       {InvalidChannelName(const std::string &name, const std::string &channel) : InvalidArgument(name + ": unexpected channel name \"" + channel + "\"") {}};
-
-               size_t ChannelPut(const std::string &channel, byte inByte, bool blocking=true)
-                       {return ChannelPut(channel, &inByte, 1, blocking);}
-               size_t ChannelPut(const std::string &channel, const byte *inString, size_t length, bool blocking=true)
-                       {return ChannelPut2(channel, inString, length, 0, blocking);}
-
-               size_t ChannelPutModifiable(const std::string &channel, byte *inString, size_t length, bool blocking=true)
-                       {return ChannelPutModifiable2(channel, inString, length, 0, blocking);}
-
-               size_t ChannelPutWord16(const std::string &channel, word16 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true);
-               size_t ChannelPutWord32(const std::string &channel, word32 value, ByteOrder order=BIG_ENDIAN_ORDER, bool blocking=true);
-
-               bool ChannelMessageEnd(const std::string &channel, int propagation=-1, bool blocking=true)
-                       {return !!ChannelPut2(channel, NULL, 0, propagation < 0 ? -1 : propagation+1, blocking);}
-               size_t ChannelPutMessageEnd(const std::string &channel, const byte *inString, size_t length, int propagation=-1, bool blocking=true)
-                       {return ChannelPut2(channel, inString, length, propagation < 0 ? -1 : propagation+1, blocking);}
-
-               virtual byte * ChannelCreatePutSpace(const std::string &channel, size_t &size);
-
-               virtual size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking);
-               virtual size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking);
-
-               virtual bool ChannelFlush(const std::string &channel, bool hardFlush, int propagation=-1, bool blocking=true);
-               virtual bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true);
-
-               virtual void SetRetrievalChannel(const std::string &channel);
-       //@}
-
-       //!     \name ATTACHMENT
-       /*! Some BufferedTransformation objects (e.g. Filter objects)
-               allow other BufferedTransformation objects to be attached. When
-               this is done, the first object instead of buffering its output,
-               sents that output to the attached object as input. The entire
-               attachment chain is deleted when the anchor object is destructed.
-       */
-       //@{
-               //! returns whether this object allows attachment
-               virtual bool Attachable() {return false;}
-               //! returns the object immediately attached to this object or NULL for no attachment
-               virtual BufferedTransformation *AttachedTransformation() {assert(!Attachable()); return 0;}
-               //!
-               virtual const BufferedTransformation *AttachedTransformation() const
-                       {return const_cast<BufferedTransformation *>(this)->AttachedTransformation();}
-               //! delete the current attachment chain and replace it with newAttachment
-               virtual void Detach(BufferedTransformation *newAttachment = 0)
-                       {assert(!Attachable()); throw NotImplemented("BufferedTransformation: this object is not attachable");}
-               //! add newAttachment to the end of attachment chain
-               virtual void Attach(BufferedTransformation *newAttachment);
-       //@}
-
-protected:
-       static int DecrementPropagation(int propagation)
-               {return propagation != 0 ? propagation - 1 : 0;}
-
-private:
-       byte m_buf[4];  // for ChannelPutWord16 and ChannelPutWord32, to ensure buffer isn't deallocated before non-blocking operation completes
-};
-
-//! returns a reference to a BufferedTransformation object that discards all input
-BufferedTransformation & TheBitBucket();
-
-//! interface for crypto material, such as public and private keys, and crypto parameters
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CryptoMaterial : public NameValuePairs
-{
-public:
-       //! exception thrown when invalid crypto material is detected
-       class CRYPTOPP_DLL InvalidMaterial : public InvalidDataFormat
-       {
-       public:
-               explicit InvalidMaterial(const std::string &s) : InvalidDataFormat(s) {}
-       };
-
-       //! assign values from source to this object
-       /*! \note This function can be used to create a public key from a private key. */
-       virtual void AssignFrom(const NameValuePairs &source) =0;
-
-       //! check this object for errors
-       /*! \param level denotes the level of thoroughness:
-               0 - using this object won't cause a crash or exception (rng is ignored)
-               1 - this object will probably function (encrypt, sign, etc.) correctly (but may not check for weak keys and such)
-               2 - make sure this object will function correctly, and do reasonable security checks
-               3 - do checks that may take a long time
-               \return true if the tests pass */
-       virtual bool Validate(RandomNumberGenerator &rng, unsigned int level) const =0;
-
-       //! throws InvalidMaterial if this object fails Validate() test
-       virtual void ThrowIfInvalid(RandomNumberGenerator &rng, unsigned int level) const
-               {if (!Validate(rng, level)) throw InvalidMaterial("CryptoMaterial: this object contains invalid values");}
-
-//     virtual std::vector<std::string> GetSupportedFormats(bool includeSaveOnly=false, bool includeLoadOnly=false);
-
-       //! save key into a BufferedTransformation
-       virtual void Save(BufferedTransformation &bt) const
-               {throw NotImplemented("CryptoMaterial: this object does not support saving");}
-
-       //! load key from a BufferedTransformation
-       /*! \throws KeyingErr if decode fails
-               \note Generally does not check that the key is valid.
-                       Call ValidateKey() or ThrowIfInvalidKey() to check that. */
-       virtual void Load(BufferedTransformation &bt)
-               {throw NotImplemented("CryptoMaterial: this object does not support loading");}
-
-       //! \return whether this object supports precomputation
-       virtual bool SupportsPrecomputation() const {return false;}
-       //! do precomputation
-       /*! The exact semantics of Precompute() is varies, but
-               typically it means calculate a table of n objects
-               that can be used later to speed up computation. */
-       virtual void Precompute(unsigned int n)
-               {assert(!SupportsPrecomputation()); throw NotImplemented("CryptoMaterial: this object does not support precomputation");}
-       //! retrieve previously saved precomputation
-       virtual void LoadPrecomputation(BufferedTransformation &storedPrecomputation)
-               {assert(!SupportsPrecomputation()); throw NotImplemented("CryptoMaterial: this object does not support precomputation");}
-       //! save precomputation for later use
-       virtual void SavePrecomputation(BufferedTransformation &storedPrecomputation) const
-               {assert(!SupportsPrecomputation()); throw NotImplemented("CryptoMaterial: this object does not support precomputation");}
-
-       // for internal library use
-       void DoQuickSanityCheck() const {ThrowIfInvalid(NullRNG(), 0);}
-
-#if (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
-       // Sun Studio 11/CC 5.8 workaround: it generates incorrect code when casting to an empty virtual base class
-       char m_sunCCworkaround;
-#endif
-};
-
-//! interface for generatable crypto material, such as private keys and crypto parameters
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE GeneratableCryptoMaterial : virtual public CryptoMaterial
-{
-public:
-       //! generate a random key or crypto parameters
-       /*! \throws KeyingErr if algorithm parameters are invalid, or if a key can't be generated
-               (e.g., if this is a public key object) */
-       virtual void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &params = g_nullNameValuePairs)
-               {throw NotImplemented("GeneratableCryptoMaterial: this object does not support key/parameter generation");}
-
-       //! calls the above function with a NameValuePairs object that just specifies "KeySize"
-       void GenerateRandomWithKeySize(RandomNumberGenerator &rng, unsigned int keySize);
-};
-
-//! interface for public keys
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PublicKey : virtual public CryptoMaterial
-{
-};
-
-//! interface for private keys
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PrivateKey : public GeneratableCryptoMaterial
-{
-};
-
-//! interface for crypto prameters
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CryptoParameters : public GeneratableCryptoMaterial
-{
-};
-
-//! interface for asymmetric algorithms
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AsymmetricAlgorithm : public Algorithm
-{
-public:
-       //! returns a reference to the crypto material used by this object
-       virtual CryptoMaterial & AccessMaterial() =0;
-       //! returns a const reference to the crypto material used by this object
-       virtual const CryptoMaterial & GetMaterial() const =0;
-
-       //! for backwards compatibility, calls AccessMaterial().Load(bt)
-       void BERDecode(BufferedTransformation &bt)
-               {AccessMaterial().Load(bt);}
-       //! for backwards compatibility, calls GetMaterial().Save(bt)
-       void DEREncode(BufferedTransformation &bt) const
-               {GetMaterial().Save(bt);}
-};
-
-//! interface for asymmetric algorithms using public keys
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PublicKeyAlgorithm : public AsymmetricAlgorithm
-{
-public:
-       // VC60 workaround: no co-variant return type
-       CryptoMaterial & AccessMaterial() {return AccessPublicKey();}
-       const CryptoMaterial & GetMaterial() const {return GetPublicKey();}
-
-       virtual PublicKey & AccessPublicKey() =0;
-       virtual const PublicKey & GetPublicKey() const {return const_cast<PublicKeyAlgorithm *>(this)->AccessPublicKey();}
-};
-
-//! interface for asymmetric algorithms using private keys
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PrivateKeyAlgorithm : public AsymmetricAlgorithm
-{
-public:
-       CryptoMaterial & AccessMaterial() {return AccessPrivateKey();}
-       const CryptoMaterial & GetMaterial() const {return GetPrivateKey();}
-
-       virtual PrivateKey & AccessPrivateKey() =0;
-       virtual const PrivateKey & GetPrivateKey() const {return const_cast<PrivateKeyAlgorithm *>(this)->AccessPrivateKey();}
-};
-
-//! interface for key agreement algorithms
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE KeyAgreementAlgorithm : public AsymmetricAlgorithm
-{
-public:
-       CryptoMaterial & AccessMaterial() {return AccessCryptoParameters();}
-       const CryptoMaterial & GetMaterial() const {return GetCryptoParameters();}
-
-       virtual CryptoParameters & AccessCryptoParameters() =0;
-       virtual const CryptoParameters & GetCryptoParameters() const {return const_cast<KeyAgreementAlgorithm *>(this)->AccessCryptoParameters();}
-};
-
-//! interface for public-key encryptors and decryptors
-
-/*! This class provides an interface common to encryptors and decryptors
-       for querying their plaintext and ciphertext lengths.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_CryptoSystem
-{
-public:
-       virtual ~PK_CryptoSystem() {}
-
-       //! maximum length of plaintext for a given ciphertext length
-       /*! \note This function returns 0 if ciphertextLength is not valid (too long or too short). */
-       virtual size_t MaxPlaintextLength(size_t ciphertextLength) const =0;
-
-       //! calculate length of ciphertext given length of plaintext
-       /*! \note This function returns 0 if plaintextLength is not valid (too long). */
-       virtual size_t CiphertextLength(size_t plaintextLength) const =0;
-
-       //! this object supports the use of the parameter with the given name
-       /*! some possible parameter names: EncodingParameters, KeyDerivationParameters */
-       virtual bool ParameterSupported(const char *name) const =0;
-
-       //! return fixed ciphertext length, if one exists, otherwise return 0
-       /*! \note "Fixed" here means length of ciphertext does not depend on length of plaintext.
-               It usually does depend on the key length. */
-       virtual size_t FixedCiphertextLength() const {return 0;}
-
-       //! return maximum plaintext length given the fixed ciphertext length, if one exists, otherwise return 0
-       virtual size_t FixedMaxPlaintextLength() const {return 0;}
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-       size_t MaxPlainTextLength(size_t cipherTextLength) const {return MaxPlaintextLength(cipherTextLength);}
-       size_t CipherTextLength(size_t plainTextLength) const {return CiphertextLength(plainTextLength);}
-#endif
-};
-
-//! interface for public-key encryptors
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Encryptor : public PK_CryptoSystem, public PublicKeyAlgorithm
-{
-public:
-       //! exception thrown when trying to encrypt plaintext of invalid length
-       class CRYPTOPP_DLL InvalidPlaintextLength : public Exception
-       {
-       public:
-               InvalidPlaintextLength() : Exception(OTHER_ERROR, "PK_Encryptor: invalid plaintext length") {}
-       };
-
-       //! encrypt a byte string
-       /*! \pre CiphertextLength(plaintextLength) != 0 (i.e., plaintext isn't too long)
-               \pre size of ciphertext == CiphertextLength(plaintextLength)
-       */
-       virtual void Encrypt(RandomNumberGenerator &rng, 
-               const byte *plaintext, size_t plaintextLength, 
-               byte *ciphertext, const NameValuePairs &parameters = g_nullNameValuePairs) const =0;
-
-       //! create a new encryption filter
-       /*! \note The caller is responsible for deleting the returned pointer.
-               \note Encoding parameters should be passed in the "EP" channel.
-       */
-       virtual BufferedTransformation * CreateEncryptionFilter(RandomNumberGenerator &rng, 
-               BufferedTransformation *attachment=NULL, const NameValuePairs &parameters = g_nullNameValuePairs) const;
-};
-
-//! interface for public-key decryptors
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Decryptor : public PK_CryptoSystem, public PrivateKeyAlgorithm
-{
-public:
-       //! decrypt a byte string, and return the length of plaintext
-       /*! \pre size of plaintext == MaxPlaintextLength(ciphertextLength) bytes.
-               \return the actual length of the plaintext, indication that decryption failed.
-       */
-       virtual DecodingResult Decrypt(RandomNumberGenerator &rng, 
-               const byte *ciphertext, size_t ciphertextLength, 
-               byte *plaintext, const NameValuePairs &parameters = g_nullNameValuePairs) const =0;
-
-       //! create a new decryption filter
-       /*! \note caller is responsible for deleting the returned pointer
-       */
-       virtual BufferedTransformation * CreateDecryptionFilter(RandomNumberGenerator &rng, 
-               BufferedTransformation *attachment=NULL, const NameValuePairs &parameters = g_nullNameValuePairs) const;
-
-       //! decrypt a fixed size ciphertext
-       DecodingResult FixedLengthDecrypt(RandomNumberGenerator &rng, const byte *ciphertext, byte *plaintext, const NameValuePairs &parameters = g_nullNameValuePairs) const
-               {return Decrypt(rng, ciphertext, FixedCiphertextLength(), plaintext, parameters);}
-};
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-typedef PK_CryptoSystem PK_FixedLengthCryptoSystem;
-typedef PK_Encryptor PK_FixedLengthEncryptor;
-typedef PK_Decryptor PK_FixedLengthDecryptor;
-#endif
-
-//! interface for public-key signers and verifiers
-
-/*! This class provides an interface common to signers and verifiers
-       for querying scheme properties.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_SignatureScheme
-{
-public:
-       //! invalid key exception, may be thrown by any function in this class if the private or public key has a length that can't be used
-       class CRYPTOPP_DLL InvalidKeyLength : public Exception
-       {
-       public:
-               InvalidKeyLength(const std::string &message) : Exception(OTHER_ERROR, message) {}
-       };
-
-       //! key too short exception, may be thrown by any function in this class if the private or public key is too short to sign or verify anything
-       class CRYPTOPP_DLL KeyTooShort : public InvalidKeyLength
-       {
-       public:
-               KeyTooShort() : InvalidKeyLength("PK_Signer: key too short for this signature scheme") {}
-       };
-
-       virtual ~PK_SignatureScheme() {}
-
-       //! signature length if it only depends on the key, otherwise 0
-       virtual size_t SignatureLength() const =0;
-
-       //! maximum signature length produced for a given length of recoverable message part
-       virtual size_t MaxSignatureLength(size_t recoverablePartLength = 0) const {return SignatureLength();}
-
-       //! length of longest message that can be recovered, or 0 if this signature scheme does not support message recovery
-       virtual size_t MaxRecoverableLength() const =0;
-
-       //! length of longest message that can be recovered from a signature of given length, or 0 if this signature scheme does not support message recovery
-       virtual size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const =0;
-
-       //! requires a random number generator to sign
-       /*! if this returns false, NullRNG() can be passed to functions that take RandomNumberGenerator & */
-       virtual bool IsProbabilistic() const =0;
-
-       //! whether or not a non-recoverable message part can be signed
-       virtual bool AllowNonrecoverablePart() const =0;
-
-       //! if this function returns true, during verification you must input the signature before the message, otherwise you can input it at anytime */
-       virtual bool SignatureUpfront() const {return false;}
-
-       //! whether you must input the recoverable part before the non-recoverable part during signing
-       virtual bool RecoverablePartFirst() const =0;
-};
-
-//! interface for accumulating messages to be signed or verified
-/*! Only Update() should be called
-       on this class. No other functions inherited from HashTransformation should be called.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_MessageAccumulator : public HashTransformation
-{
-public:
-       //! should not be called on PK_MessageAccumulator
-       unsigned int DigestSize() const
-               {throw NotImplemented("PK_MessageAccumulator: DigestSize() should not be called");}
-       //! should not be called on PK_MessageAccumulator
-       void TruncatedFinal(byte *digest, size_t digestSize) 
-               {throw NotImplemented("PK_MessageAccumulator: TruncatedFinal() should not be called");}
-};
-
-//! interface for public-key signers
-
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Signer : public PK_SignatureScheme, public PrivateKeyAlgorithm
-{
-public:
-       //! create a new HashTransformation to accumulate the message to be signed
-       virtual PK_MessageAccumulator * NewSignatureAccumulator(RandomNumberGenerator &rng) const =0;
-
-       virtual void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const =0;
-
-       //! sign and delete messageAccumulator (even in case of exception thrown)
-       /*! \pre size of signature == MaxSignatureLength()
-               \return actual signature length
-       */
-       virtual size_t Sign(RandomNumberGenerator &rng, PK_MessageAccumulator *messageAccumulator, byte *signature) const;
-
-       //! sign and restart messageAccumulator
-       /*! \pre size of signature == MaxSignatureLength()
-               \return actual signature length
-       */
-       virtual size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const =0;
-
-       //! sign a message
-       /*! \pre size of signature == MaxSignatureLength()
-               \return actual signature length
-       */
-       virtual size_t SignMessage(RandomNumberGenerator &rng, const byte *message, size_t messageLen, byte *signature) const;
-
-       //! sign a recoverable message
-       /*! \pre size of signature == MaxSignatureLength(recoverableMessageLength)
-               \return actual signature length
-       */
-       virtual size_t SignMessageWithRecovery(RandomNumberGenerator &rng, const byte *recoverableMessage, size_t recoverableMessageLength, 
-               const byte *nonrecoverableMessage, size_t nonrecoverableMessageLength, byte *signature) const;
-};
-
-//! interface for public-key signature verifiers
-/*! The Recover* functions throw NotImplemented if the signature scheme does not support
-       message recovery.
-       The Verify* functions throw InvalidDataFormat if the scheme does support message
-       recovery and the signature contains a non-empty recoverable message part. The
-       Recovery* functions should be used in that case.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Verifier : public PK_SignatureScheme, public PublicKeyAlgorithm
-{
-public:
-       //! create a new HashTransformation to accumulate the message to be verified
-       virtual PK_MessageAccumulator * NewVerificationAccumulator() const =0;
-
-       //! input signature into a message accumulator
-       virtual void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const =0;
-
-       //! check whether messageAccumulator contains a valid signature and message, and delete messageAccumulator (even in case of exception thrown)
-       virtual bool Verify(PK_MessageAccumulator *messageAccumulator) const;
-
-       //! check whether messageAccumulator contains a valid signature and message, and restart messageAccumulator
-       virtual bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const =0;
-
-       //! check whether input signature is a valid signature for input message
-       virtual bool VerifyMessage(const byte *message, size_t messageLen, 
-               const byte *signature, size_t signatureLength) const;
-
-       //! recover a message from its signature
-       /*! \pre size of recoveredMessage == MaxRecoverableLengthFromSignatureLength(signatureLength)
-       */
-       virtual DecodingResult Recover(byte *recoveredMessage, PK_MessageAccumulator *messageAccumulator) const;
-
-       //! recover a message from its signature
-       /*! \pre size of recoveredMessage == MaxRecoverableLengthFromSignatureLength(signatureLength)
-       */
-       virtual DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &messageAccumulator) const =0;
-
-       //! recover a message from its signature
-       /*! \pre size of recoveredMessage == MaxRecoverableLengthFromSignatureLength(signatureLength)
-       */
-       virtual DecodingResult RecoverMessage(byte *recoveredMessage, 
-               const byte *nonrecoverableMessage, size_t nonrecoverableMessageLength, 
-               const byte *signature, size_t signatureLength) const;
-};
-
-//! interface for domains of simple key agreement protocols
-
-/*! A key agreement domain is a set of parameters that must be shared
-       by two parties in a key agreement protocol, along with the algorithms
-       for generating key pairs and deriving agreed values.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE SimpleKeyAgreementDomain : public KeyAgreementAlgorithm
-{
-public:
-       //! return length of agreed value produced
-       virtual unsigned int AgreedValueLength() const =0;
-       //! return length of private keys in this domain
-       virtual unsigned int PrivateKeyLength() const =0;
-       //! return length of public keys in this domain
-       virtual unsigned int PublicKeyLength() const =0;
-       //! generate private key
-       /*! \pre size of privateKey == PrivateKeyLength() */
-       virtual void GeneratePrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0;
-       //! generate public key
-       /*!     \pre size of publicKey == PublicKeyLength() */
-       virtual void GeneratePublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0;
-       //! generate private/public key pair
-       /*! \note equivalent to calling GeneratePrivateKey() and then GeneratePublicKey() */
-       virtual void GenerateKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const;
-       //! derive agreed value from your private key and couterparty's public key, return false in case of failure
-       /*! \note If you have previously validated the public key, use validateOtherPublicKey=false to save time.
-               \pre size of agreedValue == AgreedValueLength()
-               \pre length of privateKey == PrivateKeyLength()
-               \pre length of otherPublicKey == PublicKeyLength()
-       */
-       virtual bool Agree(byte *agreedValue, const byte *privateKey, const byte *otherPublicKey, bool validateOtherPublicKey=true) const =0;
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-       bool ValidateDomainParameters(RandomNumberGenerator &rng) const
-               {return GetCryptoParameters().Validate(rng, 2);}
-#endif
-};
-
-//! interface for domains of authenticated key agreement protocols
-
-/*! In an authenticated key agreement protocol, each party has two
-       key pairs. The long-lived key pair is called the static key pair,
-       and the short-lived key pair is called the ephemeral key pair.
-*/
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE AuthenticatedKeyAgreementDomain : public KeyAgreementAlgorithm
-{
-public:
-       //! return length of agreed value produced
-       virtual unsigned int AgreedValueLength() const =0;
-
-       //! return length of static private keys in this domain
-       virtual unsigned int StaticPrivateKeyLength() const =0;
-       //! return length of static public keys in this domain
-       virtual unsigned int StaticPublicKeyLength() const =0;
-       //! generate static private key
-       /*! \pre size of privateKey == PrivateStaticKeyLength() */
-       virtual void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0;
-       //! generate static public key
-       /*!     \pre size of publicKey == PublicStaticKeyLength() */
-       virtual void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0;
-       //! generate private/public key pair
-       /*! \note equivalent to calling GenerateStaticPrivateKey() and then GenerateStaticPublicKey() */
-       virtual void GenerateStaticKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const;
-
-       //! return length of ephemeral private keys in this domain
-       virtual unsigned int EphemeralPrivateKeyLength() const =0;
-       //! return length of ephemeral public keys in this domain
-       virtual unsigned int EphemeralPublicKeyLength() const =0;
-       //! generate ephemeral private key
-       /*! \pre size of privateKey == PrivateEphemeralKeyLength() */
-       virtual void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const =0;
-       //! generate ephemeral public key
-       /*!     \pre size of publicKey == PublicEphemeralKeyLength() */
-       virtual void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const =0;
-       //! generate private/public key pair
-       /*! \note equivalent to calling GenerateEphemeralPrivateKey() and then GenerateEphemeralPublicKey() */
-       virtual void GenerateEphemeralKeyPair(RandomNumberGenerator &rng, byte *privateKey, byte *publicKey) const;
-
-       //! derive agreed value from your private keys and couterparty's public keys, return false in case of failure
-       /*! \note The ephemeral public key will always be validated.
-                     If you have previously validated the static public key, use validateStaticOtherPublicKey=false to save time.
-               \pre size of agreedValue == AgreedValueLength()
-               \pre length of staticPrivateKey == StaticPrivateKeyLength()
-               \pre length of ephemeralPrivateKey == EphemeralPrivateKeyLength()
-               \pre length of staticOtherPublicKey == StaticPublicKeyLength()
-               \pre length of ephemeralOtherPublicKey == EphemeralPublicKeyLength()
-       */
-       virtual bool Agree(byte *agreedValue,
-               const byte *staticPrivateKey, const byte *ephemeralPrivateKey,
-               const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey,
-               bool validateStaticOtherPublicKey=true) const =0;
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-       bool ValidateDomainParameters(RandomNumberGenerator &rng) const
-               {return GetCryptoParameters().Validate(rng, 2);}
-#endif
-};
-
-// interface for password authenticated key agreement protocols, not implemented yet
-#if 0
-//! interface for protocol sessions
-/*! The methods should be called in the following order:
-
-       InitializeSession(rng, parameters);     // or call initialize method in derived class
-       while (true)
-       {
-               if (OutgoingMessageAvailable())
-               {
-                       length = GetOutgoingMessageLength();
-                       GetOutgoingMessage(message);
-                       ; // send outgoing message
-               }
-
-               if (LastMessageProcessed())
-                       break;
-
-               ; // receive incoming message
-               ProcessIncomingMessage(message);
-       }
-       ; // call methods in derived class to obtain result of protocol session
-*/
-class ProtocolSession
-{
-public:
-       //! exception thrown when an invalid protocol message is processed
-       class ProtocolError : public Exception
-       {
-       public:
-               ProtocolError(ErrorType errorType, const std::string &s) : Exception(errorType, s) {}
-       };
-
-       //! exception thrown when a function is called unexpectedly
-       /*! for example calling ProcessIncomingMessage() when ProcessedLastMessage() == true */
-       class UnexpectedMethodCall : public Exception
-       {
-       public:
-               UnexpectedMethodCall(const std::string &s) : Exception(OTHER_ERROR, s) {}
-       };
-
-       ProtocolSession() : m_rng(NULL), m_throwOnProtocolError(true), m_validState(false) {}
-       virtual ~ProtocolSession() {}
-
-       virtual void InitializeSession(RandomNumberGenerator &rng, const NameValuePairs &parameters) =0;
-
-       bool GetThrowOnProtocolError() const {return m_throwOnProtocolError;}
-       void SetThrowOnProtocolError(bool throwOnProtocolError) {m_throwOnProtocolError = throwOnProtocolError;}
-
-       bool HasValidState() const {return m_validState;}
-
-       virtual bool OutgoingMessageAvailable() const =0;
-       virtual unsigned int GetOutgoingMessageLength() const =0;
-       virtual void GetOutgoingMessage(byte *message) =0;
-
-       virtual bool LastMessageProcessed() const =0;
-       virtual void ProcessIncomingMessage(const byte *message, unsigned int messageLength) =0;
-
-protected:
-       void HandleProtocolError(Exception::ErrorType errorType, const std::string &s) const;
-       void CheckAndHandleInvalidState() const;
-       void SetValidState(bool valid) {m_validState = valid;}
-
-       RandomNumberGenerator *m_rng;
-
-private:
-       bool m_throwOnProtocolError, m_validState;
-};
-
-class KeyAgreementSession : public ProtocolSession
-{
-public:
-       virtual unsigned int GetAgreedValueLength() const =0;
-       virtual void GetAgreedValue(byte *agreedValue) const =0;
-};
-
-class PasswordAuthenticatedKeyAgreementSession : public KeyAgreementSession
-{
-public:
-       void InitializePasswordAuthenticatedKeyAgreementSession(RandomNumberGenerator &rng, 
-               const byte *myId, unsigned int myIdLength, 
-               const byte *counterPartyId, unsigned int counterPartyIdLength, 
-               const byte *passwordOrVerifier, unsigned int passwordOrVerifierLength);
-};
-
-class PasswordAuthenticatedKeyAgreementDomain : public KeyAgreementAlgorithm
-{
-public:
-       //! return whether the domain parameters stored in this object are valid
-       virtual bool ValidateDomainParameters(RandomNumberGenerator &rng) const
-               {return GetCryptoParameters().Validate(rng, 2);}
-
-       virtual unsigned int GetPasswordVerifierLength(const byte *password, unsigned int passwordLength) const =0;
-       virtual void GeneratePasswordVerifier(RandomNumberGenerator &rng, const byte *userId, unsigned int userIdLength, const byte *password, unsigned int passwordLength, byte *verifier) const =0;
-
-       enum RoleFlags {CLIENT=1, SERVER=2, INITIATOR=4, RESPONDER=8};
-
-       virtual bool IsValidRole(unsigned int role) =0;
-       virtual PasswordAuthenticatedKeyAgreementSession * CreateProtocolSession(unsigned int role) const =0;
-};
-#endif
-
-//! BER Decode Exception Class, may be thrown during an ASN1 BER decode operation
-class CRYPTOPP_DLL BERDecodeErr : public InvalidArgument
-{
-public: 
-       BERDecodeErr() : InvalidArgument("BER decode error") {}
-       BERDecodeErr(const std::string &s) : InvalidArgument(s) {}
-};
-
-//! interface for encoding and decoding ASN1 objects
-class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE ASN1Object
-{
-public:
-       virtual ~ASN1Object() {}
-       //! decode this object from a BufferedTransformation, using BER (Basic Encoding Rules)
-       virtual void BERDecode(BufferedTransformation &bt) =0;
-       //! encode this object into a BufferedTransformation, using DER (Distinguished Encoding Rules)
-       virtual void DEREncode(BufferedTransformation &bt) const =0;
-       //! encode this object into a BufferedTransformation, using BER
-       /*! this may be useful if DEREncode() would be too inefficient */
-       virtual void BEREncode(BufferedTransformation &bt) const {DEREncode(bt);}
-};
-
-#ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
-typedef PK_SignatureScheme PK_SignatureSystem;
-typedef SimpleKeyAgreementDomain PK_SimpleKeyAgreementDomain;
-typedef AuthenticatedKeyAgreementDomain PK_AuthenticatedKeyAgreementDomain;
-#endif
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/iterhash.h b/src/cryptopp/iterhash.h
deleted file mode 100644 (file)
index 2f5895e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef CRYPTOPP_ITERHASH_H
-#define CRYPTOPP_ITERHASH_H
-
-#include "secblock.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-// *** trimmed down dependency from iterhash.h ***
-template <class T_HashWordType, class T_Endianness, unsigned int T_BlockSize, unsigned int T_StateSize, class T_Transform, unsigned int T_DigestSize = 0, bool T_StateAligned = false>
-class CRYPTOPP_NO_VTABLE IteratedHashWithStaticTransform
-{
-public:
-       CRYPTOPP_CONSTANT(DIGESTSIZE = T_DigestSize ? T_DigestSize : T_StateSize)
-       unsigned int DigestSize() const {return DIGESTSIZE;};
-    typedef T_HashWordType HashWordType;
-    CRYPTOPP_CONSTANT(BLOCKSIZE = T_BlockSize)
-
-protected:
-       IteratedHashWithStaticTransform() {this->Init();}
-       void HashEndianCorrectedBlock(const T_HashWordType *data) {T_Transform::Transform(this->m_state, data);}
-       void Init() {T_Transform::InitState(this->m_state);}
-
-       T_HashWordType* StateBuf() {return this->m_state;}
-       FixedSizeAlignedSecBlock<T_HashWordType, T_BlockSize/sizeof(T_HashWordType), T_StateAligned> m_state;
-};
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/misc.h b/src/cryptopp/misc.h
deleted file mode 100644 (file)
index de8037b..0000000
+++ /dev/null
@@ -1,1134 +0,0 @@
-#ifndef CRYPTOPP_MISC_H
-#define CRYPTOPP_MISC_H
-
-#include "cryptlib.h"
-#include "smartptr.h"
-#include <string.h>            // for memcpy and memmove
-
-#ifdef _MSC_VER
-       #include <stdlib.h>
-       #if _MSC_VER >= 1400
-               // VC2005 workaround: disable declarations that conflict with winnt.h
-               #define _interlockedbittestandset CRYPTOPP_DISABLED_INTRINSIC_1
-               #define _interlockedbittestandreset CRYPTOPP_DISABLED_INTRINSIC_2
-               #define _interlockedbittestandset64 CRYPTOPP_DISABLED_INTRINSIC_3
-               #define _interlockedbittestandreset64 CRYPTOPP_DISABLED_INTRINSIC_4
-               #include <intrin.h>
-               #undef _interlockedbittestandset
-               #undef _interlockedbittestandreset
-               #undef _interlockedbittestandset64
-               #undef _interlockedbittestandreset64
-               #define CRYPTOPP_FAST_ROTATE(x) 1
-       #elif _MSC_VER >= 1300
-               #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32 | (x) == 64)
-       #else
-               #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32)
-       #endif
-#elif (defined(__MWERKS__) && TARGET_CPU_PPC) || \
-       (defined(__GNUC__) && (defined(_ARCH_PWR2) || defined(_ARCH_PWR) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || defined(_ARCH_COM)))
-       #define CRYPTOPP_FAST_ROTATE(x) ((x) == 32)
-#elif defined(__GNUC__) && (CRYPTOPP_BOOL_X64 || CRYPTOPP_BOOL_X86)    // depend on GCC's peephole optimization to generate rotate instructions
-       #define CRYPTOPP_FAST_ROTATE(x) 1
-#else
-       #define CRYPTOPP_FAST_ROTATE(x) 0
-#endif
-
-#ifdef __BORLANDC__
-#include <mem.h>
-#endif
-
-#if defined(__GNUC__) && defined(__linux__)
-#define CRYPTOPP_BYTESWAP_AVAILABLE
-#include <byteswap.h>
-#endif
-
-NAMESPACE_BEGIN(CryptoPP)
-
-// ************** compile-time assertion ***************
-
-template <bool b>
-struct CompileAssert
-{
-       static char dummy[2*b-1];
-};
-
-#define CRYPTOPP_COMPILE_ASSERT(assertion) CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, __LINE__)
-#if defined(CRYPTOPP_EXPORTS) || defined(CRYPTOPP_IMPORTS)
-#define CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, instance)
-#else
-#define CRYPTOPP_COMPILE_ASSERT_INSTANCE(assertion, instance) static CompileAssert<(assertion)> CRYPTOPP_ASSERT_JOIN(cryptopp_assert_, instance)
-#endif
-#define CRYPTOPP_ASSERT_JOIN(X, Y) CRYPTOPP_DO_ASSERT_JOIN(X, Y)
-#define CRYPTOPP_DO_ASSERT_JOIN(X, Y) X##Y
-
-// ************** misc classes ***************
-
-class CRYPTOPP_DLL Empty
-{
-};
-
-//! _
-template <class BASE1, class BASE2>
-class CRYPTOPP_NO_VTABLE TwoBases : public BASE1, public BASE2
-{
-};
-
-//! _
-template <class BASE1, class BASE2, class BASE3>
-class CRYPTOPP_NO_VTABLE ThreeBases : public BASE1, public BASE2, public BASE3
-{
-};
-
-template <class T>
-class ObjectHolder
-{
-protected:
-       T m_object;
-};
-
-class NotCopyable
-{
-public:
-       NotCopyable() {}
-private:
-    NotCopyable(const NotCopyable &);
-    void operator=(const NotCopyable &);
-};
-
-template <class T>
-struct NewObject
-{
-       T* operator()() const {return new T;}
-};
-
-/*! This function safely initializes a static object in a multithreaded environment without using locks.
-       It may leak memory when two threads try to initialize the static object at the same time
-       but this should be acceptable since each static object is only initialized once per session.
-*/
-template <class T, class F = NewObject<T>, int instance=0>
-class Singleton
-{
-public:
-       Singleton(F objectFactory = F()) : m_objectFactory(objectFactory) {}
-
-       // prevent this function from being inlined
-       CRYPTOPP_NOINLINE const T & Ref(CRYPTOPP_NOINLINE_DOTDOTDOT) const;
-
-private:
-       F m_objectFactory;
-};
-
-template <class T, class F, int instance>
-const T & Singleton<T, F, instance>::Ref(CRYPTOPP_NOINLINE_DOTDOTDOT) const
-{
-       static simple_ptr<T> s_pObject;
-       static char s_objectState = 0;
-
-retry:
-       switch (s_objectState)
-       {
-       case 0:
-               s_objectState = 1;
-               try
-               {
-                       s_pObject.m_p = m_objectFactory();
-               }
-               catch(...)
-               {
-                       s_objectState = 0;
-                       throw;
-               }
-               s_objectState = 2;
-               break;
-       case 1:
-               goto retry;
-       default:
-               break;
-       }
-       return *s_pObject.m_p;
-}
-
-// ************** misc functions ***************
-
-#if (!__STDC_WANT_SECURE_LIB__)
-inline void memcpy_s(void *dest, size_t sizeInBytes, const void *src, size_t count)
-{
-       if (count > sizeInBytes)
-               throw InvalidArgument("memcpy_s: buffer overflow");
-       memcpy(dest, src, count);
-}
-
-inline void memmove_s(void *dest, size_t sizeInBytes, const void *src, size_t count)
-{
-       if (count > sizeInBytes)
-               throw InvalidArgument("memmove_s: buffer overflow");
-       memmove(dest, src, count);
-}
-#endif
-
-inline void * memset_z(void *ptr, int value, size_t num)
-{
-// avoid extranous warning on GCC 4.3.2 Ubuntu 8.10
-#if CRYPTOPP_GCC_VERSION >= 30001
-       if (__builtin_constant_p(num) && num==0)
-               return ptr;
-#endif
-       return memset(ptr, value, num);
-}
-
-// can't use std::min or std::max in MSVC60 or Cygwin 1.1.0
-template <class T> inline const T& STDMIN(const T& a, const T& b)
-{
-       return b < a ? b : a;
-}
-
-template <class T1, class T2> inline const T1 UnsignedMin(const T1& a, const T2& b)
-{
-       CRYPTOPP_COMPILE_ASSERT((sizeof(T1)<=sizeof(T2) && T2(-1)>0) || (sizeof(T1)>sizeof(T2) && T1(-1)>0));
-       assert(a==0 || a>0);    // GCC workaround: get rid of the warning "comparison is always true due to limited range of data type"
-       assert(b>=0);
-
-       if (sizeof(T1)<=sizeof(T2))
-               return b < (T2)a ? (T1)b : a;
-       else
-               return (T1)b < a ? (T1)b : a;
-}
-
-template <class T> inline const T& STDMAX(const T& a, const T& b)
-{
-       return a < b ? b : a;
-}
-
-#define RETURN_IF_NONZERO(x) size_t returnedValue = x; if (returnedValue) return returnedValue
-
-// this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack
-#define GETBYTE(x, y) (unsigned int)byte((x)>>(8*(y)))
-// these may be faster on other CPUs/compilers
-// #define GETBYTE(x, y) (unsigned int)(((x)>>(8*(y)))&255)
-// #define GETBYTE(x, y) (((byte *)&(x))[y])
-
-#define CRYPTOPP_GET_BYTE_AS_BYTE(x, y) byte((x)>>(8*(y)))
-
-template <class T>
-unsigned int Parity(T value)
-{
-       for (unsigned int i=8*sizeof(value)/2; i>0; i/=2)
-               value ^= value >> i;
-       return (unsigned int)value&1;
-}
-
-template <class T>
-unsigned int BytePrecision(const T &value)
-{
-       if (!value)
-               return 0;
-
-       unsigned int l=0, h=8*sizeof(value);
-
-       while (h-l > 8)
-       {
-               unsigned int t = (l+h)/2;
-               if (value >> t)
-                       l = t;
-               else
-                       h = t;
-       }
-
-       return h/8;
-}
-
-template <class T>
-unsigned int BitPrecision(const T &value)
-{
-       if (!value)
-               return 0;
-
-       unsigned int l=0, h=8*sizeof(value);
-
-       while (h-l > 1)
-       {
-               unsigned int t = (l+h)/2;
-               if (value >> t)
-                       l = t;
-               else
-                       h = t;
-       }
-
-       return h;
-}
-
-template <class T>
-inline T Crop(T value, size_t size)
-{
-       if (size < 8*sizeof(value))
-       return T(value & ((T(1) << size) - 1));
-       else
-               return value;
-}
-
-template <class T1, class T2>
-inline bool SafeConvert(T1 from, T2 &to)
-{
-       to = (T2)from;
-       if (from != to || (from > 0) != (to > 0))
-               return false;
-       return true;
-}
-
-inline size_t BitsToBytes(size_t bitCount)
-{
-       return ((bitCount+7)/(8));
-}
-
-inline size_t BytesToWords(size_t byteCount)
-{
-       return ((byteCount+WORD_SIZE-1)/WORD_SIZE);
-}
-
-inline size_t BitsToWords(size_t bitCount)
-{
-       return ((bitCount+WORD_BITS-1)/(WORD_BITS));
-}
-
-inline size_t BitsToDwords(size_t bitCount)
-{
-       return ((bitCount+2*WORD_BITS-1)/(2*WORD_BITS));
-}
-
-CRYPTOPP_DLL void CRYPTOPP_API xorbuf(byte *buf, const byte *mask, size_t count);
-CRYPTOPP_DLL void CRYPTOPP_API xorbuf(byte *output, const byte *input, const byte *mask, size_t count);
-
-CRYPTOPP_DLL bool CRYPTOPP_API VerifyBufsEqual(const byte *buf1, const byte *buf2, size_t count);
-
-template <class T>
-inline bool IsPowerOf2(const T &n)
-{
-       return n > 0 && (n & (n-1)) == 0;
-}
-
-template <class T1, class T2>
-inline T2 ModPowerOf2(const T1 &a, const T2 &b)
-{
-       assert(IsPowerOf2(b));
-       return T2(a) & (b-1);
-}
-
-template <class T1, class T2>
-inline T1 RoundDownToMultipleOf(const T1 &n, const T2 &m)
-{
-       if (IsPowerOf2(m))
-               return n - ModPowerOf2(n, m);
-       else
-               return n - n%m;
-}
-
-template <class T1, class T2>
-inline T1 RoundUpToMultipleOf(const T1 &n, const T2 &m)
-{
-       if (n+m-1 < n)
-               throw InvalidArgument("RoundUpToMultipleOf: integer overflow");
-       return RoundDownToMultipleOf(n+m-1, m);
-}
-
-template <class T>
-inline unsigned int GetAlignmentOf(T *dummy=NULL)      // VC60 workaround
-{
-#ifdef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-       if (sizeof(T) < 16)
-               return 1;
-#endif
-
-#if (_MSC_VER >= 1300)
-       return __alignof(T);
-#elif defined(__GNUC__)
-       return __alignof__(T);
-#elif CRYPTOPP_BOOL_SLOW_WORD64
-       return UnsignedMin(4U, sizeof(T));
-#else
-       return sizeof(T);
-#endif
-}
-
-inline bool IsAlignedOn(const void *p, unsigned int alignment)
-{
-       return alignment==1 || (IsPowerOf2(alignment) ? ModPowerOf2((size_t)p, alignment) == 0 : (size_t)p % alignment == 0);
-}
-
-template <class T>
-inline bool IsAligned(const void *p, T *dummy=NULL)    // VC60 workaround
-{
-       return IsAlignedOn(p, GetAlignmentOf<T>());
-}
-
-#ifdef IS_LITTLE_ENDIAN
-       typedef LittleEndian NativeByteOrder;
-#else
-       typedef BigEndian NativeByteOrder;
-#endif
-
-inline ByteOrder GetNativeByteOrder()
-{
-       return NativeByteOrder::ToEnum();
-}
-
-inline bool NativeByteOrderIs(ByteOrder order)
-{
-       return order == GetNativeByteOrder();
-}
-
-template <class T>
-std::string IntToString(T a, unsigned int base = 10)
-{
-       if (a == 0)
-               return "0";
-       bool negate = false;
-       if (a < 0)
-       {
-               negate = true;
-               a = 0-a;        // VC .NET does not like -a
-       }
-       std::string result;
-       while (a > 0)
-       {
-               T digit = a % base;
-               result = char((digit < 10 ? '0' : ('a' - 10)) + digit) + result;
-               a /= base;
-       }
-       if (negate)
-               result = "-" + result;
-       return result;
-}
-
-template <class T1, class T2>
-inline T1 SaturatingSubtract(const T1 &a, const T2 &b)
-{
-       return T1((a > b) ? (a - b) : 0);
-}
-
-template <class T>
-inline CipherDir GetCipherDir(const T &obj)
-{
-       return obj.IsForwardTransformation() ? ENCRYPTION : DECRYPTION;
-}
-
-CRYPTOPP_DLL void CRYPTOPP_API CallNewHandler();
-
-inline void IncrementCounterByOne(byte *inout, unsigned int s)
-{
-       for (int i=s-1, carry=1; i>=0 && carry; i--)
-               carry = !++inout[i];
-}
-
-inline void IncrementCounterByOne(byte *output, const byte *input, unsigned int s)
-{
-       int i, carry;
-       for (i=s-1, carry=1; i>=0 && carry; i--)
-               carry = ((output[i] = input[i]+1) == 0);
-       memcpy_s(output, s, input, i+1);
-}
-
-// ************** rotate functions ***************
-
-template <class T> inline T rotlFixed(T x, unsigned int y)
-{
-       assert(y < sizeof(T)*8);
-       return T((x<<y) | (x>>(sizeof(T)*8-y)));
-}
-
-template <class T> inline T rotrFixed(T x, unsigned int y)
-{
-       assert(y < sizeof(T)*8);
-       return T((x>>y) | (x<<(sizeof(T)*8-y)));
-}
-
-template <class T> inline T rotlVariable(T x, unsigned int y)
-{
-       assert(y < sizeof(T)*8);
-       return T((x<<y) | (x>>(sizeof(T)*8-y)));
-}
-
-template <class T> inline T rotrVariable(T x, unsigned int y)
-{
-       assert(y < sizeof(T)*8);
-       return T((x>>y) | (x<<(sizeof(T)*8-y)));
-}
-
-template <class T> inline T rotlMod(T x, unsigned int y)
-{
-       y %= sizeof(T)*8;
-       return T((x<<y) | (x>>(sizeof(T)*8-y)));
-}
-
-template <class T> inline T rotrMod(T x, unsigned int y)
-{
-       y %= sizeof(T)*8;
-       return T((x>>y) | (x<<(sizeof(T)*8-y)));
-}
-
-#ifdef _MSC_VER
-
-template<> inline word32 rotlFixed<word32>(word32 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _lrotl(x, y) : x;
-}
-
-template<> inline word32 rotrFixed<word32>(word32 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _lrotr(x, y) : x;
-}
-
-template<> inline word32 rotlVariable<word32>(word32 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _lrotl(x, y);
-}
-
-template<> inline word32 rotrVariable<word32>(word32 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _lrotr(x, y);
-}
-
-template<> inline word32 rotlMod<word32>(word32 x, unsigned int y)
-{
-       return _lrotl(x, y);
-}
-
-template<> inline word32 rotrMod<word32>(word32 x, unsigned int y)
-{
-       return _lrotr(x, y);
-}
-
-#endif // #ifdef _MSC_VER
-
-#if _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
-// Intel C++ Compiler 10.0 calls a function instead of using the rotate instruction when using these instructions
-
-template<> inline word64 rotlFixed<word64>(word64 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotl64(x, y) : x;
-}
-
-template<> inline word64 rotrFixed<word64>(word64 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotr64(x, y) : x;
-}
-
-template<> inline word64 rotlVariable<word64>(word64 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotl64(x, y);
-}
-
-template<> inline word64 rotrVariable<word64>(word64 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotr64(x, y);
-}
-
-template<> inline word64 rotlMod<word64>(word64 x, unsigned int y)
-{
-       return _rotl64(x, y);
-}
-
-template<> inline word64 rotrMod<word64>(word64 x, unsigned int y)
-{
-       return _rotr64(x, y);
-}
-
-#endif // #if _MSC_VER >= 1310
-
-#if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER)
-// Intel C++ Compiler 10.0 gives undefined externals with these
-
-template<> inline word16 rotlFixed<word16>(word16 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotl16(x, y) : x;
-}
-
-template<> inline word16 rotrFixed<word16>(word16 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotr16(x, y) : x;
-}
-
-template<> inline word16 rotlVariable<word16>(word16 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotl16(x, y);
-}
-
-template<> inline word16 rotrVariable<word16>(word16 x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotr16(x, y);
-}
-
-template<> inline word16 rotlMod<word16>(word16 x, unsigned int y)
-{
-       return _rotl16(x, y);
-}
-
-template<> inline word16 rotrMod<word16>(word16 x, unsigned int y)
-{
-       return _rotr16(x, y);
-}
-
-template<> inline byte rotlFixed<byte>(byte x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotl8(x, y) : x;
-}
-
-template<> inline byte rotrFixed<byte>(byte x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return y ? _rotr8(x, y) : x;
-}
-
-template<> inline byte rotlVariable<byte>(byte x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotl8(x, y);
-}
-
-template<> inline byte rotrVariable<byte>(byte x, unsigned int y)
-{
-       assert(y < 8*sizeof(x));
-       return _rotr8(x, y);
-}
-
-template<> inline byte rotlMod<byte>(byte x, unsigned int y)
-{
-       return _rotl8(x, y);
-}
-
-template<> inline byte rotrMod<byte>(byte x, unsigned int y)
-{
-       return _rotr8(x, y);
-}
-
-#endif // #if _MSC_VER >= 1400
-
-#if (defined(__MWERKS__) && TARGET_CPU_PPC)
-
-template<> inline word32 rotlFixed<word32>(word32 x, unsigned int y)
-{
-       assert(y < 32);
-       return y ? __rlwinm(x,y,0,31) : x;
-}
-
-template<> inline word32 rotrFixed<word32>(word32 x, unsigned int y)
-{
-       assert(y < 32);
-       return y ? __rlwinm(x,32-y,0,31) : x;
-}
-
-template<> inline word32 rotlVariable<word32>(word32 x, unsigned int y)
-{
-       assert(y < 32);
-       return (__rlwnm(x,y,0,31));
-}
-
-template<> inline word32 rotrVariable<word32>(word32 x, unsigned int y)
-{
-       assert(y < 32);
-       return (__rlwnm(x,32-y,0,31));
-}
-
-template<> inline word32 rotlMod<word32>(word32 x, unsigned int y)
-{
-       return (__rlwnm(x,y,0,31));
-}
-
-template<> inline word32 rotrMod<word32>(word32 x, unsigned int y)
-{
-       return (__rlwnm(x,32-y,0,31));
-}
-
-#endif // #if (defined(__MWERKS__) && TARGET_CPU_PPC)
-
-// ************** endian reversal ***************
-
-template <class T>
-inline unsigned int GetByte(ByteOrder order, T value, unsigned int index)
-{
-       if (order == LITTLE_ENDIAN_ORDER)
-               return GETBYTE(value, index);
-       else
-               return GETBYTE(value, sizeof(T)-index-1);
-}
-
-inline byte ByteReverse(byte value)
-{
-       return value;
-}
-
-inline word16 ByteReverse(word16 value)
-{
-#ifdef CRYPTOPP_BYTESWAP_AVAILABLE
-       return bswap_16(value);
-#elif defined(_MSC_VER) && _MSC_VER >= 1300
-       return _byteswap_ushort(value);
-#else
-       return rotlFixed(value, 8U);
-#endif
-}
-
-inline word32 ByteReverse(word32 value)
-{
-#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE)
-       __asm__ ("bswap %0" : "=r" (value) : "0" (value));
-       return value;
-#elif defined(CRYPTOPP_BYTESWAP_AVAILABLE)
-       return bswap_32(value);
-#elif defined(__MWERKS__) && TARGET_CPU_PPC
-       return (word32)__lwbrx(&value,0);
-#elif _MSC_VER >= 1400 || (_MSC_VER >= 1300 && !defined(_DLL))
-       return _byteswap_ulong(value);
-#elif CRYPTOPP_FAST_ROTATE(32)
-       // 5 instructions with rotate instruction, 9 without
-       return (rotrFixed(value, 8U) & 0xff00ff00) | (rotlFixed(value, 8U) & 0x00ff00ff);
-#else
-       // 6 instructions with rotate instruction, 8 without
-       value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
-       return rotlFixed(value, 16U);
-#endif
-}
-
-inline word64 ByteReverse(word64 value)
-{
-#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE) && defined(__x86_64__)
-       __asm__ ("bswap %0" : "=r" (value) : "0" (value));
-       return value;
-#elif defined(CRYPTOPP_BYTESWAP_AVAILABLE)
-       return bswap_64(value);
-#elif defined(_MSC_VER) && _MSC_VER >= 1300
-       return _byteswap_uint64(value);
-#elif CRYPTOPP_BOOL_SLOW_WORD64
-       return (word64(ByteReverse(word32(value))) << 32) | ByteReverse(word32(value>>32));
-#else
-       value = ((value & W64LIT(0xFF00FF00FF00FF00)) >> 8) | ((value & W64LIT(0x00FF00FF00FF00FF)) << 8);
-       value = ((value & W64LIT(0xFFFF0000FFFF0000)) >> 16) | ((value & W64LIT(0x0000FFFF0000FFFF)) << 16);
-       return rotlFixed(value, 32U);
-#endif
-}
-
-inline byte BitReverse(byte value)
-{
-       value = ((value & 0xAA) >> 1) | ((value & 0x55) << 1);
-       value = ((value & 0xCC) >> 2) | ((value & 0x33) << 2);
-       return rotlFixed(value, 4U);
-}
-
-inline word16 BitReverse(word16 value)
-{
-       value = ((value & 0xAAAA) >> 1) | ((value & 0x5555) << 1);
-       value = ((value & 0xCCCC) >> 2) | ((value & 0x3333) << 2);
-       value = ((value & 0xF0F0) >> 4) | ((value & 0x0F0F) << 4);
-       return ByteReverse(value);
-}
-
-inline word32 BitReverse(word32 value)
-{
-       value = ((value & 0xAAAAAAAA) >> 1) | ((value & 0x55555555) << 1);
-       value = ((value & 0xCCCCCCCC) >> 2) | ((value & 0x33333333) << 2);
-       value = ((value & 0xF0F0F0F0) >> 4) | ((value & 0x0F0F0F0F) << 4);
-       return ByteReverse(value);
-}
-
-inline word64 BitReverse(word64 value)
-{
-#if CRYPTOPP_BOOL_SLOW_WORD64
-       return (word64(BitReverse(word32(value))) << 32) | BitReverse(word32(value>>32));
-#else
-       value = ((value & W64LIT(0xAAAAAAAAAAAAAAAA)) >> 1) | ((value & W64LIT(0x5555555555555555)) << 1);
-       value = ((value & W64LIT(0xCCCCCCCCCCCCCCCC)) >> 2) | ((value & W64LIT(0x3333333333333333)) << 2);
-       value = ((value & W64LIT(0xF0F0F0F0F0F0F0F0)) >> 4) | ((value & W64LIT(0x0F0F0F0F0F0F0F0F)) << 4);
-       return ByteReverse(value);
-#endif
-}
-
-template <class T>
-inline T BitReverse(T value)
-{
-       if (sizeof(T) == 1)
-               return (T)BitReverse((byte)value);
-       else if (sizeof(T) == 2)
-               return (T)BitReverse((word16)value);
-       else if (sizeof(T) == 4)
-               return (T)BitReverse((word32)value);
-       else
-       {
-               assert(sizeof(T) == 8);
-               return (T)BitReverse((word64)value);
-       }
-}
-
-template <class T>
-inline T ConditionalByteReverse(ByteOrder order, T value)
-{
-       return NativeByteOrderIs(order) ? value : ByteReverse(value);
-}
-
-template <class T>
-void ByteReverse(T *out, const T *in, size_t byteCount)
-{
-       assert(byteCount % sizeof(T) == 0);
-       size_t count = byteCount/sizeof(T);
-       for (size_t i=0; i<count; i++)
-               out[i] = ByteReverse(in[i]);
-}
-
-template <class T>
-inline void ConditionalByteReverse(ByteOrder order, T *out, const T *in, size_t byteCount)
-{
-       if (!NativeByteOrderIs(order))
-               ByteReverse(out, in, byteCount);
-       else if (in != out)
-               memcpy_s(out, byteCount, in, byteCount);
-}
-
-template <class T>
-inline void GetUserKey(ByteOrder order, T *out, size_t outlen, const byte *in, size_t inlen)
-{
-       const size_t U = sizeof(T);
-       assert(inlen <= outlen*U);
-       memcpy_s(out, outlen*U, in, inlen);
-       memset_z((byte *)out+inlen, 0, outlen*U-inlen);
-       ConditionalByteReverse(order, out, out, RoundUpToMultipleOf(inlen, U));
-}
-
-#ifndef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-inline byte UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const byte *)
-{
-       return block[0];
-}
-
-inline word16 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word16 *)
-{
-       return (order == BIG_ENDIAN_ORDER)
-               ? block[1] | (block[0] << 8)
-               : block[0] | (block[1] << 8);
-}
-
-inline word32 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word32 *)
-{
-       return (order == BIG_ENDIAN_ORDER)
-               ? word32(block[3]) | (word32(block[2]) << 8) | (word32(block[1]) << 16) | (word32(block[0]) << 24)
-               : word32(block[0]) | (word32(block[1]) << 8) | (word32(block[2]) << 16) | (word32(block[3]) << 24);
-}
-
-inline word64 UnalignedGetWordNonTemplate(ByteOrder order, const byte *block, const word64 *)
-{
-       return (order == BIG_ENDIAN_ORDER)
-               ?
-               (word64(block[7]) |
-               (word64(block[6]) <<  8) |
-               (word64(block[5]) << 16) |
-               (word64(block[4]) << 24) |
-               (word64(block[3]) << 32) |
-               (word64(block[2]) << 40) |
-               (word64(block[1]) << 48) |
-               (word64(block[0]) << 56))
-               :
-               (word64(block[0]) |
-               (word64(block[1]) <<  8) |
-               (word64(block[2]) << 16) |
-               (word64(block[3]) << 24) |
-               (word64(block[4]) << 32) |
-               (word64(block[5]) << 40) |
-               (word64(block[6]) << 48) |
-               (word64(block[7]) << 56));
-}
-
-inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, byte value, const byte *xorBlock)
-{
-       block[0] = xorBlock ? (value ^ xorBlock[0]) : value;
-}
-
-inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word16 value, const byte *xorBlock)
-{
-       if (order == BIG_ENDIAN_ORDER)
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-       }
-       else
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-               }
-       }
-}
-
-inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word32 value, const byte *xorBlock)
-{
-       if (order == BIG_ENDIAN_ORDER)
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-       }
-       else
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-               }
-       }
-}
-
-inline void UnalignedPutWordNonTemplate(ByteOrder order, byte *block, word64 value, const byte *xorBlock)
-{
-       if (order == BIG_ENDIAN_ORDER)
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
-                       block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
-                       block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
-                       block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
-                       block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
-                       block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
-                       block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-               }
-       }
-       else
-       {
-               if (xorBlock)
-               {
-                       block[0] = xorBlock[0] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = xorBlock[1] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[2] = xorBlock[2] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[3] = xorBlock[3] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[4] = xorBlock[4] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
-                       block[5] = xorBlock[5] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
-                       block[6] = xorBlock[6] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
-                       block[7] = xorBlock[7] ^ CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
-               }
-               else
-               {
-                       block[0] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 0);
-                       block[1] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 1);
-                       block[2] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 2);
-                       block[3] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 3);
-                       block[4] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 4);
-                       block[5] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 5);
-                       block[6] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 6);
-                       block[7] = CRYPTOPP_GET_BYTE_AS_BYTE(value, 7);
-               }
-       }
-}
-#endif // #ifndef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-
-template <class T>
-inline T GetWord(bool assumeAligned, ByteOrder order, const byte *block)
-{
-#ifndef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-       if (!assumeAligned)
-               return UnalignedGetWordNonTemplate(order, block, (T*)NULL);
-       assert(IsAligned<T>(block));
-#endif
-       return ConditionalByteReverse(order, *reinterpret_cast<const T *>(block));
-}
-
-template <class T>
-inline void GetWord(bool assumeAligned, ByteOrder order, T &result, const byte *block)
-{
-       result = GetWord<T>(assumeAligned, order, block);
-}
-
-template <class T>
-inline void PutWord(bool assumeAligned, ByteOrder order, byte *block, T value, const byte *xorBlock = NULL)
-{
-#ifndef CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS
-       if (!assumeAligned)
-               return UnalignedPutWordNonTemplate(order, block, value, xorBlock);
-       assert(IsAligned<T>(block));
-       assert(IsAligned<T>(xorBlock));
-#endif
-       *reinterpret_cast<T *>(block) = ConditionalByteReverse(order, value) ^ (xorBlock ? *reinterpret_cast<const T *>(xorBlock) : 0);
-}
-
-template <class T, class B, bool A=false>
-class GetBlock
-{
-public:
-       GetBlock(const void *block)
-               : m_block((const byte *)block) {}
-
-       template <class U>
-       inline GetBlock<T, B, A> & operator()(U &x)
-       {
-               CRYPTOPP_COMPILE_ASSERT(sizeof(U) >= sizeof(T));
-               x = GetWord<T>(A, B::ToEnum(), m_block);
-               m_block += sizeof(T);
-               return *this;
-       }
-
-private:
-       const byte *m_block;
-};
-
-template <class T, class B, bool A=false>
-class PutBlock
-{
-public:
-       PutBlock(const void *xorBlock, void *block)
-               : m_xorBlock((const byte *)xorBlock), m_block((byte *)block) {}
-
-       template <class U>
-       inline PutBlock<T, B, A> & operator()(U x)
-       {
-               PutWord(A, B::ToEnum(), m_block, (T)x, m_xorBlock);
-               m_block += sizeof(T);
-               if (m_xorBlock)
-                       m_xorBlock += sizeof(T);
-               return *this;
-       }
-
-private:
-       const byte *m_xorBlock;
-       byte *m_block;
-};
-
-template <class T, class B, bool GA=false, bool PA=false>
-struct BlockGetAndPut
-{
-       // function needed because of C++ grammatical ambiguity between expression-statements and declarations
-       static inline GetBlock<T, B, GA> Get(const void *block) {return GetBlock<T, B, GA>(block);}
-       typedef PutBlock<T, B, PA> Put;
-};
-
-template <class T>
-std::string WordToString(T value, ByteOrder order = BIG_ENDIAN_ORDER)
-{
-       if (!NativeByteOrderIs(order))
-               value = ByteReverse(value);
-
-       return std::string((char *)&value, sizeof(value));
-}
-
-template <class T>
-T StringToWord(const std::string &str, ByteOrder order = BIG_ENDIAN_ORDER)
-{
-       T value = 0;
-       memcpy_s(&value, sizeof(value), str.data(), UnsignedMin(str.size(), sizeof(value)));
-       return NativeByteOrderIs(order) ? value : ByteReverse(value);
-}
-
-// ************** help remove warning on g++ ***************
-
-template <bool overflow> struct SafeShifter;
-
-template<> struct SafeShifter<true>
-{
-       template <class T>
-       static inline T RightShift(T value, unsigned int bits)
-       {
-               return 0;
-       }
-
-       template <class T>
-       static inline T LeftShift(T value, unsigned int bits)
-       {
-               return 0;
-       }
-};
-
-template<> struct SafeShifter<false>
-{
-       template <class T>
-       static inline T RightShift(T value, unsigned int bits)
-       {
-               return value >> bits;
-       }
-
-       template <class T>
-       static inline T LeftShift(T value, unsigned int bits)
-       {
-               return value << bits;
-       }
-};
-
-template <unsigned int bits, class T>
-inline T SafeRightShift(T value)
-{
-       return SafeShifter<(bits>=(8*sizeof(T)))>::RightShift(value, bits);
-}
-
-template <unsigned int bits, class T>
-inline T SafeLeftShift(T value)
-{
-       return SafeShifter<(bits>=(8*sizeof(T)))>::LeftShift(value, bits);
-}
-
-// ************** use one buffer for multiple data members ***************
-
-#define CRYPTOPP_BLOCK_1(n, t, s) t* m_##n() {return (t *)(m_aggregate+0);}     size_t SS1() {return       sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_2(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS1());} size_t SS2() {return SS1()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_3(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS2());} size_t SS3() {return SS2()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_4(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS3());} size_t SS4() {return SS3()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_5(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS4());} size_t SS5() {return SS4()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_6(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS5());} size_t SS6() {return SS5()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_7(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS6());} size_t SS7() {return SS6()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCK_8(n, t, s) t* m_##n() {return (t *)(m_aggregate+SS7());} size_t SS8() {return SS7()+sizeof(t)*(s);} size_t m_##n##Size() {return (s);}
-#define CRYPTOPP_BLOCKS_END(i) size_t SST() {return SS##i();} void AllocateBlocks() {m_aggregate.New(SST());} AlignedSecByteBlock m_aggregate;
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/pch.h b/src/cryptopp/pch.h
deleted file mode 100644 (file)
index 418c390..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef CRYPTOPP_PCH_H
-#define CRYPTOPP_PCH_H
-
-#ifdef CRYPTOPP_GENERATE_X64_MASM
-
-       #include "cpu.h"
-
-#else
-
-       #include "config.h"
-
-       #ifdef USE_PRECOMPILED_HEADERS
-               #include "simple.h"
-               #include "secblock.h"
-               #include "misc.h"
-               #include "smartptr.h"
-       #endif
-
-#endif
-
-#endif
diff --git a/src/cryptopp/secblock.h b/src/cryptopp/secblock.h
deleted file mode 100644 (file)
index 2025757..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-// secblock.h - written and placed in the public domain by Wei Dai
-
-#ifndef CRYPTOPP_SECBLOCK_H
-#define CRYPTOPP_SECBLOCK_H
-
-#include "config.h"
-#include "misc.h"
-#include <assert.h>
-
-#if defined(CRYPTOPP_MEMALIGN_AVAILABLE) || defined(CRYPTOPP_MM_MALLOC_AVAILABLE) || defined(QNX)
-       #include <malloc.h>
-#else
-       #include <stdlib.h>
-#endif
-
-NAMESPACE_BEGIN(CryptoPP)
-
-// ************** secure memory allocation ***************
-
-template<class T>
-class AllocatorBase
-{
-public:
-       typedef T value_type;
-       typedef size_t size_type;
-#ifdef CRYPTOPP_MSVCRT6
-       typedef ptrdiff_t difference_type;
-#else
-       typedef std::ptrdiff_t difference_type;
-#endif
-       typedef T * pointer;
-       typedef const T * const_pointer;
-       typedef T & reference;
-       typedef const T & const_reference;
-
-       pointer address(reference r) const {return (&r);}
-       const_pointer address(const_reference r) const {return (&r); }
-       void construct(pointer p, const T& val) {new (p) T(val);}
-       void destroy(pointer p) {p->~T();}
-       size_type max_size() const {return ~size_type(0)/sizeof(T);}    // switch to std::numeric_limits<T>::max later
-
-protected:
-       static void CheckSize(size_t n)
-       {
-               if (n > ~size_t(0) / sizeof(T))
-                       throw InvalidArgument("AllocatorBase: requested size would cause integer overflow");
-       }
-};
-
-#define CRYPTOPP_INHERIT_ALLOCATOR_TYPES       \
-typedef typename AllocatorBase<T>::value_type value_type;\
-typedef typename AllocatorBase<T>::size_type size_type;\
-typedef typename AllocatorBase<T>::difference_type difference_type;\
-typedef typename AllocatorBase<T>::pointer pointer;\
-typedef typename AllocatorBase<T>::const_pointer const_pointer;\
-typedef typename AllocatorBase<T>::reference reference;\
-typedef typename AllocatorBase<T>::const_reference const_reference;
-
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
-// this pragma causes an internal compiler error if placed immediately before std::swap(a, b)
-#pragma warning(push)
-#pragma warning(disable: 4700) // VC60 workaround: don't know how to get rid of this warning
-#endif
-
-template <class T, class A>
-typename A::pointer StandardReallocate(A& a, T *p, typename A::size_type oldSize, typename A::size_type newSize, bool preserve)
-{
-       if (oldSize == newSize)
-               return p;
-
-       if (preserve)
-       {
-               typename A::pointer newPointer = a.allocate(newSize, NULL);
-               memcpy_s(newPointer, sizeof(T)*newSize, p, sizeof(T)*STDMIN(oldSize, newSize));
-               a.deallocate(p, oldSize);
-               return newPointer;
-       }
-       else
-       {
-               a.deallocate(p, oldSize);
-               return a.allocate(newSize, NULL);
-       }
-}
-
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
-#pragma warning(pop)
-#endif
-
-template <class T, bool T_Align16 = false>
-class AllocatorWithCleanup : public AllocatorBase<T>
-{
-public:
-       CRYPTOPP_INHERIT_ALLOCATOR_TYPES
-
-       pointer allocate(size_type n, const void * = NULL)
-       {
-               CheckSize(n);
-               if (n == 0)
-                       return NULL;
-
-               if (CRYPTOPP_BOOL_ALIGN16_ENABLED && T_Align16 && n*sizeof(T) >= 16)
-               {
-                       byte *p;
-               #ifdef CRYPTOPP_MM_MALLOC_AVAILABLE
-                       while (!(p = (byte *)_mm_malloc(sizeof(T)*n, 16)))
-               #elif defined(CRYPTOPP_MEMALIGN_AVAILABLE)
-                       while (!(p = (byte *)memalign(16, sizeof(T)*n)))
-               #elif defined(CRYPTOPP_MALLOC_ALIGNMENT_IS_16)
-                       while (!(p = (byte *)malloc(sizeof(T)*n)))
-               #else
-                       while (!(p = (byte *)malloc(sizeof(T)*n + 16)))
-               #endif
-                               CallNewHandler();
-
-               #ifdef CRYPTOPP_NO_ALIGNED_ALLOC
-                       size_t adjustment = 16-((size_t)p%16);
-                       p += adjustment;
-                       p[-1] = (byte)adjustment;
-               #endif
-
-                       assert(IsAlignedOn(p, 16));
-                       return (pointer)p;
-               }
-
-               pointer p;
-               while (!(p = (pointer)malloc(sizeof(T)*n)))
-                       CallNewHandler();
-               return p;
-       }
-
-       void deallocate(void *p, size_type n)
-       {
-               memset_z(p, 0, n*sizeof(T));
-
-               if (CRYPTOPP_BOOL_ALIGN16_ENABLED && T_Align16 && n*sizeof(T) >= 16)
-               {
-               #ifdef CRYPTOPP_MM_MALLOC_AVAILABLE
-                       _mm_free(p);
-               #elif defined(CRYPTOPP_NO_ALIGNED_ALLOC)
-                       p = (byte *)p - ((byte *)p)[-1];
-                       free(p);
-               #else
-                       free(p);
-               #endif
-                       return;
-               }
-
-               free(p);
-       }
-
-       pointer reallocate(T *p, size_type oldSize, size_type newSize, bool preserve)
-       {
-               return StandardReallocate(*this, p, oldSize, newSize, preserve);
-       }
-
-       // VS.NET STL enforces the policy of "All STL-compliant allocators have to provide a
-       // template class member called rebind".
-    template <class U> struct rebind { typedef AllocatorWithCleanup<U, T_Align16> other; };
-#if _MSC_VER >= 1500
-       AllocatorWithCleanup() {}
-       template <class U, bool A> AllocatorWithCleanup(const AllocatorWithCleanup<U, A> &) {}
-#endif
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup<byte>;
-CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup<word16>;
-CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup<word32>;
-CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup<word64>;
-#if CRYPTOPP_BOOL_X86
-CRYPTOPP_DLL_TEMPLATE_CLASS AllocatorWithCleanup<word, true>;  // for Integer
-#endif
-
-template <class T>
-class NullAllocator : public AllocatorBase<T>
-{
-public:
-       CRYPTOPP_INHERIT_ALLOCATOR_TYPES
-
-       pointer allocate(size_type n, const void * = NULL)
-       {
-               assert(false);
-               return NULL;
-       }
-
-       void deallocate(void *p, size_type n)
-       {
-               //// Bitcoin: don't know why this trips, probably a false alarm, depends on the compiler used. 
-               //assert(false);
-       }
-
-       size_type max_size() const {return 0;}
-};
-
-// This allocator can't be used with standard collections because
-// they require that all objects of the same allocator type are equivalent.
-// So this is for use with SecBlock only.
-template <class T, size_t S, class A = NullAllocator<T>, bool T_Align16 = false>
-class FixedSizeAllocatorWithCleanup : public AllocatorBase<T>
-{
-public:
-       CRYPTOPP_INHERIT_ALLOCATOR_TYPES
-
-       FixedSizeAllocatorWithCleanup() : m_allocated(false) {}
-
-       pointer allocate(size_type n)
-       {
-               assert(IsAlignedOn(m_array, 8));
-
-               if (n <= S && !m_allocated)
-               {
-                       m_allocated = true;
-                       return GetAlignedArray();
-               }
-               else
-                       return m_fallbackAllocator.allocate(n);
-       }
-
-       pointer allocate(size_type n, const void *hint)
-       {
-               if (n <= S && !m_allocated)
-               {
-                       m_allocated = true;
-                       return GetAlignedArray();
-               }
-               else
-                       return m_fallbackAllocator.allocate(n, hint);
-       }
-
-       void deallocate(void *p, size_type n)
-       {
-               if (p == GetAlignedArray())
-               {
-                       assert(n <= S);
-                       assert(m_allocated);
-                       m_allocated = false;
-                       memset(p, 0, n*sizeof(T));
-               }
-               else
-                       m_fallbackAllocator.deallocate(p, n);
-       }
-
-       pointer reallocate(pointer p, size_type oldSize, size_type newSize, bool preserve)
-       {
-               if (p == GetAlignedArray() && newSize <= S)
-               {
-                       assert(oldSize <= S);
-                       if (oldSize > newSize)
-                               memset(p + newSize, 0, (oldSize-newSize)*sizeof(T));
-                       return p;
-               }
-
-               pointer newPointer = allocate(newSize, NULL);
-               if (preserve)
-                       memcpy(newPointer, p, sizeof(T)*STDMIN(oldSize, newSize));
-               deallocate(p, oldSize);
-               return newPointer;
-       }
-
-       size_type max_size() const {return STDMAX(m_fallbackAllocator.max_size(), S);}
-
-private:
-#ifdef __BORLANDC__
-       T* GetAlignedArray() {return m_array;}
-       T m_array[S];
-#else
-       T* GetAlignedArray() {return (CRYPTOPP_BOOL_ALIGN16_ENABLED && T_Align16) ? (T*)(((byte *)m_array) + (0-(size_t)m_array)%16) : m_array;}
-       CRYPTOPP_ALIGN_DATA(8) T m_array[(CRYPTOPP_BOOL_ALIGN16_ENABLED && T_Align16) ? S+8/sizeof(T) : S];
-#endif
-       A m_fallbackAllocator;
-       bool m_allocated;
-};
-
-//! a block of memory allocated using A
-template <class T, class A = AllocatorWithCleanup<T> >
-class SecBlock
-{
-public:
-       typedef typename A::value_type value_type;
-       typedef typename A::pointer iterator;
-       typedef typename A::const_pointer const_iterator;
-       typedef typename A::size_type size_type;
-
-       explicit SecBlock(size_type size=0)
-               : m_size(size) {m_ptr = m_alloc.allocate(size, NULL);}
-       SecBlock(const SecBlock<T, A> &t)
-               : m_size(t.m_size) {m_ptr = m_alloc.allocate(m_size, NULL); memcpy_s(m_ptr, m_size*sizeof(T), t.m_ptr, m_size*sizeof(T));}
-       SecBlock(const T *t, size_type len)
-               : m_size(len)
-       {
-               m_ptr = m_alloc.allocate(len, NULL);
-               if (t == NULL)
-                       memset_z(m_ptr, 0, len*sizeof(T));
-               else
-                       memcpy(m_ptr, t, len*sizeof(T));
-       }
-
-       ~SecBlock()
-               {m_alloc.deallocate(m_ptr, m_size);}
-
-#ifdef __BORLANDC__
-       operator T *() const
-               {return (T*)m_ptr;}
-#else
-       operator const void *() const
-               {return m_ptr;}
-       operator void *()
-               {return m_ptr;}
-
-       operator const T *() const
-               {return m_ptr;}
-       operator T *()
-               {return m_ptr;}
-#endif
-
-//     T *operator +(size_type offset)
-//             {return m_ptr+offset;}
-
-//     const T *operator +(size_type offset) const
-//             {return m_ptr+offset;}
-
-//     T& operator[](size_type index)
-//             {assert(index >= 0 && index < m_size); return m_ptr[index];}
-
-//     const T& operator[](size_type index) const
-//             {assert(index >= 0 && index < m_size); return m_ptr[index];}
-
-       iterator begin()
-               {return m_ptr;}
-       const_iterator begin() const
-               {return m_ptr;}
-       iterator end()
-               {return m_ptr+m_size;}
-       const_iterator end() const
-               {return m_ptr+m_size;}
-
-       typename A::pointer data() {return m_ptr;}
-       typename A::const_pointer data() const {return m_ptr;}
-
-       size_type size() const {return m_size;}
-       bool empty() const {return m_size == 0;}
-
-       byte * BytePtr() {return (byte *)m_ptr;}
-       const byte * BytePtr() const {return (const byte *)m_ptr;}
-       size_type SizeInBytes() const {return m_size*sizeof(T);}
-
-       //! set contents and size
-       void Assign(const T *t, size_type len)
-       {
-               New(len);
-               memcpy_s(m_ptr, m_size*sizeof(T), t, len*sizeof(T));
-       }
-
-       //! copy contents and size from another SecBlock
-       void Assign(const SecBlock<T, A> &t)
-       {
-               New(t.m_size);
-               memcpy_s(m_ptr, m_size*sizeof(T), t.m_ptr, m_size*sizeof(T));
-       }
-
-       SecBlock<T, A>& operator=(const SecBlock<T, A> &t)
-       {
-               Assign(t);
-               return *this;
-       }
-
-       // append to this object
-       SecBlock<T, A>& operator+=(const SecBlock<T, A> &t)
-       {
-               size_type oldSize = m_size;
-               Grow(m_size+t.m_size);
-               memcpy_s(m_ptr+oldSize, m_size*sizeof(T), t.m_ptr, t.m_size*sizeof(T));
-               return *this;
-       }
-
-       // append operator
-       SecBlock<T, A> operator+(const SecBlock<T, A> &t)
-       {
-               SecBlock<T, A> result(m_size+t.m_size);
-               memcpy_s(result.m_ptr, result.m_size*sizeof(T), m_ptr, m_size*sizeof(T));
-               memcpy_s(result.m_ptr+m_size, t.m_size*sizeof(T), t.m_ptr, t.m_size*sizeof(T));
-               return result;
-       }
-
-       bool operator==(const SecBlock<T, A> &t) const
-       {
-               return m_size == t.m_size && VerifyBufsEqual(m_ptr, t.m_ptr, m_size*sizeof(T));
-       }
-
-       bool operator!=(const SecBlock<T, A> &t) const
-       {
-               return !operator==(t);
-       }
-
-       //! change size, without preserving contents
-       void New(size_type newSize)
-       {
-               m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, false);
-               m_size = newSize;
-       }
-
-       //! change size and set contents to 0
-       void CleanNew(size_type newSize)
-       {
-               New(newSize);
-               memset_z(m_ptr, 0, m_size*sizeof(T));
-       }
-
-       //! change size only if newSize > current size. contents are preserved
-       void Grow(size_type newSize)
-       {
-               if (newSize > m_size)
-               {
-                       m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true);
-                       m_size = newSize;
-               }
-       }
-
-       //! change size only if newSize > current size. contents are preserved and additional area is set to 0
-       void CleanGrow(size_type newSize)
-       {
-               if (newSize > m_size)
-               {
-                       m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true);
-                       memset(m_ptr+m_size, 0, (newSize-m_size)*sizeof(T));
-                       m_size = newSize;
-               }
-       }
-
-       //! change size and preserve contents
-       void resize(size_type newSize)
-       {
-               m_ptr = m_alloc.reallocate(m_ptr, m_size, newSize, true);
-               m_size = newSize;
-       }
-
-       //! swap contents and size with another SecBlock
-       void swap(SecBlock<T, A> &b)
-       {
-               std::swap(m_alloc, b.m_alloc);
-               std::swap(m_size, b.m_size);
-               std::swap(m_ptr, b.m_ptr);
-       }
-
-//private:
-       A m_alloc;
-       size_type m_size;
-       T *m_ptr;
-};
-
-typedef SecBlock<byte> SecByteBlock;
-typedef SecBlock<byte, AllocatorWithCleanup<byte, true> > AlignedSecByteBlock;
-typedef SecBlock<word> SecWordBlock;
-
-//! a SecBlock with fixed size, allocated statically
-template <class T, unsigned int S, class A = FixedSizeAllocatorWithCleanup<T, S> >
-class FixedSizeSecBlock : public SecBlock<T, A>
-{
-public:
-       explicit FixedSizeSecBlock() : SecBlock<T, A>(S) {}
-};
-
-template <class T, unsigned int S, bool T_Align16 = true>
-class FixedSizeAlignedSecBlock : public FixedSizeSecBlock<T, S, FixedSizeAllocatorWithCleanup<T, S, NullAllocator<T>, T_Align16> >
-{
-};
-
-//! a SecBlock that preallocates size S statically, and uses the heap when this size is exceeded
-template <class T, unsigned int S, class A = FixedSizeAllocatorWithCleanup<T, S, AllocatorWithCleanup<T> > >
-class SecBlockWithHint : public SecBlock<T, A>
-{
-public:
-       explicit SecBlockWithHint(size_t size) : SecBlock<T, A>(size) {}
-};
-
-template<class T, bool A, class U, bool B>
-inline bool operator==(const CryptoPP::AllocatorWithCleanup<T, A>&, const CryptoPP::AllocatorWithCleanup<U, B>&) {return (true);}
-template<class T, bool A, class U, bool B>
-inline bool operator!=(const CryptoPP::AllocatorWithCleanup<T, A>&, const CryptoPP::AllocatorWithCleanup<U, B>&) {return (false);}
-
-NAMESPACE_END
-
-NAMESPACE_BEGIN(std)
-template <class T, class A>
-inline void swap(CryptoPP::SecBlock<T, A> &a, CryptoPP::SecBlock<T, A> &b)
-{
-       a.swap(b);
-}
-
-#if defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE) || (defined(_STLPORT_VERSION) && !defined(_STLP_MEMBER_TEMPLATE_CLASSES))
-// working for STLport 5.1.3 and MSVC 6 SP5
-template <class _Tp1, class _Tp2>
-inline CryptoPP::AllocatorWithCleanup<_Tp2>&
-__stl_alloc_rebind(CryptoPP::AllocatorWithCleanup<_Tp1>& __a, const _Tp2*)
-{
-       return (CryptoPP::AllocatorWithCleanup<_Tp2>&)(__a);
-}
-#endif
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/sha.cpp b/src/cryptopp/sha.cpp
deleted file mode 100644 (file)
index fd0b0a2..0000000
+++ /dev/null
@@ -1,899 +0,0 @@
-// sha.cpp - modified by Wei Dai from Steve Reid's public domain sha1.c
-
-// Steve Reid implemented SHA-1. Wei Dai implemented SHA-2.
-// Both are in the public domain.
-
-// use "cl /EP /P /DCRYPTOPP_GENERATE_X64_MASM sha.cpp" to generate MASM code
-
-#include "pch.h"
-
-#ifndef CRYPTOPP_IMPORTS
-#ifndef CRYPTOPP_GENERATE_X64_MASM
-
-#include "sha.h"
-#include "misc.h"
-#include "cpu.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-// start of Steve Reid's code
-
-#define blk0(i) (W[i] = data[i])
-#define blk1(i) (W[i&15] = rotlFixed(W[(i+13)&15]^W[(i+8)&15]^W[(i+2)&15]^W[i&15],1))
-
-void SHA1::InitState(HashWordType *state)
-{
-       state[0] = 0x67452301L;
-       state[1] = 0xEFCDAB89L;
-       state[2] = 0x98BADCFEL;
-       state[3] = 0x10325476L;
-       state[4] = 0xC3D2E1F0L;
-}
-
-#define f1(x,y,z) (z^(x&(y^z)))
-#define f2(x,y,z) (x^y^z)
-#define f3(x,y,z) ((x&y)|(z&(x|y)))
-#define f4(x,y,z) (x^y^z)
-
-/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
-#define R0(v,w,x,y,z,i) z+=f1(w,x,y)+blk0(i)+0x5A827999+rotlFixed(v,5);w=rotlFixed(w,30);
-#define R1(v,w,x,y,z,i) z+=f1(w,x,y)+blk1(i)+0x5A827999+rotlFixed(v,5);w=rotlFixed(w,30);
-#define R2(v,w,x,y,z,i) z+=f2(w,x,y)+blk1(i)+0x6ED9EBA1+rotlFixed(v,5);w=rotlFixed(w,30);
-#define R3(v,w,x,y,z,i) z+=f3(w,x,y)+blk1(i)+0x8F1BBCDC+rotlFixed(v,5);w=rotlFixed(w,30);
-#define R4(v,w,x,y,z,i) z+=f4(w,x,y)+blk1(i)+0xCA62C1D6+rotlFixed(v,5);w=rotlFixed(w,30);
-
-void SHA1::Transform(word32 *state, const word32 *data)
-{
-       word32 W[16];
-    /* Copy context->state[] to working vars */
-    word32 a = state[0];
-    word32 b = state[1];
-    word32 c = state[2];
-    word32 d = state[3];
-    word32 e = state[4];
-    /* 4 rounds of 20 operations each. Loop unrolled. */
-    R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
-    R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
-    R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
-    R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
-    R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
-    R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
-    R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
-    R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
-    R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
-    R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
-    R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
-    R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
-    R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
-    R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
-    R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
-    R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
-    R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
-    R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
-    R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
-    R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
-    /* Add the working vars back into context.state[] */
-    state[0] += a;
-    state[1] += b;
-    state[2] += c;
-    state[3] += d;
-    state[4] += e;
-}
-
-// end of Steve Reid's code
-
-// *************************************************************
-
-void SHA224::InitState(HashWordType *state)
-{
-       static const word32 s[8] = {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4};
-       memcpy(state, s, sizeof(s));
-}
-
-void SHA256::InitState(HashWordType *state)
-{
-       static const word32 s[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
-       memcpy(state, s, sizeof(s));
-}
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-CRYPTOPP_ALIGN_DATA(16) extern const word32 SHA256_K[64] CRYPTOPP_SECTION_ALIGN16 = {
-#else
-extern const word32 SHA256_K[64] = {
-#endif
-       0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-       0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-       0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-       0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-       0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-       0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-       0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-       0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-       0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-       0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-       0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-       0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-       0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-       0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-       0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-       0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-};
-
-#endif // #ifndef CRYPTOPP_GENERATE_X64_MASM
-
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_GENERATE_X64_MASM)
-
-#pragma warning(disable: 4731) // frame pointer register 'ebp' modified by inline assembly code
-
-static void CRYPTOPP_FASTCALL X86_SHA256_HashBlocks(word32 *state, const word32 *data, size_t len
-#if defined(_MSC_VER) && (_MSC_VER == 1200)
-       , ...   // VC60 workaround: prevent VC 6 from inlining this function
-#endif
-       )
-{
-#if defined(_MSC_VER) && (_MSC_VER == 1200)
-       AS2(mov ecx, [state])
-       AS2(mov edx, [data])
-#endif
-
-       #define LOCALS_SIZE     8*4 + 16*4 + 4*WORD_SZ
-       #define H(i)            [BASE+ASM_MOD(1024+7-(i),8)*4]
-       #define G(i)            H(i+1)
-       #define F(i)            H(i+2)
-       #define E(i)            H(i+3)
-       #define D(i)            H(i+4)
-       #define C(i)            H(i+5)
-       #define B(i)            H(i+6)
-       #define A(i)            H(i+7)
-       #define Wt(i)           BASE+8*4+ASM_MOD(1024+15-(i),16)*4
-       #define Wt_2(i)         Wt((i)-2)
-       #define Wt_15(i)        Wt((i)-15)
-       #define Wt_7(i)         Wt((i)-7)
-       #define K_END           [BASE+8*4+16*4+0*WORD_SZ]
-       #define STATE_SAVE      [BASE+8*4+16*4+1*WORD_SZ]
-       #define DATA_SAVE       [BASE+8*4+16*4+2*WORD_SZ]
-       #define DATA_END        [BASE+8*4+16*4+3*WORD_SZ]
-       #define Kt(i)           WORD_REG(si)+(i)*4
-#if CRYPTOPP_BOOL_X86
-       #define BASE            esp+4
-#elif defined(__GNUC__)
-       #define BASE            r8
-#else
-       #define BASE            rsp
-#endif
-
-#define RA0(i, edx, edi)               \
-       AS2(    add edx, [Kt(i)]        )\
-       AS2(    add edx, [Wt(i)]        )\
-       AS2(    add edx, H(i)           )\
-
-#define RA1(i, edx, edi)
-
-#define RB0(i, edx, edi)
-
-#define RB1(i, edx, edi)       \
-       AS2(    mov AS_REG_7d, [Wt_2(i)]        )\
-       AS2(    mov edi, [Wt_15(i)])\
-       AS2(    mov ebx, AS_REG_7d      )\
-       AS2(    shr AS_REG_7d, 10               )\
-       AS2(    ror ebx, 17             )\
-       AS2(    xor AS_REG_7d, ebx      )\
-       AS2(    ror ebx, 2              )\
-       AS2(    xor ebx, AS_REG_7d      )/* s1(W_t-2) */\
-       AS2(    add ebx, [Wt_7(i)])\
-       AS2(    mov AS_REG_7d, edi      )\
-       AS2(    shr AS_REG_7d, 3                )\
-       AS2(    ror edi, 7              )\
-       AS2(    add ebx, [Wt(i)])/* s1(W_t-2) + W_t-7 + W_t-16 */\
-       AS2(    xor AS_REG_7d, edi      )\
-       AS2(    add edx, [Kt(i)])\
-       AS2(    ror edi, 11             )\
-       AS2(    add edx, H(i)   )\
-       AS2(    xor AS_REG_7d, edi      )/* s0(W_t-15) */\
-       AS2(    add AS_REG_7d, ebx      )/* W_t = s1(W_t-2) + W_t-7 + s0(W_t-15) W_t-16*/\
-       AS2(    mov [Wt(i)], AS_REG_7d)\
-       AS2(    add edx, AS_REG_7d      )\
-
-#define ROUND(i, r, eax, ecx, edi, edx)\
-       /* in: edi = E  */\
-       /* unused: eax, ecx, temp: ebx, AS_REG_7d, out: edx = T1 */\
-       AS2(    mov edx, F(i)   )\
-       AS2(    xor edx, G(i)   )\
-       AS2(    and edx, edi    )\
-       AS2(    xor edx, G(i)   )/* Ch(E,F,G) = (G^(E&(F^G))) */\
-       AS2(    mov AS_REG_7d, edi      )\
-       AS2(    ror edi, 6              )\
-       AS2(    ror AS_REG_7d, 25               )\
-       RA##r(i, edx, edi               )/* H + Wt + Kt + Ch(E,F,G) */\
-       AS2(    xor AS_REG_7d, edi      )\
-       AS2(    ror edi, 5              )\
-       AS2(    xor AS_REG_7d, edi      )/* S1(E) */\
-       AS2(    add edx, AS_REG_7d      )/* T1 = S1(E) + Ch(E,F,G) + H + Wt + Kt */\
-       RB##r(i, edx, edi               )/* H + Wt + Kt + Ch(E,F,G) */\
-       /* in: ecx = A, eax = B^C, edx = T1 */\
-       /* unused: edx, temp: ebx, AS_REG_7d, out: eax = A, ecx = B^C, edx = E */\
-       AS2(    mov ebx, ecx    )\
-       AS2(    xor ecx, B(i)   )/* A^B */\
-       AS2(    and eax, ecx    )\
-       AS2(    xor eax, B(i)   )/* Maj(A,B,C) = B^((A^B)&(B^C) */\
-       AS2(    mov AS_REG_7d, ebx      )\
-       AS2(    ror ebx, 2              )\
-       AS2(    add eax, edx    )/* T1 + Maj(A,B,C) */\
-       AS2(    add edx, D(i)   )\
-       AS2(    mov D(i), edx   )\
-       AS2(    ror AS_REG_7d, 22               )\
-       AS2(    xor AS_REG_7d, ebx      )\
-       AS2(    ror ebx, 11             )\
-       AS2(    xor AS_REG_7d, ebx      )\
-       AS2(    add eax, AS_REG_7d      )/* T1 + S0(A) + Maj(A,B,C) */\
-       AS2(    mov H(i), eax   )\
-
-#define SWAP_COPY(i)           \
-       AS2(    mov             WORD_REG(bx), [WORD_REG(dx)+i*WORD_SZ])\
-       AS1(    bswap   WORD_REG(bx))\
-       AS2(    mov             [Wt(i*(1+CRYPTOPP_BOOL_X64)+CRYPTOPP_BOOL_X64)], WORD_REG(bx))
-
-#if defined(__GNUC__)
-       #if CRYPTOPP_BOOL_X64
-               FixedSizeAlignedSecBlock<byte, LOCALS_SIZE> workspace;
-       #endif
-       __asm__ __volatile__
-       (
-       #if CRYPTOPP_BOOL_X64
-               "lea %4, %%r8;"
-       #endif
-       ".intel_syntax noprefix;"
-#elif defined(CRYPTOPP_GENERATE_X64_MASM)
-               ALIGN   8
-       X86_SHA256_HashBlocks   PROC FRAME
-               rex_push_reg rsi
-               push_reg rdi
-               push_reg rbx
-               push_reg rbp
-               alloc_stack(LOCALS_SIZE+8)
-               .endprolog
-               mov rdi, r8
-               lea rsi, [?SHA256_K@CryptoPP@@3QBIB + 48*4]
-#endif
-
-#if CRYPTOPP_BOOL_X86
-       #ifndef __GNUC__
-               AS2(    mov             edi, [len])
-               AS2(    lea             WORD_REG(si), [SHA256_K+48*4])
-       #endif
-       #if !defined(_MSC_VER) || (_MSC_VER < 1400)
-               AS_PUSH_IF86(bx)
-       #endif
-
-       AS_PUSH_IF86(bp)
-       AS2(    mov             ebx, esp)
-       AS2(    and             esp, -16)
-       AS2(    sub             WORD_REG(sp), LOCALS_SIZE)
-       AS_PUSH_IF86(bx)
-#endif
-       AS2(    mov             STATE_SAVE, WORD_REG(cx))
-       AS2(    mov             DATA_SAVE, WORD_REG(dx))
-       AS2(    add             WORD_REG(di), WORD_REG(dx))
-       AS2(    mov             DATA_END, WORD_REG(di))
-       AS2(    mov             K_END, WORD_REG(si))
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-#if CRYPTOPP_BOOL_X86
-       AS2(    test    edi, 1)
-       ASJ(    jnz,    2, f)
-#endif
-       AS2(    movdqa  xmm0, XMMWORD_PTR [WORD_REG(cx)+0*16])
-       AS2(    movdqa  xmm1, XMMWORD_PTR [WORD_REG(cx)+1*16])
-#endif
-
-#if CRYPTOPP_BOOL_X86
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-       ASJ(    jmp,    0, f)
-#endif
-       ASL(2)  // non-SSE2
-       AS2(    mov             esi, ecx)
-       AS2(    lea             edi, A(0))
-       AS2(    mov             ecx, 8)
-       AS1(    rep movsd)
-       AS2(    mov             esi, K_END)
-       ASJ(    jmp,    3, f)
-#endif
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-       ASL(0)
-       AS2(    movdqa  E(0), xmm1)
-       AS2(    movdqa  A(0), xmm0)
-#endif
-#if CRYPTOPP_BOOL_X86
-       ASL(3)
-#endif
-       AS2(    sub             WORD_REG(si), 48*4)
-       SWAP_COPY(0)    SWAP_COPY(1)    SWAP_COPY(2)    SWAP_COPY(3)
-       SWAP_COPY(4)    SWAP_COPY(5)    SWAP_COPY(6)    SWAP_COPY(7)
-#if CRYPTOPP_BOOL_X86
-       SWAP_COPY(8)    SWAP_COPY(9)    SWAP_COPY(10)   SWAP_COPY(11)
-       SWAP_COPY(12)   SWAP_COPY(13)   SWAP_COPY(14)   SWAP_COPY(15)
-#endif
-       AS2(    mov             edi, E(0))      // E
-       AS2(    mov             eax, B(0))      // B
-       AS2(    xor             eax, C(0))      // B^C
-       AS2(    mov             ecx, A(0))      // A
-
-       ROUND(0, 0, eax, ecx, edi, edx)
-       ROUND(1, 0, ecx, eax, edx, edi)
-       ROUND(2, 0, eax, ecx, edi, edx)
-       ROUND(3, 0, ecx, eax, edx, edi)
-       ROUND(4, 0, eax, ecx, edi, edx)
-       ROUND(5, 0, ecx, eax, edx, edi)
-       ROUND(6, 0, eax, ecx, edi, edx)
-       ROUND(7, 0, ecx, eax, edx, edi)
-       ROUND(8, 0, eax, ecx, edi, edx)
-       ROUND(9, 0, ecx, eax, edx, edi)
-       ROUND(10, 0, eax, ecx, edi, edx)
-       ROUND(11, 0, ecx, eax, edx, edi)
-       ROUND(12, 0, eax, ecx, edi, edx)
-       ROUND(13, 0, ecx, eax, edx, edi)
-       ROUND(14, 0, eax, ecx, edi, edx)
-       ROUND(15, 0, ecx, eax, edx, edi)
-
-       ASL(1)
-       AS2(add WORD_REG(si), 4*16)
-       ROUND(0, 1, eax, ecx, edi, edx)
-       ROUND(1, 1, ecx, eax, edx, edi)
-       ROUND(2, 1, eax, ecx, edi, edx)
-       ROUND(3, 1, ecx, eax, edx, edi)
-       ROUND(4, 1, eax, ecx, edi, edx)
-       ROUND(5, 1, ecx, eax, edx, edi)
-       ROUND(6, 1, eax, ecx, edi, edx)
-       ROUND(7, 1, ecx, eax, edx, edi)
-       ROUND(8, 1, eax, ecx, edi, edx)
-       ROUND(9, 1, ecx, eax, edx, edi)
-       ROUND(10, 1, eax, ecx, edi, edx)
-       ROUND(11, 1, ecx, eax, edx, edi)
-       ROUND(12, 1, eax, ecx, edi, edx)
-       ROUND(13, 1, ecx, eax, edx, edi)
-       ROUND(14, 1, eax, ecx, edi, edx)
-       ROUND(15, 1, ecx, eax, edx, edi)
-       AS2(    cmp             WORD_REG(si), K_END)
-       ASJ(    jne,    1, b)
-
-       AS2(    mov             WORD_REG(dx), DATA_SAVE)
-       AS2(    add             WORD_REG(dx), 64)
-       AS2(    mov             AS_REG_7, STATE_SAVE)
-       AS2(    mov             DATA_SAVE, WORD_REG(dx))
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-#if CRYPTOPP_BOOL_X86
-       AS2(    test    DWORD PTR DATA_END, 1)
-       ASJ(    jnz,    4, f)
-#endif
-       AS2(    movdqa  xmm1, XMMWORD_PTR [AS_REG_7+1*16])
-       AS2(    movdqa  xmm0, XMMWORD_PTR [AS_REG_7+0*16])
-       AS2(    paddd   xmm1, E(0))
-       AS2(    paddd   xmm0, A(0))
-       AS2(    movdqa  [AS_REG_7+1*16], xmm1)
-       AS2(    movdqa  [AS_REG_7+0*16], xmm0)
-       AS2(    cmp             WORD_REG(dx), DATA_END)
-       ASJ(    jl,             0, b)
-#endif
-
-#if CRYPTOPP_BOOL_X86
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-       ASJ(    jmp,    5, f)
-       ASL(4)  // non-SSE2
-#endif
-       AS2(    add             [AS_REG_7+0*4], ecx)    // A
-       AS2(    add             [AS_REG_7+4*4], edi)    // E
-       AS2(    mov             eax, B(0))
-       AS2(    mov             ebx, C(0))
-       AS2(    mov             ecx, D(0))
-       AS2(    add             [AS_REG_7+1*4], eax)
-       AS2(    add             [AS_REG_7+2*4], ebx)
-       AS2(    add             [AS_REG_7+3*4], ecx)
-       AS2(    mov             eax, F(0))
-       AS2(    mov             ebx, G(0))
-       AS2(    mov             ecx, H(0))
-       AS2(    add             [AS_REG_7+5*4], eax)
-       AS2(    add             [AS_REG_7+6*4], ebx)
-       AS2(    add             [AS_REG_7+7*4], ecx)
-       AS2(    mov             ecx, AS_REG_7d)
-       AS2(    cmp             WORD_REG(dx), DATA_END)
-       ASJ(    jl,             2, b)
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-       ASL(5)
-#endif
-#endif
-
-       AS_POP_IF86(sp)
-       AS_POP_IF86(bp)
-       #if !defined(_MSC_VER) || (_MSC_VER < 1400)
-               AS_POP_IF86(bx)
-       #endif
-
-#ifdef CRYPTOPP_GENERATE_X64_MASM
-       add             rsp, LOCALS_SIZE+8
-       pop             rbp
-       pop             rbx
-       pop             rdi
-       pop             rsi
-       ret
-       X86_SHA256_HashBlocks ENDP
-#endif
-
-#ifdef __GNUC__
-       ".att_syntax prefix;"
-       : 
-       : "c" (state), "d" (data), "S" (SHA256_K+48), "D" (len)
-       #if CRYPTOPP_BOOL_X64
-               , "m" (workspace[0])
-       #endif
-       : "memory", "cc", "%eax"
-       #if CRYPTOPP_BOOL_X64
-               , "%rbx", "%r8"
-       #endif
-       );
-#endif
-}
-
-#endif // #if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_GENERATE_X64_MASM)
-
-#ifndef CRYPTOPP_GENERATE_X64_MASM
-
-#ifdef CRYPTOPP_X64_MASM_AVAILABLE
-extern "C" {
-void CRYPTOPP_FASTCALL X86_SHA256_HashBlocks(word32 *state, const word32 *data, size_t len);
-}
-#endif
-
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
-
-size_t SHA256::HashMultipleBlocks(const word32 *input, size_t length)
-{
-       X86_SHA256_HashBlocks(m_state, input, (length&(size_t(0)-BLOCKSIZE)) - !HasSSE2());
-       return length % BLOCKSIZE;
-}
-
-size_t SHA224::HashMultipleBlocks(const word32 *input, size_t length)
-{
-       X86_SHA256_HashBlocks(m_state, input, (length&(size_t(0)-BLOCKSIZE)) - !HasSSE2());
-       return length % BLOCKSIZE;
-}
-
-#endif
-
-#define blk2(i) (W[i&15]+=s1(W[(i-2)&15])+W[(i-7)&15]+s0(W[(i-15)&15]))
-
-#define Ch(x,y,z) (z^(x&(y^z)))
-#define Maj(x,y,z) (y^((x^y)&(y^z)))
-
-#define a(i) T[(0-i)&7]
-#define b(i) T[(1-i)&7]
-#define c(i) T[(2-i)&7]
-#define d(i) T[(3-i)&7]
-#define e(i) T[(4-i)&7]
-#define f(i) T[(5-i)&7]
-#define g(i) T[(6-i)&7]
-#define h(i) T[(7-i)&7]
-
-#define R(i) h(i)+=S1(e(i))+Ch(e(i),f(i),g(i))+SHA256_K[i+j]+(j?blk2(i):blk0(i));\
-       d(i)+=h(i);h(i)+=S0(a(i))+Maj(a(i),b(i),c(i))
-
-// for SHA256
-#define S0(x) (rotrFixed(x,2)^rotrFixed(x,13)^rotrFixed(x,22))
-#define S1(x) (rotrFixed(x,6)^rotrFixed(x,11)^rotrFixed(x,25))
-#define s0(x) (rotrFixed(x,7)^rotrFixed(x,18)^(x>>3))
-#define s1(x) (rotrFixed(x,17)^rotrFixed(x,19)^(x>>10))
-
-void SHA256::Transform(word32 *state, const word32 *data)
-{
-       word32 W[16];
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
-       // this byte reverse is a waste of time, but this function is only called by MDC
-       ByteReverse(W, data, BLOCKSIZE);
-       X86_SHA256_HashBlocks(state, W, BLOCKSIZE - !HasSSE2());
-#else
-       word32 T[8];
-    /* Copy context->state[] to working vars */
-       memcpy(T, state, sizeof(T));
-    /* 64 operations, partially loop unrolled */
-       for (unsigned int j=0; j<64; j+=16)
-       {
-               R( 0); R( 1); R( 2); R( 3);
-               R( 4); R( 5); R( 6); R( 7);
-               R( 8); R( 9); R(10); R(11);
-               R(12); R(13); R(14); R(15);
-       }
-    /* Add the working vars back into context.state[] */
-    state[0] += a(0);
-    state[1] += b(0);
-    state[2] += c(0);
-    state[3] += d(0);
-    state[4] += e(0);
-    state[5] += f(0);
-    state[6] += g(0);
-    state[7] += h(0);
-#endif
-}
-
-/* 
-// smaller but slower
-void SHA256::Transform(word32 *state, const word32 *data)
-{
-       word32 T[20];
-       word32 W[32];
-       unsigned int i = 0, j = 0;
-       word32 *t = T+8;
-
-       memcpy(t, state, 8*4);
-       word32 e = t[4], a = t[0];
-
-       do 
-       {
-               word32 w = data[j];
-               W[j] = w;
-               w += SHA256_K[j];
-               w += t[7];
-               w += S1(e);
-               w += Ch(e, t[5], t[6]);
-               e = t[3] + w;
-               t[3] = t[3+8] = e;
-               w += S0(t[0]);
-               a = w + Maj(a, t[1], t[2]);
-               t[-1] = t[7] = a;
-               --t;
-               ++j;
-               if (j%8 == 0)
-                       t += 8;
-       } while (j<16);
-
-       do
-       {
-               i = j&0xf;
-               word32 w = s1(W[i+16-2]) + s0(W[i+16-15]) + W[i] + W[i+16-7];
-               W[i+16] = W[i] = w;
-               w += SHA256_K[j];
-               w += t[7];
-               w += S1(e);
-               w += Ch(e, t[5], t[6]);
-               e = t[3] + w;
-               t[3] = t[3+8] = e;
-               w += S0(t[0]);
-               a = w + Maj(a, t[1], t[2]);
-               t[-1] = t[7] = a;
-
-               w = s1(W[(i+1)+16-2]) + s0(W[(i+1)+16-15]) + W[(i+1)] + W[(i+1)+16-7];
-               W[(i+1)+16] = W[(i+1)] = w;
-               w += SHA256_K[j+1];
-               w += (t-1)[7];
-               w += S1(e);
-               w += Ch(e, (t-1)[5], (t-1)[6]);
-               e = (t-1)[3] + w;
-               (t-1)[3] = (t-1)[3+8] = e;
-               w += S0((t-1)[0]);
-               a = w + Maj(a, (t-1)[1], (t-1)[2]);
-               (t-1)[-1] = (t-1)[7] = a;
-
-               t-=2;
-               j+=2;
-               if (j%8 == 0)
-                       t += 8;
-       } while (j<64);
-
-    state[0] += a;
-    state[1] += t[1];
-    state[2] += t[2];
-    state[3] += t[3];
-    state[4] += e;
-    state[5] += t[5];
-    state[6] += t[6];
-    state[7] += t[7];
-}
-*/
-
-#undef S0
-#undef S1
-#undef s0
-#undef s1
-#undef R
-
-// *************************************************************
-
-void SHA384::InitState(HashWordType *state)
-{
-       static const word64 s[8] = {
-               W64LIT(0xcbbb9d5dc1059ed8), W64LIT(0x629a292a367cd507),
-               W64LIT(0x9159015a3070dd17), W64LIT(0x152fecd8f70e5939),
-               W64LIT(0x67332667ffc00b31), W64LIT(0x8eb44a8768581511),
-               W64LIT(0xdb0c2e0d64f98fa7), W64LIT(0x47b5481dbefa4fa4)};
-       memcpy(state, s, sizeof(s));
-}
-
-void SHA512::InitState(HashWordType *state)
-{
-       static const word64 s[8] = {
-               W64LIT(0x6a09e667f3bcc908), W64LIT(0xbb67ae8584caa73b),
-               W64LIT(0x3c6ef372fe94f82b), W64LIT(0xa54ff53a5f1d36f1),
-               W64LIT(0x510e527fade682d1), W64LIT(0x9b05688c2b3e6c1f),
-               W64LIT(0x1f83d9abfb41bd6b), W64LIT(0x5be0cd19137e2179)};
-       memcpy(state, s, sizeof(s));
-}
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE && CRYPTOPP_BOOL_X86
-CRYPTOPP_ALIGN_DATA(16) static const word64 SHA512_K[80] CRYPTOPP_SECTION_ALIGN16 = {
-#else
-static const word64 SHA512_K[80] = {
-#endif
-       W64LIT(0x428a2f98d728ae22), W64LIT(0x7137449123ef65cd),
-       W64LIT(0xb5c0fbcfec4d3b2f), W64LIT(0xe9b5dba58189dbbc),
-       W64LIT(0x3956c25bf348b538), W64LIT(0x59f111f1b605d019),
-       W64LIT(0x923f82a4af194f9b), W64LIT(0xab1c5ed5da6d8118),
-       W64LIT(0xd807aa98a3030242), W64LIT(0x12835b0145706fbe),
-       W64LIT(0x243185be4ee4b28c), W64LIT(0x550c7dc3d5ffb4e2),
-       W64LIT(0x72be5d74f27b896f), W64LIT(0x80deb1fe3b1696b1),
-       W64LIT(0x9bdc06a725c71235), W64LIT(0xc19bf174cf692694),
-       W64LIT(0xe49b69c19ef14ad2), W64LIT(0xefbe4786384f25e3),
-       W64LIT(0x0fc19dc68b8cd5b5), W64LIT(0x240ca1cc77ac9c65),
-       W64LIT(0x2de92c6f592b0275), W64LIT(0x4a7484aa6ea6e483),
-       W64LIT(0x5cb0a9dcbd41fbd4), W64LIT(0x76f988da831153b5),
-       W64LIT(0x983e5152ee66dfab), W64LIT(0xa831c66d2db43210),
-       W64LIT(0xb00327c898fb213f), W64LIT(0xbf597fc7beef0ee4),
-       W64LIT(0xc6e00bf33da88fc2), W64LIT(0xd5a79147930aa725),
-       W64LIT(0x06ca6351e003826f), W64LIT(0x142929670a0e6e70),
-       W64LIT(0x27b70a8546d22ffc), W64LIT(0x2e1b21385c26c926),
-       W64LIT(0x4d2c6dfc5ac42aed), W64LIT(0x53380d139d95b3df),
-       W64LIT(0x650a73548baf63de), W64LIT(0x766a0abb3c77b2a8),
-       W64LIT(0x81c2c92e47edaee6), W64LIT(0x92722c851482353b),
-       W64LIT(0xa2bfe8a14cf10364), W64LIT(0xa81a664bbc423001),
-       W64LIT(0xc24b8b70d0f89791), W64LIT(0xc76c51a30654be30),
-       W64LIT(0xd192e819d6ef5218), W64LIT(0xd69906245565a910),
-       W64LIT(0xf40e35855771202a), W64LIT(0x106aa07032bbd1b8),
-       W64LIT(0x19a4c116b8d2d0c8), W64LIT(0x1e376c085141ab53),
-       W64LIT(0x2748774cdf8eeb99), W64LIT(0x34b0bcb5e19b48a8),
-       W64LIT(0x391c0cb3c5c95a63), W64LIT(0x4ed8aa4ae3418acb),
-       W64LIT(0x5b9cca4f7763e373), W64LIT(0x682e6ff3d6b2b8a3),
-       W64LIT(0x748f82ee5defb2fc), W64LIT(0x78a5636f43172f60),
-       W64LIT(0x84c87814a1f0ab72), W64LIT(0x8cc702081a6439ec),
-       W64LIT(0x90befffa23631e28), W64LIT(0xa4506cebde82bde9),
-       W64LIT(0xbef9a3f7b2c67915), W64LIT(0xc67178f2e372532b),
-       W64LIT(0xca273eceea26619c), W64LIT(0xd186b8c721c0c207),
-       W64LIT(0xeada7dd6cde0eb1e), W64LIT(0xf57d4f7fee6ed178),
-       W64LIT(0x06f067aa72176fba), W64LIT(0x0a637dc5a2c898a6),
-       W64LIT(0x113f9804bef90dae), W64LIT(0x1b710b35131c471b),
-       W64LIT(0x28db77f523047d84), W64LIT(0x32caab7b40c72493),
-       W64LIT(0x3c9ebe0a15c9bebc), W64LIT(0x431d67c49c100d4c),
-       W64LIT(0x4cc5d4becb3e42b6), W64LIT(0x597f299cfc657e2a),
-       W64LIT(0x5fcb6fab3ad6faec), W64LIT(0x6c44198c4a475817)
-};
-
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE && CRYPTOPP_BOOL_X86
-// put assembly version in separate function, otherwise MSVC 2005 SP1 doesn't generate correct code for the non-assembly version
-CRYPTOPP_NAKED static void CRYPTOPP_FASTCALL SHA512_SSE2_Transform(word64 *state, const word64 *data)
-{
-#ifdef __GNUC__
-       __asm__ __volatile__
-       (
-               ".intel_syntax noprefix;"
-       AS1(    push    ebx)
-       AS2(    mov             ebx, eax)
-#else
-       AS1(    push    ebx)
-       AS1(    push    esi)
-       AS1(    push    edi)
-       AS2(    lea             ebx, SHA512_K)
-#endif
-
-       AS2(    mov             eax, esp)
-       AS2(    and             esp, 0xfffffff0)
-       AS2(    sub             esp, 27*16)                             // 17*16 for expanded data, 20*8 for state
-       AS1(    push    eax)
-       AS2(    xor             eax, eax)
-       AS2(    lea             edi, [esp+4+8*8])               // start at middle of state buffer. will decrement pointer each round to avoid copying
-       AS2(    lea             esi, [esp+4+20*8+8])    // 16-byte alignment, then add 8
-
-       AS2(    movdqa  xmm0, [ecx+0*16])
-       AS2(    movdq2q mm4, xmm0)
-       AS2(    movdqa  [edi+0*16], xmm0)
-       AS2(    movdqa  xmm0, [ecx+1*16])
-       AS2(    movdqa  [edi+1*16], xmm0)
-       AS2(    movdqa  xmm0, [ecx+2*16])
-       AS2(    movdq2q mm5, xmm0)
-       AS2(    movdqa  [edi+2*16], xmm0)
-       AS2(    movdqa  xmm0, [ecx+3*16])
-       AS2(    movdqa  [edi+3*16], xmm0)
-       ASJ(    jmp,    0, f)
-
-#define SSE2_S0_S1(r, a, b, c) \
-       AS2(    movq    mm6, r)\
-       AS2(    psrlq   r, a)\
-       AS2(    movq    mm7, r)\
-       AS2(    psllq   mm6, 64-c)\
-       AS2(    pxor    mm7, mm6)\
-       AS2(    psrlq   r, b-a)\
-       AS2(    pxor    mm7, r)\
-       AS2(    psllq   mm6, c-b)\
-       AS2(    pxor    mm7, mm6)\
-       AS2(    psrlq   r, c-b)\
-       AS2(    pxor    r, mm7)\
-       AS2(    psllq   mm6, b-a)\
-       AS2(    pxor    r, mm6)
-
-#define SSE2_s0(r, a, b, c)    \
-       AS2(    movdqa  xmm6, r)\
-       AS2(    psrlq   r, a)\
-       AS2(    movdqa  xmm7, r)\
-       AS2(    psllq   xmm6, 64-c)\
-       AS2(    pxor    xmm7, xmm6)\
-       AS2(    psrlq   r, b-a)\
-       AS2(    pxor    xmm7, r)\
-       AS2(    psrlq   r, c-b)\
-       AS2(    pxor    r, xmm7)\
-       AS2(    psllq   xmm6, c-a)\
-       AS2(    pxor    r, xmm6)
-
-#define SSE2_s1(r, a, b, c)    \
-       AS2(    movdqa  xmm6, r)\
-       AS2(    psrlq   r, a)\
-       AS2(    movdqa  xmm7, r)\
-       AS2(    psllq   xmm6, 64-c)\
-       AS2(    pxor    xmm7, xmm6)\
-       AS2(    psrlq   r, b-a)\
-       AS2(    pxor    xmm7, r)\
-       AS2(    psllq   xmm6, c-b)\
-       AS2(    pxor    xmm7, xmm6)\
-       AS2(    psrlq   r, c-b)\
-       AS2(    pxor    r, xmm7)
-
-       ASL(SHA512_Round)
-       // k + w is in mm0, a is in mm4, e is in mm5
-       AS2(    paddq   mm0, [edi+7*8])         // h
-       AS2(    movq    mm2, [edi+5*8])         // f
-       AS2(    movq    mm3, [edi+6*8])         // g
-       AS2(    pxor    mm2, mm3)
-       AS2(    pand    mm2, mm5)
-       SSE2_S0_S1(mm5,14,18,41)
-       AS2(    pxor    mm2, mm3)
-       AS2(    paddq   mm0, mm2)                       // h += Ch(e,f,g)
-       AS2(    paddq   mm5, mm0)                       // h += S1(e)
-       AS2(    movq    mm2, [edi+1*8])         // b
-       AS2(    movq    mm1, mm2)
-       AS2(    por             mm2, mm4)
-       AS2(    pand    mm2, [edi+2*8])         // c
-       AS2(    pand    mm1, mm4)
-       AS2(    por             mm1, mm2)
-       AS2(    paddq   mm1, mm5)                       // temp = h + Maj(a,b,c)
-       AS2(    paddq   mm5, [edi+3*8])         // e = d + h
-       AS2(    movq    [edi+3*8], mm5)
-       AS2(    movq    [edi+11*8], mm5)
-       SSE2_S0_S1(mm4,28,34,39)                        // S0(a)
-       AS2(    paddq   mm4, mm1)                       // a = temp + S0(a)
-       AS2(    movq    [edi-8], mm4)
-       AS2(    movq    [edi+7*8], mm4)
-       AS1(    ret)
-
-       // first 16 rounds
-       ASL(0)
-       AS2(    movq    mm0, [edx+eax*8])
-       AS2(    movq    [esi+eax*8], mm0)
-       AS2(    movq    [esi+eax*8+16*8], mm0)
-       AS2(    paddq   mm0, [ebx+eax*8])
-       ASC(    call,   SHA512_Round)
-       AS1(    inc             eax)
-       AS2(    sub             edi, 8)
-       AS2(    test    eax, 7)
-       ASJ(    jnz,    0, b)
-       AS2(    add             edi, 8*8)
-       AS2(    cmp             eax, 16)
-       ASJ(    jne,    0, b)
-
-       // rest of the rounds
-       AS2(    movdqu  xmm0, [esi+(16-2)*8])
-       ASL(1)
-       // data expansion, W[i-2] already in xmm0
-       AS2(    movdqu  xmm3, [esi])
-       AS2(    paddq   xmm3, [esi+(16-7)*8])
-       AS2(    movdqa  xmm2, [esi+(16-15)*8])
-       SSE2_s1(xmm0, 6, 19, 61)
-       AS2(    paddq   xmm0, xmm3)
-       SSE2_s0(xmm2, 1, 7, 8)
-       AS2(    paddq   xmm0, xmm2)
-       AS2(    movdq2q mm0, xmm0)
-       AS2(    movhlps xmm1, xmm0)
-       AS2(    paddq   mm0, [ebx+eax*8])
-       AS2(    movlps  [esi], xmm0)
-       AS2(    movlps  [esi+8], xmm1)
-       AS2(    movlps  [esi+8*16], xmm0)
-       AS2(    movlps  [esi+8*17], xmm1)
-       // 2 rounds
-       ASC(    call,   SHA512_Round)
-       AS2(    sub             edi, 8)
-       AS2(    movdq2q mm0, xmm1)
-       AS2(    paddq   mm0, [ebx+eax*8+8])
-       ASC(    call,   SHA512_Round)
-       // update indices and loop
-       AS2(    add             esi, 16)
-       AS2(    add             eax, 2)
-       AS2(    sub             edi, 8)
-       AS2(    test    eax, 7)
-       ASJ(    jnz,    1, b)
-       // do housekeeping every 8 rounds
-       AS2(    mov             esi, 0xf)
-       AS2(    and             esi, eax)
-       AS2(    lea             esi, [esp+4+20*8+8+esi*8])
-       AS2(    add             edi, 8*8)
-       AS2(    cmp             eax, 80)
-       ASJ(    jne,    1, b)
-
-#define SSE2_CombineState(i)   \
-       AS2(    movdqa  xmm0, [edi+i*16])\
-       AS2(    paddq   xmm0, [ecx+i*16])\
-       AS2(    movdqa  [ecx+i*16], xmm0)
-
-       SSE2_CombineState(0)
-       SSE2_CombineState(1)
-       SSE2_CombineState(2)
-       SSE2_CombineState(3)
-
-       AS1(    pop             esp)
-       AS1(    emms)
-
-#if defined(__GNUC__)
-       AS1(    pop             ebx)
-       ".att_syntax prefix;"
-               :
-               : "a" (SHA512_K), "c" (state), "d" (data)
-               : "%esi", "%edi", "memory", "cc"
-       );
-#else
-       AS1(    pop             edi)
-       AS1(    pop             esi)
-       AS1(    pop             ebx)
-       AS1(    ret)
-#endif
-}
-#endif // #if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
-
-void SHA512::Transform(word64 *state, const word64 *data)
-{
-#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE && CRYPTOPP_BOOL_X86
-       if (HasSSE2())
-       {
-               SHA512_SSE2_Transform(state, data);
-               return;
-       }
-#endif
-
-#define S0(x) (rotrFixed(x,28)^rotrFixed(x,34)^rotrFixed(x,39))
-#define S1(x) (rotrFixed(x,14)^rotrFixed(x,18)^rotrFixed(x,41))
-#define s0(x) (rotrFixed(x,1)^rotrFixed(x,8)^(x>>7))
-#define s1(x) (rotrFixed(x,19)^rotrFixed(x,61)^(x>>6))
-
-#define R(i) h(i)+=S1(e(i))+Ch(e(i),f(i),g(i))+SHA512_K[i+j]+(j?blk2(i):blk0(i));\
-       d(i)+=h(i);h(i)+=S0(a(i))+Maj(a(i),b(i),c(i))
-
-       word64 W[16];
-       word64 T[8];
-    /* Copy context->state[] to working vars */
-       memcpy(T, state, sizeof(T));
-    /* 80 operations, partially loop unrolled */
-       for (unsigned int j=0; j<80; j+=16)
-       {
-               R( 0); R( 1); R( 2); R( 3);
-               R( 4); R( 5); R( 6); R( 7);
-               R( 8); R( 9); R(10); R(11);
-               R(12); R(13); R(14); R(15);
-       }
-    /* Add the working vars back into context.state[] */
-    state[0] += a(0);
-    state[1] += b(0);
-    state[2] += c(0);
-    state[3] += d(0);
-    state[4] += e(0);
-    state[5] += f(0);
-    state[6] += g(0);
-    state[7] += h(0);
-}
-
-NAMESPACE_END
-
-#endif // #ifndef CRYPTOPP_GENERATE_X64_MASM
-#endif // #ifndef CRYPTOPP_IMPORTS
diff --git a/src/cryptopp/sha.h b/src/cryptopp/sha.h
deleted file mode 100644 (file)
index 679081e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef CRYPTOPP_SHA_H
-#define CRYPTOPP_SHA_H
-
-#include "iterhash.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-/// <a href="http://www.weidai.com/scan-mirror/md.html#SHA-1">SHA-1</a>
-class CRYPTOPP_DLL SHA1 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 20, SHA1>
-{
-public:
-       static void CRYPTOPP_API InitState(HashWordType *state);
-       static void CRYPTOPP_API Transform(word32 *digest, const word32 *data);
-       static const char * CRYPTOPP_API StaticAlgorithmName() {return "SHA-1";}
-};
-
-typedef SHA1 SHA;      // for backwards compatibility
-
-//! implements the SHA-256 standard
-class CRYPTOPP_DLL SHA256 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA256, 32, true>
-{
-public:
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
-       size_t HashMultipleBlocks(const word32 *input, size_t length);
-#endif
-       static void CRYPTOPP_API InitState(HashWordType *state);
-       static void CRYPTOPP_API Transform(word32 *digest, const word32 *data);
-       static const char * CRYPTOPP_API StaticAlgorithmName() {return "SHA-256";}
-};
-
-//! implements the SHA-224 standard
-class CRYPTOPP_DLL SHA224 : public IteratedHashWithStaticTransform<word32, BigEndian, 64, 32, SHA224, 28, true>
-{
-public:
-#if defined(CRYPTOPP_X86_ASM_AVAILABLE) || defined(CRYPTOPP_X64_MASM_AVAILABLE)
-       size_t HashMultipleBlocks(const word32 *input, size_t length);
-#endif
-       static void CRYPTOPP_API InitState(HashWordType *state);
-       static void CRYPTOPP_API Transform(word32 *digest, const word32 *data) {SHA256::Transform(digest, data);}
-       static const char * CRYPTOPP_API StaticAlgorithmName() {return "SHA-224";}
-};
-
-//! implements the SHA-512 standard
-class CRYPTOPP_DLL SHA512 : public IteratedHashWithStaticTransform<word64, BigEndian, 128, 64, SHA512, 64, CRYPTOPP_BOOL_X86>
-{
-public:
-       static void CRYPTOPP_API InitState(HashWordType *state);
-       static void CRYPTOPP_API Transform(word64 *digest, const word64 *data);
-       static const char * CRYPTOPP_API StaticAlgorithmName() {return "SHA-512";}
-};
-
-//! implements the SHA-384 standard
-class CRYPTOPP_DLL SHA384 : public IteratedHashWithStaticTransform<word64, BigEndian, 128, 64, SHA384, 48, CRYPTOPP_BOOL_X86>
-{
-public:
-       static void CRYPTOPP_API InitState(HashWordType *state);
-       static void CRYPTOPP_API Transform(word64 *digest, const word64 *data) {SHA512::Transform(digest, data);}
-       static const char * CRYPTOPP_API StaticAlgorithmName() {return "SHA-384";}
-};
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/simple.h b/src/cryptopp/simple.h
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/cryptopp/smartptr.h b/src/cryptopp/smartptr.h
deleted file mode 100644 (file)
index 6b4040e..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-#ifndef CRYPTOPP_SMARTPTR_H
-#define CRYPTOPP_SMARTPTR_H
-
-#include "config.h"
-#include <algorithm>
-
-NAMESPACE_BEGIN(CryptoPP)
-
-template <class T> class simple_ptr
-{
-public:
-       simple_ptr() : m_p(NULL) {}
-       ~simple_ptr() {delete m_p;}
-       T *m_p;
-};
-
-template <class T> class member_ptr
-{
-public:
-       explicit member_ptr(T *p = NULL) : m_p(p) {}
-
-       ~member_ptr();
-
-       const T& operator*() const { return *m_p; }
-       T& operator*() { return *m_p; }
-
-       const T* operator->() const { return m_p; }
-       T* operator->() { return m_p; }
-
-       const T* get() const { return m_p; }
-       T* get() { return m_p; }
-
-       T* release()
-       {
-               T *old_p = m_p;
-               m_p = 0;
-               return old_p;
-       } 
-
-       void reset(T *p = 0);
-
-protected:
-       member_ptr(const member_ptr<T>& rhs);           // copy not allowed
-       void operator=(const member_ptr<T>& rhs);       // assignment not allowed
-
-       T *m_p;
-};
-
-template <class T> member_ptr<T>::~member_ptr() {delete m_p;}
-template <class T> void member_ptr<T>::reset(T *p) {delete m_p; m_p = p;}
-
-// ********************************************************
-
-template<class T> class value_ptr : public member_ptr<T>
-{
-public:
-       value_ptr(const T &obj) : member_ptr<T>(new T(obj)) {}
-       value_ptr(T *p = NULL) : member_ptr<T>(p) {}
-       value_ptr(const value_ptr<T>& rhs)
-               : member_ptr<T>(rhs.m_p ? new T(*rhs.m_p) : NULL) {}
-
-       value_ptr<T>& operator=(const value_ptr<T>& rhs);
-       bool operator==(const value_ptr<T>& rhs)
-       {
-               return (!this->m_p && !rhs.m_p) || (this->m_p && rhs.m_p && *this->m_p == *rhs.m_p);
-       }
-};
-
-template <class T> value_ptr<T>& value_ptr<T>::operator=(const value_ptr<T>& rhs)
-{
-       T *old_p = this->m_p;
-       this->m_p = rhs.m_p ? new T(*rhs.m_p) : NULL;
-       delete old_p;
-       return *this;
-}
-
-// ********************************************************
-
-template<class T> class clonable_ptr : public member_ptr<T>
-{
-public:
-       clonable_ptr(const T &obj) : member_ptr<T>(obj.Clone()) {}
-       clonable_ptr(T *p = NULL) : member_ptr<T>(p) {}
-       clonable_ptr(const clonable_ptr<T>& rhs)
-               : member_ptr<T>(rhs.m_p ? rhs.m_p->Clone() : NULL) {}
-
-       clonable_ptr<T>& operator=(const clonable_ptr<T>& rhs);
-};
-
-template <class T> clonable_ptr<T>& clonable_ptr<T>::operator=(const clonable_ptr<T>& rhs)
-{
-       T *old_p = this->m_p;
-       this->m_p = rhs.m_p ? rhs.m_p->Clone() : NULL;
-       delete old_p;
-       return *this;
-}
-
-// ********************************************************
-
-template<class T> class counted_ptr
-{
-public:
-       explicit counted_ptr(T *p = 0);
-       counted_ptr(const T &r) : m_p(0) {attach(r);}
-       counted_ptr(const counted_ptr<T>& rhs);
-
-       ~counted_ptr();
-
-       const T& operator*() const { return *m_p; }
-       T& operator*() { return *m_p; }
-
-       const T* operator->() const { return m_p; }
-       T* operator->() { return get(); }
-
-       const T* get() const { return m_p; }
-       T* get();
-
-       void attach(const T &p);
-
-       counted_ptr<T> & operator=(const counted_ptr<T>& rhs);
-
-private:
-       T *m_p;
-};
-
-template <class T> counted_ptr<T>::counted_ptr(T *p)
-       : m_p(p) 
-{
-       if (m_p)
-               m_p->m_referenceCount = 1;
-}
-
-template <class T> counted_ptr<T>::counted_ptr(const counted_ptr<T>& rhs)
-       : m_p(rhs.m_p)
-{
-       if (m_p)
-               m_p->m_referenceCount++;
-}
-
-template <class T> counted_ptr<T>::~counted_ptr()
-{
-       if (m_p && --m_p->m_referenceCount == 0)
-               delete m_p;
-}
-
-template <class T> void counted_ptr<T>::attach(const T &r)
-{
-       if (m_p && --m_p->m_referenceCount == 0)
-               delete m_p;
-       if (r.m_referenceCount == 0)
-       {
-               m_p = r.clone();
-               m_p->m_referenceCount = 1;
-       }
-       else
-       {
-               m_p = const_cast<T *>(&r);
-               m_p->m_referenceCount++;
-       }
-}
-
-template <class T> T* counted_ptr<T>::get()
-{
-       if (m_p && m_p->m_referenceCount > 1)
-       {
-               T *temp = m_p->clone();
-               m_p->m_referenceCount--;
-               m_p = temp;
-               m_p->m_referenceCount = 1;
-       }
-       return m_p;
-}
-
-template <class T> counted_ptr<T> & counted_ptr<T>::operator=(const counted_ptr<T>& rhs)
-{
-       if (m_p != rhs.m_p)
-       {
-               if (m_p && --m_p->m_referenceCount == 0)
-                       delete m_p;
-               m_p = rhs.m_p;
-               if (m_p)
-                       m_p->m_referenceCount++;
-       }
-       return *this;
-}
-
-// ********************************************************
-
-template <class T> class vector_member_ptrs
-{
-public:
-       vector_member_ptrs(size_t size=0)
-               : m_size(size), m_ptr(new member_ptr<T>[size]) {}
-       ~vector_member_ptrs()
-               {delete [] this->m_ptr;}
-
-       member_ptr<T>& operator[](size_t index)
-               {assert(index<this->m_size); return this->m_ptr[index];}
-       const member_ptr<T>& operator[](size_t index) const
-               {assert(index<this->m_size); return this->m_ptr[index];}
-
-       size_t size() const {return this->m_size;}
-       void resize(size_t newSize)
-       {
-               member_ptr<T> *newPtr = new member_ptr<T>[newSize];
-               for (size_t i=0; i<this->m_size && i<newSize; i++)
-                       newPtr[i].reset(this->m_ptr[i].release());
-               delete [] this->m_ptr;
-               this->m_size = newSize;
-               this->m_ptr = newPtr;
-       }
-
-private:
-       vector_member_ptrs(const vector_member_ptrs<T> &c);     // copy not allowed
-       void operator=(const vector_member_ptrs<T> &x);         // assignment not allowed
-
-       size_t m_size;
-       member_ptr<T> *m_ptr;
-};
-
-NAMESPACE_END
-
-#endif
diff --git a/src/cryptopp/stdcpp.h b/src/cryptopp/stdcpp.h
deleted file mode 100644 (file)
index 9a468ab..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef CRYPTOPP_STDCPP_H
-#define CRYPTOPP_STDCPP_H
-
-#include <stddef.h>
-#include <assert.h>
-#include <limits.h>
-#include <memory>
-#include <string>
-#include <exception>
-#include <typeinfo>
-
-
-#ifdef _MSC_VER
-#include <string.h>    // CodeWarrior doesn't have memory.h
-#include <algorithm>
-#include <map>
-#include <vector>
-
-// re-disable this
-#pragma warning(disable: 4231)
-#endif
-
-#if defined(_MSC_VER) && defined(_CRTAPI1)
-#define CRYPTOPP_MSVCRT6
-#endif
-
-#endif
index d509253..d615e46 100644 (file)
@@ -641,24 +641,6 @@ bool CAddrDB::LoadAddresses()
 {
     CRITICAL_BLOCK(cs_mapAddresses)
     {
-        // Load user provided addresses
-        CAutoFile filein = fopen((GetDataDir() + "/addr.txt").c_str(), "rt");
-        if (filein)
-        {
-            try
-            {
-                char psz[1000];
-                while (fgets(psz, sizeof(psz), filein))
-                {
-                    CAddress addr(psz, false, NODE_NETWORK);
-                    addr.nTime = 0; // so it won't relay unless successfully connected
-                    if (addr.IsValid())
-                        AddAddress(addr);
-                }
-            }
-            catch (...) { }
-        }
-
         // Get cursor
         Dbc* pcursor = GetCursor();
         if (!pcursor)
@@ -798,7 +780,7 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
     bool fIsEncrypted = false;
 
     // Modify defaults
-#ifndef __WXMSW__
+#ifndef WIN32
     // Tray icon sometimes disappears on 9.10 karmic koala 64-bit, leaving no way to access the program
     fMinimizeToTray = false;
     fMinimizeOnClose = false;
@@ -987,7 +969,7 @@ int CWalletDB::LoadWallet(CWallet* pwallet)
                 ssKey >> strKey;
 
                 // Options
-#ifndef GUI
+#ifndef QT_GUI
                 if (strKey == "fGenerateBitcoins")  ssValue >> fGenerateBitcoins;
 #endif
                 if (strKey == "nTransactionFee")    ssValue >> nTransactionFee;
index 537d405..cef2718 100644 (file)
 #if (defined(__unix__) || defined(unix)) && !defined(USG)
 #include <sys/param.h>  // to get BSD define
 #endif
-#ifdef __WXMAC_OSX__
+#ifdef MAC_OSX
 #ifndef BSD
 #define BSD 1
 #endif
 #endif
-#ifdef GUI
-#include <wx/wx.h>
-#include <wx/stdpaths.h>
-#include <wx/snglinst.h>
-#include <wx/utils.h>
-#include <wx/clipbrd.h>
-#include <wx/taskbar.h>
-#endif
 #include <openssl/buffer.h>
 #include <openssl/ecdsa.h>
 #include <openssl/evp.h>
@@ -63,7 +55,7 @@
 #include <deque>
 #include <map>
 
-#ifdef __WXMSW__
+#ifdef WIN32
 #include <windows.h>
 #include <winsock2.h>
 #include <mswsock.h>
 #include "bignum.h"
 #include "base58.h"
 #include "main.h"
-#ifdef GUI
-#include "uibase.h"
-#include "ui.h"
+#ifdef QT_GUI
+#include "qtui.h"
 #else
 #include "noui.h"
 #endif
-
-#ifdef GUI
-#include "xpm/addressbook16.xpm"
-#include "xpm/addressbook20.xpm"
-#include "xpm/bitcoin16.xpm"
-#include "xpm/bitcoin20.xpm"
-#include "xpm/bitcoin32.xpm"
-#include "xpm/bitcoin48.xpm"
-#include "xpm/bitcoin80.xpm"
-#include "xpm/check.xpm"
-#include "xpm/send16.xpm"
-#include "xpm/send16noshadow.xpm"
-#include "xpm/send20.xpm"
-#include "xpm/about.xpm"
-#endif
index 393d250..31e0551 100644 (file)
@@ -4,7 +4,7 @@
 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 #include "headers.h"
 #include "db.h"
-#include "rpc.h"
+#include "bitcoinrpc.h"
 #include "net.h"
 #include "init.h"
 #include "strlcpy.h"
 #include <boost/filesystem/fstream.hpp>
 #include <boost/interprocess/sync/file_lock.hpp>
 
+#if defined(BITCOIN_NEED_QT_PLUGINS) && !defined(_BITCOIN_QT_PLUGINS_INCLUDED)
+#define _BITCOIN_QT_PLUGINS_INCLUDED
+#define __INSURE__
+#include <QtPlugin>
+Q_IMPORT_PLUGIN(qcncodecs)
+Q_IMPORT_PLUGIN(qjpcodecs)
+Q_IMPORT_PLUGIN(qtwcodecs)
+Q_IMPORT_PLUGIN(qkrcodecs)
+Q_IMPORT_PLUGIN(qtaccessiblewidgets)
+#endif
+
 using namespace std;
 using namespace boost;
 
@@ -24,12 +35,23 @@ CWallet* pwalletMain;
 
 void ExitTimeout(void* parg)
 {
-#ifdef __WXMSW__
+#ifdef WIN32
     Sleep(5000);
     ExitProcess(0);
 #endif
 }
 
+void StartShutdown()
+{
+#ifdef QT_GUI
+    // ensure we leave the Qt main loop for a clean GUI exit (Shutdown() is called in bitcoin.cpp afterwards)
+    QueueShutdown();
+#else
+    // Without UI, Shutdown() can simply be started in a new thread
+    CreateThread(Shutdown, NULL);
+#endif
+}
+
 void Shutdown(void* parg)
 {
     static CCriticalSection cs_Shutdown;
@@ -55,7 +77,10 @@ void Shutdown(void* parg)
         Sleep(50);
         printf("Bitcoin exiting\n\n");
         fExit = true;
+#ifndef QT_GUI
+        // ensure non UI client get's exited here, but let Bitcoin-Qt reach return 0; in bitcoin.cpp
         exit(0);
+#endif
     }
     else
     {
@@ -80,7 +105,7 @@ void HandleSIGTERM(int)
 //
 // Start
 //
-#ifndef GUI
+#if !defined(QT_GUI)
 int main(int argc, char* argv[])
 {
     bool fRet = false;
@@ -121,10 +146,10 @@ bool AppInit2(int argc, char* argv[])
     // Disable confusing "helpful" text message on abort, ctrl-c
     _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
 #endif
-#ifndef __WXMSW__
+#ifndef WIN32
     umask(077);
 #endif
-#ifndef __WXMSW__
+#ifndef WIN32
     // Clean shutdown on SIGTERM
     struct sigaction sa;
     sa.sa_handler = HandleSIGTERM;
@@ -183,6 +208,8 @@ bool AppInit2(int argc, char* argv[])
             "  -noirc           \t  "   + _("Don't find peers using internet relay chat\n") +
             "  -nolisten        \t  "   + _("Don't accept connections from outside\n") +
             "  -nodnsseed       \t  "   + _("Don't bootstrap list of peers using DNS\n") +
+            "  -banscore=<n>    \t  "   + _("Threshold for disconnecting misbehaving peers (default: 100)\n") +
+            "  -bantime=<n>     \t  "   + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)\n") +
             "  -maxreceivebuffer=<n>\t  " + _("Maximum per-connection receive buffer, <n>*1000 bytes (default: 10000)\n") +
             "  -maxsendbuffer=<n>\t  "   + _("Maximum per-connection send buffer, <n>*1000 bytes (default: 10000)\n") +
 #ifdef USE_UPNP
@@ -192,11 +219,11 @@ bool AppInit2(int argc, char* argv[])
             "  -upnp            \t  "   + _("Attempt to use UPnP to map the listening port\n") +
 #endif
 #endif
-            "  -paytxfee=<amt>  \t  "   + _("Fee per KB to add to transactions you send\n") +
-#ifdef GUI
+            "  -paytxfee=<amt>  \t  "   + _("Fee per kB to add to transactions you send\n") +
+#ifdef QT_GUI
             "  -server          \t\t  " + _("Accept command line and JSON-RPC commands\n") +
 #endif
-#ifndef __WXMSW__
+#if !defined(WIN32) && !defined(QT_GUI)
             "  -daemon          \t\t  " + _("Run in the background as a daemon and accept commands\n") +
 #endif
             "  -testnet         \t\t  " + _("Use the test network\n") +
@@ -226,12 +253,12 @@ bool AppInit2(int argc, char* argv[])
         strUsage += string() +
             "  -?               \t\t  " + _("This help message\n");
 
-#if defined(__WXMSW__) && defined(GUI)
-        // Tabs make the columns line up in the message box
-        wxMessageBox(strUsage, "Bitcoin", wxOK);
-#else
         // Remove tabs
         strUsage.erase(std::remove(strUsage.begin(), strUsage.end(), '\t'), strUsage.end());
+#if defined(QT_GUI) && defined(WIN32)
+        // On windows, show a message box, as there is no stderr
+        wxMessageBox(strUsage, "Usage");
+#else
         fprintf(stderr, "%s", strUsage.c_str());
 #endif
         return false;
@@ -240,7 +267,7 @@ bool AppInit2(int argc, char* argv[])
     fTestNet = GetBoolArg("-testnet");
     fDebug = GetBoolArg("-debug");
 
-#ifndef __WXMSW__
+#if !defined(WIN32) && !defined(QT_GUI)
     fDaemon = GetBoolArg("-daemon");
 #else
     fDaemon = false;
@@ -252,14 +279,14 @@ bool AppInit2(int argc, char* argv[])
         fServer = GetBoolArg("-server");
 
     /* force fServer when running without GUI */
-#ifndef GUI
+#if !defined(QT_GUI)
     fServer = true;
 #endif
-
     fPrintToConsole = GetBoolArg("-printtoconsole");
     fPrintToDebugger = GetBoolArg("-printtodebugger");
     fLogTimestamps = GetBoolArg("-logtimestamps");
 
+#ifndef QT_GUI
     for (int i = 1; i < argc; i++)
         if (!IsSwitchChar(argv[i][0]))
             fCommandLine = true;
@@ -269,8 +296,9 @@ bool AppInit2(int argc, char* argv[])
         int ret = CommandLineRPC(argc, argv);
         exit(ret);
     }
+#endif
 
-#ifndef __WXMSW__
+#if !defined(WIN32) && !defined(QT_GUI)
     if (fDaemon)
     {
         // Daemonize
@@ -296,11 +324,6 @@ bool AppInit2(int argc, char* argv[])
         ShrinkDebugFile();
     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
     printf("Bitcoin version %s\n", FormatFullVersion().c_str());
-#ifdef GUI
-    printf("OS version %s\n", ((string)wxGetOsDescription()).c_str());
-    printf("System default language is %d %s\n", g_locale.GetSystemLanguage(), ((string)g_locale.GetSysName()).c_str());
-    printf("Language file %s (%s)\n", (string("locale/") + (string)g_locale.GetCanonicalName() + "/LC_MESSAGES/bitcoin.mo").c_str(), ((string)g_locale.GetLocale()).c_str());
-#endif
     printf("Default data directory %s\n", GetDefaultDataDir().c_str());
 
     if (GetBoolArg("-loadblockindextest"))
@@ -311,46 +334,6 @@ bool AppInit2(int argc, char* argv[])
         return false;
     }
 
-    //
-    // Limit to single instance per user
-    // Required to protect the database files if we're going to keep deleting log.*
-    //
-#if defined(__WXMSW__) && defined(GUI)
-    // wxSingleInstanceChecker doesn't work on Linux
-    wxString strMutexName = wxString("bitcoin_running.") + getenv("HOMEPATH");
-    for (int i = 0; i < strMutexName.size(); i++)
-        if (!isalnum(strMutexName[i]))
-            strMutexName[i] = '.';
-    wxSingleInstanceChecker* psingleinstancechecker = new wxSingleInstanceChecker(strMutexName);
-    if (psingleinstancechecker->IsAnotherRunning())
-    {
-        printf("Existing instance found\n");
-        unsigned int nStart = GetTime();
-        loop
-        {
-            // Show the previous instance and exit
-            HWND hwndPrev = FindWindowA("wxWindowClassNR", "Bitcoin");
-            if (hwndPrev)
-            {
-                if (IsIconic(hwndPrev))
-                    ShowWindow(hwndPrev, SW_RESTORE);
-                SetForegroundWindow(hwndPrev);
-                return false;
-            }
-
-            if (GetTime() > nStart + 60)
-                return false;
-
-            // Resume this instance if the other exits
-            delete psingleinstancechecker;
-            Sleep(1000);
-            psingleinstancechecker = new wxSingleInstanceChecker(strMutexName);
-            if (!psingleinstancechecker->IsAnotherRunning())
-                break;
-        }
-    }
-#endif
-
     // Make sure only a single bitcoin process is using the data directory.
     string strLockFile = GetDataDir() + "/.lock";
     FILE* file = fopen(strLockFile.c_str(), "a"); // empty lock file; created if it doesn't exist.
@@ -372,18 +355,21 @@ bool AppInit2(int argc, char* argv[])
     strErrors = "";
     int64 nStart;
 
+    InitMessage(_("Loading addresses..."));
     printf("Loading addresses...\n");
     nStart = GetTimeMillis();
     if (!LoadAddresses())
         strErrors += _("Error loading addr.dat      \n");
     printf(" addresses   %15"PRI64d"ms\n", GetTimeMillis() - nStart);
 
+    InitMessage(_("Loading block index..."));
     printf("Loading block index...\n");
     nStart = GetTimeMillis();
     if (!LoadBlockIndex())
         strErrors += _("Error loading blkindex.dat      \n");
     printf(" block index %15"PRI64d"ms\n", GetTimeMillis() - nStart);
 
+    InitMessage(_("Loading wallet..."));
     printf("Loading wallet...\n");
     nStart = GetTimeMillis();
     bool fFirstRun;
@@ -422,12 +408,14 @@ bool AppInit2(int argc, char* argv[])
     }
     if (pindexBest != pindexRescan)
     {
+        InitMessage(_("Rescanning..."));
         printf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight);
         nStart = GetTimeMillis();
         pwalletMain->ScanForWalletTransactions(pindexRescan, true);
         printf(" rescan      %15"PRI64d"ms\n", GetTimeMillis() - nStart);
     }
 
+    InitMessage(_("Done loading"));
     printf("Done loading\n");
 
         //// debug print
@@ -556,30 +544,20 @@ bool AppInit2(int argc, char* argv[])
     }
 
     //
-    // Create the main window and start the node
+    // Start the node
     //
-#ifdef GUI
-    if (!fDaemon)
-        CreateMainWindow();
-#endif
-
     if (!CheckDiskSpace())
         return false;
 
     RandAddSeedPerfmon();
 
     if (!CreateThread(StartNode, NULL))
-        wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin");
+        wxMessageBox(_("Error: CreateThread(StartNode) failed"), "Bitcoin");
 
     if (fServer)
         CreateThread(ThreadRPCServer, NULL);
 
-#if defined(__WXMSW__) && defined(GUI)
-    if (fFirstRun)
-        SetStartOnSystemStartup(true);
-#endif
-
-#ifndef GUI
+#if !defined(QT_GUI)
     while (1)
         Sleep(5000);
 #endif
index 2086b31..6bf8466 100644 (file)
@@ -7,6 +7,7 @@
 
 extern CWallet* pwalletMain;
 
+void StartShutdown();
 void Shutdown(void* parg);
 bool AppInit(int argc, char* argv[]);
 bool AppInit2(int argc, char* argv[]);
index 77b6aea..4dc4914 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -39,6 +39,7 @@
 // see www.keylength.com
 // script supports up to 75 for single byte push
 
+// Generate a private key from just the secret parameter
 int static inline EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key)
 {
     int ok = 0;
@@ -75,6 +76,79 @@ err:
     return(ok);
 }
 
+// Perform ECDSA key recovery (see SEC1 4.1.6) for curves over (mod p)-fields
+// recid selects which key is recovered
+// if check is nonzero, additional checks are performed
+int static inline ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned char *msg, int msglen, int recid, int check)
+{
+    if (!eckey) return 0;
+
+    int ret = 0;
+    BN_CTX *ctx = NULL;
+
+    BIGNUM *x = NULL;
+    BIGNUM *e = NULL;
+    BIGNUM *order = NULL;
+    BIGNUM *sor = NULL;
+    BIGNUM *eor = NULL;
+    BIGNUM *field = NULL;
+    EC_POINT *R = NULL;
+    EC_POINT *O = NULL;
+    EC_POINT *Q = NULL;
+    BIGNUM *rr = NULL;
+    BIGNUM *zero = NULL;
+    int n = 0;
+    int i = recid / 2;
+
+    const EC_GROUP *group = EC_KEY_get0_group(eckey);
+    if ((ctx = BN_CTX_new()) == NULL) { ret = -1; goto err; }
+    BN_CTX_start(ctx);
+    order = BN_CTX_get(ctx);
+    if (!EC_GROUP_get_order(group, order, ctx)) { ret = -2; goto err; }
+    x = BN_CTX_get(ctx);
+    if (!BN_copy(x, order)) { ret=-1; goto err; }
+    if (!BN_mul_word(x, i)) { ret=-1; goto err; }
+    if (!BN_add(x, x, ecsig->r)) { ret=-1; goto err; }
+    field = BN_CTX_get(ctx);
+    if (!EC_GROUP_get_curve_GFp(group, field, NULL, NULL, ctx)) { ret=-2; goto err; }
+    if (BN_cmp(x, field) >= 0) { ret=0; goto err; }
+    if ((R = EC_POINT_new(group)) == NULL) { ret = -2; goto err; }
+    if (!EC_POINT_set_compressed_coordinates_GFp(group, R, x, recid % 2, ctx)) { ret=0; goto err; }
+    if (check)
+    {
+        if ((O = EC_POINT_new(group)) == NULL) { ret = -2; goto err; }
+        if (!EC_POINT_mul(group, O, NULL, R, order, ctx)) { ret=-2; goto err; }
+        if (!EC_POINT_is_at_infinity(group, O)) { ret = 0; goto err; }
+    }
+    if ((Q = EC_POINT_new(group)) == NULL) { ret = -2; goto err; }
+    n = EC_GROUP_get_degree(group);
+    e = BN_CTX_get(ctx);
+    if (!BN_bin2bn(msg, msglen, e)) { ret=-1; goto err; }
+    if (8*msglen > n) BN_rshift(e, e, 8-(n & 7));
+    zero = BN_CTX_get(ctx);
+    if (!BN_zero(zero)) { ret=-1; goto err; }
+    if (!BN_mod_sub(e, zero, e, order, ctx)) { ret=-1; goto err; }
+    rr = BN_CTX_get(ctx);
+    if (!BN_mod_inverse(rr, ecsig->r, order, ctx)) { ret=-1; goto err; }
+    sor = BN_CTX_get(ctx);
+    if (!BN_mod_mul(sor, ecsig->s, rr, order, ctx)) { ret=-1; goto err; }
+    eor = BN_CTX_get(ctx);
+    if (!BN_mod_mul(eor, e, rr, order, ctx)) { ret=-1; goto err; }
+    if (!EC_POINT_mul(group, Q, eor, R, sor, ctx)) { ret=-2; goto err; }
+    if (!EC_KEY_set_public_key(eckey, Q)) { ret=-2; goto err; }
+
+    ret = 1;
+
+err:
+    if (ctx) {
+        BN_CTX_end(ctx);
+        BN_CTX_free(ctx);
+    }
+    if (R != NULL) EC_POINT_free(R);
+    if (O != NULL) EC_POINT_free(O);
+    if (Q != NULL) EC_POINT_free(Q);
+    return ret;
+}
 
 class key_error : public std::runtime_error
 {
@@ -84,7 +158,9 @@ public:
 
 
 // secure_allocator is defined in serialize.h
+// CPrivKey is a serialized private key, with all parameters included (279 bytes)
 typedef std::vector<unsigned char, secure_allocator<unsigned char> > CPrivKey;
+// CSecret is a serialization of just the secret parameter (32 bytes)
 typedef std::vector<unsigned char, secure_allocator<unsigned char> > CSecret;
 
 class CKey
@@ -93,6 +169,11 @@ protected:
     EC_KEY* pkey;
     bool fSet;
 
+    void SetCompressedPubKey()
+    {
+        EC_KEY_set_conv_form(pkey, POINT_CONVERSION_COMPRESSED);
+    }
+
 public:
     CKey()
     {
@@ -225,6 +306,78 @@ public:
         return true;
     }
 
+    // create a compact signature (65 bytes), which allows reconstructing the used public key
+    // The format is one header byte, followed by two times 32 bytes for the serialized r and s values.
+    // The header byte: 0x1B = first key with even y, 0x1C = first key with odd y,
+    //                  0x1D = second key with even y, 0x1E = second key with odd y
+    bool SignCompact(uint256 hash, std::vector<unsigned char>& vchSig)
+    {
+        bool fOk = false;
+        ECDSA_SIG *sig = ECDSA_do_sign((unsigned char*)&hash, sizeof(hash), pkey);
+        if (sig==NULL)
+            return false;
+        vchSig.clear();
+        vchSig.resize(65,0);
+        int nBitsR = BN_num_bits(sig->r);
+        int nBitsS = BN_num_bits(sig->s);
+        if (nBitsR <= 256 && nBitsS <= 256)
+        {
+            int nRecId = -1;
+            for (int i=0; i<4; i++)
+            {
+                CKey keyRec;
+                keyRec.fSet = true;
+                if (ECDSA_SIG_recover_key_GFp(keyRec.pkey, sig, (unsigned char*)&hash, sizeof(hash), i, 1) == 1)
+                    if (keyRec.GetPubKey() == this->GetPubKey())
+                    {
+                        nRecId = i;
+                        break;
+                    }
+            }
+
+            if (nRecId == -1)
+                throw key_error("CKey::SignCompact() : unable to construct recoverable key");
+
+            vchSig[0] = nRecId+27;
+            BN_bn2bin(sig->r,&vchSig[33-(nBitsR+7)/8]);
+            BN_bn2bin(sig->s,&vchSig[65-(nBitsS+7)/8]);
+            fOk = true;
+        }
+        ECDSA_SIG_free(sig);
+        return fOk;
+    }
+
+    // reconstruct public key from a compact signature
+    // This is only slightly more CPU intensive than just verifying it.
+    // If this function succeeds, the recovered public key is guaranteed to be valid
+    // (the signature is a valid signature of the given data for that key)
+    bool SetCompactSignature(uint256 hash, const std::vector<unsigned char>& vchSig)
+    {
+        if (vchSig.size() != 65)
+            return false;
+        int nV = vchSig[0];
+        if (nV<27 || nV>=35)
+            return false;
+        ECDSA_SIG *sig = ECDSA_SIG_new();
+        BN_bin2bn(&vchSig[1],32,sig->r);
+        BN_bin2bn(&vchSig[33],32,sig->s);
+
+        EC_KEY_free(pkey);
+        pkey = EC_KEY_new_by_curve_name(NID_secp256k1);
+        if (nV >= 31)
+        {
+            SetCompressedPubKey();
+            nV -= 4;
+        }
+        if (ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), nV - 27, 0) == 1)
+        {
+            fSet = true;
+            ECDSA_SIG_free(sig);
+            return true;
+        }
+        return false;
+    }
+
     bool Verify(uint256 hash, const std::vector<unsigned char>& vchSig)
     {
         // -1 = error, 0 = bad sig, 1 = good
@@ -233,6 +386,18 @@ public:
         return true;
     }
 
+    // Verify a compact signature
+    bool VerifyCompact(uint256 hash, const std::vector<unsigned char>& vchSig)
+    {
+        CKey key;
+        if (!key.SetCompactSignature(hash, vchSig))
+            return false;
+        if (GetPubKey() != key.GetPubKey())
+            return false;
+        return true;
+    }
+
+    // Get the address corresponding to this key
     CBitcoinAddress GetAddress() const
     {
         return CBitcoinAddress(GetPubKey());
index fa70933..87c8401 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "crypter.h"
 
+// A virtual base class for key stores
 class CKeyStore
 {
 protected:
@@ -15,15 +16,27 @@ protected:
 public:
     virtual ~CKeyStore() {}
 
+    // Add a key to the store.
     virtual bool AddKey(const CKey& key) =0;
+
+    // Check whether a key corresponding to a given address is present in the store.
     virtual bool HaveKey(const CBitcoinAddress &address) const =0;
+
+    // Retrieve a key corresponding to a given address from the store.
+    // Return true if succesful.
     virtual bool GetKey(const CBitcoinAddress &address, CKey& keyOut) const =0;
+
+    // Retrieve only the public key corresponding to a given address.
+    // This may succeed even if GetKey fails (e.g., encrypted wallets)
     virtual bool GetPubKey(const CBitcoinAddress &address, std::vector<unsigned char>& vchPubKeyOut) const;
+
+    // Generate a new key, and add it to the store
     virtual std::vector<unsigned char> GenerateNewKey();
 };
 
 typedef std::map<CBitcoinAddress, CSecret> KeyMap;
 
+// Basic key store, that keeps keys in an address->secret map
 class CBasicKeyStore : public CKeyStore
 {
 protected:
@@ -55,6 +68,8 @@ public:
 
 typedef std::map<CBitcoinAddress, std::pair<std::vector<unsigned char>, std::vector<unsigned char> > > CryptedKeyMap;
 
+// Keystore which keeps the private keys encrypted
+// It derives from the basic key store, which is used if no encryption is active.
 class CCryptoKeyStore : public CBasicKeyStore
 {
 private:
index ee814aa..a28d2e8 100644 (file)
@@ -8,7 +8,6 @@
 #include "db.h"
 #include "net.h"
 #include "init.h"
-#include "cryptopp/sha.h"
 #include <boost/filesystem.hpp>
 #include <boost/filesystem/fstream.hpp>
 
@@ -32,7 +31,6 @@ map<COutPoint, CInPoint> mapNextTx;
 map<uint256, CBlockIndex*> mapBlockIndex;
 uint256 hashGenesisBlock("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f");
 static CBigNum bnProofOfWorkLimit(~uint256(0) >> 32);
-const int nInitialBlockThreshold = 120; // Regard blocks up until N-threshold as "initial download"
 CBlockIndex* pindexGenesisBlock = NULL;
 int nBestHeight = -1;
 CBigNum bnBestChainWork = 0;
@@ -41,6 +39,8 @@ uint256 hashBestChain = 0;
 CBlockIndex* pindexBest = NULL;
 int64 nTimeBestReceived = 0;
 
+CMedianFilter<int> cPeerBlockCounts(5, 0); // Amount of blocks that other nodes claim to have
+
 map<uint256, CBlock*> mapOrphanBlocks;
 multimap<uint256, CBlock*> mapOrphanBlocksByPrev;
 
@@ -65,16 +65,14 @@ int fUseUPnP = false;
 #endif
 
 
-
-
-
-
-
 //////////////////////////////////////////////////////////////////////////////
 //
 // dispatching functions
 //
 
+// These functions dispatch to one or all registered wallets
+
+
 void RegisterWallet(CWallet* pwalletIn)
 {
     CRITICAL_BLOCK(cs_setpwalletRegistered)
@@ -91,6 +89,7 @@ void UnregisterWallet(CWallet* pwalletIn)
     }
 }
 
+// check whether the passed transaction is from us
 bool static IsFromMe(CTransaction& tx)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
@@ -99,6 +98,7 @@ bool static IsFromMe(CTransaction& tx)
     return false;
 }
 
+// get the wallet transaction with the given hash (if it exists)
 bool static GetTransaction(const uint256& hashTx, CWalletTx& wtx)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
@@ -107,42 +107,49 @@ bool static GetTransaction(const uint256& hashTx, CWalletTx& wtx)
     return false;
 }
 
+// erases transaction with the given hash from all wallets
 void static EraseFromWallets(uint256 hash)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->EraseFromWallet(hash);
 }
 
+// make sure all wallets know about the given transaction, in the given block
 void static SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL, bool fUpdate = false)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->AddToWalletIfInvolvingMe(tx, pblock, fUpdate);
 }
 
+// notify wallets about a new best chain
 void static SetBestChain(const CBlockLocator& loc)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->SetBestChain(loc);
 }
 
+// notify wallets about an updated transaction
 void static UpdatedTransaction(const uint256& hashTx)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->UpdatedTransaction(hashTx);
 }
 
+// dump all wallets
 void static PrintWallets(const CBlock& block)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->PrintWallet(block);
 }
 
+// notify wallets about an incoming inventory (for request counts)
 void static Inventory(const uint256& hash)
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
         pwallet->Inventory(hash);
 }
 
+// ask wallets to resend their transactions
 void static ResendWalletTransactions()
 {
     BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered)
@@ -315,24 +322,24 @@ bool CTransaction::CheckTransaction() const
 {
     // Basic checks that don't depend on any context
     if (vin.empty())
-        return error("CTransaction::CheckTransaction() : vin empty");
+        return DoS(10, error("CTransaction::CheckTransaction() : vin empty"));
     if (vout.empty())
-        return error("CTransaction::CheckTransaction() : vout empty");
+        return DoS(10, error("CTransaction::CheckTransaction() : vout empty"));
     // Size limits
     if (::GetSerializeSize(*this, SER_NETWORK) > MAX_BLOCK_SIZE)
-        return error("CTransaction::CheckTransaction() : size limits failed");
+        return DoS(100, error("CTransaction::CheckTransaction() : size limits failed"));
 
     // Check for negative or overflow output values
     int64 nValueOut = 0;
     BOOST_FOREACH(const CTxOut& txout, vout)
     {
         if (txout.nValue < 0)
-            return error("CTransaction::CheckTransaction() : txout.nValue negative");
+            return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue negative"));
         if (txout.nValue > MAX_MONEY)
-            return error("CTransaction::CheckTransaction() : txout.nValue too high");
+            return DoS(100, error("CTransaction::CheckTransaction() : txout.nValue too high"));
         nValueOut += txout.nValue;
         if (!MoneyRange(nValueOut))
-            return error("CTransaction::CheckTransaction() : txout total out of range");
+            return DoS(100, error("CTransaction::CheckTransaction() : txout total out of range"));
     }
 
     // Check for duplicate inputs
@@ -347,13 +354,13 @@ bool CTransaction::CheckTransaction() const
     if (IsCoinBase())
     {
         if (vin[0].scriptSig.size() < 2 || vin[0].scriptSig.size() > 100)
-            return error("CTransaction::CheckTransaction() : coinbase script size");
+            return DoS(100, error("CTransaction::CheckTransaction() : coinbase script size"));
     }
     else
     {
         BOOST_FOREACH(const CTxIn& txin, vin)
             if (txin.prevout.IsNull())
-                return error("CTransaction::CheckTransaction() : prevout is null");
+                return DoS(10, error("CTransaction::CheckTransaction() : prevout is null"));
     }
 
     return true;
@@ -369,7 +376,7 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
 
     // Coinbase is only valid in a block, not as a loose transaction
     if (IsCoinBase())
-        return error("AcceptToMemoryPool() : coinbase as individual tx");
+        return DoS(100, error("AcceptToMemoryPool() : coinbase as individual tx"));
 
     // To help v0.1.5 clients who would see it as a negative number
     if ((int64)nLockTime > INT_MAX)
@@ -437,7 +444,7 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
         // 34 bytes because a TxOut is:
         //   20-byte address + 8 byte bitcoin amount + 5 bytes of ops + 1 byte script length
         if (GetSigOpCount() > nSize / 34 || nSize < 100)
-            return error("AcceptToMemoryPool() : nonstandard transaction");
+            return error("AcceptToMemoryPool() : transaction with out-of-bounds SigOpCount");
 
         int64 nFees = GetValueIn(mapInputs)-GetValueOut();
 
@@ -789,9 +796,15 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits)
     return true;
 }
 
+// Return maximum amount of blocks that other nodes claim to have
+int GetNumBlocksOfPeers()
+{
+    return std::max(cPeerBlockCounts.median(), Checkpoints::GetTotalBlocksEstimate());
+}
+
 bool IsInitialBlockDownload()
 {
-    if (pindexBest == NULL || nBestHeight < (Checkpoints::GetTotalBlocksEstimate()-nInitialBlockThreshold))
+    if (pindexBest == NULL || nBestHeight < Checkpoints::GetTotalBlocksEstimate())
         return true;
     static int64 nLastUpdate;
     static CBlockIndex* pindexLastBest;
@@ -941,7 +954,7 @@ bool CTransaction::FetchInputs(CTxDB& txdb, const map<uint256, CTxIndex>& mapTes
             // Revisit this if/when transaction replacement is implemented and allows
             // adding inputs:
             fInvalid = true;
-            return error("FetchInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str());
+            return DoS(100, error("FetchInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str()));
         }
     }
 
@@ -1010,7 +1023,7 @@ bool CTransaction::ConnectInputs(MapPrevTx inputs,
             CTransaction& txPrev = inputs[prevout.hash].second;
 
             if (prevout.n >= txPrev.vout.size() || prevout.n >= txindex.vSpent.size())
-                return error("ConnectInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str());
+                return DoS(100, error("ConnectInputs() : %s prevout.n out of range %d %d %d prev tx %s\n%s", GetHash().ToString().substr(0,10).c_str(), prevout.n, txPrev.vout.size(), txindex.vSpent.size(), prevout.hash.ToString().substr(0,10).c_str(), txPrev.ToString().c_str()));
 
             // If prev is coinbase, check that it's matured
             if (txPrev.IsCoinBase())
@@ -1019,24 +1032,31 @@ bool CTransaction::ConnectInputs(MapPrevTx inputs,
                         return error("ConnectInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight);
 
             // Check for conflicts (double-spend)
+            // This doesn't trigger the DoS code on purpose; if it did, it would make it easier
+            // for an attacker to attempt to split the network.
             if (!txindex.vSpent[prevout.n].IsNull())
                 return fMiner ? false : error("ConnectInputs() : %s prev tx already used at %s", GetHash().ToString().substr(0,10).c_str(), txindex.vSpent[prevout.n].ToString().c_str());
 
             // Check for negative or overflow input values
             nValueIn += txPrev.vout[prevout.n].nValue;
             if (!MoneyRange(txPrev.vout[prevout.n].nValue) || !MoneyRange(nValueIn))
-                return error("ConnectInputs() : txin values out of range");
+                return DoS(100, error("ConnectInputs() : txin values out of range"));
 
-            // Verify signature
-            if (!VerifySignature(txPrev, *this, i, fStrictPayToScriptHash, 0))
+            // Skip ECDSA signature verification when connecting blocks (fBlock=true)
+            // before the last blockchain checkpoint. This is safe because block merkle hashes are
+            // still computed and checked, and any change will be caught at the next checkpoint.
+            if (!(fBlock && (nBestHeight < Checkpoints::GetTotalBlocksEstimate())))
             {
-                // only during transition phase for P2SH: do not invoke (external)
-                // anti-DoS code for potentially old clients relaying bad P2SH
-                // transactions
-                if (fStrictPayToScriptHash && VerifySignature(txPrev, *this, i, false, 0))
-                    return error("ConnectInputs() : %s P2SH VerifySignature failed", GetHash().ToString().substr(0,10).c_str());
+                // Verify signature
+                if (!VerifySignature(txPrev, *this, i, fStrictPayToScriptHash, 0))
+                {
+                    // only during transition phase for P2SH: do not invoke anti-DoS code for
+                    // potentially old clients relaying bad P2SH transactions
+                    if (fStrictPayToScriptHash && VerifySignature(txPrev, *this, i, false, 0))
+                        return error("ConnectInputs() : %s P2SH VerifySignature failed", GetHash().ToString().substr(0,10).c_str());
 
-                return error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str());
+                    return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str()));
+                }
             }
 
             // Mark outpoints as spent
@@ -1050,15 +1070,15 @@ bool CTransaction::ConnectInputs(MapPrevTx inputs,
         }
 
         if (nValueIn < GetValueOut())
-            return error("ConnectInputs() : %s value in < value out", GetHash().ToString().substr(0,10).c_str());
+            return DoS(100, error("ConnectInputs() : %s value in < value out", GetHash().ToString().substr(0,10).c_str()));
 
         // Tally transaction fees
         int64 nTxFee = nValueIn - GetValueOut();
         if (nTxFee < 0)
-            return error("ConnectInputs() : %s nTxFee < 0", GetHash().ToString().substr(0,10).c_str());
+            return DoS(100, error("ConnectInputs() : %s nTxFee < 0", GetHash().ToString().substr(0,10).c_str()));
         nFees += nTxFee;
         if (!MoneyRange(nFees))
-            return error("ConnectInputs() : nFees out of range");
+            return DoS(100, error("ConnectInputs() : nFees out of range"));
     }
 
     return true;
@@ -1177,7 +1197,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
     {
         nSigOps += tx.GetSigOpCount();
         if (nSigOps > MAX_BLOCK_SIGOPS)
-            return error("ConnectBlock() : too many sigops");
+            return DoS(100, error("ConnectBlock() : too many sigops"));
 
         CDiskTxPos posThisTx(pindex->nFile, pindex->nBlockPos, nTxPos);
         nTxPos += ::GetSerializeSize(tx, SER_DISK);
@@ -1196,7 +1216,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex)
                 // an incredibly-expensive-to-validate block.
                 nSigOps += tx.GetP2SHSigOpCount(mapInputs);
                 if (nSigOps > MAX_BLOCK_SIGOPS)
-                    return error("ConnectBlock() : too many sigops");
+                    return DoS(100, error("ConnectBlock() : too many sigops"));
             }
 
             nFees += tx.GetValueIn(mapInputs)-tx.GetValueOut();
@@ -1454,11 +1474,11 @@ bool CBlock::CheckBlock() const
 
     // Size limits
     if (vtx.empty() || vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(*this, SER_NETWORK) > MAX_BLOCK_SIZE)
-        return error("CheckBlock() : size limits failed");
+        return DoS(100, error("CheckBlock() : size limits failed"));
 
     // Check proof of work matches claimed amount
     if (!CheckProofOfWork(GetHash(), nBits))
-        return error("CheckBlock() : proof of work failed");
+        return DoS(50, error("CheckBlock() : proof of work failed"));
 
     // Check timestamp
     if (GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60)
@@ -1466,15 +1486,15 @@ bool CBlock::CheckBlock() const
 
     // First transaction must be coinbase, the rest must not be
     if (vtx.empty() || !vtx[0].IsCoinBase())
-        return error("CheckBlock() : first tx is not coinbase");
+        return DoS(100, error("CheckBlock() : first tx is not coinbase"));
     for (unsigned int i = 1; i < vtx.size(); i++)
         if (vtx[i].IsCoinBase())
-            return error("CheckBlock() : more than one coinbase");
+            return DoS(100, error("CheckBlock() : more than one coinbase"));
 
     // Check transactions
     BOOST_FOREACH(const CTransaction& tx, vtx)
         if (!tx.CheckTransaction())
-            return error("CheckBlock() : CheckTransaction failed");
+            return DoS(tx.nDoS, error("CheckBlock() : CheckTransaction failed"));
 
     // Check for duplicate txids. This is caught by ConnectInputs(),
     // but catching it earlier avoids a potential DoS attack:
@@ -1484,15 +1504,15 @@ bool CBlock::CheckBlock() const
         uniqueTx.insert(tx.GetHash());
     }
     if (uniqueTx.size() != vtx.size())
-        return error("CheckBlock() : duplicate transaction");
+        return DoS(100, error("CheckBlock() : duplicate transaction"));
 
     // Check that it's not full of nonstandard transactions
     if (GetSigOpCount() > MAX_BLOCK_SIGOPS)
-        return error("CheckBlock() : out-of-bounds SigOpCount");
+        return DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"));
 
     // Check merkleroot
     if (hashMerkleRoot != BuildMerkleTree())
-        return error("CheckBlock() : hashMerkleRoot mismatch");
+        return DoS(100, error("CheckBlock() : hashMerkleRoot mismatch"));
 
     return true;
 }
@@ -1507,13 +1527,13 @@ bool CBlock::AcceptBlock()
     // Get prev block index
     map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashPrevBlock);
     if (mi == mapBlockIndex.end())
-        return error("AcceptBlock() : prev block not found");
+        return DoS(10, error("AcceptBlock() : prev block not found"));
     CBlockIndex* pindexPrev = (*mi).second;
     int nHeight = pindexPrev->nHeight+1;
 
     // Check proof of work
     if (nBits != GetNextWorkRequired(pindexPrev, this))
-        return error("AcceptBlock() : incorrect proof of work");
+        return DoS(100, error("AcceptBlock() : incorrect proof of work"));
 
     // Check timestamp against prev
     if (GetBlockTime() <= pindexPrev->GetMedianTimePast())
@@ -1522,11 +1542,11 @@ bool CBlock::AcceptBlock()
     // Check that all transactions are finalized
     BOOST_FOREACH(const CTransaction& tx, vtx)
         if (!tx.IsFinal(nHeight, GetBlockTime()))
-            return error("AcceptBlock() : contains a non-final transaction");
+            return DoS(10, error("AcceptBlock() : contains a non-final transaction"));
 
     // Check that the block chain matches the known block chain up to a checkpoint
     if (!Checkpoints::CheckBlock(nHeight, hash))
-        return error("AcceptBlock() : rejected by checkpoint lockin at %d", nHeight);
+        return DoS(100, error("AcceptBlock() : rejected by checkpoint lockin at %d", nHeight));
 
     // Write block to history file
     if (!CheckDiskSpace(::GetSerializeSize(*this, SER_DISK)))
@@ -1549,7 +1569,7 @@ bool CBlock::AcceptBlock()
     return true;
 }
 
-bool static ProcessBlock(CNode* pfrom, CBlock* pblock)
+bool ProcessBlock(CNode* pfrom, CBlock* pblock)
 {
     // Check for duplicate
     uint256 hash = pblock->GetHash();
@@ -1569,6 +1589,8 @@ bool static ProcessBlock(CNode* pfrom, CBlock* pblock)
         int64 deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime;
         if (deltaTime < 0)
         {
+            if (pfrom)
+                pfrom->Misbehaving(100);
             return error("ProcessBlock() : block with timestamp before last checkpoint");
         }
         CBigNum bnNewBlock;
@@ -1577,6 +1599,8 @@ bool static ProcessBlock(CNode* pfrom, CBlock* pblock)
         bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime));
         if (bnNewBlock > bnRequired)
         {
+            if (pfrom)
+                pfrom->Misbehaving(100);
             return error("ProcessBlock() : block with too little proof-of-work");
         }
     }
@@ -1642,7 +1666,7 @@ bool CheckDiskSpace(uint64 nAdditionalBytes)
         strMiscWarning = strMessage;
         printf("*** %s\n", strMessage.c_str());
         ThreadSafeMessageBox(strMessage, "Bitcoin", wxOK | wxICON_EXCLAMATION);
-        CreateThread(Shutdown, NULL);
+        StartShutdown();
         return false;
     }
     return true;
@@ -2016,7 +2040,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
     {
         // Each connection can only send one version message
         if (pfrom->nVersion != 0)
+        {
+            pfrom->Misbehaving(1);
             return false;
+        }
 
         int64 nTime;
         CAddress addrMe;
@@ -2094,12 +2121,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
         pfrom->fSuccessfullyConnected = true;
 
         printf("version message: version %d, blocks=%d\n", pfrom->nVersion, pfrom->nStartingHeight);
+
+        cPeerBlockCounts.input(pfrom->nStartingHeight);
     }
 
 
     else if (pfrom->nVersion == 0)
     {
         // Must have a version message before anything else
+        pfrom->Misbehaving(1);
         return false;
     }
 
@@ -2121,7 +2151,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
         if (pfrom->nVersion < 31402 && mapAddresses.size() > 1000)
             return true;
         if (vAddr.size() > 1000)
+        {
+            pfrom->Misbehaving(20);
             return error("message addr size() = %d", vAddr.size());
+        }
 
         // Store the new addresses
         CAddrDB addrDB;
@@ -2179,7 +2212,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
         vector<CInv> vInv;
         vRecv >> vInv;
         if (vInv.size() > 50000)
+        {
+            pfrom->Misbehaving(20);
             return error("message inv size() = %d", vInv.size());
+        }
 
         // find last block in inv vector
         unsigned int nLastBlock = (unsigned int)(-1);
@@ -2227,7 +2263,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
         vector<CInv> vInv;
         vRecv >> vInv;
         if (vInv.size() > 50000)
+        {
+            pfrom->Misbehaving(20);
             return error("message getdata size() = %d", vInv.size());
+        }
 
         BOOST_FOREACH(const CInv& inv, vInv)
         {
@@ -2404,6 +2443,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
             if (nEvicted > 0)
                 printf("mapOrphan overflow, removed %d tx\n", nEvicted);
         }
+        if (tx.nDoS) pfrom->Misbehaving(tx.nDoS);
     }
 
 
@@ -2420,6 +2460,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
 
         if (ProcessBlock(pfrom, &block))
             mapAlreadyAskedFor.erase(inv);
+        if (block.nDoS) pfrom->Misbehaving(block.nDoS);
     }
 
 
@@ -2863,15 +2904,25 @@ int static FormatHashBlocks(void* pbuffer, unsigned int len)
     return blocks;
 }
 
-using CryptoPP::ByteReverse;
-
 static const unsigned int pSHA256InitState[8] =
 {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
 
-inline void SHA256Transform(void* pstate, void* pinput, const void* pinit)
+void SHA256Transform(void* pstate, void* pinput, const void* pinit)
 {
-    memcpy(pstate, pinit, 32);
-    CryptoPP::SHA256::Transform((CryptoPP::word32*)pstate, (CryptoPP::word32*)pinput);
+    SHA256_CTX ctx;
+    unsigned char data[64];
+
+    SHA256_Init(&ctx);
+
+    for (int i = 0; i < 16; i++)
+        ((uint32_t*)data)[i] = ByteReverse(((uint32_t*)pinput)[i]);
+
+    for (int i = 0; i < 8; i++)
+        ctx.h[i] = ((uint32_t*)pinit)[i];
+
+    SHA256_Update(&ctx, data, sizeof(data));
+    for (int i = 0; i < 8; i++) 
+        ((uint32_t*)pstate)[i] = ctx.h[i];
 }
 
 //
@@ -3189,7 +3240,6 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey)
             return error("BitcoinMiner : ProcessBlock, block not accepted");
     }
 
-    Sleep(2000);
     return true;
 }
 
index 930f518..74bbe29 100644 (file)
@@ -86,6 +86,7 @@ class CTxIndex;
 
 void RegisterWallet(CWallet* pwalletIn);
 void UnregisterWallet(CWallet* pwalletIn);
+bool ProcessBlock(CNode* pfrom, CBlock* pblock);
 bool CheckDiskSpace(uint64 nAdditionalBytes=0);
 FILE* OpenBlockFile(unsigned int nFile, unsigned int nBlockPos, const char* pszMode="rb");
 FILE* AppendBlockFile(unsigned int& nFileRet);
@@ -100,6 +101,7 @@ void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash
 bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey);
 bool CheckProofOfWork(uint256 hash, unsigned int nBits);
 unsigned int ComputeMinWork(unsigned int nBase, int64 nTime);
+int GetNumBlocksOfPeers();
 bool IsInitialBlockDownload();
 std::string GetWarnings(std::string strFor);
 
@@ -401,6 +403,9 @@ public:
     std::vector<CTxOut> vout;
     unsigned int nLockTime;
 
+    // Denial-of-service detection:
+    mutable int nDoS;
+    bool DoS(int nDoSIn, bool fIn) const { nDoS += nDoSIn; return fIn; }
 
     CTransaction()
     {
@@ -422,6 +427,7 @@ public:
         vin.clear();
         vout.clear();
         nLockTime = 0;
+        nDoS = 0;  // Denial-of-service prevention
     }
 
     bool IsNull() const
@@ -843,6 +849,9 @@ public:
     // memory only
     mutable std::vector<uint256> vMerkleTree;
 
+    // Denial-of-service detection:
+    mutable int nDoS;
+    bool DoS(int nDoSIn, bool fIn) const { nDoS += nDoSIn; return fIn; }
 
     CBlock()
     {
@@ -876,6 +885,7 @@ public:
         nNonce = 0;
         vtx.clear();
         vMerkleTree.clear();
+        nDoS = 0;
     }
 
     bool IsNull() const
@@ -977,7 +987,7 @@ public:
         fflush(fileout);
         if (!IsInitialBlockDownload() || (nBestHeight+1) % 500 == 0)
         {
-#ifdef __WXMSW__
+#ifdef WIN32
             _commit(_fileno(fileout));
 #else
             fsync(fileno(fileout));
index 945c15e..fa46d08 100644 (file)
@@ -10,18 +10,12 @@ INCLUDEPATHS= \
  -I"$(DEPSDIR)/boost_1_47_0" \
  -I"$(DEPSDIR)/db-4.8.30.NC/build_unix" \
  -I"$(DEPSDIR)/openssl-1.0.1b/include" \
- -I"$(DEPSDIR)/wxWidgets-2.9.2/lib/gcc_lib/mswud" \
- -I"$(DEPSDIR)/wxWidgets-2.9.2/include" \
- -I"$(DEPSDIR)/wxWidgets-2.9.2/lib/wx/include/i586-mingw32msvc-msw-unicode-static-2.9/" \
  -I"$(DEPSDIR)"
 
 LIBPATHS= \
  -L"$(DEPSDIR)/boost_1_47_0/stage/lib" \
  -L"$(DEPSDIR)/db-4.8.30.NC/build_unix" \
- -L"$(DEPSDIR)/openssl-1.0.1b" \
- -L"$(DEPSDIR)/wxWidgets-2.9.2/lib"
-
-WXLIBS= -l wx_mswu-2.9-i586-mingw32msvc
+ -L"$(DEPSDIR)/openssl-1.0.1b"
 
 LIBS= \
  -l boost_system-mt-s \
@@ -32,8 +26,8 @@ LIBS= \
  -l ssl \
  -l crypto
 
-DEFS=-D_MT -DWIN32 -D__WXMSW__ -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB
-DEBUGFLAGS=-g -D__WXDEBUG__
+DEFS=-D_MT -DWIN32 -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB
+DEBUGFLAGS=-g
 CFLAGS=-O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 HEADERS = \
     base58.h \
@@ -50,16 +44,15 @@ HEADERS = \
     net.h \
     noui.h \
     protocol.h \
-    rpc.h \
+    bitcoinrpc.h \
     script.h \
     serialize.h \
     strlcpy.h \
-    ui.h \
-    uibase.h \
     uint256.h \
     util.h \
     wallet.h
 
+
 ifdef USE_UPNP
        LIBPATHS += -L"$(DEPSDIR)/miniupnpc"
        LIBS += -l miniupnpc -l iphlpapi
@@ -78,34 +71,17 @@ OBJS= \
     obj/main.o \
     obj/net.o \
     obj/protocol.o \
-    obj/rpc.o \
+    obj/bitcoinrpc.o \
     obj/script.o \
     obj/util.o \
-    obj/wallet.o \
-    cryptopp/obj/sha.o \
-    cryptopp/obj/cpu.o
-
-
-all: bitcoin.exe
-
-
-obj/%.o: %.cpp $(HEADERS)
-       i586-mingw32msvc-g++ -c $(CFLAGS) -DGUI -o $@ $<
-
-cryptopp/obj/%.o: cryptopp/%.cpp
-       i586-mingw32msvc-g++ -c $(CFLAGS) -O3 -DCRYPTOPP_DISABLE_ASM -o $@ $<
-
-obj/ui_res.o: ../share/ui.rc  ../share/pixmaps/bitcoin.ico ../share/pixmaps/check.ico ../share/pixmaps/send16.bmp ../share/pixmaps/send16mask.bmp ../share/pixmaps/send16masknoshadow.bmp ../share/pixmaps/send20.bmp ../share/pixmaps/send20mask.bmp ../share/pixmaps/addressbook16.bmp ../share/pixmaps/addressbook16mask.bmp ../share/pixmaps/addressbook20.bmp ../share/pixmaps/addressbook20mask.bmp
-       i586-mingw32msvc-windres $(DEFS) $(INCLUDEPATHS) -o $@ -i $<
-
-bitcoin.exe: $(OBJS) obj/ui.o obj/uibase.o obj/ui_res.o
-       i586-mingw32msvc-g++ $(CFLAGS) -mwindows -Wl,--subsystem,windows -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)
+    obj/wallet.o
 
+all: bitcoind.exe
 
 obj/nogui/%.o: %.cpp $(HEADERS)
        i586-mingw32msvc-g++ -c $(CFLAGS) -o $@ $<
 
-bitcoind.exe: $(OBJS:obj/%=obj/nogui/%) obj/ui_res.o
+bitcoind.exe: $(OBJS:obj/%=obj/nogui/%)
        i586-mingw32msvc-g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
 
@@ -120,9 +96,7 @@ clean:
        -rm -f obj/*.o
        -rm -f obj/nogui/*.o
        -rm -f obj/test/*.o
-       -rm -f cryptopp/obj/*.o
        -rm -f test/*.o
        -rm -f headers.h.gch
-       -rm -f bitcoin.exe
        -rm -f bitcoind.exe
        -rm -f test_bitcoin.exe
index 35254b3..5e9a442 100644 (file)
@@ -7,18 +7,12 @@ USE_UPNP:=0
 INCLUDEPATHS= \
  -I"C:\boost-1.47.0-mgw" \
  -I"C:\db-4.8.30.NC-mgw\build_unix" \
- -I"C:\openssl-1.0.1b-mgw\include" \
- -I"C:\wxWidgets-2.9.2-mgw\lib\gcc_lib\mswud" \
- -I"C:\wxWidgets-2.9.2-mgw\include"
+ -I"C:\openssl-1.0.1b-mgw\include"
 
 LIBPATHS= \
  -L"C:\boost-1.47.0-mgw\stage\lib" \
  -L"C:\db-4.8.30.NC-mgw\build_unix" \
- -L"C:\openssl-1.0.1b-mgw" \
- -L"C:\wxWidgets-2.9.2-mgw\lib\gcc_lib"
-
-WXLIBS= \
- -l wxmsw29ud_html -l wxmsw29ud_core -l wxmsw29ud_adv -l wxbase29ud -l wxtiffd -l wxjpegd -l wxpngd -l wxzlibd
+ -L"C:\openssl-1.0.1b-mgw"
 
 LIBS= \
  -l boost_system-mgw45-mt-s-1_47 \
@@ -29,8 +23,8 @@ LIBS= \
  -l ssl \
  -l crypto
 
-DEFS=-DWIN32 -D__WXMSW__ -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB
-DEBUGFLAGS=-g -D__WXDEBUG__
+DEFS=-DWIN32 -D_WINDOWS -DNOPCH -DUSE_SSL -DBOOST_THREAD_USE_LIB
+DEBUGFLAGS=-g
 CFLAGS=-mthreads -O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 HEADERS = \
     base58.h \
@@ -47,12 +41,10 @@ HEADERS = \
     net.h \
     noui.h \
     protocol.h \
-    rpc.h \
+    bitcoinrpc.h \
     script.h \
     serialize.h \
     strlcpy.h \
-    ui.h \
-    uibase.h \
     uint256.h \
     util.h \
     wallet.h
@@ -76,34 +68,18 @@ OBJS= \
     obj/main.o \
     obj/net.o \
     obj/protocol.o \
-    obj/rpc.o \
+    obj/bitcoinrpc.o \
     obj/script.o \
     obj/util.o \
-    obj/wallet.o \
-    cryptopp/obj/sha.o \
-    cryptopp/obj/cpu.o
-
-
-all: bitcoin.exe
-
-
-obj/%.o: %.cpp $(HEADERS)
-       g++ -c $(CFLAGS) -DGUI -o $@ $<
-
-cryptopp/obj/%.o: cryptopp/%.cpp
-       g++ -c $(CFLAGS) -O3 -DCRYPTOPP_X86_ASM_AVAILABLE -o $@ $<
-
-obj/ui_res.o: ../share/ui.rc  ../share/pixmaps/bitcoin.ico ../share/pixmaps/check.ico ../share/pixmaps/send16.bmp ../share/pixmaps/send16mask.bmp ../share/pixmaps/send16masknoshadow.bmp ../share/pixmaps/send20.bmp ../share/pixmaps/send20mask.bmp ../share/pixmaps/addressbook16.bmp ../share/pixmaps/addressbook16mask.bmp ../share/pixmaps/addressbook20.bmp ../share/pixmaps/addressbook20mask.bmp
-       windres $(DEFS) $(INCLUDEPATHS) -o $@ -i $<
+    obj/wallet.o
 
-bitcoin.exe: $(OBJS) obj/ui.o obj/uibase.o obj/ui_res.o
-       g++ $(CFLAGS) -mwindows -Wl,--subsystem,windows -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)
 
+all: bitcoind.exe
 
 obj/nogui/%.o: %.cpp $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<
 
-bitcoind.exe: $(OBJS:obj/%=obj/nogui/%) obj/ui_res.o
+bitcoind.exe: $(OBJS:obj/%=obj/nogui/%)
        g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
 obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS)
@@ -113,10 +89,9 @@ test_bitcoin.exe: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:o
        g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
 clean:
-       -del /Q bitcoin bitcoind test_bitcoin
+       -del /Q bitcoind test_bitcoin
        -del /Q obj\*
        -del /Q obj\nogui\*
        -del /Q obj\test\*
-       -del /Q cryptopp\obj\*
        -del /Q test\*.o
        -del /Q headers.h.gch
index af52636..cbd51b0 100644 (file)
@@ -1,37 +1,58 @@
-# Copyright (c) 2010 Laszlo Hanyecz
+# -*- mode: Makefile; -*-
+# Copyright (c) 2011 Bitcoin Developers
 # Distributed under the MIT/X11 software license, see the accompanying
 # file license.txt or http://www.opensource.org/licenses/mit-license.php.
 
 # Mac OS X makefile for bitcoin
-# Laszlo Hanyecz (solar@heliacal.net)
+# Originally by Laszlo Hanyecz (solar@heliacal.net)
 
 CXX=llvm-g++
-DEPSDIR=/Users/macosuser/bitcoin/deps
+DEPSDIR=/opt/local
 
 INCLUDEPATHS= \
- -I"$(DEPSDIR)/include"
+ -I"$(DEPSDIR)/include" \
+ -I"$(DEPSDIR)/include/db48"
 
 LIBPATHS= \
- -L"$(DEPSDIR)/lib"
-
-WXLIBS=$(shell $(DEPSDIR)/bin/wx-config --libs --static)
-
-USE_UPNP:=0
-
-LIBS= -dead_strip \
- $(DEPSDIR)/lib/libdb_cxx-4.8.a \
- $(DEPSDIR)/lib/libboost_system.a \
- $(DEPSDIR)/lib/libboost_filesystem.a \
- $(DEPSDIR)/lib/libboost_program_options.a \
- $(DEPSDIR)/lib/libboost_thread.a \
+ -L"$(DEPSDIR)/lib" \
+ -L"$(DEPSDIR)/lib/db48"
+
+USE_UPNP:=1
+
+LIBS= -dead_strip
+ifdef STATIC
+# Build STATIC if you are redistributing the bitcoind binary
+TESTLIBS += \
+ $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a
+LIBS += \
+ $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \
+ $(DEPSDIR)/lib/libboost_system-mt.a \
+ $(DEPSDIR)/lib/libboost_filesystem-mt.a \
+ $(DEPSDIR)/lib/libboost_program_options-mt.a \
+ $(DEPSDIR)/lib/libboost_thread-mt.a \
  $(DEPSDIR)/lib/libssl.a \
- $(DEPSDIR)/lib/libcrypto.a 
+ $(DEPSDIR)/lib/libcrypto.a \
+ -lz
+else
+TESTLIBS += \
+ -lboost_unit_test_framework-mt
+LIBS += \
+ -ldb_cxx-4.8 \
+ -lboost_system-mt \
+ -lboost_filesystem-mt \
+ -lboost_program_options-mt \
+ -lboost_thread-mt \
+ -lssl \
+ -lcrypto \
+ -lz
+TESTDEFS += -DBOOST_TEST_DYN_LINK
+endif
 
-DEFS=$(shell $(DEPSDIR)/bin/wx-config --cxxflags) -D__WXMAC_OSX__ -DNOPCH -DMSG_NOSIGNAL=0 -DUSE_SSL
+DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DUSE_SSL
 
-DEBUGFLAGS=-g -DwxDEBUG_LEVEL=0
+DEBUGFLAGS=-g
 # ppc doesn't work because we don't support big-endian
-CFLAGS=-mmacosx-version-min=10.5 -arch i386 -arch x86_64 -O3 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
+CFLAGS=-mmacosx-version-min=10.5 -arch i386 -O3 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
 HEADERS = \
     base58.h \
     bignum.h \
@@ -47,12 +68,10 @@ HEADERS = \
     net.h \
     noui.h \
     protocol.h \
-    rpc.h \
+    bitcoinrpc.h \
     script.h \
     serialize.h \
     strlcpy.h \
-    ui.h \
-    uibase.h \
     uint256.h \
     util.h \
     wallet.h
@@ -67,47 +86,52 @@ OBJS= \
     obj/main.o \
     obj/net.o \
     obj/protocol.o \
-    obj/rpc.o \
+    obj/bitcoinrpc.o \
     obj/script.o \
     obj/util.o \
-    obj/wallet.o \
-    cryptopp/obj/sha.o \
-    cryptopp/obj/cpu.o
+    obj/wallet.o
 
 ifdef USE_UPNP
-       LIBS += $(DEPSDIR)/lib/libminiupnpc.a
        DEFS += -DUSE_UPNP=$(USE_UPNP)
+ifdef STATIC
+       LIBS += $(DEPSDIR)/lib/libminiupnpc.a
+else
+       LIBS += -lminiupnpc
+endif
 endif
-       
-
-all: bitcoin
-
-
-obj/%.o: %.cpp $(HEADERS)
-       $(CXX) -c $(CFLAGS) -DGUI -o $@ $<
 
-cryptopp/obj/%.o: cryptopp/%.cpp
-       $(CXX) -c $(CFLAGS) -O3 -DCRYPTOPP_DISABLE_ASM -o $@ $<
 
-bitcoin: $(OBJS) obj/ui.o obj/uibase.o
-       $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)
+all: bitcoind
 
+# auto-generated dependencies:
+-include obj/nogui/*.P
+-include obj-test/*.P
 
-obj/nogui/%.o: %.cpp $(HEADERS)
-       $(CXX) -c $(CFLAGS) -o $@ $<
+obj/nogui/%.o: %.cpp
+       $(CXX) -c $(CFLAGS) -MMD -o $@ $<
+       @cp $(@:%.o=%.d) $(@:%.o=%.P); \
+         sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
+             -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
+         rm -f $(@:%.o=%.d)
 
 bitcoind: $(OBJS:obj/%=obj/nogui/%)
        $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS)
 
-obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS)
-       $(CXX) -c $(CFLAGS) -o $@ test/test_bitcoin.cpp
+obj/test/%.o: test/%.cpp
+       $(CXX) -c $(TESTDEFS) $(CFLAGS) -MMD -o $@ $<
+       @cp $(@:%.o=%.d) $(@:%.o=%.P); \
+         sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
+             -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
+         rm -f $(@:%.o=%.d)
 
 test_bitcoin: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%))
-       $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lboost_unit_test_framework
+       $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) $(TESTLIBS)
 
 clean:
-       -rm -f bitcoin bitcoind test_bitcoin
+       -rm -f bitcoind test_bitcoin
        -rm -f obj/*.o
        -rm -f obj/nogui/*.o
-       -rm -f obj/test/*.o
-       -rm -f cryptopp/obj/*.o
+       -rm -f obj-test/*.o
+       -rm -f obj/*.P
+       -rm -f obj/nogui/*.P
+       -rm -f obj-test/*.P
index 6629067..e75dda5 100644 (file)
@@ -2,34 +2,49 @@
 # Distributed under the MIT/X11 software license, see the accompanying
 # file license.txt or http://www.opensource.org/licenses/mit-license.php.
 
-CXX=g++
-
-WXINCLUDEPATHS=$(shell wx-config --cxxflags)
+USE_UPNP:=0
 
-WXLIBS=$(shell wx-config --libs)
+DEFS=-DNOPCH
 
-USE_UPNP:=0
+DEFS += $(addprefix -I,$(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH))
+LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH))
 
-DEFS=-DNOPCH -DUSE_SSL
+LMODE = dynamic
+LMODE2 = dynamic
+ifdef STATIC
+       LMODE = static
+       ifeq (${STATIC}, all)
+               LMODE2 = static
+       endif
+else
+       TESTDEFS += -DBOOST_TEST_DYN_LINK
+endif
 
 # for boost 1.37, add -mt to the boost libraries
-LIBS= \
- -Wl,-Bstatic \
-   -l boost_system \
-   -l boost_filesystem \
-   -l boost_program_options \
-   -l boost_thread \
-   -l db_cxx \
+LIBS += \
+ -Wl,-B$(LMODE) \
+   -l boost_system$(BOOST_LIB_SUFFIX) \
+   -l boost_filesystem$(BOOST_LIB_SUFFIX) \
+   -l boost_program_options$(BOOST_LIB_SUFFIX) \
+   -l boost_thread$(BOOST_LIB_SUFFIX) \
+   -l db_cxx$(BDB_LIB_SUFFIX) \
    -l ssl \
    -l crypto
 
-ifdef USE_UPNP
+ifndef USE_UPNP
+       override USE_UPNP = -
+endif
+ifneq (${USE_UPNP}, -)
        LIBS += -l miniupnpc
        DEFS += -DUSE_UPNP=$(USE_UPNP)
 endif
 
+ifneq (${USE_SSL}, 0)
+       DEFS += -DUSE_SSL
+endif
+
 LIBS+= \
- -Wl,-Bdynamic \
+ -Wl,-B$(LMODE2) \
    -l z \
    -l dl \
    -l pthread
@@ -68,8 +83,9 @@ LIBS+= \
 #
 
 
-DEBUGFLAGS=-g -D__WXDEBUG__
-CXXFLAGS=-O2 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(HARDENING)
+DEBUGFLAGS=-g
+CXXFLAGS=-O2
+xCXXFLAGS=-pthread -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS)
 HEADERS = \
     base58.h \
     bignum.h \
@@ -85,12 +101,10 @@ HEADERS = \
     net.h \
     noui.h \
     protocol.h \
-    rpc.h \
+    bitcoinrpc.h \
     script.h \
     serialize.h \
     strlcpy.h \
-    ui.h \
-    uibase.h \
     uint256.h \
     util.h \
     wallet.h
@@ -105,43 +119,43 @@ OBJS= \
     obj/main.o \
     obj/net.o \
     obj/protocol.o \
-    obj/rpc.o \
+    obj/bitcoinrpc.o \
     obj/script.o \
     obj/util.o \
-    obj/wallet.o \
-    cryptopp/obj/sha.o \
-    cryptopp/obj/cpu.o
-
-
-all: bitcoin
-
-
-obj/%.o: %.cpp $(HEADERS)
-       $(CXX) -c $(CXXFLAGS) $(WXINCLUDEPATHS) -DGUI -o $@ $<
+    obj/wallet.o
 
-cryptopp/obj/%.o: cryptopp/%.cpp
-       $(CXX) -c $(CXXFLAGS) -O3 -o $@ $<
 
-bitcoin: $(OBJS) obj/ui.o obj/uibase.o
-       $(CXX) $(CXXFLAGS) -o $@ $^ $(WXLIBS) $(LIBS)
+all: bitcoind
 
+# auto-generated dependencies:
+-include obj/nogui/*.P
+-include obj-test/*.P
 
-obj/nogui/%.o: %.cpp $(HEADERS)
-       $(CXX) -c $(CXXFLAGS) -o $@ $<
+obj/nogui/%.o: %.cpp
+       $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $<
+       @cp $(@:%.o=%.d) $(@:%.o=%.P); \
+         sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
+             -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
+         rm -f $(@:%.o=%.d)
 
 bitcoind: $(OBJS:obj/%=obj/nogui/%)
-       $(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS)
+       $(CXX) $(xCXXFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
 
-obj/test/test_bitcoin.o: $(wildcard test/*.cpp) $(HEADERS)
-       $(CXX) -c $(CXXFLAGS) -o $@ test/test_bitcoin.cpp
+obj-test/%.o: test/%.cpp
+       $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -o $@ $<
+       @cp $(@:%.o=%.d) $(@:%.o=%.P); \
+         sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
+             -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \
+         rm -f $(@:%.o=%.d)
 
-test_bitcoin: obj/test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%))
-       $(CXX) $(CXXFLAGS) -o $@ $(LIBPATHS) $^ -Wl,-Bstatic -lboost_unit_test_framework $(LIBS)
+test_bitcoin: obj-test/test_bitcoin.o $(filter-out obj/nogui/init.o,$(OBJS:obj/%=obj/nogui/%))
+       $(CXX) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ -Wl,-B$(LMODE) -lboost_unit_test_framework $(LDFLAGS) $(LIBS)
 
 clean:
-       -rm -f bitcoin bitcoind test_bitcoin
+       -rm -f bitcoind test_bitcoin
        -rm -f obj/*.o
        -rm -f obj/nogui/*.o
-       -rm -f obj/test/*.o
-       -rm -f cryptopp/obj/*.o
-       -rm -f headers.h.gch
+       -rm -f obj-test/*.o
+       -rm -f obj/*.P
+       -rm -f obj/nogui/*.P
+       -rm -f obj-test/*.P
index 4c81cc4..60f1e09 100644 (file)
@@ -7,25 +7,20 @@ INCLUDEPATHS= \
   /I"/boost" \
   /I"/db/build_windows" \
   /I"/openssl/include" \
-  /I"/wxwidgets/lib/vc_lib/mswu" \
-  /I"/wxwidgets/include" /
   /I"/miniupnpc"
 
 LIBPATHS= \
   /LIBPATH:"/boost/stage/lib" \
   /LIBPATH:"/db/build_windows/Release" \
   /LIBPATH:"/openssl/lib" \
-  /LIBPATH:"/wxwidgets/lib/vc_lib" \
   /LIBPATH:"/miniupnpc/msvc/Release" \
   /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib \
   /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib \
   /NODEFAULTLIB:msvcrtd.lib
 
-WXLIBS=wxmsw29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib
-
 USE_UPNP=0
 
-DEFS=/DWIN32 /D__WXMSW__ /D_WINDOWS /DNOPCH /DNOMINMAX
+DEFS=/DWIN32 /D_WINDOWS /DNOPCH /DNOMINMAX
 
 LIBS= \
   libboost_system-vc100-mt.lib \
@@ -60,7 +55,7 @@ HEADERS = \
     net.h \
     noui.h \
     protocol.h \
-    rpc.h \
+    bitcoinrpc.h \
     script.h \
     serialize.h \
     strlcpy.h \
@@ -83,18 +78,12 @@ OBJS= \
     obj\protocol.o \
     obj\script.o \
     obj\util.o \
-    obj\wallet.o \
-    cryptopp\obj\sha.o \
-    cryptopp\obj\cpu.o
-
-CRYPTOPP_OBJS= \
-    cryptopp\obj\sha.obj \
-    cryptopp\obj\cpu.obj
+    obj\wallet.o
 
 RC=../share
 
 
-all: bitcoin.exe
+all: bitcoind.exe
 
 
 .cpp{obj}.obj:
@@ -128,19 +117,6 @@ obj\ui.obj: $(HEADERS)
 
 obj\uibase.obj: $(HEADERS)
 
-cryptopp\obj\sha.obj: cryptopp\sha.cpp
-    cl $(CFLAGS) /O2 /DCRYPTOPP_DISABLE_ASM /Fo$@ %s
-
-cryptopp\obj\cpu.obj: cryptopp\cpu.cpp
-    cl $(CFLAGS) /O2 /DCRYPTOPP_DISABLE_ASM /Fo$@ %s
-
-obj\ui.res: $(RC)/ui.rc $(RC)/pixmaps/bitcoin.ico $(RC)/pixmaps/check.ico $(RC)/pixmaps/send16.bmp $(RC)/pixmaps/send16mask.bmp $(RC)/pixmaps/send16masknoshadow.bmp $(RC)/pixmaps/send20.bmp $(RC)/pixmaps/send20mask.bmp $(RC)/pixmaps/addressbook16.bmp $(RC)/pixmaps/addressbook16mask.bmp $(RC)/pixmaps/addressbook20.bmp $(RC)/pixmaps/addressbook20mask.bmp
-    rc $(INCLUDEPATHS) $(DEFS) /Fo$@ %s
-
-bitcoin.exe: $(OBJS) $(CRYPTOPP_OBJS) obj\ui.obj obj\uibase.obj obj\ui.res
-    link /nologo /SUBSYSTEM:WINDOWS /OUT:$@ $(LIBPATHS) $** $(WXLIBS) $(LIBS)
-
-       
 .cpp{obj\nogui}.obj:
     cl $(CFLAGS) /Fo$@ %s
 
@@ -166,13 +142,12 @@ obj\nogui\rpc.obj: $(HEADERS)
 
 obj\nogui\init.obj: $(HEADERS)
 
-bitcoind.exe: $(OBJS:obj\=obj\nogui\) $(CRYPTOPP_OBJS) obj\ui.res
+bitcoind.exe: $(OBJS:obj\=obj\nogui\) obj\ui.res
     link /nologo /OUT:$@ $(LIBPATHS) $** $(LIBS)
 
-
 clean:
     -del /Q obj\*
     -del /Q obj\nogui\*
-    -del /Q cryptopp\obj\*
     -del /Q *.ilk
     -del /Q *.pdb
+    -del /Q bitcoind.exe
index a9f6c87..8384251 100644 (file)
@@ -10,7 +10,7 @@
 #include "init.h"
 #include "strlcpy.h"
 
-#ifdef __WXMSW__
+#ifdef WIN32
 #include <string.h>
 #else
 #include <netinet/in.h>
@@ -105,7 +105,7 @@ bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout
     bool fProxy = (fUseProxy && addrConnect.IsRoutable());
     struct sockaddr_in sockaddr = (fProxy ? addrProxy.GetSockAddr() : addrConnect.GetSockAddr());
 
-#ifdef __WXMSW__
+#ifdef WIN32
     u_long fNonblock = 1;
     if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR)
 #else
@@ -144,7 +144,7 @@ bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout
                 return false;
             }
             socklen_t nRetSize = sizeof(nRet);
-#ifdef __WXMSW__
+#ifdef WIN32
             if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char*)(&nRet), &nRetSize) == SOCKET_ERROR)
 #else
             if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR)
@@ -161,7 +161,7 @@ bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout
                 return false;
             }
         }
-#ifdef __WXMSW__
+#ifdef WIN32
         else if (WSAGetLastError() != WSAEISCONN)
 #else
         else
@@ -178,7 +178,7 @@ bool ConnectSocket(const CAddress& addrConnect, SOCKET& hSocketRet, int nTimeout
     CNode::ConnectNode immediately turns the socket back to non-blocking
     but we'll turn it back to blocking just in case
     */
-#ifdef __WXMSW__
+#ifdef WIN32
     fNonblock = 0;
     if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR)
 #else
@@ -681,7 +681,7 @@ CNode* ConnectNode(CAddress addrConnect, int64 nTimeout)
         printf("connected %s\n", addrConnect.ToString().c_str());
 
         // Set to nonblocking
-#ifdef __WXMSW__
+#ifdef WIN32
         u_long nOne = 1;
         if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR)
             printf("ConnectSocket() : ioctlsocket nonblocking setting failed, error %d\n", WSAGetLastError());
@@ -734,6 +734,52 @@ void CNode::Cleanup()
 }
 
 
+std::map<unsigned int, int64> CNode::setBanned;
+CCriticalSection CNode::cs_setBanned;
+
+void CNode::ClearBanned()
+{
+    setBanned.clear();
+}
+
+bool CNode::IsBanned(unsigned int ip)
+{
+    bool fResult = false;
+    CRITICAL_BLOCK(cs_setBanned)
+    {
+        std::map<unsigned int, int64>::iterator i = setBanned.find(ip);
+        if (i != setBanned.end())
+        {
+            int64 t = (*i).second;
+            if (GetTime() < t)
+                fResult = true;
+        }
+    }
+    return fResult;
+}
+
+bool CNode::Misbehaving(int howmuch)
+{
+    if (addr.IsLocal())
+    {
+        printf("Warning: local node %s misbehaving\n", addr.ToString().c_str());
+        return false;
+    }
+
+    nMisbehavior += howmuch;
+    if (nMisbehavior >= GetArg("-banscore", 100))
+    {
+        int64 banTime = GetTime()+GetArg("-bantime", 60*60*24);  // Default 24-hour ban
+        CRITICAL_BLOCK(cs_setBanned)
+            if (setBanned[addr.ip] < banTime)
+                setBanned[addr.ip] = banTime;
+        CloseSocketDisconnect();
+        printf("Disconnected %s for misbehavior (score=%d)\n", addr.ToString().c_str(), nMisbehavior);
+        return true;
+    }
+    return false;
+}
+
 
 
 
@@ -908,6 +954,11 @@ void ThreadSocketHandler2(void* parg)
             {
                 closesocket(hSocket);
             }
+            else if (CNode::IsBanned(addr.ip))
+            {
+                printf("connection from %s dropped (banned)\n", addr.ToString().c_str());
+                closesocket(hSocket);
+            }
             else
             {
                 printf("accepted connection %s\n", addr.ToString().c_str());
@@ -1498,6 +1549,8 @@ void ThreadOpenConnections2(void* parg)
             BOOST_FOREACH(CNode* pnode, vNodes)
                 setConnected.insert(pnode->addr.ip & 0x0000ffff);
 
+        int64 nANow = GetAdjustedTime();
+
         CRITICAL_BLOCK(cs_mapAddresses)
         {
             BOOST_FOREACH(const PAIRTYPE(vector<unsigned char>, CAddress)& item, mapAddresses)
@@ -1505,8 +1558,8 @@ void ThreadOpenConnections2(void* parg)
                 const CAddress& addr = item.second;
                 if (!addr.IsIPv4() || !addr.IsValid() || setConnected.count(addr.ip & 0x0000ffff))
                     continue;
-                int64 nSinceLastSeen = GetAdjustedTime() - addr.nTime;
-                int64 nSinceLastTry = GetAdjustedTime() - addr.nLastTry;
+                int64 nSinceLastSeen = nANow - addr.nTime;
+                int64 nSinceLastTry = nANow - addr.nLastTry;
 
                 // Randomize the order in a deterministic way, putting the standard port first
                 int64 nRandomizer = (uint64)(nStart * 4951 + addr.nLastTry * 9567851 + addr.ip * 7789) % (2 * 60 * 60);
@@ -1565,7 +1618,8 @@ bool OpenNetworkConnection(const CAddress& addrConnect)
     //
     if (fShutdown)
         return false;
-    if (addrConnect.ip == addrLocalHost.ip || !addrConnect.IsIPv4() || FindNode(addrConnect.ip))
+    if (addrConnect.ip == addrLocalHost.ip || !addrConnect.IsIPv4() ||
+        FindNode(addrConnect.ip) || CNode::IsBanned(addrConnect.ip))
         return false;
 
     vnThreadsRunning[1]--;
@@ -1651,7 +1705,7 @@ void ThreadMessageHandler2(void* parg)
         vnThreadsRunning[2]--;
         Sleep(100);
         if (fRequestShutdown)
-            Shutdown(NULL);
+            StartShutdown();
         vnThreadsRunning[2]++;
         if (fShutdown)
             return;
@@ -1669,7 +1723,7 @@ bool BindListenPort(string& strError)
     int nOne = 1;
     addrLocalHost.port = htons(GetListenPort());
 
-#ifdef __WXMSW__
+#ifdef WIN32
     // Initialize Windows Sockets
     WSADATA wsadata;
     int ret = WSAStartup(MAKEWORD(2,2), &wsadata);
@@ -1695,13 +1749,13 @@ bool BindListenPort(string& strError)
     setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int));
 #endif
 
-#ifndef __WXMSW__
+#ifndef WIN32
     // Allow binding if the port is still in TIME_WAIT state after
     // the program was closed and restarted.  Not an issue on windows.
     setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int));
 #endif
 
-#ifdef __WXMSW__
+#ifdef WIN32
     // Set to nonblocking, incoming connections will also inherit this
     if (ioctlsocket(hListenSocket, FIONBIO, (u_long*)&nOne) == SOCKET_ERROR)
 #else
@@ -1748,7 +1802,7 @@ void StartNode(void* parg)
     if (pnodeLocalHost == NULL)
         pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress("127.0.0.1", 0, false, nLocalServices));
 
-#ifdef __WXMSW__
+#ifdef WIN32
     // Get local host ip
     char pszHostName[1000] = "";
     if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR)
@@ -1891,7 +1945,7 @@ public:
             if (closesocket(hListenSocket) == SOCKET_ERROR)
                 printf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError());
 
-#ifdef __WXMSW__
+#ifdef WIN32
         // Shutdown Windows Sockets
         WSACleanup();
 #endif
index 069328d..96e3680 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -10,7 +10,7 @@
 #include <boost/foreach.hpp>
 #include <openssl/rand.h>
 
-#ifndef __WXMSW__
+#ifndef WIN32
 #include <arpa/inet.h>
 #endif
 
@@ -123,6 +123,13 @@ public:
     bool fDisconnect;
 protected:
     int nRefCount;
+
+    // Denial-of-service detection/prevention
+    // Key is ip address, value is banned-until-time
+    static std::map<unsigned int, int64> setBanned;
+    static CCriticalSection cs_setBanned;
+    int nMisbehavior;
+
 public:
     int64 nReleaseTime;
     std::map<uint256, CRequestTracker> mapRequests;
@@ -147,7 +154,6 @@ public:
     // publish and subscription
     std::vector<char> vfSubscribe;
 
-
     CNode(SOCKET hSocketIn, CAddress addrIn, bool fInboundIn=false)
     {
         nServices = 0;
@@ -184,6 +190,7 @@ public:
         nStartingHeight = -1;
         fGetAddr = false;
         vfSubscribe.assign(256, false);
+        nMisbehavior = 0;
 
         // Be shy and don't send version until we hear
         if (!fInbound)
@@ -569,6 +576,25 @@ public:
     void CancelSubscribe(unsigned int nChannel);
     void CloseSocketDisconnect();
     void Cleanup();
+
+
+    // Denial-of-service detection/prevention
+    // The idea is to detect peers that are behaving
+    // badly and disconnect/ban them, but do it in a
+    // one-coding-mistake-won't-shatter-the-entire-network
+    // way.
+    // IMPORTANT:  There should be nothing I can give a
+    // node that it will forward on that will make that
+    // node's peers drop it. If there is, an attacker
+    // can isolate a node and/or try to split the network.
+    // Dropping a node for sending stuff that is invalid
+    // now but might be valid in a later version is also
+    // dangerous, because it can cause a network split
+    // between nodes running old code and nodes running
+    // new code.
+    static void ClearBanned(); // needed for unit testing
+    static bool IsBanned(unsigned int ip);
+    bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot
 };
 
 
index ad05e1c..4ba496b 100644 (file)
@@ -36,6 +36,8 @@ typedef void wxWindow;
 #define wxHELP                  0x00008000
 #define wxMORE                  0x00010000
 #define wxSETUP                 0x00020000
+// Force blocking, modal message box dialog (not just notification)
+#define wxMODAL                 0x00040000
 
 inline int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
 {
@@ -67,4 +69,8 @@ inline void MainFrameRepaint()
 {
 }
 
+inline void InitMessage(const std::string &message)
+{
+}
+
 #endif
index a22eba4..3376c37 100644 (file)
@@ -6,7 +6,7 @@
 #include "protocol.h"
 #include "util.h"
 
-#ifndef __WXMSW__
+#ifndef WIN32
 # include <arpa/inet.h>
 # include <netinet/in.h>
 #endif
index 274b0d3..2d90baf 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef __INCLUDED_PROTOCOL_H__
 #define __INCLUDED_PROTOCOL_H__
 
-#ifndef __WXMSW__
+#ifndef WIN32
 #include <netinet/in.h>
 #endif
 
diff --git a/src/qt/aboutdialog.cpp b/src/qt/aboutdialog.cpp
new file mode 100644 (file)
index 0000000..a3aa6de
--- /dev/null
@@ -0,0 +1,29 @@
+#include "aboutdialog.h"
+#include "ui_aboutdialog.h"
+#include "clientmodel.h"
+
+AboutDialog::AboutDialog(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::AboutDialog)
+{
+    ui->setupUi(this);
+
+}
+
+void AboutDialog::setModel(ClientModel *model)
+{
+    if(model)
+    {
+        ui->versionLabel->setText(model->formatFullVersion());
+    }
+}
+
+AboutDialog::~AboutDialog()
+{
+    delete ui;
+}
+
+void AboutDialog::on_buttonBox_accepted()
+{
+    close();
+}
diff --git a/src/qt/aboutdialog.h b/src/qt/aboutdialog.h
new file mode 100644 (file)
index 0000000..2ed9e9e
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef ABOUTDIALOG_H
+#define ABOUTDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+    class AboutDialog;
+}
+class ClientModel;
+
+/** "About" dialog box */
+class AboutDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit AboutDialog(QWidget *parent = 0);
+    ~AboutDialog();
+
+    void setModel(ClientModel *model);
+private:
+    Ui::AboutDialog *ui;
+
+private slots:
+    void on_buttonBox_accepted();
+};
+
+#endif // ABOUTDIALOG_H
diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp
new file mode 100644 (file)
index 0000000..bd21103
--- /dev/null
@@ -0,0 +1,223 @@
+#include "addressbookpage.h"
+#include "ui_addressbookpage.h"
+
+#include "addresstablemodel.h"
+#include "editaddressdialog.h"
+#include "csvmodelwriter.h"
+#include "guiutil.h"
+
+#include <QSortFilterProxyModel>
+#include <QClipboard>
+#include <QMessageBox>
+
+AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::AddressBookPage),
+    model(0),
+    mode(mode),
+    tab(tab)
+{
+    ui->setupUi(this);
+
+#ifdef Q_WS_MAC // Icons on push buttons are very uncommon on Mac
+    ui->newAddressButton->setIcon(QIcon());
+    ui->copyToClipboard->setIcon(QIcon());
+    ui->deleteButton->setIcon(QIcon());
+#endif
+
+    switch(mode)
+    {
+    case ForSending:
+        connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
+        ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+        ui->tableView->setFocus();
+        break;
+    case ForEditing:
+        ui->buttonBox->hide();
+        break;
+    }
+    switch(tab)
+    {
+    case SendingTab:
+        ui->labelExplanation->hide();
+        break;
+    case ReceivingTab:
+        break;
+    }
+    ui->tableView->setTabKeyNavigation(false);
+
+    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+}
+
+AddressBookPage::~AddressBookPage()
+{
+    delete ui;
+}
+
+void AddressBookPage::setModel(AddressTableModel *model)
+{
+    this->model = model;
+    if(!model)
+        return;
+    // Refresh list from core
+    model->updateList();
+
+    proxyModel = new QSortFilterProxyModel(this);
+    proxyModel->setSourceModel(model);
+    proxyModel->setDynamicSortFilter(true);
+    switch(tab)
+    {
+    case ReceivingTab:
+        // Receive filter
+        proxyModel->setFilterRole(AddressTableModel::TypeRole);
+        proxyModel->setFilterFixedString(AddressTableModel::Receive);
+        break;
+    case SendingTab:
+        // Send filter
+        proxyModel->setFilterRole(AddressTableModel::TypeRole);
+        proxyModel->setFilterFixedString(AddressTableModel::Send);
+        break;
+    }
+    ui->tableView->setModel(proxyModel);
+    ui->tableView->sortByColumn(0, Qt::AscendingOrder);
+
+    // Set column widths
+    ui->tableView->horizontalHeader()->resizeSection(
+            AddressTableModel::Address, 320);
+    ui->tableView->horizontalHeader()->setResizeMode(
+            AddressTableModel::Label, QHeaderView::Stretch);
+
+    connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+            this, SLOT(selectionChanged()));
+
+    selectionChanged();
+}
+
+void AddressBookPage::on_copyToClipboard_clicked()
+{
+    // Copy currently selected address to clipboard
+    //   (or nothing, if nothing selected)
+    QTableView *table = ui->tableView;
+    if(!table->selectionModel())
+        return;
+    QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
+
+    foreach (QModelIndex index, indexes)
+    {
+        QVariant address = index.data();
+        QApplication::clipboard()->setText(address.toString());
+    }
+}
+
+void AddressBookPage::on_newAddressButton_clicked()
+{
+    if(!model)
+        return;
+    EditAddressDialog dlg(
+            tab == SendingTab ?
+            EditAddressDialog::NewSendingAddress :
+            EditAddressDialog::NewReceivingAddress);
+    dlg.setModel(model);
+    if(dlg.exec())
+    {
+        // Select row for newly created address
+        QString address = dlg.getAddress();
+        QModelIndexList lst = proxyModel->match(proxyModel->index(0,
+                          AddressTableModel::Address, QModelIndex()),
+                          Qt::EditRole, address, 1, Qt::MatchExactly);
+        if(!lst.isEmpty())
+        {
+            ui->tableView->setFocus();
+            ui->tableView->selectRow(lst.at(0).row());
+        }
+    }
+}
+
+void AddressBookPage::on_deleteButton_clicked()
+{
+    QTableView *table = ui->tableView;
+    if(!table->selectionModel())
+        return;
+    QModelIndexList indexes = table->selectionModel()->selectedRows();
+    if(!indexes.isEmpty())
+    {
+        table->model()->removeRow(indexes.at(0).row());
+    }
+}
+
+void AddressBookPage::selectionChanged()
+{
+    // Set button states based on selected tab and selection
+    QTableView *table = ui->tableView;
+    if(!table->selectionModel())
+        return;
+
+    if(table->selectionModel()->hasSelection())
+    {
+        switch(tab)
+        {
+        case SendingTab:
+            ui->deleteButton->setEnabled(true);
+            break;
+        case ReceivingTab:
+            ui->deleteButton->setEnabled(false);
+            break;
+        }
+        ui->copyToClipboard->setEnabled(true);
+    }
+    else
+    {
+        ui->deleteButton->setEnabled(false);
+        ui->copyToClipboard->setEnabled(false);
+    }
+}
+
+void AddressBookPage::done(int retval)
+{
+    QTableView *table = ui->tableView;
+    if(!table->selectionModel() || !table->model())
+        return;
+    // When this is a tab/widget and not a model dialog, ignore "done"
+    if(mode == ForEditing)
+        return;
+
+    // Figure out which address was selected, and return it
+    QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
+
+    foreach (QModelIndex index, indexes)
+    {
+        QVariant address = table->model()->data(index);
+        returnValue = address.toString();
+    }
+
+    if(returnValue.isEmpty())
+    {
+        retval = Rejected;
+    }
+
+    QDialog::done(retval);
+}
+
+void AddressBookPage::exportClicked()
+{
+    // CSV is currently the only supported format
+    QString filename = GUIUtil::getSaveFileName(
+            this,
+            tr("Export Address Book Data"), QString(),
+            tr("Comma separated file (*.csv)"));
+
+    if (filename.isNull()) return;
+
+    CSVModelWriter writer(filename);
+
+    // name, column, role
+    writer.setModel(proxyModel);
+    writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole);
+    writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole);
+
+    if(!writer.write())
+    {
+        QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
+                              QMessageBox::Abort, QMessageBox::Abort);
+    }
+}
diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h
new file mode 100644 (file)
index 0000000..1a97f3d
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef ADDRESSBOOKPAGE_H
+#define ADDRESSBOOKPAGE_H
+
+#include <QDialog>
+
+namespace Ui {
+    class AddressBookPage;
+}
+class AddressTableModel;
+
+QT_BEGIN_NAMESPACE
+class QTableView;
+class QItemSelection;
+class QSortFilterProxyModel;
+QT_END_NAMESPACE
+
+/** Widget that shows a list of sending or receiving addresses.
+  */
+class AddressBookPage : public QDialog
+{
+    Q_OBJECT
+
+public:
+    enum Tabs {
+        SendingTab = 0,
+        ReceivingTab = 1
+    };
+
+    enum Mode {
+        ForSending, /**< Open address book to pick address for sending */
+        ForEditing  /**< Open address book for editing */
+    };
+
+    explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent = 0);
+    ~AddressBookPage();
+
+    void setModel(AddressTableModel *model);
+    const QString &getReturnValue() const { return returnValue; }
+
+public slots:
+    void done(int retval);
+    void exportClicked();
+
+private:
+    Ui::AddressBookPage *ui;
+    AddressTableModel *model;
+    Mode mode;
+    Tabs tab;
+    QString returnValue;
+    QSortFilterProxyModel *proxyModel;
+
+private slots:
+    void on_deleteButton_clicked();
+    void on_newAddressButton_clicked();
+    void on_copyToClipboard_clicked();
+    void selectionChanged();
+};
+
+#endif // ADDRESSBOOKDIALOG_H
diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp
new file mode 100644 (file)
index 0000000..5d724ea
--- /dev/null
@@ -0,0 +1,348 @@
+#include "addresstablemodel.h"
+#include "guiutil.h"
+#include "walletmodel.h"
+
+#include "headers.h"
+
+#include <QFont>
+#include <QColor>
+
+const QString AddressTableModel::Send = "S";
+const QString AddressTableModel::Receive = "R";
+
+struct AddressTableEntry
+{
+    enum Type {
+        Sending,
+        Receiving
+    };
+
+    Type type;
+    QString label;
+    QString address;
+
+    AddressTableEntry() {}
+    AddressTableEntry(Type type, const QString &label, const QString &address):
+        type(type), label(label), address(address) {}
+};
+
+// Private implementation
+class AddressTablePriv
+{
+public:
+    CWallet *wallet;
+    QList<AddressTableEntry> cachedAddressTable;
+
+    AddressTablePriv(CWallet *wallet):
+            wallet(wallet) {}
+
+    void refreshAddressTable()
+    {
+        cachedAddressTable.clear();
+
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, std::string)& item, wallet->mapAddressBook)
+            {
+                const CBitcoinAddress& address = item.first;
+                const std::string& strName = item.second;
+                bool fMine = wallet->HaveKey(address);
+                cachedAddressTable.append(AddressTableEntry(fMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending,
+                                  QString::fromStdString(strName),
+                                  QString::fromStdString(address.ToString())));
+            }
+        }
+    }
+
+    int size()
+    {
+        return cachedAddressTable.size();
+    }
+
+    AddressTableEntry *index(int idx)
+    {
+        if(idx >= 0 && idx < cachedAddressTable.size())
+        {
+            return &cachedAddressTable[idx];
+        }
+        else
+        {
+            return 0;
+        }
+    }
+};
+
+AddressTableModel::AddressTableModel(CWallet *wallet, WalletModel *parent) :
+    QAbstractTableModel(parent),walletModel(parent),wallet(wallet),priv(0)
+{
+    columns << tr("Label") << tr("Address");
+    priv = new AddressTablePriv(wallet);
+    priv->refreshAddressTable();
+}
+
+AddressTableModel::~AddressTableModel()
+{
+    delete priv;
+}
+
+int AddressTableModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return priv->size();
+}
+
+int AddressTableModel::columnCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return columns.length();
+}
+
+QVariant AddressTableModel::data(const QModelIndex &index, int role) const
+{
+    if(!index.isValid())
+        return QVariant();
+
+    AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());
+
+    if(role == Qt::DisplayRole || role == Qt::EditRole)
+    {
+        switch(index.column())
+        {
+        case Label:
+            if(rec->label.isEmpty() && role == Qt::DisplayRole)
+            {
+                return tr("(no label)");
+            }
+            else
+            {
+                return rec->label;
+            }
+        case Address:
+            return rec->address;
+        }
+    }
+    else if (role == Qt::FontRole)
+    {
+        QFont font;
+        if(index.column() == Address)
+        {
+            font = GUIUtil::bitcoinAddressFont();
+        }
+        return font;
+    }
+    else if (role == TypeRole)
+    {
+        switch(rec->type)
+        {
+        case AddressTableEntry::Sending:
+            return Send;
+        case AddressTableEntry::Receiving:
+            return Receive;
+        default: break;
+        }
+    }
+    return QVariant();
+}
+
+bool AddressTableModel::setData(const QModelIndex & index, const QVariant & value, int role)
+{
+    if(!index.isValid())
+        return false;
+    AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());
+
+    editStatus = OK;
+
+    if(role == Qt::EditRole)
+    {
+        switch(index.column())
+        {
+        case Label:
+            wallet->SetAddressBookName(rec->address.toStdString(), value.toString().toStdString());
+            rec->label = value.toString();
+            break;
+        case Address:
+            // Refuse to set invalid address, set error status and return false
+            if(!walletModel->validateAddress(value.toString()))
+            {
+                editStatus = INVALID_ADDRESS;
+                return false;
+            }
+            // Double-check that we're not overwriting a receiving address
+            if(rec->type == AddressTableEntry::Sending)
+            {
+                CRITICAL_BLOCK(wallet->cs_wallet)
+                {
+                    // Remove old entry
+                    wallet->DelAddressBookName(rec->address.toStdString());
+                    // Add new entry with new address
+                    wallet->SetAddressBookName(value.toString().toStdString(), rec->label.toStdString());
+                }
+
+                rec->address = value.toString();
+            }
+            break;
+        }
+        emit dataChanged(index, index);
+
+        return true;
+    }
+    return false;
+}
+
+QVariant AddressTableModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    if(orientation == Qt::Horizontal)
+    {
+        if(role == Qt::DisplayRole)
+        {
+            return columns[section];
+        }
+    }
+    return QVariant();
+}
+
+Qt::ItemFlags AddressTableModel::flags(const QModelIndex & index) const
+{
+    if(!index.isValid())
+        return 0;
+    AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());
+
+    Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
+    // Can edit address and label for sending addresses,
+    // and only label for receiving addresses.
+    if(rec->type == AddressTableEntry::Sending ||
+      (rec->type == AddressTableEntry::Receiving && index.column()==Label))
+    {
+        retval |= Qt::ItemIsEditable;
+    }
+    return retval;
+}
+
+QModelIndex AddressTableModel::index(int row, int column, const QModelIndex & parent) const
+{
+    Q_UNUSED(parent);
+    AddressTableEntry *data = priv->index(row);
+    if(data)
+    {
+        return createIndex(row, column, priv->index(row));
+    }
+    else
+    {
+        return QModelIndex();
+    }
+}
+
+void AddressTableModel::updateList()
+{
+    // Update address book model from Bitcoin core
+    beginResetModel();
+    priv->refreshAddressTable();
+    endResetModel();
+}
+
+QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address)
+{
+    std::string strLabel = label.toStdString();
+    std::string strAddress = address.toStdString();
+
+    editStatus = OK;
+
+    if(type == Send)
+    {
+        if(!walletModel->validateAddress(address))
+        {
+            editStatus = INVALID_ADDRESS;
+            return QString();
+        }
+        // Check for duplicate addresses
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            if(wallet->mapAddressBook.count(strAddress))
+            {
+                editStatus = DUPLICATE_ADDRESS;
+                return QString();
+            }
+        }
+    }
+    else if(type == Receive)
+    {
+        // Generate a new address to associate with given label
+        WalletModel::UnlockContext ctx(walletModel->requestUnlock());
+        if(!ctx.isValid())
+        {
+            // Unlock wallet failed or was cancelled
+            editStatus = WALLET_UNLOCK_FAILURE;
+            return QString();
+        }
+        std::vector<unsigned char> newKey;
+        if(!wallet->GetKeyFromPool(newKey, true))
+        {
+            editStatus = KEY_GENERATION_FAILURE;
+            return QString();
+        }
+        strAddress = CBitcoinAddress(newKey).ToString();
+    }
+    else
+    {
+        return QString();
+    }
+    // Add entry and update list
+    CRITICAL_BLOCK(wallet->cs_wallet)
+        wallet->SetAddressBookName(strAddress, strLabel);
+    updateList();
+    return QString::fromStdString(strAddress);
+}
+
+bool AddressTableModel::removeRows(int row, int count, const QModelIndex & parent)
+{
+    Q_UNUSED(parent);
+    AddressTableEntry *rec = priv->index(row);
+    if(count != 1 || !rec || rec->type == AddressTableEntry::Receiving)
+    {
+        // Can only remove one row at a time, and cannot remove rows not in model.
+        // Also refuse to remove receiving addresses.
+        return false;
+    }
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        wallet->DelAddressBookName(rec->address.toStdString());
+    }
+    updateList();
+    return true;
+}
+
+void AddressTableModel::update()
+{
+
+}
+
+/* Look up label for address in address book, if not found return empty string.
+ */
+QString AddressTableModel::labelForAddress(const QString &address) const
+{
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        CBitcoinAddress address_parsed(address.toStdString());
+        std::map<CBitcoinAddress, std::string>::iterator mi = wallet->mapAddressBook.find(address_parsed);
+        if (mi != wallet->mapAddressBook.end())
+        {
+            return QString::fromStdString(mi->second);
+        }
+    }
+    return QString();
+}
+
+int AddressTableModel::lookupAddress(const QString &address) const
+{
+    QModelIndexList lst = match(index(0, Address, QModelIndex()),
+                                Qt::EditRole, address, 1, Qt::MatchExactly);
+    if(lst.isEmpty())
+    {
+        return -1;
+    }
+    else
+    {
+        return lst.at(0).row();
+    }
+}
+
diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h
new file mode 100644 (file)
index 0000000..0743300
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef ADDRESSTABLEMODEL_H
+#define ADDRESSTABLEMODEL_H
+
+#include <QAbstractTableModel>
+#include <QStringList>
+
+class AddressTablePriv;
+class CWallet;
+class WalletModel;
+
+/**
+   Qt model of the address book in the core. This allows views to access and modify the address book.
+ */
+class AddressTableModel : public QAbstractTableModel
+{
+    Q_OBJECT
+public:
+    explicit AddressTableModel(CWallet *wallet, WalletModel *parent = 0);
+    ~AddressTableModel();
+
+    enum ColumnIndex {
+        Label = 0,   /**< User specified label */
+        Address = 1  /**< Bitcoin address */
+    };
+
+    enum RoleIndex {
+        TypeRole = Qt::UserRole /**< Type of address (#Send or #Receive) */
+    };
+
+    /** Return status of edit/insert operation */
+    enum EditStatus {
+        OK,
+        INVALID_ADDRESS,   /**< Unparseable address */
+        DUPLICATE_ADDRESS,  /**< Address already in address book */
+        WALLET_UNLOCK_FAILURE, /**< Wallet could not be unlocked to create new receiving address */
+        KEY_GENERATION_FAILURE /**< Generating a new public key for a receiving address failed */
+    };
+
+    static const QString Send; /**< Specifies send address */
+    static const QString Receive; /**< Specifies receive address */
+
+    /** @name Methods overridden from QAbstractTableModel
+        @{*/
+    int rowCount(const QModelIndex &parent) const;
+    int columnCount(const QModelIndex &parent) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    bool setData(const QModelIndex & index, const QVariant & value, int role);
+    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+    QModelIndex index(int row, int column, const QModelIndex & parent) const;
+    bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+    Qt::ItemFlags flags(const QModelIndex & index) const;
+    /*@}*/
+
+    /* Add an address to the model.
+       Returns the added address on success, and an empty string otherwise.
+     */
+    QString addRow(const QString &type, const QString &label, const QString &address);
+
+    /* Update address list from core. Invalidates any indices.
+     */
+    void updateList();
+
+    /* Look up label for address in address book, if not found return empty string.
+     */
+    QString labelForAddress(const QString &address) const;
+
+    /* Look up row index of an address in the model.
+       Return -1 if not found.
+     */
+    int lookupAddress(const QString &address) const;
+
+    EditStatus getEditStatus() const { return editStatus; }
+
+private:
+    WalletModel *walletModel;
+    CWallet *wallet;
+    AddressTablePriv *priv;
+    QStringList columns;
+    EditStatus editStatus;
+
+signals:
+    void defaultAddressChanged(const QString &address);
+
+public slots:
+    void update();
+};
+
+#endif // ADDRESSTABLEMODEL_H
diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp
new file mode 100644 (file)
index 0000000..31e4040
--- /dev/null
@@ -0,0 +1,240 @@
+#include "askpassphrasedialog.h"
+#include "ui_askpassphrasedialog.h"
+
+#include "guiconstants.h"
+#include "walletmodel.h"
+
+#include <QMessageBox>
+#include <QPushButton>
+#include <QKeyEvent>
+
+AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::AskPassphraseDialog),
+    mode(mode),
+    model(0),
+    fCapsLock(false)
+{
+    ui->setupUi(this);
+    ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE);
+    ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE);
+    ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE);
+    
+    // Setup Caps Lock detection.
+    ui->passEdit1->installEventFilter(this);
+    ui->passEdit2->installEventFilter(this);
+    ui->passEdit3->installEventFilter(this);
+    ui->capsLabel->clear();
+
+    switch(mode)
+    {
+        case Encrypt: // Ask passphrase x2
+            ui->passLabel1->hide();
+            ui->passEdit1->hide();
+            ui->warningLabel->setText(tr("Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>."));
+            setWindowTitle(tr("Encrypt wallet"));
+            break;
+        case Unlock: // Ask passphrase
+            ui->warningLabel->setText(tr("This operation needs your wallet passphrase to unlock the wallet."));
+            ui->passLabel2->hide();
+            ui->passEdit2->hide();
+            ui->passLabel3->hide();
+            ui->passEdit3->hide();
+            setWindowTitle(tr("Unlock wallet"));
+            break;
+        case Decrypt:   // Ask passphrase
+            ui->warningLabel->setText(tr("This operation needs your wallet passphrase to decrypt the wallet."));
+            ui->passLabel2->hide();
+            ui->passEdit2->hide();
+            ui->passLabel3->hide();
+            ui->passEdit3->hide();
+            setWindowTitle(tr("Decrypt wallet"));
+            break;
+        case ChangePass: // Ask old passphrase + new passphrase x2
+            setWindowTitle(tr("Change passphrase"));
+            ui->warningLabel->setText(tr("Enter the old and new passphrase to the wallet."));
+            break;
+    }
+
+    textChanged();
+    connect(ui->passEdit1, SIGNAL(textChanged(QString)), this, SLOT(textChanged()));
+    connect(ui->passEdit2, SIGNAL(textChanged(QString)), this, SLOT(textChanged()));
+    connect(ui->passEdit3, SIGNAL(textChanged(QString)), this, SLOT(textChanged()));
+}
+
+AskPassphraseDialog::~AskPassphraseDialog()
+{
+    // Attempt to overwrite text so that they do not linger around in memory
+    ui->passEdit1->setText(QString(" ").repeated(ui->passEdit1->text().size()));
+    ui->passEdit2->setText(QString(" ").repeated(ui->passEdit2->text().size()));
+    ui->passEdit3->setText(QString(" ").repeated(ui->passEdit3->text().size()));
+    delete ui;
+}
+
+void AskPassphraseDialog::setModel(WalletModel *model)
+{
+    this->model = model;
+}
+
+void AskPassphraseDialog::accept()
+{
+    SecureString oldpass, newpass1, newpass2;
+    if(!model)
+        return;
+    oldpass.reserve(MAX_PASSPHRASE_SIZE);
+    newpass1.reserve(MAX_PASSPHRASE_SIZE);
+    newpass2.reserve(MAX_PASSPHRASE_SIZE);
+    // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string)
+    // Alternately, find a way to make this input mlock()'d to begin with.
+    oldpass.assign(ui->passEdit1->text().toStdString().c_str());
+    newpass1.assign(ui->passEdit2->text().toStdString().c_str());
+    newpass2.assign(ui->passEdit3->text().toStdString().c_str());
+
+    switch(mode)
+    {
+    case Encrypt: {
+        if(newpass1.empty() || newpass2.empty())
+        {
+            // Cannot encrypt with empty passphrase
+            break;
+        }
+        QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wallet encryption"),
+                 tr("WARNING: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR BITCOINS</b>!\nAre you sure you wish to encrypt your wallet?"),
+                 QMessageBox::Yes|QMessageBox::Cancel,
+                 QMessageBox::Cancel);
+        if(retval == QMessageBox::Yes)
+        {
+            if(newpass1 == newpass2)
+            {
+                if(model->setWalletEncrypted(true, newpass1))
+                {
+                    QMessageBox::warning(this, tr("Wallet encrypted"),
+                                         tr("Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."));
+                    QApplication::quit();
+                }
+                else
+                {
+                    QMessageBox::critical(this, tr("Wallet encryption failed"),
+                                         tr("Wallet encryption failed due to an internal error. Your wallet was not encrypted."));
+                }
+                QDialog::accept(); // Success
+            }
+            else
+            {
+                QMessageBox::critical(this, tr("Wallet encryption failed"),
+                                     tr("The supplied passphrases do not match."));
+            }
+        }
+        else
+        {
+            QDialog::reject(); // Cancelled
+        }
+        } break;
+    case Unlock:
+        if(!model->setWalletLocked(false, oldpass))
+        {
+            QMessageBox::critical(this, tr("Wallet unlock failed"),
+                                  tr("The passphrase entered for the wallet decryption was incorrect."));
+        }
+        else
+        {
+            QDialog::accept(); // Success
+        }
+        break;
+    case Decrypt:
+        if(!model->setWalletEncrypted(false, oldpass))
+        {
+            QMessageBox::critical(this, tr("Wallet decryption failed"),
+                                  tr("The passphrase entered for the wallet decryption was incorrect."));
+        }
+        else
+        {
+            QDialog::accept(); // Success
+        }
+        break;
+    case ChangePass:
+        if(newpass1 == newpass2)
+        {
+            if(model->changePassphrase(oldpass, newpass1))
+            {
+                QMessageBox::information(this, tr("Wallet encrypted"),
+                                     tr("Wallet passphrase was succesfully changed."));
+                QDialog::accept(); // Success
+            }
+            else
+            {
+                QMessageBox::critical(this, tr("Wallet encryption failed"),
+                                     tr("The passphrase entered for the wallet decryption was incorrect."));
+            }
+        }
+        else
+        {
+            QMessageBox::critical(this, tr("Wallet encryption failed"),
+                                 tr("The supplied passphrases do not match."));
+        }
+        break;
+    }
+}
+
+void AskPassphraseDialog::textChanged()
+{
+    // Validate input, set Ok button to enabled when accepable
+    bool acceptable = false;
+    switch(mode)
+    {
+    case Encrypt: // New passphrase x2
+        acceptable = !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty();
+        break;
+    case Unlock: // Old passphrase x1
+    case Decrypt:
+        acceptable = !ui->passEdit1->text().isEmpty();
+        break;
+    case ChangePass: // Old passphrase x1, new passphrase x2
+        acceptable = !ui->passEdit1->text().isEmpty() && !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty();
+        break;
+    }
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(acceptable);
+}
+
+bool AskPassphraseDialog::event(QEvent *event)
+{
+    // Detect Caps Lock key press.
+    if (event->type() == QEvent::KeyPress) {
+        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+        if (ke->key() == Qt::Key_CapsLock) {
+            fCapsLock = !fCapsLock;
+        }
+        if (fCapsLock) {
+            ui->capsLabel->setText(tr("Warning: The Caps Lock key is on."));
+        } else {
+            ui->capsLabel->clear();
+        }
+    }
+    return QWidget::event(event);
+}
+
+bool AskPassphraseDialog::eventFilter(QObject *, QEvent *event)
+{
+    /* Detect Caps Lock. 
+     * There is no good OS-independent way to check a key state in Qt, but we
+     * can detect Caps Lock by checking for the following condition:
+     * Shift key is down and the result is a lower case character, or
+     * Shift key is not down and the result is an upper case character.
+     */
+    if (event->type() == QEvent::KeyPress) {
+        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+        QString str = ke->text();
+        if (str.length() != 0) {
+            const QChar *psz = str.unicode();
+            bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0;
+            if ((fShift && psz->isLower()) || (!fShift && psz->isUpper())) {
+                fCapsLock = true;
+                ui->capsLabel->setText(tr("Warning: The Caps Lock key is on."));
+            } else if (psz->isLetter()) {
+                fCapsLock = false;
+                ui->capsLabel->clear();
+            }
+        }
+    }
+    return false;
+}
diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h
new file mode 100644 (file)
index 0000000..b500ff4
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef ASKPASSPHRASEDIALOG_H
+#define ASKPASSPHRASEDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+    class AskPassphraseDialog;
+}
+
+class WalletModel;
+
+/** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase.
+ */
+class AskPassphraseDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    enum Mode {
+        Encrypt,    /**< Ask passphrase twice and encrypt */
+        Unlock,     /**< Ask passphrase and unlock */
+        ChangePass, /**< Ask old passphrase + new passphrase twice */
+        Decrypt     /**< Ask passphrase and decrypt wallet */
+    };
+
+    explicit AskPassphraseDialog(Mode mode, QWidget *parent = 0);
+    ~AskPassphraseDialog();
+
+    void accept();
+
+    void setModel(WalletModel *model);
+
+private:
+    Ui::AskPassphraseDialog *ui;
+    Mode mode;
+    WalletModel *model;
+    bool fCapsLock;
+
+private slots:
+    void textChanged();
+    bool event(QEvent *event);
+    bool eventFilter(QObject *, QEvent *event);
+};
+
+#endif // ASKPASSPHRASEDIALOG_H
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
new file mode 100644 (file)
index 0000000..6986d39
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+ * W.J. van der Laan 2011
+ */
+#include "bitcoingui.h"
+#include "clientmodel.h"
+#include "walletmodel.h"
+#include "optionsmodel.h"
+
+#include "headers.h"
+#include "init.h"
+#include "util.h"
+
+#include <QApplication>
+#include <QMessageBox>
+#include <QThread>
+#include <QTextCodec>
+#include <QLocale>
+#include <QTranslator>
+#include <QSplashScreen>
+#include <QLibraryInfo>
+
+// Need a global reference for the notifications to find the GUI
+BitcoinGUI *guiref;
+QSplashScreen *splashref;
+
+int MyMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
+{
+    // Message from main thread
+    if(guiref)
+    {
+        guiref->error(QString::fromStdString(caption),
+                      QString::fromStdString(message));
+    }
+    else
+    {
+        QMessageBox::critical(0, QString::fromStdString(caption),
+            QString::fromStdString(message),
+            QMessageBox::Ok, QMessageBox::Ok);
+    }
+    return 4;
+}
+
+int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
+{
+    bool modal = style & wxMODAL;
+
+    if (modal)
+        while (!guiref)
+            Sleep(1000);
+
+    // Message from network thread
+    if(guiref)
+    {
+        QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection,
+                                   Q_ARG(QString, QString::fromStdString(caption)),
+                                   Q_ARG(QString, QString::fromStdString(message)),
+                                   Q_ARG(bool, modal));
+    }
+    else
+    {
+        printf("%s: %s\n", caption.c_str(), message.c_str());
+        fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str());
+    }
+    return 4;
+}
+
+bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent)
+{
+    if(!guiref)
+        return false;
+    if(nFeeRequired < MIN_TX_FEE || nFeeRequired <= nTransactionFee || fDaemon)
+        return true;
+    bool payFee = false;
+
+    // Call slot on GUI thread.
+    // If called from another thread, use a blocking QueuedConnection.
+    Qt::ConnectionType connectionType = Qt::DirectConnection;
+    if(QThread::currentThread() != QCoreApplication::instance()->thread())
+    {
+        connectionType = Qt::BlockingQueuedConnection;
+    }
+
+    QMetaObject::invokeMethod(guiref, "askFee", connectionType,
+                               Q_ARG(qint64, nFeeRequired),
+                               Q_ARG(bool*, &payFee));
+
+    return payFee;
+}
+
+void CalledSetStatusBar(const std::string& strText, int nField)
+{
+    // Only used for built-in mining, which is disabled, simple ignore
+}
+
+void UIThreadCall(boost::function0<void> fn)
+{
+    // Only used for built-in mining, which is disabled, simple ignore
+}
+
+void MainFrameRepaint()
+{
+    if(guiref)
+        QMetaObject::invokeMethod(guiref, "refreshStatusBar", Qt::QueuedConnection);
+}
+
+void InitMessage(const std::string &message)
+{
+    if(splashref)
+    {
+        splashref->showMessage(QString::fromStdString(message), Qt::AlignBottom|Qt::AlignHCenter, QColor(255,255,200));
+        QApplication::instance()->processEvents();
+    }
+}
+
+void QueueShutdown()
+{
+    QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
+}
+
+/*
+   Translate string to current locale using Qt.
+ */
+std::string _(const char* psz)
+{
+    return QCoreApplication::translate("bitcoin-core", psz).toStdString();
+}
+
+/* Handle runaway exceptions. Shows a message box with the problem and quits the program.
+ */
+static void handleRunawayException(std::exception *e)
+{
+    PrintExceptionContinue(e, "Runaway exception");
+    QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occured. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning));
+    exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
+    QTextCodec::setCodecForCStrings(QTextCodec::codecForTr());
+
+    Q_INIT_RESOURCE(bitcoin);
+    QApplication app(argc, argv);
+
+    // Load language files for system locale:
+    // - First load the translator for the base language, without territory
+    // - Then load the more specific locale translator
+    QString lang_territory = QLocale::system().name(); // "en_US"
+    QString lang = lang_territory;
+    lang.truncate(lang_territory.lastIndexOf('_')); // "en"
+    QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator;
+
+    qtTranslatorBase.load(QLibraryInfo::location(QLibraryInfo::TranslationsPath) + "/qt_" + lang);
+    if (!qtTranslatorBase.isEmpty())
+        app.installTranslator(&qtTranslatorBase);
+
+    qtTranslator.load(QLibraryInfo::location(QLibraryInfo::TranslationsPath) + "/qt_" + lang_territory);
+    if (!qtTranslator.isEmpty())
+        app.installTranslator(&qtTranslator);
+
+    translatorBase.load(":/translations/"+lang);
+    if (!translatorBase.isEmpty())
+        app.installTranslator(&translatorBase);
+
+    translator.load(":/translations/"+lang_territory);
+    if (!translator.isEmpty())
+        app.installTranslator(&translator);
+
+    app.setApplicationName(QApplication::translate("main", "Bitcoin-Qt"));
+
+    QSplashScreen splash(QPixmap(":/images/splash"), 0);
+    if (!GetBoolArg("-min"))
+    {
+        splash.show();
+        splash.setAutoFillBackground(true);
+        splashref = &splash;
+    }
+
+    app.processEvents();
+
+    app.setQuitOnLastWindowClosed(false);
+
+    try
+    {
+        if(AppInit2(argc, argv))
+        {
+            {
+                // Put this in a block, so that BitcoinGUI is cleaned up properly before
+                // calling Shutdown() in case of exceptions.
+                BitcoinGUI window;
+                if (splashref)
+                    splash.finish(&window);
+                OptionsModel optionsModel(pwalletMain);
+                ClientModel clientModel(&optionsModel);
+                WalletModel walletModel(pwalletMain, &optionsModel);
+
+                guiref = &window;
+                window.setClientModel(&clientModel);
+                window.setWalletModel(&walletModel);
+
+                // If -min option passed, start window minimized.
+                if(GetBoolArg("-min"))
+                {
+                    window.showMinimized();
+                }
+                else
+                {
+                    window.show();
+                }
+
+                app.exec();
+
+                window.hide();
+                guiref = 0;
+            }
+            // Shutdown the core and it's threads, but don't exit Bitcoin-Qt here
+            Shutdown(NULL);
+        }
+        else
+        {
+            return 1;
+        }
+    } catch (std::exception& e) {
+        handleRunawayException(&e);
+    } catch (...) {
+        handleRunawayException(NULL);
+    }
+    return 0;
+}
diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
new file mode 100644 (file)
index 0000000..aea61d6
--- /dev/null
@@ -0,0 +1,64 @@
+<RCC>
+    <qresource prefix="/icons" lang="edit">
+        <file alias="bitcoin">res/icons/bitcoin.png</file>
+        <file alias="address-book">res/icons/address-book.png</file>
+        <file alias="quit">res/icons/quit.png</file>
+        <file alias="send">res/icons/send.png</file>
+        <file alias="toolbar">res/icons/toolbar.png</file>
+        <file alias="connect_0">res/icons/connect0_16.png</file>
+        <file alias="connect_1">res/icons/connect1_16.png</file>
+        <file alias="connect_2">res/icons/connect2_16.png</file>
+        <file alias="connect_3">res/icons/connect3_16.png</file>
+        <file alias="connect_4">res/icons/connect4_16.png</file>
+        <file alias="transaction_0">res/icons/transaction0.png</file>
+        <file alias="transaction_confirmed">res/icons/transaction2.png</file>
+        <file alias="transaction_1">res/icons/clock1.png</file>
+        <file alias="transaction_2">res/icons/clock2.png</file>
+        <file alias="transaction_3">res/icons/clock3.png</file>
+        <file alias="transaction_4">res/icons/clock4.png</file>
+        <file alias="transaction_5">res/icons/clock5.png</file>
+        <file alias="options">res/icons/configure.png</file>
+        <file alias="receiving_addresses">res/icons/receive.png</file>
+        <file alias="editpaste">res/icons/editpaste.png</file>
+        <file alias="editcopy">res/icons/editcopy.png</file>
+        <file alias="add">res/icons/add.png</file>
+        <file alias="bitcoin_testnet">res/icons/bitcoin_testnet.png</file>
+        <file alias="toolbar_testnet">res/icons/toolbar_testnet.png</file>
+        <file alias="edit">res/icons/edit.png</file>
+        <file alias="history">res/icons/history.png</file>
+        <file alias="overview">res/icons/overview.png</file>
+        <file alias="export">res/icons/export.png</file>
+        <file alias="synced">res/icons/synced.png</file>
+        <file alias="remove">res/icons/remove.png</file>
+        <file alias="tx_mined">res/icons/tx_mined.png</file>
+        <file alias="tx_input">res/icons/tx_input.png</file>
+        <file alias="tx_output">res/icons/tx_output.png</file>
+        <file alias="tx_inout">res/icons/tx_inout.png</file>
+        <file alias="lock_closed">res/icons/lock_closed.png</file>
+        <file alias="lock_open">res/icons/lock_open.png</file>
+        <file alias="key">res/icons/key.png</file>
+    </qresource>
+    <qresource prefix="/images">
+        <file alias="about">res/images/about.png</file>
+        <file alias="splash">res/images/splash2.jpg</file>
+    </qresource>
+    <qresource prefix="/movies">
+        <file alias="update_spinner">res/movies/update_spinner.mng</file>
+    </qresource>
+    <qresource prefix="/translations">
+        <file alias="da">locale/bitcoin_da.qm</file>
+        <file alias="de">locale/bitcoin_de.qm</file>
+        <file alias="en">locale/bitcoin_en.qm</file>
+        <file alias="es">locale/bitcoin_es.qm</file>
+        <file alias="es_CL">locale/bitcoin_es_CL.qm</file>
+        <file alias="hu">locale/bitcoin_hu.qm</file>
+        <file alias="it">locale/bitcoin_it.qm</file>
+        <file alias="nb">locale/bitcoin_nb.qm</file>
+        <file alias="nl">locale/bitcoin_nl.qm</file>
+        <file alias="pt_BR">locale/bitcoin_pt_BR.qm</file>
+        <file alias="ru">locale/bitcoin_ru.qm</file>
+        <file alias="uk">locale/bitcoin_uk.qm</file>
+        <file alias="zh_CN">locale/bitcoin_zh_CN.qm</file>
+        <file alias="zh_TW">locale/bitcoin_zh_TW.qm</file>
+    </qresource>
+</RCC>
diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp
new file mode 100644 (file)
index 0000000..c804ad0
--- /dev/null
@@ -0,0 +1,83 @@
+#include "bitcoinaddressvalidator.h"
+
+/* Base58 characters are:
+     "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
+
+  This is:
+  - All numbers except for '0'
+  - All uppercase letters except for 'I' and 'O'
+  - All lowercase letters except for 'l'
+
+  User friendly Base58 input can map
+  - 'l' and 'I' to '1'
+  - '0' and 'O' to 'o'
+*/
+
+BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) :
+    QValidator(parent)
+{
+}
+
+QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const
+{
+    // Correction
+    for(int idx=0; idx<input.size();)
+    {
+        bool removeChar = false;
+        QChar ch = input.at(idx);
+        // Transform characters that are visually close
+        switch(ch.unicode())
+        {
+        case 'l':
+        case 'I':
+            input[idx] = QChar('1');
+            break;
+        case '0':
+        case 'O':
+            input[idx] = QChar('o');
+            break;
+        // Qt categorizes these as "Other_Format" not "Separator_Space"
+        case 0x200B: // ZERO WIDTH SPACE
+        case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
+            removeChar = true;
+            break;
+        default:
+            break;
+        }
+        // Remove whitespace
+        if(ch.isSpace())
+            removeChar = true;
+        // To next character
+        if(removeChar)
+            input.remove(idx, 1);
+        else
+            ++idx;
+    }
+
+    // Validation
+    QValidator::State state = QValidator::Acceptable;
+    for(int idx=0; idx<input.size(); ++idx)
+    {
+        int ch = input.at(idx).unicode();
+
+        if(((ch >= '0' && ch<='9') ||
+           (ch >= 'a' && ch<='z') ||
+           (ch >= 'A' && ch<='Z')) &&
+           ch != 'l' && ch != 'I' && ch != '0' && ch != 'O')
+        {
+            // Alphanumeric and not a 'forbidden' character
+        }
+        else
+        {
+            state = QValidator::Invalid;
+        }
+    }
+
+    // Empty address is "intermediate" input
+    if(input.isEmpty())
+    {
+        state = QValidator::Intermediate;
+    }
+
+    return state;
+}
diff --git a/src/qt/bitcoinaddressvalidator.h b/src/qt/bitcoinaddressvalidator.h
new file mode 100644 (file)
index 0000000..6ca3bd6
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef BITCOINADDRESSVALIDATOR_H
+#define BITCOINADDRESSVALIDATOR_H
+
+#include <QRegExpValidator>
+
+/** Base48 entry widget validator.
+   Corrects near-miss characters and refuses characters that are no part of base48.
+ */
+class BitcoinAddressValidator : public QValidator
+{
+    Q_OBJECT
+public:
+    explicit BitcoinAddressValidator(QObject *parent = 0);
+
+    State validate(QString &input, int &pos) const;
+
+    static const int MaxAddressLength = 34;
+signals:
+
+public slots:
+
+};
+
+#endif // BITCOINADDRESSVALIDATOR_H
diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp
new file mode 100644 (file)
index 0000000..19cd565
--- /dev/null
@@ -0,0 +1,167 @@
+#include "bitcoinamountfield.h"
+#include "qvaluecombobox.h"
+#include "bitcoinunits.h"
+
+#include "guiconstants.h"
+
+#include <QLabel>
+#include <QLineEdit>
+#include <QRegExpValidator>
+#include <QHBoxLayout>
+#include <QKeyEvent>
+#include <QDoubleSpinBox>
+#include <QComboBox>
+#include <QApplication>
+#include <qmath.h>
+
+BitcoinAmountField::BitcoinAmountField(QWidget *parent):
+        QWidget(parent), amount(0), currentUnit(-1)
+{
+    amount = new QDoubleSpinBox(this);
+    amount->setLocale(QLocale::c());
+    amount->setDecimals(8);
+    amount->installEventFilter(this);
+    amount->setMaximumWidth(170);
+
+    QHBoxLayout *layout = new QHBoxLayout(this);
+    layout->addWidget(amount);
+    unit = new QValueComboBox(this);
+    unit->setModel(new BitcoinUnits(this));
+    layout->addWidget(unit);
+    layout->addStretch(1);
+    layout->setContentsMargins(0,0,0,0);
+
+    setLayout(layout);
+
+    setFocusPolicy(Qt::TabFocus);
+    setFocusProxy(amount);
+
+    // If one if the widgets changes, the combined content changes as well
+    connect(amount, SIGNAL(valueChanged(QString)), this, SIGNAL(textChanged()));
+    connect(unit, SIGNAL(currentIndexChanged(int)), this, SLOT(unitChanged(int)));
+
+    // Set default based on configuration
+    unitChanged(unit->currentIndex());
+}
+
+void BitcoinAmountField::setText(const QString &text)
+{
+    if (text.isEmpty())
+        amount->clear();
+    else
+        amount->setValue(text.toDouble());
+}
+
+void BitcoinAmountField::clear()
+{
+    amount->clear();
+    unit->setCurrentIndex(0);
+}
+
+bool BitcoinAmountField::validate()
+{
+    bool valid = true;
+    if (amount->value() == 0.0)
+        valid = false;
+    if (valid && !BitcoinUnits::parse(currentUnit, text(), 0))
+        valid = false;
+
+    setValid(valid);
+
+    return valid;
+}
+
+void BitcoinAmountField::setValid(bool valid)
+{
+    if (valid)
+        amount->setStyleSheet("");
+    else
+        amount->setStyleSheet(STYLE_INVALID);
+}
+
+QString BitcoinAmountField::text() const
+{
+    if (amount->text().isEmpty())
+        return QString();
+    else
+        return amount->text();
+}
+
+bool BitcoinAmountField::eventFilter(QObject *object, QEvent *event)
+{
+    if (event->type() == QEvent::FocusIn)
+    {
+        // Clear invalid flag on focus
+        setValid(true);
+    }
+    else if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease)
+    {
+        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+        if (keyEvent->key() == Qt::Key_Comma)
+        {
+            // Translate a comma into a period
+            QKeyEvent periodKeyEvent(event->type(), Qt::Key_Period, keyEvent->modifiers(), ".", keyEvent->isAutoRepeat(), keyEvent->count());
+            qApp->sendEvent(object, &periodKeyEvent);
+            return true;
+        }
+    }
+    return QWidget::eventFilter(object, event);
+}
+
+QWidget *BitcoinAmountField::setupTabChain(QWidget *prev)
+{
+    QWidget::setTabOrder(prev, amount);
+    return amount;
+}
+
+qint64 BitcoinAmountField::value(bool *valid_out) const
+{
+    qint64 val_out = 0;
+    bool valid = BitcoinUnits::parse(currentUnit, text(), &val_out);
+    if(valid_out)
+    {
+        *valid_out = valid;
+    }
+    return val_out;
+}
+
+void BitcoinAmountField::setValue(qint64 value)
+{
+    setText(BitcoinUnits::format(currentUnit, value));
+}
+
+void BitcoinAmountField::unitChanged(int idx)
+{
+    // Use description tooltip for current unit for the combobox
+    unit->setToolTip(unit->itemData(idx, Qt::ToolTipRole).toString());
+
+    // Determine new unit ID
+    int newUnit = unit->itemData(idx, BitcoinUnits::UnitRole).toInt();
+
+    // Parse current value and convert to new unit
+    bool valid = false;
+    qint64 currentValue = value(&valid);
+
+    currentUnit = newUnit;
+
+    // Set max length after retrieving the value, to prevent truncation
+    amount->setDecimals(BitcoinUnits::decimals(currentUnit));
+    amount->setMaximum(qPow(10, BitcoinUnits::amountDigits(currentUnit)) - qPow(10, -amount->decimals()));
+
+    if(valid)
+    {
+        // If value was valid, re-place it in the widget with the new unit
+        setValue(currentValue);
+    }
+    else
+    {
+        // If current value is invalid, just clear field
+        setText("");
+    }
+    setValid(true);
+}
+
+void BitcoinAmountField::setDisplayUnit(int newUnit)
+{
+    unit->setValue(newUnit);
+}
diff --git a/src/qt/bitcoinamountfield.h b/src/qt/bitcoinamountfield.h
new file mode 100644 (file)
index 0000000..ead8bdb
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef BITCOINFIELD_H
+#define BITCOINFIELD_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QDoubleSpinBox;
+class QValueComboBox;
+QT_END_NAMESPACE
+
+/** Widget for entering bitcoin amounts.
+  */
+class BitcoinAmountField: public QWidget
+{
+    Q_OBJECT
+    Q_PROPERTY(qint64 value READ value WRITE setValue NOTIFY textChanged USER true)
+public:
+    explicit BitcoinAmountField(QWidget *parent = 0);
+
+    qint64 value(bool *valid=0) const;
+    void setValue(qint64 value);
+
+    /** Mark current value as invalid in UI. */
+    void setValid(bool valid);
+    /** Perform input validation, mark field as invalid if entered value is not valid. */
+    bool validate();
+
+    /** Change unit used to display amount. */
+    void setDisplayUnit(int unit);
+
+    /** Make field empty and ready for new input. */
+    void clear();
+
+    /** Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907),
+        in these cases we have to set it up manually.
+    */
+    QWidget *setupTabChain(QWidget *prev);
+
+signals:
+    void textChanged();
+
+protected:
+    /** Intercept focus-in event and ',' keypresses */
+    bool eventFilter(QObject *object, QEvent *event);
+
+private:
+    QDoubleSpinBox *amount;
+    QValueComboBox *unit;
+    int currentUnit;
+
+    void setText(const QString &text);
+    QString text() const;
+
+private slots:
+    void unitChanged(int idx);
+
+};
+
+
+#endif // BITCOINFIELD_H
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
new file mode 100644 (file)
index 0000000..2c807a1
--- /dev/null
@@ -0,0 +1,744 @@
+/*
+ * Qt4 bitcoin GUI.
+ *
+ * W.J. van der Laan 2011
+ * The Bitcoin Developers 2011
+ */
+
+#include "checkpoints.h"
+
+#include "bitcoingui.h"
+#include "transactiontablemodel.h"
+#include "addressbookpage.h"
+#include "sendcoinsdialog.h"
+#include "optionsdialog.h"
+#include "aboutdialog.h"
+#include "clientmodel.h"
+#include "walletmodel.h"
+#include "editaddressdialog.h"
+#include "optionsmodel.h"
+#include "transactiondescdialog.h"
+#include "addresstablemodel.h"
+#include "transactionview.h"
+#include "overviewpage.h"
+#include "bitcoinunits.h"
+#include "guiconstants.h"
+#include "askpassphrasedialog.h"
+#include "notificator.h"
+
+#ifdef Q_WS_MAC
+#include "macdockiconhandler.h"
+#endif
+
+#include <QApplication>
+#include <QMainWindow>
+#include <QMenuBar>
+#include <QMenu>
+#include <QIcon>
+#include <QTabWidget>
+#include <QVBoxLayout>
+#include <QToolBar>
+#include <QStatusBar>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLocale>
+#include <QMessageBox>
+#include <QProgressBar>
+#include <QStackedWidget>
+#include <QDateTime>
+#include <QMovie>
+#include <QTimer>
+
+#include <QDragEnterEvent>
+#include <QUrl>
+
+#include <iostream>
+
+BitcoinGUI::BitcoinGUI(QWidget *parent):
+    QMainWindow(parent),
+    clientModel(0),
+    walletModel(0),
+    encryptWalletAction(0),
+    changePassphraseAction(0),
+    aboutQtAction(0),
+    trayIcon(0),
+    notificator(0)
+{
+    resize(850, 550);
+    setWindowTitle(tr("Bitcoin Wallet"));
+#ifndef Q_WS_MAC
+    setWindowIcon(QIcon(":icons/bitcoin"));
+#else
+    setUnifiedTitleAndToolBarOnMac(true);
+    QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
+#endif
+    // Accept D&D of URIs
+    setAcceptDrops(true);
+
+    // Create actions for the toolbar, menu bar and tray/dock icon
+    createActions();
+
+    // Create application menu bar
+    createMenuBar();
+
+    // Create the toolbars
+    createToolBars();
+
+    // Create the tray icon (or setup the dock icon)
+    createTrayIcon();
+
+    // Create tabs
+    overviewPage = new OverviewPage();
+
+    transactionsPage = new QWidget(this);
+    QVBoxLayout *vbox = new QVBoxLayout();
+    transactionView = new TransactionView(this);
+    vbox->addWidget(transactionView);
+    transactionsPage->setLayout(vbox);
+
+    addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab);
+
+    receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab);
+
+    sendCoinsPage = new SendCoinsDialog(this);
+
+    centralWidget = new QStackedWidget(this);
+    centralWidget->addWidget(overviewPage);
+    centralWidget->addWidget(transactionsPage);
+    centralWidget->addWidget(addressBookPage);
+    centralWidget->addWidget(receiveCoinsPage);
+    centralWidget->addWidget(sendCoinsPage);
+    setCentralWidget(centralWidget);
+
+    // Create status bar
+    statusBar();
+
+    // Status bar notification icons
+    QFrame *frameBlocks = new QFrame();
+    //frameBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
+    frameBlocks->setContentsMargins(0,0,0,0);
+    frameBlocks->setMinimumWidth(56);
+    frameBlocks->setMaximumWidth(56);
+    QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks);
+    frameBlocksLayout->setContentsMargins(3,0,3,0);
+    frameBlocksLayout->setSpacing(3);
+    labelEncryptionIcon = new QLabel();
+    labelConnectionsIcon = new QLabel();
+    labelBlocksIcon = new QLabel();
+    frameBlocksLayout->addStretch();
+    frameBlocksLayout->addWidget(labelEncryptionIcon);
+    frameBlocksLayout->addStretch();
+    frameBlocksLayout->addWidget(labelConnectionsIcon);
+    frameBlocksLayout->addStretch();
+    frameBlocksLayout->addWidget(labelBlocksIcon);
+    frameBlocksLayout->addStretch();
+
+    // Progress bar for blocks download
+    progressBarLabel = new QLabel(tr("Synchronizing with network..."));
+    progressBarLabel->setVisible(false);
+    progressBar = new QProgressBar();
+    progressBar->setToolTip(tr("Block chain synchronization in progress"));
+    progressBar->setVisible(false);
+
+    statusBar()->addWidget(progressBarLabel);
+    statusBar()->addWidget(progressBar);
+    statusBar()->addPermanentWidget(frameBlocks);
+
+    syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this);
+
+    // Clicking on a transaction on the overview page simply sends you to transaction history page
+    connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage()));
+
+    // Doubleclicking on a transaction on the transaction history page shows details
+    connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails()));
+
+    gotoOverviewPage();
+}
+
+BitcoinGUI::~BitcoinGUI()
+{
+#ifdef Q_WS_MAC
+    delete appMenuBar;
+#endif
+}
+
+void BitcoinGUI::createActions()
+{
+    QActionGroup *tabGroup = new QActionGroup(this);
+
+    overviewAction = new QAction(QIcon(":/icons/overview"), tr("&Overview"), this);
+    overviewAction->setToolTip(tr("Show general overview of wallet"));
+    overviewAction->setCheckable(true);
+    overviewAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_1));
+    tabGroup->addAction(overviewAction);
+
+    historyAction = new QAction(QIcon(":/icons/history"), tr("&Transactions"), this);
+    historyAction->setToolTip(tr("Browse transaction history"));
+    historyAction->setCheckable(true);
+    historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4));
+    tabGroup->addAction(historyAction);
+
+    addressBookAction = new QAction(QIcon(":/icons/address-book"), tr("&Address Book"), this);
+    addressBookAction->setToolTip(tr("Edit the list of stored addresses and labels"));
+    addressBookAction->setCheckable(true);
+    addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5));
+    tabGroup->addAction(addressBookAction);
+
+    receiveCoinsAction = new QAction(QIcon(":/icons/receiving_addresses"), tr("&Receive coins"), this);
+    receiveCoinsAction->setToolTip(tr("Show the list of addresses for receiving payments"));
+    receiveCoinsAction->setCheckable(true);
+    receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3));
+    tabGroup->addAction(receiveCoinsAction);
+
+    sendCoinsAction = new QAction(QIcon(":/icons/send"), tr("&Send coins"), this);
+    sendCoinsAction->setToolTip(tr("Send coins to a bitcoin address"));
+    sendCoinsAction->setCheckable(true);
+    sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2));
+    tabGroup->addAction(sendCoinsAction);
+
+    connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage()));
+    connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage()));
+    connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage()));
+    connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage()));
+    connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage()));
+
+    quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this);
+    quitAction->setToolTip(tr("Quit application"));
+    quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q));
+    quitAction->setMenuRole(QAction::QuitRole);
+    aboutAction = new QAction(QIcon(":/icons/bitcoin"), tr("&About %1").arg(qApp->applicationName()), this);
+    aboutAction->setToolTip(tr("Show information about Bitcoin"));
+    aboutAction->setMenuRole(QAction::AboutRole);
+    aboutQtAction = new QAction(tr("About &Qt"), this);
+    aboutQtAction->setToolTip(tr("Show information about Qt"));
+    aboutQtAction->setMenuRole(QAction::AboutQtRole);
+    optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this);
+    optionsAction->setToolTip(tr("Modify configuration options for bitcoin"));
+    optionsAction->setMenuRole(QAction::PreferencesRole);
+    openBitcoinAction = new QAction(QIcon(":/icons/bitcoin"), tr("Open &Bitcoin"), this);
+    openBitcoinAction->setToolTip(tr("Show the Bitcoin window"));
+    exportAction = new QAction(QIcon(":/icons/export"), tr("&Export..."), this);
+    exportAction->setToolTip(tr("Export the current view to a file"));
+    encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet"), this);
+    encryptWalletAction->setToolTip(tr("Encrypt or decrypt wallet"));
+    encryptWalletAction->setCheckable(true);
+    changePassphraseAction = new QAction(QIcon(":/icons/key"), tr("&Change Passphrase"), this);
+    changePassphraseAction->setToolTip(tr("Change the passphrase used for wallet encryption"));
+
+    connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
+    connect(optionsAction, SIGNAL(triggered()), this, SLOT(optionsClicked()));
+    connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked()));
+    connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
+    connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(showNormal()));
+    connect(encryptWalletAction, SIGNAL(triggered(bool)), this, SLOT(encryptWallet(bool)));
+    connect(changePassphraseAction, SIGNAL(triggered()), this, SLOT(changePassphrase()));
+}
+
+void BitcoinGUI::createMenuBar()
+{
+#ifdef Q_WS_MAC
+    // Create a decoupled menu bar on Mac which stays even if the window is closed
+    appMenuBar = new QMenuBar();
+#else
+    // Get the main window's menu bar on other platforms
+    appMenuBar = menuBar();
+#endif
+
+    // Configure the menus
+    QMenu *file = appMenuBar->addMenu(tr("&File"));
+    file->addAction(quitAction);
+
+    QMenu *settings = appMenuBar->addMenu(tr("&Settings"));
+    settings->addAction(encryptWalletAction);
+    settings->addAction(changePassphraseAction);
+    settings->addSeparator();
+    settings->addAction(optionsAction);
+
+    QMenu *help = appMenuBar->addMenu(tr("&Help"));
+    help->addAction(aboutAction);
+    help->addAction(aboutQtAction);
+}
+
+void BitcoinGUI::createToolBars()
+{
+    QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
+    toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    toolbar->addAction(overviewAction);
+    toolbar->addAction(sendCoinsAction);
+    toolbar->addAction(receiveCoinsAction);
+    toolbar->addAction(historyAction);
+    toolbar->addAction(addressBookAction);
+
+    QToolBar *toolbar2 = addToolBar(tr("Actions toolbar"));
+    toolbar2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    toolbar2->addAction(exportAction);
+}
+
+void BitcoinGUI::setClientModel(ClientModel *clientModel)
+{
+    this->clientModel = clientModel;
+    if(clientModel)
+    {
+        if(clientModel->isTestNet())
+        {
+            QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
+            setWindowTitle(title_testnet);
+#ifndef Q_WS_MAC
+            setWindowIcon(QIcon(":icons/bitcoin_testnet"));
+#else
+            MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet"));
+#endif
+            if(trayIcon)
+            {
+                trayIcon->setToolTip(title_testnet);
+                trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
+            }
+        }
+
+        // Keep up to date with client
+        setNumConnections(clientModel->getNumConnections());
+        connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
+
+        setNumBlocks(clientModel->getNumBlocks());
+        connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
+
+        // Report errors from network/worker thread
+        connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
+    }
+}
+
+void BitcoinGUI::setWalletModel(WalletModel *walletModel)
+{
+    this->walletModel = walletModel;
+    if(walletModel)
+    {
+        // Report errors from wallet thread
+        connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
+
+        // Put transaction list in tabs
+        transactionView->setModel(walletModel);
+
+        overviewPage->setModel(walletModel);
+        addressBookPage->setModel(walletModel->getAddressTableModel());
+        receiveCoinsPage->setModel(walletModel->getAddressTableModel());
+        sendCoinsPage->setModel(walletModel);
+
+        setEncryptionStatus(walletModel->getEncryptionStatus());
+        connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int)));
+
+        // Balloon popup for new transaction
+        connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+                this, SLOT(incomingTransaction(QModelIndex,int,int)));
+
+        // Ask for passphrase if needed
+        connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet()));
+    }
+}
+
+void BitcoinGUI::createTrayIcon()
+{
+    QMenu *trayIconMenu;
+#ifndef Q_WS_MAC
+    trayIcon = new QSystemTrayIcon(this);
+    trayIconMenu = new QMenu(this);
+    trayIcon->setContextMenu(trayIconMenu);
+    trayIcon->setToolTip("Bitcoin client");
+    trayIcon->setIcon(QIcon(":/icons/toolbar"));
+    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
+            this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason)));
+    trayIcon->show();
+#else
+    // Note: On Mac, the dock icon is used to provide the tray's functionality.
+    MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance();
+    connect(dockIconHandler, SIGNAL(dockIconClicked()), openBitcoinAction, SLOT(trigger()));
+    trayIconMenu = dockIconHandler->dockMenu();
+#endif
+
+    // Configuration of the tray icon (or dock icon) icon menu
+    trayIconMenu->addAction(openBitcoinAction);
+    trayIconMenu->addSeparator();
+    trayIconMenu->addAction(receiveCoinsAction);
+    trayIconMenu->addAction(sendCoinsAction);
+    trayIconMenu->addSeparator();
+    trayIconMenu->addAction(optionsAction);
+#ifndef Q_WS_MAC // This is built-in on Mac
+    trayIconMenu->addSeparator();
+    trayIconMenu->addAction(quitAction);
+#endif
+
+    notificator = new Notificator(tr("bitcoin-qt"), trayIcon);
+}
+
+#ifndef Q_WS_MAC
+void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
+{
+    if(reason == QSystemTrayIcon::Trigger)
+    {
+        // Click on system tray icon triggers "open bitcoin"
+        openBitcoinAction->trigger();
+    }
+}
+#endif
+
+void BitcoinGUI::optionsClicked()
+{
+    if(!clientModel || !clientModel->getOptionsModel())
+        return;
+    OptionsDialog dlg;
+    dlg.setModel(clientModel->getOptionsModel());
+    dlg.exec();
+}
+
+void BitcoinGUI::aboutClicked()
+{
+    AboutDialog dlg;
+    dlg.setModel(clientModel);
+    dlg.exec();
+}
+
+void BitcoinGUI::setNumConnections(int count)
+{
+    QString icon;
+    switch(count)
+    {
+    case 0: icon = ":/icons/connect_0"; break;
+    case 1: case 2: case 3: icon = ":/icons/connect_1"; break;
+    case 4: case 5: case 6: icon = ":/icons/connect_2"; break;
+    case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
+    default: icon = ":/icons/connect_4"; break;
+    }
+    labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+    labelConnectionsIcon->setToolTip(tr("%n active connection(s) to Bitcoin network", "", count));
+}
+
+void BitcoinGUI::setNumBlocks(int count)
+{
+    if(!clientModel)
+        return;
+    int total = clientModel->getNumBlocksOfPeers();
+    QString tooltip;
+
+    if(count < total)
+    {
+        if (clientModel->getStatusBarWarnings() == "")
+        {
+            progressBarLabel->setVisible(true);
+            progressBarLabel->setText(tr("Synchronizing with network..."));
+            progressBar->setVisible(true);
+            progressBar->setMaximum(total);
+            progressBar->setValue(count);
+        }
+        else
+        {
+            progressBarLabel->setText(clientModel->getStatusBarWarnings());
+            progressBarLabel->setVisible(true);
+            progressBar->setVisible(false);
+        }
+        tooltip = tr("Downloaded %1 of %2 blocks of transaction history.").arg(count).arg(total);
+    }
+    else
+    {
+        if (clientModel->getStatusBarWarnings() == "")
+            progressBarLabel->setVisible(false);
+        else
+        {
+            progressBarLabel->setText(clientModel->getStatusBarWarnings());
+            progressBarLabel->setVisible(true);
+        }
+        progressBar->setVisible(false);
+        tooltip = tr("Downloaded %1 blocks of transaction history.").arg(count);
+    }
+
+    QDateTime now = QDateTime::currentDateTime();
+    QDateTime lastBlockDate = clientModel->getLastBlockDate();
+    int secs = lastBlockDate.secsTo(now);
+    QString text;
+
+    // Represent time from last generated block in human readable text
+    if(secs <= 0)
+    {
+        // Fully up to date. Leave text empty.
+    }
+    else if(secs < 60)
+    {
+        text = tr("%n second(s) ago","",secs);
+    }
+    else if(secs < 60*60)
+    {
+        text = tr("%n minute(s) ago","",secs/60);
+    }
+    else if(secs < 24*60*60)
+    {
+        text = tr("%n hour(s) ago","",secs/(60*60));
+    }
+    else
+    {
+        text = tr("%n day(s) ago","",secs/(60*60*24));
+    }
+
+    // Set icon state: spinning if catching up, tick otherwise
+    if(secs < 90*60 && count >= Checkpoints::GetTotalBlocksEstimate())
+    {
+        tooltip = tr("Up to date") + QString(".\n") + tooltip;
+        labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+    }
+    else
+    {
+        tooltip = tr("Catching up...") + QString("\n") + tooltip;
+        labelBlocksIcon->setMovie(syncIconMovie);
+        syncIconMovie->start();
+    }
+
+    if(!text.isEmpty())
+    {
+        tooltip += QString("\n");
+        tooltip += tr("Last received block was generated %1.").arg(text);
+    }
+
+    labelBlocksIcon->setToolTip(tooltip);
+    progressBarLabel->setToolTip(tooltip);
+    progressBar->setToolTip(tooltip);
+}
+
+void BitcoinGUI::refreshStatusBar()
+{
+    /* Might display multiple times in the case of multiple alerts
+    static QString prevStatusBar;
+    QString newStatusBar = clientModel->getStatusBarWarnings();
+    if (prevStatusBar != newStatusBar)
+    {
+        prevStatusBar = newStatusBar;
+        error(tr("Network Alert"), newStatusBar);
+    }*/
+    setNumBlocks(clientModel->getNumBlocks());
+}
+
+void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
+{
+    // Report errors from network/worker thread
+    if (modal)
+    {
+        QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
+    } else {
+        notificator->notify(Notificator::Critical, title, message);
+    }
+}
+
+void BitcoinGUI::changeEvent(QEvent *e)
+{
+    QMainWindow::changeEvent(e);
+#ifndef Q_WS_MAC // Ignored on Mac
+    if(e->type() == QEvent::WindowStateChange)
+    {
+        if(clientModel && clientModel->getOptionsModel()->getMinimizeToTray())
+        {
+            QWindowStateChangeEvent *wsevt = static_cast<QWindowStateChangeEvent*>(e);
+            if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
+            {
+                QTimer::singleShot(0, this, SLOT(hide()));
+                e->ignore();
+            }
+        }
+    }
+#endif
+}
+
+void BitcoinGUI::closeEvent(QCloseEvent *event)
+{
+    if(clientModel)
+    {
+#ifndef Q_WS_MAC // Ignored on Mac
+        if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
+           !clientModel->getOptionsModel()->getMinimizeOnClose())
+        {
+            qApp->quit();
+        }
+#endif
+    }
+    QMainWindow::closeEvent(event);
+}
+
+void BitcoinGUI::askFee(qint64 nFeeRequired, bool *payFee)
+{
+    QString strMessage =
+        tr("This transaction is over the size limit.  You can still send it for a fee of %1, "
+          "which goes to the nodes that process your transaction and helps to support the network.  "
+          "Do you want to pay the fee?").arg(
+                BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nFeeRequired));
+    QMessageBox::StandardButton retval = QMessageBox::question(
+          this, tr("Sending..."), strMessage,
+          QMessageBox::Yes|QMessageBox::Cancel, QMessageBox::Yes);
+    *payFee = (retval == QMessageBox::Yes);
+}
+
+void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
+{
+    if(!walletModel || !clientModel)
+        return;
+    TransactionTableModel *ttm = walletModel->getTransactionTableModel();
+    qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
+                    .data(Qt::EditRole).toULongLong();
+    if(!clientModel->inInitialBlockDownload())
+    {
+        // On new transaction, make an info balloon
+        // Unless the initial block download is in progress, to prevent balloon-spam
+        QString date = ttm->index(start, TransactionTableModel::Date, parent)
+                        .data().toString();
+        QString type = ttm->index(start, TransactionTableModel::Type, parent)
+                        .data().toString();
+        QString address = ttm->index(start, TransactionTableModel::ToAddress, parent)
+                        .data().toString();
+        QIcon icon = qvariant_cast<QIcon>(ttm->index(start,
+                            TransactionTableModel::ToAddress, parent)
+                        .data(Qt::DecorationRole));
+
+        notificator->notify(Notificator::Information,
+                            (amount)<0 ? tr("Sent transaction") :
+                                         tr("Incoming transaction"),
+                              tr("Date: %1\n"
+                                 "Amount: %2\n"
+                                 "Type: %3\n"
+                                 "Address: %4\n")
+                              .arg(date)
+                              .arg(BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), amount, true))
+                              .arg(type)
+                              .arg(address), icon);
+    }
+}
+
+void BitcoinGUI::gotoOverviewPage()
+{
+    overviewAction->setChecked(true);
+    centralWidget->setCurrentWidget(overviewPage);
+
+    exportAction->setEnabled(false);
+    disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+}
+
+void BitcoinGUI::gotoHistoryPage()
+{
+    historyAction->setChecked(true);
+    centralWidget->setCurrentWidget(transactionsPage);
+
+    exportAction->setEnabled(true);
+    disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+    connect(exportAction, SIGNAL(triggered()), transactionView, SLOT(exportClicked()));
+}
+
+void BitcoinGUI::gotoAddressBookPage()
+{
+    addressBookAction->setChecked(true);
+    centralWidget->setCurrentWidget(addressBookPage);
+
+    exportAction->setEnabled(true);
+    disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+    connect(exportAction, SIGNAL(triggered()), addressBookPage, SLOT(exportClicked()));
+}
+
+void BitcoinGUI::gotoReceiveCoinsPage()
+{
+    receiveCoinsAction->setChecked(true);
+    centralWidget->setCurrentWidget(receiveCoinsPage);
+
+    exportAction->setEnabled(true);
+    disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+    connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
+}
+
+void BitcoinGUI::gotoSendCoinsPage()
+{
+    sendCoinsAction->setChecked(true);
+    centralWidget->setCurrentWidget(sendCoinsPage);
+
+    exportAction->setEnabled(false);
+    disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+}
+
+void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event)
+{
+    // Accept only URIs
+    if(event->mimeData()->hasUrls())
+        event->acceptProposedAction();
+}
+
+void BitcoinGUI::dropEvent(QDropEvent *event)
+{
+    if(event->mimeData()->hasUrls())
+    {
+        gotoSendCoinsPage();
+        QList<QUrl> uris = event->mimeData()->urls();
+        foreach(const QUrl &uri, uris)
+        {
+            sendCoinsPage->handleURI(&uri);
+        }
+    }
+
+    event->acceptProposedAction();
+}
+
+void BitcoinGUI::setEncryptionStatus(int status)
+{
+    switch(status)
+    {
+    case WalletModel::Unencrypted:
+        labelEncryptionIcon->hide();
+        encryptWalletAction->setChecked(false);
+        changePassphraseAction->setEnabled(false);
+        encryptWalletAction->setEnabled(true);
+        break;
+    case WalletModel::Unlocked:
+        labelEncryptionIcon->show();
+        labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_open").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+        labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>unlocked</b>"));
+        encryptWalletAction->setChecked(true);
+        changePassphraseAction->setEnabled(true);
+        encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
+        break;
+    case WalletModel::Locked:
+        labelEncryptionIcon->show();
+        labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_closed").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+        labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>locked</b>"));
+        encryptWalletAction->setChecked(true);
+        changePassphraseAction->setEnabled(true);
+        encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
+        break;
+    }
+}
+
+void BitcoinGUI::encryptWallet(bool status)
+{
+    if(!walletModel)
+        return;
+    AskPassphraseDialog dlg(status ? AskPassphraseDialog::Encrypt:
+                                     AskPassphraseDialog::Decrypt, this);
+    dlg.setModel(walletModel);
+    dlg.exec();
+
+    setEncryptionStatus(walletModel->getEncryptionStatus());
+}
+
+void BitcoinGUI::changePassphrase()
+{
+    AskPassphraseDialog dlg(AskPassphraseDialog::ChangePass, this);
+    dlg.setModel(walletModel);
+    dlg.exec();
+}
+
+void BitcoinGUI::unlockWallet()
+{
+    if(!walletModel)
+        return;
+    // Unlock wallet when requested by wallet model
+    if(walletModel->getEncryptionStatus() == WalletModel::Locked)
+    {
+        AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, this);
+        dlg.setModel(walletModel);
+        dlg.exec();
+    }
+}
diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
new file mode 100644 (file)
index 0000000..0fcb72a
--- /dev/null
@@ -0,0 +1,160 @@
+#ifndef BITCOINGUI_H
+#define BITCOINGUI_H
+
+#include <QMainWindow>
+#include <QSystemTrayIcon>
+
+class TransactionTableModel;
+class ClientModel;
+class WalletModel;
+class TransactionView;
+class OverviewPage;
+class AddressBookPage;
+class SendCoinsDialog;
+class Notificator;
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QTableView;
+class QAbstractItemModel;
+class QModelIndex;
+class QProgressBar;
+class QStackedWidget;
+class QUrl;
+QT_END_NAMESPACE
+
+/**
+  Bitcoin GUI main class. This class represents the main window of the Bitcoin UI. It communicates with both the client and
+  wallet models to give the user an up-to-date view of the current core state.
+*/
+class BitcoinGUI : public QMainWindow
+{
+    Q_OBJECT
+public:
+    explicit BitcoinGUI(QWidget *parent = 0);
+    ~BitcoinGUI();
+
+    /** Set the client model.
+        The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic.
+    */
+    void setClientModel(ClientModel *clientModel);
+    /** Set the wallet model.
+        The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending
+        functionality.
+    */
+    void setWalletModel(WalletModel *walletModel);
+    
+protected:
+    void changeEvent(QEvent *e);
+    void closeEvent(QCloseEvent *event);
+    void dragEnterEvent(QDragEnterEvent *event);
+    void dropEvent(QDropEvent *event);
+
+private:
+    ClientModel *clientModel;
+    WalletModel *walletModel;
+
+    QStackedWidget *centralWidget;
+
+    OverviewPage *overviewPage;
+    QWidget *transactionsPage;
+    AddressBookPage *addressBookPage;
+    AddressBookPage *receiveCoinsPage;
+    SendCoinsDialog *sendCoinsPage;
+
+    QLabel *labelEncryptionIcon;
+    QLabel *labelConnectionsIcon;
+    QLabel *labelBlocksIcon;
+    QLabel *progressBarLabel;
+    QProgressBar *progressBar;
+
+    QMenuBar *appMenuBar;
+    QAction *overviewAction;
+    QAction *historyAction;
+    QAction *quitAction;
+    QAction *sendCoinsAction;
+    QAction *addressBookAction;
+    QAction *aboutAction;
+    QAction *receiveCoinsAction;
+    QAction *optionsAction;
+    QAction *openBitcoinAction;
+    QAction *exportAction;
+    QAction *encryptWalletAction;
+    QAction *changePassphraseAction;
+    QAction *aboutQtAction;
+
+    QSystemTrayIcon *trayIcon;
+    Notificator *notificator;
+    TransactionView *transactionView;
+
+    QMovie *syncIconMovie;
+
+    /** Create the main UI actions. */
+    void createActions();
+    /** Create the menu bar and submenus. */
+    void createMenuBar();
+    /** Create the toolbars */
+    void createToolBars();
+    /** Create system tray (notification) icon */
+    void createTrayIcon();
+
+public slots:
+    /** Set number of connections shown in the UI */
+    void setNumConnections(int count);
+    /** Set number of blocks shown in the UI */
+    void setNumBlocks(int count);
+    /** Set the encryption status as shown in the UI.
+       @param[in] status            current encryption status
+       @see WalletModel::EncryptionStatus
+    */
+    void setEncryptionStatus(int status);
+    /** Set the status bar text if there are any warnings (removes sync progress bar if applicable) */
+    void refreshStatusBar();
+
+    /** Notify the user of an error in the network or transaction handling code. */
+    void error(const QString &title, const QString &message, bool modal = false);
+    /** Asks the user whether to pay the transaction fee or to cancel the transaction.
+       It is currently not possible to pass a return value to another thread through
+       BlockingQueuedConnection, so an indirected pointer is used.
+       http://bugreports.qt.nokia.com/browse/QTBUG-10440
+
+      @param[in] nFeeRequired       the required fee
+      @param[out] payFee            true to pay the fee, false to not pay the fee
+    */
+    void askFee(qint64 nFeeRequired, bool *payFee);
+
+private slots:
+    /** Switch to overview (home) page */
+    void gotoOverviewPage();
+    /** Switch to history (transactions) page */
+    void gotoHistoryPage();
+    /** Switch to address book page */
+    void gotoAddressBookPage();
+    /** Switch to receive coins page */
+    void gotoReceiveCoinsPage();
+    /** Switch to send coins page */
+    void gotoSendCoinsPage();
+
+    /** Show configuration dialog */
+    void optionsClicked();
+    /** Show about dialog */
+    void aboutClicked();
+#ifndef Q_WS_MAC
+    /** Handle tray icon clicked */
+    void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
+#endif
+    /** Show incoming transaction notification for new transactions.
+
+        The new items are those between start and end inclusive, under the given parent item.
+    */
+    void incomingTransaction(const QModelIndex & parent, int start, int end);
+    /** Encrypt the wallet */
+    void encryptWallet(bool status);
+    /** Change encrypted wallet passphrase */
+    void changePassphrase();
+    /** Ask for pass phrase to unlock wallet temporarily */
+    void unlockWallet();
+};
+
+#endif
diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp
new file mode 100644 (file)
index 0000000..2d77441
--- /dev/null
@@ -0,0 +1,81 @@
+#include <QtGlobal>
+// Automatically generated by extract_strings.py
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+static const char UNUSED *bitcoin_strings[] = {QT_TRANSLATE_NOOP("bitcoin-core", "Bitcoin version"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or bitcoind\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "List commands\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Options:\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: bitcoin.conf)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: bitcoind.pid)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Don't generate coins\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Start minimized\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout (in milliseconds)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks4 proxy\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for addnode and connect\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Don't accept connections from outside\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Number of seconds to keep misbehaving peers from reconnecting (default: "
+"86400)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Don't attempt to use UPnP to map the listening port\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to use UPnP to map the listening port\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Fee per kB to add to transactions you send\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Listen for JSON-RPC connections on <port> (default: 8332)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on <ip> (default: 127.0.0.1)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: 100)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"\n"
+"SSL options: (see the Bitcoin Wiki for SSL setup instructions)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: server.cert)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: server.pem)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:"
+"@STRENGTH)\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "This help message\n"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Cannot obtain a lock on data directory %s.  Bitcoin is probably already "
+"running."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error loading addr.dat      \n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error loading blkindex.dat      \n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted      \n"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Error loading wallet.dat: Wallet requires newer version of Bitcoin      \n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat      \n"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=<amount>"),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Warning: -paytxfee is set very high.  This is the transaction fee you will "
+"pay if you send a transaction."),
+QT_TRANSLATE_NOOP("bitcoin-core", "Error: CreateThread(StartNode) failed"),
+QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Disk space is low  "),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Unable to bind to port %d on this computer.  Bitcoin is probably already "
+"running."),
+QT_TRANSLATE_NOOP("bitcoin-core", ""
+"Warning: Please check that your computer's date and time are correct.  If "
+"your clock is wrong Bitcoin will not work properly."),
+QT_TRANSLATE_NOOP("bitcoin-core", "beta"),
+};
\ No newline at end of file
diff --git a/src/qt/bitcoinunits.cpp b/src/qt/bitcoinunits.cpp
new file mode 100644 (file)
index 0000000..9a9a489
--- /dev/null
@@ -0,0 +1,181 @@
+#include "bitcoinunits.h"
+
+#include <QStringList>
+
+BitcoinUnits::BitcoinUnits(QObject *parent):
+        QAbstractListModel(parent),
+        unitlist(availableUnits())
+{
+}
+
+QList<BitcoinUnits::Unit> BitcoinUnits::availableUnits()
+{
+    QList<BitcoinUnits::Unit> unitlist;
+    unitlist.append(BTC);
+    unitlist.append(mBTC);
+    unitlist.append(uBTC);
+    return unitlist;
+}
+
+bool BitcoinUnits::valid(int unit)
+{
+    switch(unit)
+    {
+    case BTC:
+    case mBTC:
+    case uBTC:
+        return true;
+    default:
+        return false;
+    }
+}
+
+QString BitcoinUnits::name(int unit)
+{
+    switch(unit)
+    {
+    case BTC: return QString("BTC");
+    case mBTC: return QString("mBTC");
+    case uBTC: return QString::fromUtf8("μBTC");
+    default: return QString("???");
+    }
+}
+
+QString BitcoinUnits::description(int unit)
+{
+    switch(unit)
+    {
+    case BTC: return QString("Bitcoins");
+    case mBTC: return QString("Milli-Bitcoins (1 / 1,000)");
+    case uBTC: return QString("Micro-Bitcoins (1 / 1,000,000)");
+    default: return QString("???");
+    }
+}
+
+qint64 BitcoinUnits::factor(int unit)
+{
+    switch(unit)
+    {
+    case BTC:  return 100000000;
+    case mBTC: return 100000;
+    case uBTC: return 100;
+    default:   return 100000000;
+    }
+}
+
+int BitcoinUnits::amountDigits(int unit)
+{
+    switch(unit)
+    {
+    case BTC: return 8; // 21,000,000 (# digits, without commas)
+    case mBTC: return 11; // 21,000,000,000
+    case uBTC: return 14; // 21,000,000,000,000
+    default: return 0;
+    }
+}
+
+int BitcoinUnits::decimals(int unit)
+{
+    switch(unit)
+    {
+    case BTC: return 8;
+    case mBTC: return 5;
+    case uBTC: return 2;
+    default: return 0;
+    }
+}
+
+QString BitcoinUnits::format(int unit, qint64 n, bool fPlus)
+{
+    // Note: not using straight sprintf here because we do NOT want
+    // localized number formatting.
+    if(!valid(unit))
+        return QString(); // Refuse to format invalid unit
+    qint64 coin = factor(unit);
+    int num_decimals = decimals(unit);
+    qint64 n_abs = (n > 0 ? n : -n);
+    qint64 quotient = n_abs / coin;
+    qint64 remainder = n_abs % coin;
+    QString quotient_str = QString::number(quotient);
+    QString remainder_str = QString::number(remainder).rightJustified(num_decimals, '0');
+
+    // Right-trim excess 0's after the decimal point
+    int nTrim = 0;
+    for (int i = remainder_str.size()-1; i>=2 && (remainder_str.at(i) == '0'); --i)
+        ++nTrim;
+    remainder_str.chop(nTrim);
+
+    if (n < 0)
+        quotient_str.insert(0, '-');
+    else if (fPlus && n > 0)
+        quotient_str.insert(0, '+');
+    return quotient_str + QString(".") + remainder_str;
+}
+
+QString BitcoinUnits::formatWithUnit(int unit, qint64 amount, bool plussign)
+{
+    return format(unit, amount, plussign) + QString(" ") + name(unit);
+}
+
+bool BitcoinUnits::parse(int unit, const QString &value, qint64 *val_out)
+{
+    if(!valid(unit) || value.isEmpty())
+        return false; // Refuse to parse invalid unit or empty string
+    int num_decimals = decimals(unit);
+    QStringList parts = value.split(".");
+
+    if(parts.size() > 2)
+    {
+        return false; // More than one dot
+    }
+    QString whole = parts[0];
+    QString decimals;
+
+    if(parts.size() > 1)
+    {
+        decimals = parts[1];
+    }
+    if(decimals.size() > num_decimals)
+    {
+        return false; // Exceeds max precision
+    }
+    bool ok = false;
+    QString str = whole + decimals.leftJustified(num_decimals, '0');
+
+    if(str.size() > 18)
+    {
+        return false; // Longer numbers will exceed 63 bits
+    }
+    qint64 retvalue = str.toLongLong(&ok);
+    if(val_out)
+    {
+        *val_out = retvalue;
+    }
+    return ok;
+}
+
+int BitcoinUnits::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return unitlist.size();
+}
+
+QVariant BitcoinUnits::data(const QModelIndex &index, int role) const
+{
+    int row = index.row();
+    if(row >= 0 && row < unitlist.size())
+    {
+        Unit unit = unitlist.at(row);
+        switch(role)
+        {
+        case Qt::EditRole:
+        case Qt::DisplayRole:
+            return QVariant(name(unit));
+        case Qt::ToolTipRole:
+            return QVariant(description(unit));
+        case UnitRole:
+            return QVariant(static_cast<int>(unit));
+        }
+    }
+    return QVariant();
+}
diff --git a/src/qt/bitcoinunits.h b/src/qt/bitcoinunits.h
new file mode 100644 (file)
index 0000000..18fa36a
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef BITCOINUNITS_H
+#define BITCOINUNITS_H
+
+#include <QString>
+#include <QAbstractListModel>
+
+/** Bitcoin unit definitions. Encapsulates parsing and formatting
+   and serves as list model for dropdown selection boxes.
+*/
+class BitcoinUnits: public QAbstractListModel
+{
+public:
+    explicit BitcoinUnits(QObject *parent);
+
+    /** Bitcoin units.
+      @note Source: https://en.bitcoin.it/wiki/Units . Please add only sensible ones
+     */
+    enum Unit
+    {
+        BTC,
+        mBTC,
+        uBTC
+    };
+
+    //! @name Static API
+    //! Unit conversion and formatting
+    ///@{
+
+    //! Get list of units, for dropdown box
+    static QList<Unit> availableUnits();
+    //! Is unit ID valid?
+    static bool valid(int unit);
+    //! Short name
+    static QString name(int unit);
+    //! Longer description
+    static QString description(int unit);
+    //! Number of Satoshis (1e-8) per unit
+    static qint64 factor(int unit);
+    //! Number of amount digits (to represent max number of coins)
+    static int amountDigits(int unit);
+    //! Number of decimals left
+    static int decimals(int unit);
+    //! Format as string
+    static QString format(int unit, qint64 amount, bool plussign=false);
+    //! Format as string (with unit)
+    static QString formatWithUnit(int unit, qint64 amount, bool plussign=false);
+    //! Parse string to coin amount
+    static bool parse(int unit, const QString &value, qint64 *val_out);
+    ///@}
+
+    //! @name AbstractListModel implementation
+    //! List model for unit dropdown selection box.
+    ///@{
+    enum RoleIndex {
+        /** Unit identifier */
+        UnitRole = Qt::UserRole
+    };
+    int rowCount(const QModelIndex &parent) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    ///@}
+private:
+    QList<BitcoinUnits::Unit> unitlist;
+};
+typedef BitcoinUnits::Unit BitcoinUnit;
+
+#endif // BITCOINUNITS_H
diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
new file mode 100644 (file)
index 0000000..5a0b4aa
--- /dev/null
@@ -0,0 +1,88 @@
+#include "clientmodel.h"
+#include "guiconstants.h"
+#include "optionsmodel.h"
+#include "addresstablemodel.h"
+#include "transactiontablemodel.h"
+
+#include "headers.h"
+
+#include <QTimer>
+#include <QDateTime>
+
+ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) :
+    QObject(parent), optionsModel(optionsModel),
+    cachedNumConnections(0), cachedNumBlocks(0)
+{
+    // Until signal notifications is built into the bitcoin core,
+    //  simply update everything after polling using a timer.
+    QTimer *timer = new QTimer(this);
+    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
+    timer->start(MODEL_UPDATE_DELAY);
+
+    numBlocksAtStartup = -1;
+}
+
+int ClientModel::getNumConnections() const
+{
+    return vNodes.size();
+}
+
+int ClientModel::getNumBlocks() const
+{
+    return nBestHeight;
+}
+
+int ClientModel::getNumBlocksAtStartup()
+{
+    if (numBlocksAtStartup == -1) numBlocksAtStartup = getNumBlocks();
+    return numBlocksAtStartup;
+}
+
+QDateTime ClientModel::getLastBlockDate() const
+{
+    return QDateTime::fromTime_t(pindexBest->GetBlockTime());
+}
+
+void ClientModel::update()
+{
+    int newNumConnections = getNumConnections();
+    int newNumBlocks = getNumBlocks();
+
+    if(cachedNumConnections != newNumConnections)
+        emit numConnectionsChanged(newNumConnections);
+    if(cachedNumBlocks != newNumBlocks)
+        emit numBlocksChanged(newNumBlocks);
+
+    cachedNumConnections = newNumConnections;
+    cachedNumBlocks = newNumBlocks;
+}
+
+bool ClientModel::isTestNet() const
+{
+    return fTestNet;
+}
+
+bool ClientModel::inInitialBlockDownload() const
+{
+    return IsInitialBlockDownload();
+}
+
+int ClientModel::getNumBlocksOfPeers() const
+{
+    return GetNumBlocksOfPeers();
+}
+
+QString ClientModel::getStatusBarWarnings() const
+{
+    return QString::fromStdString(GetWarnings("statusbar"));
+}
+
+OptionsModel *ClientModel::getOptionsModel()
+{
+    return optionsModel;
+}
+
+QString ClientModel::formatFullVersion() const
+{
+    return QString::fromStdString(FormatFullVersion());
+}
diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h
new file mode 100644 (file)
index 0000000..5a12c4f
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef CLIENTMODEL_H
+#define CLIENTMODEL_H
+
+#include <QObject>
+
+class OptionsModel;
+class AddressTableModel;
+class TransactionTableModel;
+class CWallet;
+
+QT_BEGIN_NAMESPACE
+class QDateTime;
+QT_END_NAMESPACE
+
+/** Model for Bitcoin network client. */
+class ClientModel : public QObject
+{
+    Q_OBJECT
+public:
+    explicit ClientModel(OptionsModel *optionsModel, QObject *parent = 0);
+
+    OptionsModel *getOptionsModel();
+
+    int getNumConnections() const;
+    int getNumBlocks() const;
+    int getNumBlocksAtStartup();
+
+    QDateTime getLastBlockDate() const;
+
+    //! Return true if client connected to testnet
+    bool isTestNet() const;
+    //! Return true if core is doing initial block download
+    bool inInitialBlockDownload() const;
+    //! Return conservative estimate of total number of blocks, or 0 if unknown
+    int getNumBlocksOfPeers() const;
+    //! Return warnings to be displayed in status bar
+    QString getStatusBarWarnings() const;
+
+    QString formatFullVersion() const;
+
+private:
+    OptionsModel *optionsModel;
+
+    int cachedNumConnections;
+    int cachedNumBlocks;
+
+    int numBlocksAtStartup;
+
+signals:
+    void numConnectionsChanged(int count);
+    void numBlocksChanged(int count);
+
+    //! Asynchronous error notification
+    void error(const QString &title, const QString &message);
+
+public slots:
+
+private slots:
+    void update();
+};
+
+#endif // CLIENTMODEL_H
diff --git a/src/qt/csvmodelwriter.cpp b/src/qt/csvmodelwriter.cpp
new file mode 100644 (file)
index 0000000..8a50bba
--- /dev/null
@@ -0,0 +1,88 @@
+#include "csvmodelwriter.h"
+
+#include <QAbstractItemModel>
+#include <QFile>
+#include <QTextStream>
+
+CSVModelWriter::CSVModelWriter(const QString &filename, QObject *parent) :
+    QObject(parent),
+    filename(filename), model(0)
+{
+}
+
+void CSVModelWriter::setModel(const QAbstractItemModel *model)
+{
+    this->model = model;
+}
+
+void CSVModelWriter::addColumn(const QString &title, int column, int role)
+{
+    Column col;
+    col.title = title;
+    col.column = column;
+    col.role = role;
+
+    columns.append(col);
+}
+
+static void writeValue(QTextStream &f, const QString &value)
+{
+    QString escaped = value;
+    escaped.replace('"', "\"\"");
+    f << "\"" << escaped << "\"";
+}
+
+static void writeSep(QTextStream &f)
+{
+    f << ",";
+}
+
+static void writeNewline(QTextStream &f)
+{
+    f << "\n";
+}
+
+bool CSVModelWriter::write()
+{
+    QFile file(filename);
+    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
+        return false;
+    QTextStream out(&file);
+
+    int numRows = 0;
+    if(model)
+    {
+        numRows = model->rowCount();
+    }
+
+    // Header row
+    for(int i=0; i<columns.size(); ++i)
+    {
+        if(i!=0)
+        {
+            writeSep(out);
+        }
+        writeValue(out, columns[i].title);
+    }
+    writeNewline(out);
+
+    // Data rows
+    for(int j=0; j<numRows; ++j)
+    {
+        for(int i=0; i<columns.size(); ++i)
+        {
+            if(i!=0)
+            {
+                writeSep(out);
+            }
+            QVariant data = model->index(j, columns[i].column).data(columns[i].role);
+            writeValue(out, data.toString());
+        }
+        writeNewline(out);
+    }
+
+    file.close();
+
+    return file.error() == QFile::NoError;
+}
+
diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h
new file mode 100644 (file)
index 0000000..6c9dcba
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef CSVMODELWRITER_H
+#define CSVMODELWRITER_H
+
+#include <QObject>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+class QAbstractItemModel;
+QT_END_NAMESPACE
+
+/** Export a Qt table model to a CSV file. This is useful for analyzing or post-processing the data in
+    a spreadsheet.
+ */
+class CSVModelWriter : public QObject
+{
+    Q_OBJECT
+public:
+    explicit CSVModelWriter(const QString &filename, QObject *parent = 0);
+
+    void setModel(const QAbstractItemModel *model);
+    void addColumn(const QString &title, int column, int role=Qt::EditRole);
+
+    /** Perform export of the model to CSV.
+        @returns true on success, false otherwise
+    */
+    bool write();
+
+private:
+    QString filename;
+    const QAbstractItemModel *model;
+
+    struct Column
+    {
+        QString title;
+        int column;
+        int role;
+    };
+    QList<Column> columns;
+
+signals:
+
+public slots:
+
+};
+
+#endif // CSVMODELWRITER_H
diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp
new file mode 100644 (file)
index 0000000..cecb8ae
--- /dev/null
@@ -0,0 +1,128 @@
+#include "editaddressdialog.h"
+#include "ui_editaddressdialog.h"
+#include "addresstablemodel.h"
+#include "guiutil.h"
+
+#include <QDataWidgetMapper>
+#include <QMessageBox>
+
+EditAddressDialog::EditAddressDialog(Mode mode, QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::EditAddressDialog), mapper(0), mode(mode), model(0)
+{
+    ui->setupUi(this);
+
+    GUIUtil::setupAddressWidget(ui->addressEdit, this);
+
+    switch(mode)
+    {
+    case NewReceivingAddress:
+        setWindowTitle(tr("New receiving address"));
+        ui->addressEdit->setEnabled(false);
+        break;
+    case NewSendingAddress:
+        setWindowTitle(tr("New sending address"));
+        break;
+    case EditReceivingAddress:
+        setWindowTitle(tr("Edit receiving address"));
+        ui->addressEdit->setDisabled(true);
+        break;
+    case EditSendingAddress:
+        setWindowTitle(tr("Edit sending address"));
+        break;
+    }
+
+    mapper = new QDataWidgetMapper(this);
+    mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
+}
+
+EditAddressDialog::~EditAddressDialog()
+{
+    delete ui;
+}
+
+void EditAddressDialog::setModel(AddressTableModel *model)
+{
+    this->model = model;
+    mapper->setModel(model);
+    mapper->addMapping(ui->labelEdit, AddressTableModel::Label);
+    mapper->addMapping(ui->addressEdit, AddressTableModel::Address);
+}
+
+void EditAddressDialog::loadRow(int row)
+{
+    mapper->setCurrentIndex(row);
+}
+
+bool EditAddressDialog::saveCurrentRow()
+{
+    if(!model)
+        return false;
+    switch(mode)
+    {
+    case NewReceivingAddress:
+    case NewSendingAddress:
+        address = model->addRow(
+                mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive,
+                ui->labelEdit->text(),
+                ui->addressEdit->text());
+        break;
+    case EditReceivingAddress:
+    case EditSendingAddress:
+        if(mapper->submit())
+        {
+            address = ui->addressEdit->text();
+        }
+        break;
+    }
+    return !address.isEmpty();
+}
+
+void EditAddressDialog::accept()
+{
+    if(!model)
+        return;
+    if(!saveCurrentRow())
+    {
+        switch(model->getEditStatus())
+        {
+        case AddressTableModel::DUPLICATE_ADDRESS:
+            QMessageBox::warning(this, windowTitle(),
+                tr("The entered address \"%1\" is already in the address book.").arg(ui->addressEdit->text()),
+                QMessageBox::Ok, QMessageBox::Ok);
+            break;
+        case AddressTableModel::INVALID_ADDRESS:
+            QMessageBox::warning(this, windowTitle(),
+                tr("The entered address \"%1\" is not a valid bitcoin address.").arg(ui->addressEdit->text()),
+                QMessageBox::Ok, QMessageBox::Ok);
+            return;
+        case AddressTableModel::WALLET_UNLOCK_FAILURE:
+            QMessageBox::critical(this, windowTitle(),
+                tr("Could not unlock wallet."),
+                QMessageBox::Ok, QMessageBox::Ok);
+            return;
+        case AddressTableModel::KEY_GENERATION_FAILURE:
+            QMessageBox::critical(this, windowTitle(),
+                tr("New key generation failed."),
+                QMessageBox::Ok, QMessageBox::Ok);
+            return;
+        case AddressTableModel::OK:
+            // Failed with unknown reason. Just reject.
+            break;
+        }
+
+        return;
+    }
+    QDialog::accept();
+}
+
+QString EditAddressDialog::getAddress() const
+{
+    return address;
+}
+
+void EditAddressDialog::setAddress(const QString &address)
+{
+    this->address = address;
+    ui->addressEdit->setText(address);
+}
diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h
new file mode 100644 (file)
index 0000000..7ec053f
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef EDITADDRESSDIALOG_H
+#define EDITADDRESSDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QDataWidgetMapper;
+QT_END_NAMESPACE
+
+namespace Ui {
+    class EditAddressDialog;
+}
+class AddressTableModel;
+
+/** Dialog for editing an address and associated information.
+ */
+class EditAddressDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    enum Mode {
+        NewReceivingAddress,
+        NewSendingAddress,
+        EditReceivingAddress,
+        EditSendingAddress
+    };
+
+    explicit EditAddressDialog(Mode mode, QWidget *parent = 0);
+    ~EditAddressDialog();    
+
+    void setModel(AddressTableModel *model);
+    void loadRow(int row);
+
+    void accept();
+
+    QString getAddress() const;
+    void setAddress(const QString &address);
+private:
+    bool saveCurrentRow();
+
+    Ui::EditAddressDialog *ui;
+    QDataWidgetMapper *mapper;
+    Mode mode;
+    AddressTableModel *model;
+
+    QString address;
+};
+
+#endif // EDITADDRESSDIALOG_H
diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui
new file mode 100644 (file)
index 0000000..127b909
--- /dev/null
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AboutDialog</class>
+ <widget class="QDialog" name="AboutDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>593</width>
+    <height>319</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>About Bitcoin</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <item>
+    <widget class="QLabel" name="label_4">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Ignored">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../bitcoin.qrc">:/images/about</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <spacer name="verticalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>&lt;b&gt;Bitcoin&lt;/b&gt; version</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="versionLabel">
+         <property name="text">
+          <string notr="true">0.3.666-beta</string>
+         </property>
+         <property name="textFormat">
+          <enum>Qt::RichText</enum>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</string>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Ok</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../bitcoin.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AboutDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>360</x>
+     <y>308</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AboutDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>428</x>
+     <y>308</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui
new file mode 100644 (file)
index 0000000..fb098c8
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AddressBookPage</class>
+ <widget class="QWidget" name="AddressBookPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>627</width>
+    <height>347</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Address Book</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="labelExplanation">
+     <property name="text">
+      <string>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</string>
+     </property>
+     <property name="textFormat">
+      <enum>Qt::AutoText</enum>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTableView" name="tableView">
+     <property name="toolTip">
+      <string>Double-click to edit address or label</string>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::SingleSelection</enum>
+     </property>
+     <property name="selectionBehavior">
+      <enum>QAbstractItemView::SelectRows</enum>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
+     </property>
+     <attribute name="verticalHeaderVisible">
+      <bool>false</bool>
+     </attribute>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="newAddressButton">
+       <property name="toolTip">
+        <string>Create a new address</string>
+       </property>
+       <property name="text">
+        <string>&amp;New Address...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/add</normaloff>:/icons/add</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="copyToClipboard">
+       <property name="toolTip">
+        <string>Copy the currently selected address to the system clipboard</string>
+       </property>
+       <property name="text">
+        <string>&amp;Copy to Clipboard</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/editcopy</normaloff>:/icons/editcopy</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="deleteButton">
+       <property name="toolTip">
+        <string>Delete the currently selected address from the list. Only sending addresses can be deleted.</string>
+       </property>
+       <property name="text">
+        <string>&amp;Delete</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Ok</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../bitcoin.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui
new file mode 100644 (file)
index 0000000..ff3a771
--- /dev/null
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AskPassphraseDialog</class>
+ <widget class="QDialog" name="AskPassphraseDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>598</width>
+    <height>198</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>550</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="warningLabel">
+     <property name="textFormat">
+      <enum>Qt::RichText</enum>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QFormLayout" name="formLayout">
+     <property name="fieldGrowthPolicy">
+      <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+     </property>
+     <item row="1" column="0">
+      <widget class="QLabel" name="passLabel1">
+       <property name="text">
+        <string>Enter passphrase</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="passEdit1">
+       <property name="echoMode">
+        <enum>QLineEdit::Password</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="passLabel2">
+       <property name="text">
+        <string>New passphrase</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLineEdit" name="passEdit2">
+       <property name="echoMode">
+        <enum>QLineEdit::Password</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QLabel" name="passLabel3">
+       <property name="text">
+        <string>Repeat new passphrase</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QLineEdit" name="passEdit3">
+       <property name="echoMode">
+        <enum>QLineEdit::Password</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <widget class="QLabel" name="capsLabel">
+       <property name="styleSheet">
+        <string notr="true">#capsLabel {
+       font: bold;
+}</string>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AskPassphraseDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AskPassphraseDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/qt/forms/editaddressdialog.ui b/src/qt/forms/editaddressdialog.ui
new file mode 100644 (file)
index 0000000..b4a4c1b
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EditAddressDialog</class>
+ <widget class="QDialog" name="EditAddressDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>457</width>
+    <height>126</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Edit Address</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QFormLayout" name="formLayout">
+     <property name="fieldGrowthPolicy">
+      <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+     </property>
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>&amp;Label</string>
+       </property>
+       <property name="buddy">
+        <cstring>labelEdit</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="labelEdit">
+       <property name="toolTip">
+        <string>The label associated with this address book entry</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>&amp;Address</string>
+       </property>
+       <property name="buddy">
+        <cstring>addressEdit</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="addressEdit">
+       <property name="toolTip">
+        <string>The address associated with this address book entry. This can only be modified for sending addresses.</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EditAddressDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EditAddressDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
new file mode 100644 (file)
index 0000000..10e470e
--- /dev/null
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OverviewPage</class>
+ <widget class="QWidget" name="OverviewPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>552</width>
+    <height>342</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <widget class="QFrame" name="frame">
+       <property name="frameShape">
+        <enum>QFrame::StyledPanel</enum>
+       </property>
+       <property name="frameShadow">
+        <enum>QFrame::Raised</enum>
+       </property>
+       <layout class="QFormLayout" name="formLayout_2">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+        </property>
+        <property name="horizontalSpacing">
+         <number>12</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>12</number>
+        </property>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label">
+          <property name="text">
+           <string>Balance:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QLabel" name="labelBalance">
+          <property name="text">
+           <string notr="true">0 BTC</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>Number of transactions:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="1">
+         <widget class="QLabel" name="labelNumTransactions">
+          <property name="text">
+           <string>0</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string>Unconfirmed:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1">
+         <widget class="QLabel" name="labelUnconfirmed">
+          <property name="text">
+           <string notr="true">0 BTC</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_5">
+          <property name="font">
+           <font>
+            <pointsize>11</pointsize>
+            <bold>true</bold>
+           </font>
+          </property>
+          <property name="text">
+           <string>Wallet</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout_3">
+     <item>
+      <widget class="QFrame" name="frame_2">
+       <property name="frameShape">
+        <enum>QFrame::StyledPanel</enum>
+       </property>
+       <property name="frameShadow">
+        <enum>QFrame::Raised</enum>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QLabel" name="label_4">
+          <property name="text">
+           <string>&lt;b&gt;Recent transactions&lt;/b&gt;</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QListView" name="listTransactions">
+          <property name="frameShape">
+           <enum>QFrame::NoFrame</enum>
+          </property>
+          <property name="verticalScrollBarPolicy">
+           <enum>Qt::ScrollBarAlwaysOff</enum>
+          </property>
+          <property name="horizontalScrollBarPolicy">
+           <enum>Qt::ScrollBarAlwaysOff</enum>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui
new file mode 100644 (file)
index 0000000..04cf404
--- /dev/null
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SendCoinsDialog</class>
+ <widget class="QDialog" name="SendCoinsDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>686</width>
+    <height>217</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Send Coins</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>666</width>
+        <height>165</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <property name="margin">
+        <number>0</number>
+       </property>
+       <item>
+        <layout class="QVBoxLayout" name="entries">
+         <property name="spacing">
+          <number>6</number>
+         </property>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="addButton">
+       <property name="toolTip">
+        <string>Send to multiple recipients at once</string>
+       </property>
+       <property name="text">
+        <string>&amp;Add recipient...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/add</normaloff>:/icons/add</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="clearButton">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Remove all transaction fields</string>
+       </property>
+       <property name="text">
+        <string>Clear all</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
+       </property>
+       <property name="autoRepeatDelay">
+        <number>300</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <property name="spacing">
+        <number>3</number>
+       </property>
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Balance:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelBalance">
+         <property name="text">
+          <string>123.456 BTC</string>
+         </property>
+         <property name="textInteractionFlags">
+          <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="sendButton">
+       <property name="minimumSize">
+        <size>
+         <width>150</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="toolTip">
+        <string>Confirm the send action</string>
+       </property>
+       <property name="text">
+        <string>&amp;Send</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/send</normaloff>:/icons/send</iconset>
+       </property>
+       <property name="default">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../bitcoin.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui
new file mode 100644 (file)
index 0000000..22a3f8f
--- /dev/null
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SendCoinsEntry</class>
+ <widget class="QFrame" name="SendCoinsEntry">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>729</width>
+    <height>136</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="frameShape">
+   <enum>QFrame::StyledPanel</enum>
+  </property>
+  <property name="frameShadow">
+   <enum>QFrame::Sunken</enum>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="spacing">
+    <number>12</number>
+   </property>
+   <item row="5" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>A&amp;mount:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy">
+      <cstring>payAmount</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Pay &amp;To:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy">
+      <cstring>payTo</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1">
+    <widget class="BitcoinAmountField" name="payAmount"/>
+   </item>
+   <item row="4" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QValidatedLineEdit" name="addAsLabel">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="toolTip">
+        <string>Enter a label for this address to add it to your address book</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>&amp;Label:</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+     <property name="buddy">
+      <cstring>addAsLabel</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <layout class="QHBoxLayout" name="payToLayout">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QValidatedLineEdit" name="payTo">
+       <property name="toolTip">
+        <string>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</string>
+       </property>
+       <property name="maxLength">
+        <number>34</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="addressBookButton">
+       <property name="toolTip">
+        <string>Choose address from address book</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/address-book</normaloff>:/icons/address-book</iconset>
+       </property>
+       <property name="shortcut">
+        <string>Alt+A</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="pasteButton">
+       <property name="toolTip">
+        <string>Paste address from clipboard</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/editpaste</normaloff>:/icons/editpaste</iconset>
+       </property>
+       <property name="shortcut">
+        <string>Alt+P</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="deleteButton">
+       <property name="toolTip">
+        <string>Remove this recipient</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="icon">
+        <iconset resource="../bitcoin.qrc">
+         <normaloff>:/icons/remove</normaloff>:/icons/remove</iconset>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>BitcoinAmountField</class>
+   <extends>QLineEdit</extends>
+   <header>bitcoinamountfield.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>QValidatedLineEdit</class>
+   <extends>QLineEdit</extends>
+   <header>qvalidatedlineedit.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="../bitcoin.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/qt/forms/transactiondescdialog.ui b/src/qt/forms/transactiondescdialog.ui
new file mode 100644 (file)
index 0000000..9a9f6db
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TransactionDescDialog</class>
+ <widget class="QDialog" name="TransactionDescDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Transaction details</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QTextEdit" name="detailText">
+     <property name="toolTip">
+      <string>This pane shows a detailed description of the transaction</string>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>TransactionDescDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>TransactionDescDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h
new file mode 100644 (file)
index 0000000..0cb5075
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef GUICONSTANTS_H
+#define GUICONSTANTS_H
+
+/* Milliseconds between model updates */
+static const int MODEL_UPDATE_DELAY = 500;
+
+/* Maximum  passphrase length */
+static const int MAX_PASSPHRASE_SIZE = 1024;
+
+/* Size of icons in status bar */
+static const int STATUSBAR_ICONSIZE = 16;
+
+/* Invalid field background style */
+#define STYLE_INVALID "background:#FF8080"
+
+/* Transaction list -- unconfirmed transaction */
+#define COLOR_UNCONFIRMED QColor(128, 128, 128)
+/* Transaction list -- negative amount */
+#define COLOR_NEGATIVE QColor(255, 0, 0)
+/* Transaction list -- bare address (without label) */
+#define COLOR_BAREADDRESS QColor(140, 140, 140)
+
+#endif // GUICONSTANTS_H
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp
new file mode 100644 (file)
index 0000000..f5e6e0a
--- /dev/null
@@ -0,0 +1,137 @@
+#include "guiutil.h"
+#include "bitcoinaddressvalidator.h"
+#include "walletmodel.h"
+#include "bitcoinunits.h"
+
+#include "headers.h"
+
+#include <QString>
+#include <QDateTime>
+#include <QDoubleValidator>
+#include <QFont>
+#include <QLineEdit>
+#include <QUrl>
+#include <QFileDialog>
+#include <QDesktopServices>
+
+QString GUIUtil::dateTimeStr(qint64 nTime)
+{
+    return dateTimeStr(QDateTime::fromTime_t((qint32)nTime));
+}
+
+QString GUIUtil::dateTimeStr(const QDateTime &date)
+{
+    return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm");
+}
+
+QFont GUIUtil::bitcoinAddressFont()
+{
+    QFont font("Monospace");
+    font.setStyleHint(QFont::TypeWriter);
+    return font;
+}
+
+void GUIUtil::setupAddressWidget(QLineEdit *widget, QWidget *parent)
+{
+    widget->setMaxLength(BitcoinAddressValidator::MaxAddressLength);
+    widget->setValidator(new BitcoinAddressValidator(parent));
+    widget->setFont(bitcoinAddressFont());
+}
+
+void GUIUtil::setupAmountWidget(QLineEdit *widget, QWidget *parent)
+{
+    QDoubleValidator *amountValidator = new QDoubleValidator(parent);
+    amountValidator->setDecimals(8);
+    amountValidator->setBottom(0.0);
+    widget->setValidator(amountValidator);
+    widget->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+}
+
+bool GUIUtil::parseBitcoinURI(const QUrl *uri, SendCoinsRecipient *out)
+{
+    if(uri->scheme() != QString("bitcoin"))
+        return false;
+
+    SendCoinsRecipient rv;
+    rv.address = uri->path();
+    rv.label = uri->queryItemValue("label");
+
+    QString amount = uri->queryItemValue("amount");
+    if(amount.isEmpty())
+    {
+        rv.amount = 0;
+    }
+    else // Amount is non-empty
+    {
+        if(!BitcoinUnits::parse(BitcoinUnits::BTC, amount, &rv.amount))
+        {
+            return false;
+        }
+    }
+    if(out)
+    {
+        *out = rv;
+    }
+    return true;
+}
+
+bool GUIUtil::parseBitcoinURI(QString uri, SendCoinsRecipient *out)
+{
+    // Convert bitcoin:// to bitcoin:
+    //
+    //    Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host,
+    //    which will lowercase it (and thus invalidate the address).
+    if(uri.startsWith("bitcoin://"))
+    {
+        uri.replace(0, 10, "bitcoin:");
+    }
+    QUrl uriInstance(uri);
+    return parseBitcoinURI(&uriInstance, out);
+}
+
+QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption,
+                                 const QString &dir,
+                                 const QString &filter,
+                                 QString *selectedSuffixOut)
+{
+    QString selectedFilter;
+    QString myDir;
+    if(dir.isEmpty()) // Default to user documents location
+    {
+        myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
+    }
+    else
+    {
+        myDir = dir;
+    }
+    QString result = QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter);
+
+    /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */
+    QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]");
+    QString selectedSuffix;
+    if(filter_re.exactMatch(selectedFilter))
+    {
+        selectedSuffix = filter_re.cap(1);
+    }
+
+    /* Add suffix if needed */
+    QFileInfo info(result);
+    if(!result.isEmpty())
+    {
+        if(info.suffix().isEmpty() && !selectedSuffix.isEmpty())
+        {
+            /* No suffix specified, add selected suffix */
+            if(!result.endsWith("."))
+                result.append(".");
+            result.append(selectedSuffix);
+        }
+    }
+
+    /* Return selected suffix if asked to */
+    if(selectedSuffixOut)
+    {
+        *selectedSuffixOut = selectedSuffix;
+    }
+    return result;
+}
+
diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h
new file mode 100644 (file)
index 0000000..7e2b006
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef GUIUTIL_H
+#define GUIUTIL_H
+
+#include <QString>
+
+QT_BEGIN_NAMESPACE
+class QFont;
+class QLineEdit;
+class QWidget;
+class QDateTime;
+class QUrl;
+QT_END_NAMESPACE
+class SendCoinsRecipient;
+
+/** Static utility functions used by the Bitcoin Qt UI.
+ */
+class GUIUtil
+{
+public:
+    // Create human-readable string from date
+    static QString dateTimeStr(qint64 nTime);
+    static QString dateTimeStr(const QDateTime &datetime);
+
+    // Render bitcoin addresses in monospace font
+    static QFont bitcoinAddressFont();
+
+    // Set up widgets for address and amounts
+    static void setupAddressWidget(QLineEdit *widget, QWidget *parent);
+    static void setupAmountWidget(QLineEdit *widget, QWidget *parent);
+
+    // Parse "bitcoin:" URI into recipient object, return true on succesful parsing
+    // See Bitcoin URI definition discussion here: https://bitcointalk.org/index.php?topic=33490.0
+    static bool parseBitcoinURI(const QUrl *, SendCoinsRecipient *out);
+    static bool parseBitcoinURI(QString uri, SendCoinsRecipient *out);
+
+    /** Get save file name, mimics QFileDialog::getSaveFileName, except that it appends a default suffix
+        when no suffix is provided by the user.
+
+      @param[in] parent  Parent window (or 0)
+      @param[in] caption Window caption (or empty, for default)
+      @param[in] dir     Starting directory (or empty, to default to documents directory)
+      @param[in] filter  Filter specification such as "Comma Separated Files (*.csv)"
+      @param[out] selectedSuffixOut  Pointer to return the suffix (file type) that was selected (or 0).
+                  Can be useful when choosing the save file format based on suffix.
+     */
+    static QString getSaveFileName(QWidget *parent=0, const QString &caption=QString(),
+                                   const QString &dir=QString(), const QString &filter=QString(),
+                                   QString *selectedSuffixOut=0);
+
+};
+
+#endif // GUIUTIL_H
diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts
new file mode 100644 (file)
index 0000000..81e864e
--- /dev/null
@@ -0,0 +1,1813 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="da">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Om Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; version</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Developers
+
+Dette program er ekperimentielt.
+
+Det er gjort tilgængeligt under MIT/X11 softwarelicensen. Se den tilhørende fil &quot;license.txt&quot; eller http://www.opensource.org/licenses/mit-license.php.
+
+Produktet indeholder software som er udviklet af OpenSSL Project til brug i OpenSSL Toolkit (http://www.openssl.org/), kryptografisk software skrevet af Eric Young (eay@cryptsoft.com) og UPnP-software skrevet by Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Adressebog</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Dette er dine Bitcoinadresser til at modtage betalinger med.  Du kan give en forskellig adresse til hver afsender, så du kan holde styr på hvem der betaler dig.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Dobbeltklik for at redigere adresse eller mærkat</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Opret en ny adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Ny adresse ...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Kopier den valgte adresse til systemets udklipsholder</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Kopier til Udklipsholder</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Slet den valgte adresse fra listen. Kun adresser brugt til afsendelse kan slettes.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Slet</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Eksporter Adressekartoteketsdata</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommasepareret fil (*. csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Fejl under eksport</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kunne ikke skrive til filen %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Etiket</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(ingen etiket)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>TekstEtiket</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Indtast adgangskode</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Ny adgangskode</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Gentag ny adgangskode</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Indtast den nye adgangskode til tegnebogen.&lt;br/&gt;Brug venligst en adgangskode på &lt;b&gt;10 eller flere tilfældige tegn&lt;/b&gt;, eller &lt;b&gt;otte eller flere ord&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Krypter tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Denne funktion har brug for din tegnebogs kodeord for at låse tegnebogen op.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Lås tegnebog op</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Denne funktion har brug for din tegnebogs kodeord for at dekryptere tegnebogen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Dekryptér tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Skift adgangskode</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Indtast den gamle og nye adgangskode til tegnebogen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Bekræft tegnebogskryptering</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ADVARSEL: Hvis du krypterer din tegnebog og mister dit kodeord vil du &lt;b&gt;miste alle dine BITCOINS&lt;/b&gt;!
+Er du sikker på at du ønsker at kryptere din tegnebog?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Tegnebog krypteret</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Tegnebogskryptering mislykkedes</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Tegnebogskryptering mislykkedes på grund af en intern fejl. Din tegnebog blev ikke krypteret.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation type="unfinished">Bitcoin will close now to finish the encryption process. Husk, at kryptere din tegnebog vil ikke fuldt ud beskytte dine bitcoins mod at blive stjålet af malware på din computer.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>De angivne kodeord stemmer ikke overens.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Tegnebogsoplåsning mislykkedes</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Det angivne kodeord for tegnebogsdekrypteringen er forkert.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Tegnebogsdekryptering mislykkedes</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Tegnebogskodeord blev ændret.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin Tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Synkroniserer med netværk ...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Blokkæde synkronisering i gang</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Oversigt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Vis generel oversigt over tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transaktioner</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Gennemse transaktionshistorik</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Adressebog</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Rediger listen over gemte adresser og etiketter</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Modtag coins</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Vis listen over adresser for at modtage betalinger</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Send coins</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Send coins til en bitcoinadresse</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Luk</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Afslut program</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;Om %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Vis oplysninger om Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Indstillinger ...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Rediger konfigurationsindstillinger af bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Åbn &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Vis Bitcoinvinduet</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Eksporter...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Eksportér den aktuelle visning til en fil</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Kryptér tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Kryptér eller dekryptér tegnebog</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Skift adgangskode</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Skift kodeord anvendt til tegnebogskryptering</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Om &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Vis oplysninger om Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Fil</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Indstillinger</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Hjælp</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Faneværktøjslinje</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Handlingsværktøjslinje</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n aktiv(e) forbindelse(r) til Bitcoinnetværket</numerusform>
+            <numerusform>%n aktiv(e) forbindelse(r) til Bitcoinnetværket</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Downloadet %1 af %2 blokke af transaktionshistorie.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Downloadet %1 blokke af transaktionshistorie.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n sekund(er) siden</numerusform>
+            <numerusform>%n sekund(er) siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n minut(ter) siden</numerusform>
+            <numerusform>%n minut(ter) siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n time(r) siden</numerusform>
+            <numerusform>%n time(r) siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n dag(e) siden</numerusform>
+            <numerusform>%n dag(e) siden</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Opdateret</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Indhenter...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Sidst modtagne blok blev genereret %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Denne transaktion er over størrelsesbegrænsningen.  Du kan stadig sende den for et gebyr på %1 som går til de noder der behandler din transaktion, og som hjælper med at støtte netværket.  Ønsker du at betale gebyret?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Sender...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Afsendt transaktion</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Indgående transaktion</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Dato: %1
+Beløb: %2
+Type: %3
+Adresse: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Tegnebog er &lt;b&gt;krypteret&lt;/b&gt; og i øjeblikket &lt;b&gt;ulåst&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Tegnebog er &lt;b&gt;krypteret&lt;/b&gt; og i øjeblikket &lt;b&gt;låst&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Enhed at vise beløb i: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Vælg den standard underopdelingsenhed som skal vises i brugergrænsefladen, og når du sender coins</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Vis adresser i transaktionensliste</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Rediger Adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Etiket</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Etiketten forbundet med denne post i adressekartoteket</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Adressen tilknyttet til denne post i adressekartoteket. Dette kan kun ændres for afsendelsesadresser.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Ny modtagelsesadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Ny afsendelsesadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Rediger modtagelsesadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Rediger afsendelsesadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Den indtastede adresse &quot;%1&quot; er allerede i adressebogen.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>Den indtastede adresse &quot;%1&quot; er ikke en gyldig bitcoinadresse.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Kunne ikke låse tegnebog op.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Ny nøglegenerering mislykkedes.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Start Bitcoin når systemet startes</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Start Bitcoin automatisk efter at computeren er tændt</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimer til systembakken i stedet for proceslinjen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Vis kun et systembakkeikon efter minimering af vinduet</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Konfigurer port vha. &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Åbn Bitcoinklient-porten på routeren automatisk. Dette virker kun når din router understøtter UPnP og UPnP er aktiveret.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimer ved lukning</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimer i stedet for at afslutte programmet når vinduet lukkes. Når denne indstilling er valgt vil programmet kun blive lukket når du har valgt Afslut i menuen.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Forbind gennem SOCKS4 proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Opret forbindelse til Bitconnetværket via en SOCKS4 proxy (f.eks. ved tilslutning gennem Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Proxy-&amp;IP:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-adressen på proxyen (f.eks. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Port:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Porten på proxyen (f.eks. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Valgfri transaktionsgebyr pr. kB, der hjælper dine transaktioner med at blive behandlet hurtigt.  De fleste transaktioner er på 1 kB.  Gebyr på 0.01 anbefales.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Betal transaktions&amp;gebyr</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Valgfri transaktionsgebyr pr. kB, der hjælper dine transaktioner med at blive behandlet hurtigt. De fleste transaktioner er på 1 kB. Gebyr på 0.01 anbefales.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Generelt</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Visning</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Indstillinger</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formular</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Antal transaktioner:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Ubekræftede:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Nyeste transaktioner&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Din nuværende saldo</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Summen af \200b\200btransaktioner, der endnu ikke er bekræftet, og endnu ikke er inkluderet i den nuværende saldo</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Samlede antal transaktioner i tegnebogen</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Send Coins</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Send til flere modtagere på én gang</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Tilføj modtager...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Ryd alle</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Bekræft afsendelsen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Afsend</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; til %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Bekræft afsendelse af coins</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Er du sikker på at du vil sende %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> og </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Modtagerens adresse er ikke gyldig. Tjek venligst adressen igen.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Beløbet til betaling skal være større end 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Beløbet overstiger din saldo</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Totalen overstiger din saldo når %1 transaktionsgebyr er inkluderet</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Duplikeret adresse fundet. Du kan kun sende til hver adresse en gang pr. afsendelse.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Fejl: Oprettelse af transaktionen mislykkedes  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Fejl: Transaktionen blev afvist. Dette kan ske hvis nogle af dine coins i din tegnebog allerede var brugt, som hvis du brugte en kopi af wallet.dat og dine coins er blevet brugt i kopien, men ikke er markeret som brugt her.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formular</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>B&amp;eløb:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Betal &amp;Til:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Indtast en etiket for denne adresse for at føje den til din adressebog</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Etiket:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Adresse som betalingen skal sendes til  (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Vælg adresse fra adressebog</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Indsæt adresse fra udklipsholderen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Fjern denne modtager</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Indtast en Bitcoinadresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Åben for %1 blokke</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Åben indtil %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/offline?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/ubekræftet</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 bekræftelser</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Status:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, er ikke blevet transmitteret endnu</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, transmitteret via %1 node</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, transmitteret via %1 noder</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Dato:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Kilde:&lt;/b&gt; Genereret&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Fra:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>ukendt</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Til:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (din, etiket:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (din)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Kredit:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 modnes i %2 blokke mere)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(ikke accepteret)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Debet:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Transaktionsgebyr:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Nettobeløb:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Besked:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Kommentar:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Genererede coins skal vente 120 blokke, før de kan blive brugt.  Da du  genererede denne blok blev det transmitteret til netværket, for at blive føjet til blokkæden.  Hvis det mislykkes at komme ind i kæden, vil den skifte til &quot;ikke godkendt&quot;, og ikke blive kunne bruges.  Dette kan lejlighedsvis ske, hvis en anden node genererer en blok inden for få sekunder af din.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Transaktionsdetaljer</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Denne rude viser en detaljeret beskrivelse af transaktionen</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Dato</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Beløb</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Åben for %n blok(ke)</numerusform>
+            <numerusform>Åben for %n blok(ke)</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Åben indtil %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Offline (%1 bekræftelser)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Ubekræftet (%1 af %2 bekræftelser)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Bekræftet (%1 bekræftelser)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Minerede balance vil være tilgængelig om %n blok(ke)</numerusform>
+            <numerusform>Minerede balance vil være tilgængelig om %n blok(ke)</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Denne blok blev ikke modtaget af nogen andre noder, og vil formentlig ikke blive accepteret!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Genereret, men ikke accepteret</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Modtaget med</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Modtaget fra</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Sendt til</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Betaling til dig selv</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Minerede</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(n/a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Transactionsstatus. Hold musen over dette felt for at vise antallet af bekræftelser.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Dato og tid for at transaktionen blev modtaget.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Type af transaktion.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Destinationsadresse for transaktion.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Beløb fjernet eller tilføjet balance.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Alle</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>I dag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Denne uge</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Denne måned</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Sidste måned</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Dette år</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Interval...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Modtaget med</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Sendt til</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Til dig selv</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Minerede</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Andet</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Indtast adresse eller etiket for at søge</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Min. beløb</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Kopier adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Kopier etiket</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Rediger etiket</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Vis detaljer...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Eksportér Transaktionsdata</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommasepareret fil (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Bekræftet</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Dato</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Etiket</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Beløb</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Fejl under eksport</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kunne ikke skrive til filen %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Interval:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>til</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Sender...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoinversion</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Anvendelse:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Send kommando til -server eller bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Liste over kommandoer
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Få hjælp til en kommando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Indstillinger:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Angiv konfigurationsfil (standard: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Angiv pid-fil (default: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Generér coins
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Generér ikke coins
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Start minimeret
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Angiv databibliotek
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Angiv tilslutningstimeout (i millisekunder)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Tilslut via SOCKS4 proxy
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Tillad DNS-opslag for addnode og connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Tilføj en node til at forbinde til
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Tilslut kun til den angivne node
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Acceptér  ikke forbindelser udefra
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Forsøg ikke at bruge UPnP til at konfigurere den lyttende port</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Forsøg at bruge UPnP til at kofnigurere den lyttende port</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Gebyr pr. kB, som skal tilføjes til transaktioner du sender
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Accepter kommandolinje- og JSON-RPC-kommandoer
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Kør i baggrunden som en service, og acceptér kommandoer
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Brug test-netværket
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Brugernavn til JSON-RPC-forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Password til JSON-RPC-forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Lyt til JSON-RPC-forbindelser på &lt;port&gt; (standard: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Tillad JSON-RPC-forbindelser fra bestemt IP-adresse
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Send kommandoer til node, der kører på &lt;ip&gt; (standard: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Sæt nøglepoolstørrelse til &lt;n&gt; (standard: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Gennemsøg blokkæden for manglende tegnebogstransaktioner
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL-indstillinger: (se Bitcoin Wiki for SSL opsætningsinstruktioner)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Brug OpenSSL (https) for JSON-RPC-forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Servercertifikat-fil (standard: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Server private nøgle (standard: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Acceptabele ciphers (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Denne hjælpebesked
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Kan låse data-biblioteket %s.  Bitcoin kører sikkert allerede.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Indlæser adresser...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Fejl ved indlæsning af addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Indlæser blok-indeks...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Fejl ved indlæsning af blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Indlæser tegnebog...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Fejl ved indlæsning af wallet.dat: Tegnebog ødelagt      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Fejl ved indlæsning af wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Genindlæser...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Indlæsning gennemført</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Ugyldig -proxy adresse</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Ugyldigt beløb for -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Advarsel:-paytxfee er sat meget højt.  Dette er det gebyr du vil betale, hvis du sender en transaktion.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Fejl: CreateThread(StartNode) mislykkedes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Advarsel: Diskplads er lav  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Kunne ikke binde sig til port %d på denne computer. Bitcoin kører sikkert allerede.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Advarsel: Undersøg venligst at din computers dato og klokkeslet er korrekt indstillet.   Hvis der er fejl i disse vil Bitcoin ikke fungere korrekt.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts
new file mode 100644 (file)
index 0000000..01b108f
--- /dev/null
@@ -0,0 +1,1795 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Über Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; Version</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Entwickler
+
+Dies ist experimentelle Software.
+
+Veröffentlicht unter der MIT/X11 Software-Lizenz, siehe beiligende Datei license.txt oder http://www.opensource.org/licenses/mit-license.php.
+
+Dieses Produkt enthält Software, die vom OpenSSL Projekt zur Verwendung im OpenSSL Toolkit (http://www.openssl.org/) entwickelt wurde, sowie kryptographische Software geschrieben von Eric Young (eay@cryptsoft.com) und UPnP Software geschrieben von Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Adressbuch</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Dies sind Ihre Bitcoin-Adressen zum Empfangen von Zahlungen. Es steht Ihnen frei, jedem Absender eine andere mitzuteilen, um einen besseren Überblick über eingehende Zahlungen zu erhalten.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Doppelklicken, um die Adresse oder die Bezeichnung zu bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Eine neue Adresse erstellen</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Neue Adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Ausgewählte Adresse in die Zwischenablage kopieren</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>In die Zwischenablage &amp;kopieren</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Die ausgewählte Adresse aus der Liste entfernen. Sie können nur Zahlungsadressen entfernen.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Löschen</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Adressbuch exportieren</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommagetrennte Datei (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Fehler beim Exportieren</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Konnte nicht in Datei %1 schreiben.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Bezeichnung</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(keine Bezeichnung)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Textbezeichnung</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Passphrase eingeben</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Neue Passphrase</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Neue Passphrase wiederholen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Geben Sie die neue Passphrase für die Brieftasche ein.&lt;br&gt;Bitte benutzen Sie eine Passphrase bestehend aus &lt;b&gt;10 oder mehr zufälligen Zeichen&lt;/b&gt; oder &lt;b&gt;8 oder mehr Wörtern&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Brieftasche verschlüsseln</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Dieser Vorgang benötigt Ihre Passphrase um die Brieftasche zu entsperren.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Brieftasche entsperren</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Dieser Vorgang benötigt Ihre Passphrase um die Brieftasche zu entschlüsseln.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Brieftasche entschlüsseln</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Passphrase ändern</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Geben Sie die alte und die neue Passphrase der Brieftasche ein.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Verschlüsselung der Brieftasche bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>WARNUNG: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie &lt;b&gt;ALLE IHRE BITCOINS VERLIEREN&lt;/b&gt;!&lt;br&gt;&lt;br&gt;Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Brieftasche verschlüsselt</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Warnung: Die Feststelltaste ist aktiviert.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Verschlüsselung der Brieftasche fehlgeschlagen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Die Verschlüsselung der Brieftasche ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Bitcoin wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Verschlüsselung Ihrer Brieftasche nicht vollständig vor Diebstahl Ihrer Bitcoins durch Schadsoftware schützt, die Ihren Computer befällt.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Die eingegebenen Passphrasen stimmen nicht überein.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Entsperrung der Brieftasche fehlgeschlagen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Die eingegebene Passphrase zum Entschlüsseln der Brieftasche war nicht korrekt.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Entschlüsselung der Brieftasche fehlgeschlagen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Die Passphrase der Brieftasche wurde erfolgreich geändert.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin-Brieftasche</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Synchronisiere mit Netzwerk...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Synchronisation der Blockkette wird durchgeführt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Übersicht</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Allgemeine Übersicht der Brieftasche anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transaktionen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Transaktionsverlauf durchsehen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Adressbuch</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Liste der gespeicherten Zahlungsadressen und Bezeichnungen bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>Bitcoins &amp;empfangen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Liste der Empfangsadressen anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>Bitcoins &amp;überweisen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Bitcoins an eine Bitcoin-Adresse überweisen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Beenden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Anwendung beenden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;Über %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Informationen über Bitcoin anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Erweiterte Einstellungen...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Erweiterte Bitcoin-Einstellungen ändern</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>&amp;Bitcoin öffnen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Bitcoin-Fenster anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exportieren nach...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Aktuelle Ansicht in eine Datei exportieren</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>Brieftasche &amp;verschlüsseln...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Brieftasche ent- oder verschlüsseln</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>Passphrase &amp;ändern...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Ändert die Passphrase, die für die Verschlüsselung der Brieftasche benutzt wird</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Über &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Informationen über Qt anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Datei</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Einstellungen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Hilfe</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Registerkarten-Leiste</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Aktionen-Werkzeugleiste</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n aktive Verbindung zum Bitcoin-Netzwerk</numerusform>
+            <numerusform>%n aktive Verbindungen zum Bitcoin-Netzwerk</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>%1 von %2 Blöcken des Transaktionsverlaufs heruntergeladen.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>%1 Blöcke des Transaktionsverlaufs heruntergeladen.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>vor %n Sekunde</numerusform>
+            <numerusform>vor %n Sekunden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>vor %n Minute</numerusform>
+            <numerusform>vor %n Minuten</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>vor %n Stunde</numerusform>
+            <numerusform>vor %n Stunden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>vor %n Tag</numerusform>
+            <numerusform>vor %n Tagen</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Auf aktuellem Stand</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Hole auf...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Der letzte empfangene Block wurde %1 generiert.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Die Transaktion übersteigt das Größenlimit. Sie können sie trotzdem senden, wenn Sie eine zusätzliche Transaktionsgebühr in Höhe von %1 zahlen. Diese wird an die Knoten verteilt, die Ihre Transaktion bearbeiten und unterstützt damit das Bitcoin-Netzwerk.&lt;br&gt;&lt;br&gt;Möchten Sie die Gebühr bezahlen?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Transaktionsgebühr bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Gesendete Transaktion</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Eingehende Transaktion</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Datum: %1
+Betrag: %2
+Typ: %3
+Adresse: %4</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Brieftasche ist &lt;b&gt;verschlüsselt&lt;/b&gt; und aktuell &lt;b&gt;entsperrt&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Brieftasche ist &lt;b&gt;verschlüsselt&lt;/b&gt; und aktuell &lt;b&gt;gesperrt&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Einheit der Beträge:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Wählen Sie die Standard-Untereinheit, die in der Benutzeroberfläche und beim Überweisen von Bitcoins angezeigt werden soll</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Adressen in der Transaktionsliste anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Adresse bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Bezeichnung</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Die Bezeichnung dieses Adressbuchseintrags</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Die Adresse des Adressbucheintrags. Diese kann nur für Zahlungsadressen bearbeitet werden.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Neue Empfangsadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Neue Zahlungsadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Empfangsadresse bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Zahlungsadresse bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Die eingegebene Adresse &quot;%1&quot; befindet sich bereits im Adressbuch.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>Die eingegebene Adresse &quot;%1&quot; ist keine gültige Bitcoin-Adresse.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Die Brieftasche konnte nicht entsperrt werden.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Generierung eines neuen Schlüssels fehlgeschlagen.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>Bitcoin beim &amp;Systemstart ausführen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Bitcoin automatisch ausführen, wenn der Computer eingeschaltet wird</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>In den Infobereich anstatt in die Taskleiste &amp;minimieren</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Nur ein Symbol im Infobereich anzeigen, nachdem das Fenster minimiert wurde</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Portweiterleitung via &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Automatisch den Bitcoin Client-Port auf dem Router öffnen. Dies funktioniert nur, wenn Ihr Router UPnP unterstützt und dies aktiviert ist.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>Beim Schließen &amp;minimieren</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimiert die Anwendung anstatt sie zu Beenden, wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie das Programm über &quot;Beenden&quot; im Menü schließen.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>Über einen SOCKS4-Proxy &amp;verbinden:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Über einen SOCKS4-Proxy zum Bitcoin-Netzwerk verbinden (z.B. bei einer Verbindung über Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Proxy-&amp;IP:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-Adresse des Proxy-Servers (z.B. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Port:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Port des Proxy-Servers (z.B. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Optionale Transaktionsgebühr pro kB, die sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. Eine Gebühr von 0.01 wird empfohlen.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Transaktions&amp;gebühr bezahlen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Optionale Transaktionsgebühr pro kB, die sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. Eine Gebühr von 0.01 wird empfohlen.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Allgemein</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Anzeige</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Erweiterte Einstellungen</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formular</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Kontostand:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Anzahl der Transaktionen:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Unbestätigt:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Brieftasche</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Letzte Transaktionen&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Ihr aktueller Kontostand</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Betrag aus unbestätigten Transaktionen, der noch nicht im aktuellen Kontostand enthalten ist</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Anzahl aller Transaktionen in der Brieftasche</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Bitcoins überweisen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>In einer Transaktion an mehrere Empfänger auf einmal überweisen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Empfänger hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Zurücksetzen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Alle Überweisungsfelder zurücksetzen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Kontostand:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Überweisung bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Überweisen</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; an %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Überweisung bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Sind Sie sich sicher, dass Sie die folgende Überweisung ausführen möchten?&lt;br&gt;%1</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> und </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Der zu zahlende Betrag muss größer 0 sein.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Der angegebene Betrag übersteigt Ihren Kontostand.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Doppelte Adresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Fehler: Transaktionserstellung fehlgeschlagen</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Fehler: Die Transaktion wurde abgelehnt. Dies kann passieren, wenn einige Bitcoins aus Ihrer Brieftasche bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie Ihrer wallet.dat genutzt, die Bitcoins dort ausgegeben haben und dies daher in der derzeit aktiven Brieftasche nicht vermerkt ist.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formular</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>&amp;Betrag:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>&amp;Empfänger:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Adressbezeichnung eingeben (diese wird bei unbekannten Adressen inkl. der Adresse dem Adressbuch hinzugefügt)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Bezeichnung:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Die Zahlungsadresse der Überweisung (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Adresse aus Adressbuch wählen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Adresse aus der Zwischenablage einfügen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Diesen Empfänger entfernen</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Bitcoin-Adresse eingeben (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Offen für %1 Blöcke</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Offen bis %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/offline?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/unbestätigt</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 Bestätigungen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Status:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, wurde noch nicht erfolgreich übertragen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, über %1 Knoten übertragen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, über %1 Knoten übertragen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Datum:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Quelle:&lt;/b&gt; Generiert&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Von:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>unbekannt</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;An:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (Eigene Adresse, Bezeichnung: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (Eigene Adresse)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Gutschrift:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>%1 (reift noch %2 weitere Blöcke)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(nicht angenommen)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Belastung:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Transaktionsgebühr:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Nettobetrag:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Nachricht:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Kommentar:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Generierte Bitcoins müssen 120 Blöcke lang warten, bevor sie ausgegeben werden können. Als Sie diesen Block generierten, wurde er an das Netzwerk übertragen, um ihn der Blockkette hinzuzufügen. Falls dies fehlschlägt wird der Status in &quot;nicht angenommen&quot; geändert und der Betrag wird nicht verfügbar werden. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block zur selben Zeit wie Sie generierte.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Transaktionsdetails</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Datum</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Betrag</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Offen für %n Block</numerusform>
+            <numerusform>Offen für %n Blöcke</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Offen bis %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Nicht verbunden (%1 Bestätigungen)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Unbestätigt (%1 von %2 Bestätigungen)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Bestätigt (%1 Bestätigungen)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Der erarbeitete Betrag wird in %n Block verfügbar sein</numerusform>
+            <numerusform>Der erarbeitete Betrag wird in %n Blöcken verfügbar sein</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Dieser Block wurde von keinem anderen Knoten empfangen und wird wahrscheinlich nicht angenommen werden!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generiert, jedoch nicht angenommen</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Empfangen über</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Empfangen von</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Überwiesen an</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Eigenüberweisung</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Erarbeitet</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(k.A.)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Datum und Uhrzeit als die Transaktion empfangen wurde.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Art der Transaktion</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Zieladresse der Transaktion.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Alle</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Heute</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Diese Woche</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Diesen Monat</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Letzten Monat</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Dieses Jahr</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Zeitraum</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Empfangen über</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Überwiesen an</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Eigenüberweisung</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Erarbeitet</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Andere</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Zu suchende Adresse oder Bezeichnung eingeben</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Minimaler Betrag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Adresse kopieren</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Bezeichnung kopieren</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Bezeichnung bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Transaktionsdetails anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Transaktionen exportieren</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommagetrennte Datei (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Bestätigt</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Datum</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Bezeichnung</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Betrag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Fehler beim Exportieren</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Konnte nicht in Datei %1 schreiben.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Zeitraum:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>bis</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Überweise...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoin Version</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Verwendung:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Sende Befehl an -server oder bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Befehle auflisten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Hilfe für Befehl erhalten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Einstellungen:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Bitte wählen Sie eine Konfigurationsdatei (Standard: bitcoin.conf)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Bitte wählen Sie den Namen der PID Datei (Standard bitcoind.pid)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Erarbeite Bitcoins</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Keine Bitcoins erarbeiten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>minimiert starten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Bitte wählen Sie das Datenverzeichnis</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Netzwerkverbindungsabbruch nach (in Millisekunden)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Durch SOCKS4-Proxy verbinden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Erlaube DNS Namensauflösung für addnode und connect</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Bitcoin Knoten hinzufügen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Nur zu angegebenen Knoten verbinden
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Keine externen Transatkionen akzeptieren</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>UPnP nicht verwenden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Versuche eine Verbindung mittels UPnP herzustellen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Gebühr pro kB, die gesendeten Transaktionen hinzugefügt wird
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Erlaube Kommandozeilen und JSON-RPC Befehle
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Als Hintergrunddienst starten und Befehle akzeptieren
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Das Test Netzwerk verwenden
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Benutzername für JSON-RPC Verbindungen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Passwort für JSON-RPC Verbindungen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Port für JSON-RPC Befehle (Standard: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>JSON-RPC Befehle nur von dieser IP-Adresse erlauben
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Befehle an Bitcoin Knoten &lt;ip&gt; senden (Standard: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Menge der vorgenerierten Adressen (Standard: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Blockkette nach verlorenen Transaktionen durchsuchen (rescan)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>SSL Einstellungen: (Siehe im BitCoin-Wiki für eine detallierte Beschreibung)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>JSON-RPC Befehle über OpenSSL (https)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>SSL Server Zertifikat (Standard: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Privater SSL Schlüssel (Standard: server.pem)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Erlaubte Kryptographiealgorithmen (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Dieser Hilfetext</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Konnte das Datenverzeichnis %s nicht sperren. Evtl. wurde Bitcoin bereits gestartet.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Lade Adressen...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Fehler beim Laden der addr.dat
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Lade Blockindex...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Fehler beim laden der blkindex.dat</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Lade Geldbörse...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Fehler beim Laden von wallet.dat: Brieftasche beschädigt
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Fehler beim Laden von wallet.dat: Neuere Version von Bitcoin notwendig 
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Fehler beim Laden von wallet.dat</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Durchsuche erneut...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Laden abgeschlossen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Fehlerhafte Proxy-Adresse</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Ungültige Angabe für -paytxfee=&lt;Betrag&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Warnung: -paytxfee ist auf einen sehr hohen Wert gesetzt. Dies ist die Gebühr die beim Senden einer Transaktion fällig wird.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Fehler: CreateThread(StartNode) fehlgeschlagen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Warnung: Festplattenplatz wird knapp</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Fehler beim registrieren des Ports %d auf diesem Computer. Evtl. wurde Bitcoin bereits gestartet.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen Ihres Computers, da Bitcoin ansonsten nicht ordnungsgemäß funktionieren wird.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>Beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts
new file mode 100644 (file)
index 0000000..31ea0e5
--- /dev/null
@@ -0,0 +1,1764 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n active connection to Bitcoin network</numerusform>
+            <numerusform>%n active connections to Bitcoin network</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n second ago</numerusform>
+            <numerusform>%n seconds ago</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n minute ago</numerusform>
+            <numerusform>%n minutes ago</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n hour ago</numerusform>
+            <numerusform>%n hours ago</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n day ago</numerusform>
+            <numerusform>%n days ago</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Open for %n block</numerusform>
+            <numerusform>Open for %n blocks</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Mined balance will be available in %n more block</numerusform>
+            <numerusform>Mined balance will be available in %n more blocks</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts
new file mode 100644 (file)
index 0000000..826a28c
--- /dev/null
@@ -0,0 +1,1818 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Sobre Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; - versión </translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Developers
+
+Este es un software experimental.
+
+Distribuido bajo la licencia MIT/X11, vea el archivo adjunto
+license.txt o http://www.opensource.org/licenses/mit-license.php.
+
+Este producto incluye software desarrollado por OpenSSL Project para su uso en
+el OpenSSL Toolkit (http://www.openssl.org) y software criptográfico escrito por
+Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Guia de direcciones</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Estas son tus direcciones Bitcoin para recibir pagos. Puedes utilizar una diferente por cada persona emisora para saber quien te está pagando.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Haz doble click para editar una dirección o etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Crea una nueva dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Nueva Dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Copia la dirección seleccionada al portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Copiar al portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Borra la dirección seleccionada de la lista. Solo las direcciónes de envio se pueden borrar.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>Bo&amp;rrar</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Exporta datos de la Guia de direcciones</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Archivos separados por coma (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Exportar errores</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>No se pudo escribir al archivo %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(sin etiqueta)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Cambiar contraseña</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Cambiar contraseña:</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Introduce contraseña actual      </translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Nueva contraseña</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Repite nueva contraseña:</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Introduce la nueva contraseña de cartera.&lt;br/&gt;Por favor utiliza un contraseña &lt;b&gt;de 10 o mas caracteres aleatorios&lt;/b&gt;, u &lt;b&gt;ocho o mas palabras&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Encriptar cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Esta operación necesita la contraseña para desbloquear la cartera.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Desbloquea cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Esta operación necesita la contraseña para decriptar la cartera.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Decriptar cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Cambia contraseña</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Introduce la contraseña anterior y la nueva de cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Confirma la encriptación de cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ATENCION: ¡Si encriptas tu cartera y pierdes la contraseña perderas &lt;b&gt;TODOS TUS BITCOINS&lt;/b&gt;!&quot;
+¿Seguro que quieres seguir encriptando la cartera?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Cartera encriptada</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Encriptación de cartera fallida</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Encriptación de cartera fallida debido a un error interno. Tu cartera no ha sido encriptada.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation type="unfinished">Bitcoin se cerrará para finalizar el proceso de encriptación. Recuerda que encriptando tu cartera no garantiza mantener a salvo tus bitcoins en caso de tener viruses en el ordenador.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Las contraseñas no coinciden.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Desbloqueo de cartera fallido</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>La contraseña introducida para decriptar la cartera es incorrecta.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Decriptación de cartera fallida</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>La contraseña de cartera ha sido cambiada con exit.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Cartera Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Sincronizando con la red...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Sincronización cadena de bloques en progreso</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Vista general</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Muestra una vista general de cartera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Visiona el historial de transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Guia de direcciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Edita la lista de las direcciónes y etiquetas almacenada</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Recibe monedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Muestra la lista de direcciónes utilizadas para recibir pagos</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Envia monedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Envia monedas a una dirección bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Salir</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Salir de la aplicación</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>S&amp;obre %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Muestra información sobre Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opciones</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Modifica opciones de configuración</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Abre &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Muestra la ventana de Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exporta...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Exporta la vista actual a un archivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Encriptar cartera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Encriptar o decriptar cartera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Cambiar la contraseña</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Cambiar la contraseña utilizada para la encriptación de cartera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Muestra información sobre Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Archivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Configuración</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Ayuda</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Barra de pestañas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Barra de acciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n conexión activa hacia la red Bitcoin</numerusform>
+            <numerusform>%n conexiones activas hacia la red Bitcoin</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Se han bajado  %1 de %2 bloques de historial.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Se han bajado %1 bloques de historial.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>Hace %n segundo</numerusform>
+            <numerusform>Hace %n segundos</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>Hace %n minuto</numerusform>
+            <numerusform>Hace %n minutos</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>Hace %n hora</numerusform>
+            <numerusform>Hace %n horas</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>Hace %n día</numerusform>
+            <numerusform>Hace %n días</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Actualizado</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Recuperando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>El ultimo bloque recibido fue generado %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Enviando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Transacción enviada</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Transacción entrante</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Fecha: %1
+Cantidad: %2
+Tipo: %3
+Dirección: %4</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>La cartera esta &lt;b&gt;encriptada&lt;/b&gt; y actualmente &lt;b&gt;desbloqueda&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>La cartera esta &lt;b&gt;encriptada&lt;/b&gt; y actualmente &lt;b&gt;bloqueda&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Unidad en la que mostrar cantitades: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Elige la subdivisión por defecto para mostrar cantidaded en la interfaz cuando se envien monedas</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Muestra direcciones en el listado de movimientos</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Editar Dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>La etiqueta asociada con esta entrada de la guia</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>La dirección asociada con esta entrada en la guia. Solo puede ser modificada para direcciónes de envío.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Nueva dirección para recibir</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Nueva dirección para enviar</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Editar dirección de recepción</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Editar dirección de envio</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>La dirección introducia &quot;%1&quot; ya esta guardada en la guia.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>La dirección introducida &quot;%1&quot; no es una dirección Bitcoin valida.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>No se pudo desbloquear la cartera.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>La generación de nueva clave fallida.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Arranca Bitcoin al iniciar el sistema</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Arranca Bitcoin cuando se encienda el ordenador</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimiza a la bandeja en vez de la barra de tareas</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Muestra solo el icono de sistema cuando se minimize la ventana</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Mapea el puerto usando &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Intenta abrir el puerto adecuado en el router automaticamente. Esta opcion solo funciona si el router soporta UPnP y esta activado.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimiza a la bandeja al cerrar</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimiza la ventana en lugar de salir de la aplicación.Cuando esta opcion esta activa la aplicación solo se puede cerrar seleccionando Salir desde el menu.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Conecta atraves de un proxy SOCKS4:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Conecta a la red Bitcoin atraves de un proxy SOCKS4 (ej. para conectar con la red Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>&amp;IP Proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>Dirección IP del proxy (ej. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Puerto:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Puerto del servidor proxy (ej. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Comisión opcional a las transacciones por kB que ayuda a asegurar que tus transacciones son procesadas rápidamente. La mayoría de las transacciones son de 1 kB. Se recomienda una comisión de 0.01.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Comision de &amp;transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Comisión opcional a las transacciones por kB que ayuda a asegurar que tus transacciones son procesadas rápidamente. La mayoría de las transacciones son de 1 kB. Se recomienda una comisión de 0.01.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Principal</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Mostrado</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Opciones</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Desde</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Balance:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Numero de movimientos:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>No confirmado(s):</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Cartera</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Movimientos recientes&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Tu balance actual</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>El total de las transacciones que faltan por confirmar y que no se cuentan para el total general.</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>El numero total de movimiento en cartera</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Envia monedas</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Envia a multiples destinatarios de una vez</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Agrega destinatario...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>&amp;Borra todos</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Balance:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Confirma el envio</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Envía</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Confirmar el envio de monedas</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Estas seguro que quieres enviar %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation>y</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>La dirección de destinatarion no es valida, comprueba otra vez.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>La cantidad por pagar tiene que ser mayor 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>La cantidad sobrepasa tu saldo</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Error: La transacción no se pudo crear  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Envio</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>Cantidad:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>&amp;Pagar a:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Introduce una etiqueta a esta dirección para añadirla a tu guia</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Etiqueta:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>La dirección donde enviar el pago (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Elije dirección de la  guia</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Pega dirección desde portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Elimina destinatario</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Introduce una dirección Bitcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Abierto hasta %1 bloques</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Abierto hasta %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/fuera de linea?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/no confirmado</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 confirmaciónes</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Estado:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, no ha sido emitido satisfactoriamente todavía</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, emitido mediante %1 nodo</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, emitido mediante %1 nodos</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Fecha:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Fuente:&lt;/b&gt; Generado&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;De:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>desconocido</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Para:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation>(tuya, etiqueta: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (tuya)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Crédito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 madura en %1 bloques mas)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(no aceptada)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Débito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Comisión transacción:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Cantidad total:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Mensaje:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Comentario:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a &quot;no aceptado&quot; y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Detalles de transacción</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Esta ventana muestra información detallada sobre la transacción</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Fecha</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Cantidad</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Abierto por %n bloque</numerusform>
+            <numerusform>Abierto por %n bloques</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Abierto hasta %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Fuera de linea (%1 confirmaciónes)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>No confirmado (%1 de %2 confirmaciónes)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Confirmado (%1 confirmaciones)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>El balance minado estará disponible en %n bloque mas</numerusform>
+            <numerusform>El balance minado estará disponible en %n bloques mas</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado !</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generado pero no acceptado</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Recibido con</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Recibido de</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Enviado a</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Pago proprio</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Minado</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(n/a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Fecha y hora cuando se recibió la transaccion</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Tipo de transacción.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Dirección de destino para la transacción</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Cantidad restada o añadida al balance</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Todo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Hoy</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Esta semana</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Esta mes</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Mes pasado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Este año</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Rango...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Recibido con</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Enviado a</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>A ti mismo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Minado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Otra</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Introduce una dirección o etiqueta para  buscar</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Cantidad minima</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Copia dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Copia etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Edita etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Muestra detalles...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Exportar datos de transacción</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Archivos separados por coma (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Confirmado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Fecha</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Cantidad</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Error exportando</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>No se pudo escribir en el archivo %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Rango:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>para</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Enviando...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Versión Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Uso:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Envia comando a bitcoin lanzado con -server u bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Muestra comandos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Recibir ayuda para un comando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Opciones:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Especifica archivo de configuración (predeterminado: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Especifica archivo pid (predeterminado: bitcoin.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Genera monedas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>No generar monedas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Arranca minimizado
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Especifica directorio para los datos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Especifica tiempo de espera para conexion (en milisegundos)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Conecta mediante proxy socks4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Permite búsqueda DNS para addnode y connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Agrega un nodo para conectarse
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Conecta solo al nodo especificado
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>No aceptar conexiones desde el exterior
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>No intentar usar UPnP para mapear el puerto de entrada
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Intenta usar UPnP para mapear el puerto de escucha.
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Comisión por kB para agregar a las transacciones que envias
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Aceptar comandos consola y JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Correr como demonio y acepta comandos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Usa la red de pruebas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Usuario para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Contraseña para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Escucha conexiones JSON-RPC en el puerto &lt;port&gt; (predeterminado: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Permite conexiones JSON-RPC desde la dirección IP especificada
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Envia comando al nodo situado en &lt;ip&gt; (predeterminado: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Ajusta el numero de claves en reserva &lt;n&gt; (predeterminado: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Rescanea la cadena de bloques para transacciones perdidas de la cartera
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Usa OpenSSL (https) para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Certificado del servidor (Predeterminado: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Clave privada del servidor (Predeterminado: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Este mensaje de ayuda
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>No se puede obtener permiso de trabajo en la carpeta de datos %s. Probablemente Bitcoin ya se está ejecutando.
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Cargando direcciónes...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Error cargando addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Cargando el index de bloques...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Error cargando blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Cargando cartera...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Error cargando wallet.dat: Cartera dañada      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Error cargando el archivo wallet.dat: Se necesita una versión mas nueva de Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Error cargando wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Rescaneando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Carga completa</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Dirección -proxy invalida</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Cantidad inválida para -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Error: CreateThread(StartNode) fallido</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Atención: Poco espacio en el disco duro</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>No es posible escuchar en el puerto %d en este ordenador. Probablemente Bitcoin ya se está ejecutando.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Precaución: Por favor revisa que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal Bitcoin no funcionará correctamente.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts
new file mode 100644 (file)
index 0000000..af883fd
--- /dev/null
@@ -0,0 +1,1818 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es_CL">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Sobre Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; - versión </translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Developers
+
+Este es un software experimental.
+
+Distribuido bajo la licencia MIT/X11, vea el archivo adjunto
+license.txt o http://www.opensource.org/licenses/mit-license.php.
+
+Este producto incluye software desarrollado por OpenSSL Project para su uso en
+el OpenSSL Toolkit (http://www.openssl.org/), software criptográfico escrito por
+Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Guia de direcciones</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Estas son tus direcciones Bitcoin para recibir pagos. Puedes utilizar una diferente por cada persona emisora para saber quien te está pagando.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Haz doble clic para editar una dirección o etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Crea una nueva dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Nueva dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Copia la dirección seleccionada al portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Copiar al portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Borra la dirección seleccionada de la lista. Solo las direcciónes de envio se pueden borrar.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Borrar</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Exporta datos de la guia de direcciones</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Archivos separados por coma (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Exportar errores</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>No se pudo escribir al archivo %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(sin etiqueta)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Cambiar contraseña</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Cambiar contraseña:</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Introduce contraseña actual      </translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Nueva contraseña</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Repite nueva contraseña:</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Introduce la nueva contraseña para la billetera.&lt;br/&gt;Por favor utiliza un contraseña &lt;b&gt;de 10 o mas caracteres aleatorios&lt;/b&gt;, u &lt;b&gt;ocho o mas palabras&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Codificar billetera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Esta operación necesita la contraseña para desbloquear la billetera.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Desbloquea billetera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Esta operación necesita la contraseña para decodificar la billetara.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Decodificar cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Cambia contraseña</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Introduce la contraseña anterior y la nueva de cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Confirma la codificación de cartera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ATENCIÓN: ¡Si codificas tu billetera y pierdes la contraseña perderás &lt;b&gt;TODOS TUS BITCOINS&lt;/b&gt;!&quot;
+¿Seguro que quieres seguir codificando la billetera?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Billetera codificada</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Precaucion: Mayúsculas Activadas</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Falló la codificación de la billetera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>La codificación de la billetera falló debido a un error interno. Tu billetera no ha sido codificada.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Bitcoin se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus bitcoins de ser robados por malware que infecte su computador</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Las contraseñas no coinciden.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Ha fallado el desbloqueo de la billetera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>La contraseña introducida para decodificar la billetera es incorrecta.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Ha fallado la decodificación de la billetera</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>La contraseña de billetera ha sido cambiada con éxito.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Billetera Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Sincronizando con la red...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Sincronización de la cadena de bloques en progreso</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Vista general</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Muestra una vista general de la billetera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Explora el historial de transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Guia de direcciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Edita la lista de direcciones y etiquetas almacenadas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Recibir monedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Muestra la lista de direcciónes utilizadas para recibir pagos</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Envíar monedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Enviar monedas a una dirección bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Salir</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Salir del programa</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>S&amp;obre %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Muestra información acerca de Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opciones</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Modifica las opciones de configuración de bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Abre &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Muestra la ventana de Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exportar...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Exportar la vista actual a un archivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Codificar la billetera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Codificar o decodificar la billetera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Cambiar la contraseña</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Cambiar la contraseña utilizada para la codificación de la billetera</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Acerca de</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Mostrar Información sobre QT</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Archivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Configuración</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Ayuda</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Barra de pestañas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Barra de acciónes</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[red-de-pruebas]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n conexión activa hacia la red Bitcoin</numerusform>
+            <numerusform>%n conexiones activas hacia la red Bitcoin</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Descargados %1 de %2 bloques del historial de transacciones.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Descargado %1 bloques del historial de transacciones.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>Hace %n segundo</numerusform>
+            <numerusform>Hace %n segundos</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>Hace %n minuto</numerusform>
+            <numerusform>Hace %n minutos</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>Hace %n hora</numerusform>
+            <numerusform>Hace %n horas</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>Hace %n día</numerusform>
+            <numerusform>Hace %n días</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Actualizado</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Recuperando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>El ultimo bloque recibido fue generado %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Esta transacción supera el límite. Puedes seguir enviandola incluyendo una comisión de %s que se va a repartir entre los nodos que procesan su transacción y ayudan a mantener la red. ¿Quieres seguir con la transacción?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Enviando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Transacción enviada</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Transacción entrante</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Fecha: %1
+Cantidad: %2
+Tipo: %3
+Dirección: %4</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>La billetera esta &lt;b&gt;codificada&lt;/b&gt; y actualmente &lt;b&gt;desbloqueda&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>La billetera esta &lt;b&gt;codificada&lt;/b&gt; y actualmente &lt;b&gt;bloqueda&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Unidad en la que mostrar cantitades: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Elige la subdivisión por defecto para mostrar cantidaded en la interfaz cuando se envien monedas</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Muestra direcciones en el listado de transaccioines</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Editar dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>La etiqueta asociada con esta entrada de la libreta de direcciones</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Dirección</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>La dirección asociada con esta entrada en la libreta de direcciones. Solo puede ser modificada para direcciónes de envío.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Nueva dirección para recibir</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Nueva dirección para enviar</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Editar dirección de recepción</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Editar dirección de envio</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>La dirección introducida &quot;%1&quot; ya esta guardada en la libreta de direcciones.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>La dirección introducida &quot;%1&quot; no es una dirección Bitcoin valida.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>No se pudo desbloquear la billetera.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>La generación de nueva clave falló.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Inicia Bitcoin al iniciar el sistema</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Inicia Bitcoin automáticamente despues de encender el computador</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimiza a la bandeja en vez de la barra de tareas</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Muestra solo un ícono en la bandeja después de minimizar la ventana</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Direcciona el puerto usando &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Abre automáticamente el puerto del cliente Bitcoin en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimiza a la bandeja al cerrar</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimiza la ventana en lugar de salir del programa cuando la ventana se cierra. Cuando esta opción esta activa el programa solo se puede cerrar seleccionando Salir desde el menu.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Conecta a traves de un proxy SOCKS4:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Conecta a la red Bitcoin a través de un proxy SOCKS4 (ej. cuando te conectas por la red Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>&amp;IP Proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>Dirección IP del servidor proxy (ej. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Puerto:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Puerto del servidor proxy (ej. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Comisión opcional por kB que ayuda a asegurar que sus transacciones son procesadas rápidamente. La mayoria de transacciones son de 1 KB. Se recomienda comisión de 0.01 </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Comisión de &amp;transacciónes</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Comisión opcional por kB que ayuda a asegurar que sus transacciones son procesadas rápidamente. La mayoria de transacciones son de 1 KB. Se recomienda comisión de 0.01 </translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Principal</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Mostrado</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Opciones</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formulario</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Numero de transacciones:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>No confirmados:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Cartera</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Transacciones recientes&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Tu saldo actual</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Total de transacciones que no han sido confirmadas aun, y que no cuentan para el saldo actual.</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Número total de transacciones en la billetera</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Enviar monedas</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Enviar a múltiples destinatarios</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Agrega destinatario...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>&amp;Borra todos</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Remover todos los campos de la transacción</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Balance:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Confirma el envio</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Envía</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Confirmar el envio de monedas</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Estas seguro que quieres enviar %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation>y</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>La dirección de destinatarion no es valida, comprueba otra vez.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>La cantidad por pagar tiene que ser mayor 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>La cantidad sobrepasa tu saldo</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Error: La transacción no se pudo crear  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Envio</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>Cantidad:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>&amp;Pagar a:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Introduce una etiqueta a esta dirección para añadirla a tu guia</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Etiqueta:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>La dirección donde enviar el pago (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Elije dirección de la guia</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Pega dirección desde portapapeles</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Elimina destinatario</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Introduce una dirección Bitcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Abierto hasta %1 bloques</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Abierto hasta %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/fuera de linea?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/no confirmado</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 confirmaciónes</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Estado:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, no ha sido emitido satisfactoriamente todavía</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, emitido mediante %1 nodo</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, emitido mediante %1 nodos</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Fecha:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Fuente:&lt;/b&gt; Generado&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;De:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>desconocido</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Para:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation>(tuya, etiqueta: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (tuya)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Crédito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 madura en %2 bloques mas)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(no aceptada)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Débito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Comisión transacción:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Cantidad total:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Mensaje:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Comentario:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a &quot;no aceptado&quot; y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Detalles de transacción</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Esta ventana muestra información detallada sobre la transacción</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Fecha</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Cantidad</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Abierto por %n bloque</numerusform>
+            <numerusform>Abierto por %n bloques</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Abierto hasta %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Fuera de linea (%1 confirmaciónes)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>No confirmado (%1 de %2 confirmaciónes)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Confirmado (%1 confirmaciones)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>El balance minado estará disponible en %n bloque mas</numerusform>
+            <numerusform>El balance minado estará disponible en %n bloques mas</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado !</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generado pero no acceptado</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Recibido con</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Recibido de</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Enviado a</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Pagar a usted mismo</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Minado</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(n/a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Fecha y hora cuando se recibió la transaccion</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Tipo de transacción.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Dirección de destino para la transacción</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Cantidad restada o añadida al balance</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Todo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Hoy</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Esta semana</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Esta mes</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Mes pasado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Este año</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Rango...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Recibido con</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Enviado a</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>A ti mismo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Minado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Otra</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Introduce una dirección o etiqueta para  buscar</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Cantidad minima</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Copia dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Copia etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Edita etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Muestra detalles...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Exportar datos de transacción</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Archivos separados por coma (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Confirmado</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Fecha</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Dirección</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Cantidad</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Error exportando</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>No se pudo escribir en el archivo %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Rango:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>para</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Enviando...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Versión Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Uso:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Envia comando a bitcoin lanzado con -server u bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Muestra comandos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Recibir ayuda para un comando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Opciones:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Especifica archivo de configuración (predeterminado: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Especifica archivo pid (predeterminado: bitcoin.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Genera monedas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>No generar monedas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Arranca minimizado
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Especifica directorio para los datos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Especifica tiempo de espera para conexion (en milisegundos)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Conecta mediante proxy socks4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Permite búsqueda DNS para addnode y connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Agrega un nodo para conectarse
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Conecta solo al nodo especificado
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>No aceptar conexiones desde el exterior
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>No intentar usar UPnP para mapear el puerto de entrada
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Intenta usar UPnP para mapear el puerto de escucha.
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Comisión por kB para agregar a las transacciones que envias
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Aceptar comandos consola y JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Correr como demonio y acepta comandos
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Usa la red de pruebas
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Usuario para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Contraseña para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Escucha conexiones JSON-RPC en el puerto &lt;port&gt; (predeterminado: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Permite conexiones JSON-RPC desde la dirección IP especificada
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Envia comando al nodo situado en &lt;ip&gt; (predeterminado: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Ajusta el numero de claves en reserva &lt;n&gt; (predeterminado: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Rescanea la cadena de bloques para transacciones perdidas de la cartera
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Usa OpenSSL (https) para las conexiones JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Certificado del servidor (Predeterminado: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Clave privada del servidor (Predeterminado: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Este mensaje de ayuda
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>No se puede obtener permiso de trabajo en la carpeta de datos %s. Probablemente Bitcoin ya se está ejecutando.
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Cargando direcciónes...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Error cargando addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Cargando el index de bloques...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Error cargando blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Cargando cartera...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Error cargando wallet.dat: Cartera dañada      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Error cargando el archivo wallet.dat: Se necesita una versión mas nueva de Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Error cargando wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Rescaneando...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Carga completa</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Dirección -proxy invalida</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Cantidad inválida para -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Error: CreateThread(StartNode) fallido</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Atención: Poco espacio en el disco duro</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>No es posible escuchar en el puerto %d en este ordenador. Probablemente Bitcoin ya se está ejecutando.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Precaución: Por favor revise que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal configurado Bitcoin no funcionará correctamente.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts
new file mode 100644 (file)
index 0000000..d39ab42
--- /dev/null
@@ -0,0 +1,1809 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>A Bitcoinról</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; verzió</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Szerzői jog © 2009-2012 Bitcoin Developers
+
+Ez egy kísérleti program.
+MIT/X11 szoftverlicenc alatt kiadva, lásd a mellékelt fájlt license.txt vagy http://www.opensource.org/licenses/mit-license.php. 
+
+Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (http://www.openssl.org/) és kriptográfiai szoftvertben való felhasználásra,  írta Eric Young (eay@cryptsoft.com) és UPnP szoftver, írta Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Címjegyzék</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Ezekkel a Bitcoin-címekkel fogadhatod kifizetéseket.   Érdemes lehet minden egyes kifizető számára külön címet létrehozni, hogy könnyebben nyomon követhesd, kitől kaptál már pénzt.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Dupla-katt a cím vagy a címke szerkesztéséhez</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Új cím létrehozása</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Új cím...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>A kiválasztott cím másolása a vágólapra</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Másolás a vágólapra</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>A kiválasztott cím törlése a listáról. Csak a küldő címek törölhetőek.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Törlés</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Címjegyzék adatainak exportálása</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Vesszővel elválasztott fájl (*. csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Hiba exportálás közben</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>%1 nevű fájl nem írható.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Címke</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Cím</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(nincs címke)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Párbeszéd</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>SzövegCímke</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Add meg a jelszót</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Új jelszó</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Új jelszó újra</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Írd be az új jelszót a tárcához.&lt;br/&gt;Használj legalább 10&lt;br/&gt;véletlenszerű karaktert&lt;/b&gt; vagy &lt;b&gt;legalább nyolc szót&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Tárca kódolása</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>A tárcád megnyitásához a műveletnek szüksége van a tárcád jelszavára.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Tárca megnyitása</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>A tárcád dekódolásához a műveletnek szüksége van a tárcád jelszavára.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Tárca dekódolása</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Jelszó megváltoztatása</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Írd be a tárca régi és új jelszavát.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Biztosan kódolni akarod a tárcát?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>FIGYELEM: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor &lt;b&gt;AZ ÖSSZES BITCOINODAT IS EL FOGOD VESZÍTENI!&lt;/b&gt;
+Biztosan kódolni akarod a tárcát?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Tárca kódolva</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Tárca kódolása sikertelen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Tárca kódolása belső hiba miatt sikertelen. A tárcád nem lett kódolva.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation type="unfinished">Bitcoin will close now to finish the encryption process. Ne feledd, hogy a tárca titkosítása sem nyújt teljes védelmet az adathalász programok fertőzésével szemben.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>A megadott jelszavak nem egyeznek.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Tárca megnyitása sikertelen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Hibás jelszó.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Dekódolás sikertelen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Jelszó megváltoztatva.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin-tárca</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Szinkronizálás a hálózattal...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Blokklánc-szinkronizálás folyamatban</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Áttekintés</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Tárca általános áttekintése</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Tranzakciók</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Tranzakciótörténet megtekintése</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>Cím&amp;jegyzék</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Tárolt címek és címkék listájának szerkesztése</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>Érmék &amp;fogadása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Kiizetést fogadó címek listája</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>Érmék &amp;küldése</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Érmék küldése megadott címre</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Kilépés</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Kilépés</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;A %1-ról</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Információk a Bitcoinról</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opciók...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Bitcoin konfigurációs opciók</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>A &amp;Bitcoin megnyitása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>A Bitcoin-ablak mutatása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exportálás...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Jelenlegi nézet exportálása fájlba</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>Tárca &amp;kódolása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Tárca kódolása vagy dekódolása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>Jelszó &amp;megváltoztatása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Tárcakódoló jelszó megváltoztatása</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>A &amp;Qt-ról</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Információk a Qt ról</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Fájl</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Beállítások</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Súgó</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Fül eszköztár</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Parancsok eszköztár</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[teszthálózat]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n aktív kapcsolat a Bitcoin-hálózattal</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>%1 blokk letöltve a tranzakciótörténet %2 blokkjából.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>%1 blokk letöltve a tranzakciótörténetből.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n másodperccel ezelőtt</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n perccel ezelőtt</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n órával ezelőtt</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n nappal ezelőtt</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Naprakész</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Frissítés...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Az utolsóként kapott blokk generálva: %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Ez a tranzakció túllépi a mérethatárt,  de %1 tranzakciós díj ellenében így is elküldheted. Ezt a plusz összeget a tranzakcióidat feldolgozó csomópontok kapják,  így magát a hálózatot támogatod vele. Hajlandó vagy megfizetni a díjat?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Küldés...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Tranzakció elküldve.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Beérkező tranzakció</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Dátum: %1
+Összeg: %2
+Típus: %3
+Cím: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Tárca &lt;b&gt;kódolva&lt;/b&gt; és jelenleg &lt;b&gt;nyitva&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Tárca &lt;b&gt;kódolva&lt;/b&gt; és jelenleg &lt;b&gt;zárva&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Mértékegység: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Válaszd ki az interfészen és érmék küldésekor megjelenítendő alapértelmezett alegységet.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Címek megjelenítése a tranzakciólistában</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Cím szerkesztése</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>Cím&amp;ke</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>A címhez tartozó címke</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Cím</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Az ehhez a címjegyzék-bejegyzéshez tartozó cím. Ez csak a küldő címeknél módosítható.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Új fogadó cím</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Új küldő cím</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Fogadó cím szerkesztése</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Küldő cím szerkesztése</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>A megadott &quot;%1&quot; cím már szerepel a címjegyzékben.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>A megadott &quot;%1&quot; cím nem egy érvényes Bitcoin-cím.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Tárca feloldása sikertelen</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Új kulcs generálása sikertelen</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Induljon el a számítógép bekapcsolásakor</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Induljon el a Bitcoin a számítógép bekapcsolásakor</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Kicsinyítés a tálcára az eszköztár helyett</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Kicsinyítés után csak eszköztár-ikont mutass</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>&amp;UPnP port-feltérképezés</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>A Bitcoin-kliens portjának automatikus megnyitása a routeren. Ez csak akkor működik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>K&amp;icsinyítés záráskor</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Az alkalmazásból való kilépés helyett az eszköztárba kicsinyíti az alkalmazást az ablak bezárásakor. Ez esetben az alkalmazás csak a Kilépés menüponttal zárható be.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Csatlakozás SOCKS4 proxyn keresztül:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>SOCKS4 proxyn keresztüli csatlakozás a Bitcoin hálózatához (pl. Tor-on keresztüli csatlakozás esetén)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Proxy &amp;IP: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>Proxy IP címe (pl.: 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Port: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Proxy portja (pl.: 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Opcionális, kB-onkénti tranzakciós díj a tranzakcióid minél gyorsabb feldolgozásának elősegítésére.  A legtöbb tranzakció 1 kB-os.  0,01 BTC ajánlott.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Tranzakciós &amp;díj fizetése</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Opcionális, kB-onkénti tranzakciós díj a tranzakcióid minél gyorsabb feldolgozásának elősegítésére. A legtöbb tranzakció 1 kB-os. 0,01 BTC ajánlott.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Fő</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Megjelenítés</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Opciók</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Űrlap</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Egyenleg:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Tranzakciók száma:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Megerősítetlen:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Legutóbbi tranzakciók&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Aktuális egyenleged</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Még megerősítésre váró, a jelenlegi egyenlegbe be nem számított tranzakciók</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Tárca összes tranzakcióinak száma</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Érmék küldése</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Küldés több címzettnek egyszerre</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Címzett hozzáadása ...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Mindent töröl</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Egyenleg:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Küldés megerősítése</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Küldés</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; %2-re (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Küldés megerősítése</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Valóban el akarsz küldeni %1-t?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> és</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>A címzett címe érvénytelen, kérlek, ellenőrizd.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>A fizetendő összegnek nagyobbnak kell lennie 0-nál.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Nincs ennyi bitcoin az egyenlegeden.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>A küldeni kívánt összeg és a %1 tranzakciós díj együtt meghaladja az egyenlegeden rendelkezésedre álló összeget.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Többször szerepel ugyanaz a cím. Egy küldési műveletben egy címre csak egyszer lehet küldeni.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Hiba: nem sikerült létrehozni a tranzakciót  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Hiba: a tranzakciót elutasították.  Ezt az okozhatja, ha már elköltöttél valamennyi érmét a tárcádból - például ha a wallet.dat-od egy másolatát használtad, és így az elköltés csak abban lett jelölve, de itt nem.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Űrlap</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>Összeg:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Címzett:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Milyen címkével kerüljön be ez a cím a címtáradba?
+</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>Címke:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Címzett címe  (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L )</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Válassz egy címet a címjegyzékből</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Cím beillesztése a vágólapról</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Címzett eltávolítása</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L )</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Megnyitva %1 blokkra</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Megnyitva %1-ig</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/offline?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/megerősítetlen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 megerősítés</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Állapot:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, még nem sikerült elküldeni.</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, %1 csomóponton keresztül elküldve.</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, elküldve %1 csomóponton keresztül.</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Dátum:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Forrás:&lt;/b&gt; Generálva &lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Űrlap:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>ismeretlen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Címzett:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (tiéd, címke: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (tiéd)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Jóváírás&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1, %2 múlva készül el)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(elutasítva)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Terhelés&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Tranzakciós díj:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Nettó összeg:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Üzenet:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Megjegyzés:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>A frissen generált érméket csak 120 blokkal később tudod elkölteni.  Ez a blokk nyomban szétküldésre került a hálózatba, amint legeneráltad, hogy hozzáadhassák a blokklánchoz.  Ha nem kerül be a láncba, úgy az állapota &quot;elutasítva&quot;-ra módosul,  és nem költheted el az érméket. Ez akkor következhet be időnként, ha egy másik csomópont mindössze néhány másodperc különbséggel generált le egy blokkot a tiédhez képest.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Tranzakció részletei</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Ez a mező a tranzakció részleteit mutatja</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Dátum</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Típus</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Cím</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Összeg</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>%n blokkra megnyitva</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>%1-ig megnyitva</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Offline (%1 megerősítés)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Megerősítetlen (%1 %2 megerősítésből)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Megerősítve (%1 megerősítés)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>%n blokk múlva lesz elérhető a bányászott egyenleg.</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Ezt a blokkot egyetlen másik csomópont sem kapta meg, így valószínűleg nem lesz elfogadva!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Legenerálva, de még el nem fogadva.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Erre a címre</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation type="unfinished">Erről az</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Erre a címre</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Magadnak kifizetve</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Kibányászva</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(nincs)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Tranzakció állapota. Húzd ide a kurzort, hogy lásd a megerősítések számát.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Tranzakció fogadásának dátuma és időpontja.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Tranzakció típusa.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>A tranzakció címzettjének címe.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Az egyenleghez jóváírt vagy ráterhelt összeg.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Mind</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Mai</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Ezen a héten</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Ebben a hónapban</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Múlt hónapban</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Ebben az évben</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Tartomány ...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Erre a címre</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Erre a címre</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Magadnak</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Kibányászva</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Más</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Írd be a keresendő címet vagy címkét</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Minimális összeg</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Cím másolása</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Címke másolása</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Címke szerkesztése</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Részletek...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Tranzakció adatainak exportálása</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Vesszővel elválasztott fájl (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Megerősítve</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Dátum</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Típus</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Címke</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Cím</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Összeg</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>Azonosító</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Hiba lépett fel exportálás közben</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>%1 fájlba való kiírás sikertelen.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Tartomány:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>meddig</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Küldés ...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoin verzió</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Használat:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Parancs küldése a -serverhez vagy a bitcoindhez
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Parancsok kilistázása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Segítség egy parancsról
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Opciók
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Konfigurációs fájl (alapértelmezett: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>pid-fájl (alapértelmezett: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Érmék generálása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Bitcoin-generálás leállítása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Indítás lekicsinyítve
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Adatkönyvtár
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Csatlakozás időkerete (milliszekundumban)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Csatlakozás SOCKS4 proxyn keresztül
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>DNS-kikeresés engedélyezése az addnode-nál és a connect-nél
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Elérendő csomópont megadása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Csatlakozás csak a megadott csomóponthoz
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Külső csatlakozások elutasítása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>UPnP-használat letiltása a figyelő port feltérképezésénél
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>UPnP-használat engedélyezése a figyelő port feltérképezésénél
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>kB-onként felajánlandó díj az általad küldött tranzakciókhoz
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Parancssoros és JSON-RPC parancsok elfogadása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Háttérben futtatás daemonként és parancsok elfogadása
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Teszthálózat használata
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Felhasználói név JSON-RPC csatlakozásokhoz
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Jelszó JSON-RPC csatlakozásokhoz
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>JSON-RPC csatlakozásokhoz figyelendő &lt;port&gt; (alapértelmezett: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>JSON-RPC csatlakozások engedélyezése meghatározott IP-címről
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Parancsok küldése &lt;ip&gt; címen működő csomóponthoz (alapértelmezett: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Kulcskarika mérete &lt;n&gt; (alapértelmezett: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Blokklánc újraszkennelése hiányzó tárca-tranzakciók után
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL-opciók: (lásd a Bitcoin Wiki SSL-beállítási instrukcióit)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>OpenSSL (https) használata JSON-RPC csatalkozásokhoz
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Szervertanúsítvány-fájl (alapértelmezett: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Szerver titkos kulcsa (alapértelmezett: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Elfogadható rejtjelkulcsok (alapértelmezett: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH )
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Ez a súgó-üzenet
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Az %s adatkönyvtár nem zárható.  A Bitcoin valószínűleg fut már.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Címek betöltése...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Hiba az addr.dat betöltése közben      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Blokkindex betöltése...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Hiba a blkindex.dat betöltése közben      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Tárca betöltése...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Hiba a wallet.dat betöltése közben: meghibásodott tárca      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú Bitcoin-kliens szükséges      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Hiba a wallet.dat betöltése közben      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Újraszkennelés...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Betöltés befejezve.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Érvénytelen -proxy cím</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Étvénytelen -paytxfee=&lt;összeg&gt; összeg</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Figyelem: a -paytxfee nagyon magas.  Ennyi tranzakciós díjat fogsz fizetni, ha elküldöd a tranzakciót.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Hiba: CreateThread(StartNode) sikertelen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Figyelem: kevés a hely a lemezen.  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>A %d port nem elérhető ezen a gépen.  A Bitcoin valószínűleg fut már.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő.  A Bitcoin nem fog megfelelően működni, ha rosszul van beállítvaaz órád.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>béta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts
new file mode 100644 (file)
index 0000000..b163f35
--- /dev/null
@@ -0,0 +1,1817 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Info su Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>Versione di &lt;b&gt;Bitcoin&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Developers
+
+Questo è un software sperimentale.
+
+Distribuito sotto la licenza software MIT/X11, vedi il file license.txt incluso oppure su http://www.opensource.org/licenses/mit-license.php.
+
+Questo prodotto include software sviluppato dal progetto OpenSSL per l&apos;uso del Toolkit OpenSSL (http://www.openssl.org/), software crittografico scritto da Eric Young (eay@cryptsoft.com) e software UPnP scritto da Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Rubrica</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Questi sono i tuoi indirizzi Bitcoin per ricevere pagamenti. Potrai darne uno diverso ad ognuno per tenere così traccia di chi ti sta pagando.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Fai doppio click per modificare o cancellare l&apos;etichetta</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Crea un nuovo indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Nuovo indirizzo...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Copia l&apos;indirizzo attualmente selezionato nella clipboard</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Copia nella clipboard</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Cancella l&apos;indirizzo attualmente selezionato dalla lista. Solo indirizzi d&apos;invio possono essere cancellati.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Cancella</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Esporta gli indirizzi della rubrica</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Testo CSV (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Errore nell&apos;esportazione</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Impossibile scrivere sul file %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Etichetta</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(nessuna etichetta)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialogo</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Etichetta</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Inserisci la passphrase</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Nuova passphrase</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Ripeti la passphrase</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Inserisci la passphrase per il portamonete.&lt;br/&gt;Per piacere usare unapassphrase di &lt;b&gt;10 o più caratteri casuali&lt;/b&gt;, o &lt;b&gt;otto o più parole&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Cifra il portamonete</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Quest&apos;operazione necessita della passphrase per sbloccare il portamonete.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Sblocca il portamonete</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Quest&apos;operazione necessita della passphrase per decifrare il portamonete,</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Decifra il portamonete</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Cambia la passphrase</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Inserisci la vecchia e la nuova passphrase per il portamonete.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Conferma la cifratura del portamonete</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ATTENZIONE: se si cifra il portamonete e si perde la frase d&apos;ordine, &lt;b&gt;SI PERDERANNO TUTTI I PROPRI BITCOIN&lt;/b&gt;!
+Si è sicuri di voler cifrare il portamonete?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Portamonete cifrato</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Attenzione: tasto Blocco maiuscole attivo.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Cifratura del portamonete fallita</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Bitcoin verrà ora chiuso per finire il processo di crittazione. Ricorda che criptare il tuo portamonete non può fornire una protezione totale contro furti causati da malware che dovessero infettare il tuo computer.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Le passphrase inserite non corrispondono.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Sblocco del portamonete fallito</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>La passphrase inserita per la decifrazione del portamonete è errata.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Decifrazione del portamonete fallita</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Passphrase del portamonete modificata con successo.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Portamonete di bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Sto sincronizzando con la rete...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>sincronizzazione della catena di blocchi in corso</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Sintesi</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Mostra lo stato generale del portamonete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transazioni</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Cerca nelle transazioni</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Rubrica</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Modifica la lista degli indirizzi salvati e delle etichette</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Ricevi monete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Mostra la lista di indirizzi su cui ricevere pagamenti</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Invia monete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Invia monete ad un indirizzo bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Esci</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Chiudi applicazione</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;Informazioni su %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Mostra informazioni su Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opzioni...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Modifica configurazione opzioni per bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Apri &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Mostra la finestra Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Esporta...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Esporta la visualizzazione corrente su file</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Cifra il portamonete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Cifra o decifra il portamonete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Cambia la passphrase</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Cambia la passphrase per la cifratura del portamonete</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Informazioni su &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Mostra informazioni su Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;File</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Impostazioni</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Aiuto</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Barra degli strumenti &quot;Tabs&quot;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Barra degli strumenti &quot;Azioni&quot;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n connessione attiva alla rete Bitcoin</numerusform>
+            <numerusform>%n connessioni attive alla rete Bitcoin</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Scaricati %1 dei %2 blocchi dello storico transazioni.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Scaricati %1 blocchi dello storico transazioni.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n secondo fa</numerusform>
+            <numerusform>%n secondi fa</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n minuto fa</numerusform>
+            <numerusform>%n minuti fa</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n ora fa</numerusform>
+            <numerusform>%n ore fa</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n giorno fa</numerusform>
+            <numerusform>%n giorni fa</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Aggiornato</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>In aggiornamento...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>L&apos;ultimo blocco ricevuto è stato generato %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Questa transazione è superiore al limite di dimensione. È comunque possibile inviarla con una commissione di %1, che va ai nodi che processano la tua transazione e contribuisce a sostenere la rete. Vuoi pagare la commissione?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Invio...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Transazione inviata</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Transazione ricevuta</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Data: %1
+Quantità: %2
+Tipo: %3
+Indirizzo: %4
+
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Il portamonete è &lt;b&gt;cifrato&lt;/b&gt; e attualmente &lt;b&gt;sbloccato&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Il portamonete è &lt;b&gt;cifrato&lt;/b&gt; e attualmente &lt;b&gt;bloccato&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Unità di misura degli importi in: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Scegli l&apos;unità di suddivisione di default per l&apos;interfaccia e per l&apos;invio di monete</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Mostra gli indirizzi nella lista delle transazioni</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Modifica l&apos;indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Etichetta</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>L&apos;etichetta associata a questo indirizzo nella rubrica</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>L&apos;indirizzo associato a questa voce della rubrica. Si può modificare solo negli indirizzi di spedizione.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Nuovo indirizzo di ricezione</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Nuovo indirizzo d&apos;invio</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Modifica indirizzo di ricezione</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Modifica indirizzo d&apos;invio</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>L&apos;indirizzo inserito &quot;%1&quot; è già in rubrica.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>L&apos;indirizzo inserito &quot;%1&quot; non è un indirizzo bitcoin valido.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Impossibile sbloccare il portamonete.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Generazione della nuova chiave non riuscita.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Fai partire Bitcoin all&apos;avvio del sistema</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Avvia automaticamente Bitcoin all&apos;accensione del computer</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimizza sul tray invece che sulla barra delle applicazioni</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Mostra solo un&apos;icona nel tray quando si minimizza la finestra</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Mappa le porte tramite l&apos;&amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Apri automaticamente la porta del client Bitcoin sul router. Questo funziona solo se il router supporta UPnP ed è abilitato.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimizza alla chiusura</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Riduci ad icona, invece di uscire dall&apos;applicazione quando la finestra viene chiusa. Quando questa opzione è attivata, l&apos;applicazione verrà chiusa solo dopo aver selezionato Esci nel menu.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Collegati tramite SOCKS4 proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Connettiti alla rete Bitcon attraverso un proxy SOCKS4 (ad esempio quando ci si collega via Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>&amp;IP del proxy: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>Indirizzo IP del proxy (ad esempio 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Porta: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Porta del proxy (es. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Commissione di transazione per kB; è opzionale e contribuisce ad assicurare che le transazioni siano elaborate velocemente. Le transazioni sono per la maggior parte da 1 kB. Commissione raccomandata 0,01.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Paga la &amp;commissione</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Commissione di transazione per kB; è opzionale e contribuisce ad assicurare che le transazioni siano elaborate velocemente. Le transazioni sono per la maggior parte da 1 kB. Commissione raccomandata 0,01.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Principale</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Mostra</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Opzioni</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Modulo</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Saldo</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123,456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Numero di transazioni:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Non confermato:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Transazioni recenti&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Saldo attuale</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Totale delle transazioni in corso di conferma, che non sono ancora incluse nel saldo attuale</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Numero delle transazioni effettuate</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Spedisci Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Spedisci a diversi beneficiari in una volta sola</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Aggiungi beneficiario...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Cancella tutto</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Rimuovi tutti i campi della transazione</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123,456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Conferma la spedizione</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Spedisci</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Conferma la spedizione di bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Si è sicuri di voler spedire %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> e </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>L&apos;indirizzo del beneficiario non è valido, per cortesia controlla.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>L&apos;importo da pagare dev&apos;essere maggiore di 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>L&apos;importo è superiore al saldo attuale</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Il totale è superiore al saldo attuale includendo la commissione %1</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Trovato un indirizzo doppio, si può spedire solo una volta a ciascun indirizzo in una singola operazione.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Errore: creazione della transazione fallita </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Errore: la transazione è stata rifiutata. Ciò accade se alcuni bitcoin nel portamonete sono stati già spesi, ad esempio se è stata usata una copia del file wallet.dat e i bitcoin sono stati spesi dalla copia ma non segnati come spesi qui.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Modulo</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>&amp;Importo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Paga &amp;a:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Inserisci un&apos;etichetta per questo indirizzo, per aggiungerlo nella rubrica</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Etichetta</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>L&apos;indirizzo del beneficiario cui inviare il pagamento (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Scegli l&apos;indirizzo dalla rubrica</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Incollare l&apos;indirizzo dagli appunti</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Rimuovere questo beneficiario</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Inserisci un indirizzo Bitcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Aperto per %1 blocchi</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Aperto fino a %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/offline?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/non confermato</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 conferme</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Stato:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, non è stato ancora trasmesso con successo</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, trasmesso attraverso %1 nodo</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, trasmesso attraverso %1 nodi</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Data:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Fonte:&lt;/b&gt; Generato&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Da:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>sconosciuto</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Per:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (vostro, etichetta: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (vostro)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Credito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 matura in altri %2 blocchi)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(non accettate)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Debito:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Commissione:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Importo netto:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Messaggio:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Commento:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Bisogna attendere 120 blocchi prima di spendere I bitcoin generati. Quando è stato generato questo blocco, è stato trasmesso alla rete per aggiungerlo alla catena di blocchi. Se non riesce a entrare nella catena, verrà modificato in &quot;non accettato&quot; e non sarà spendibile. Questo può accadere a volte, se un altro nodo genera un blocco entro pochi secondi del tuo.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Dettagli sulla transazione</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Questo pannello mostra una descrizione dettagliata della transazione</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Data</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Importo</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Aperto per %n blocco</numerusform>
+            <numerusform>Aperto per %n blocchi</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Aperto fino a %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Offline (%1 conferme)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Non confermati (%1 su %2 conferme)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Confermato (%1 conferme)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Il saldo generato sarà disponibile tra %n altro blocco</numerusform>
+            <numerusform>Il saldo generato sarà disponibile tra %n altri blocchi</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Questo blocco non è stato ricevuto da altri nodi e probabilmente non sarà accettato!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generati, ma non accettati</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Ricevuto tramite</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Ricevuto da</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Spedito a</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Pagamento a te stesso</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Ottenuto dal mining</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(N / a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Data e ora in cui la transazione è stata ricevuta.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Tipo di transazione.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Indirizzo di destinazione della transazione.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Importo rimosso o aggiunto al saldo.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Tutti</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Oggi</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Questa settimana</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Questo mese</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Il mese scorso</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Quest&apos;anno</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Intervallo...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Ricevuto tramite</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Spedito a</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>A te</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Ottenuto dal mining</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Altro</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Inserisci un indirizzo o un&apos;etichetta da cercare</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Importo minimo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Copia l&apos;indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Copia l&apos;etichetta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Modifica l&apos;etichetta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Mostra i dettagli...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Esporta i dati della transazione</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Testo CSV (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Confermato</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Data</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Etichetta</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Indirizzo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Importo</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Errore nell&apos;esportazione</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Impossibile scrivere sul file %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Intervallo:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>a</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Invio...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Versione di Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Utilizzo:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Manda il comando a -server o bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Lista comandi
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Aiuto su un comando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Opzioni:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Specifica il file di configurazione (di default: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Specifica il file pid (default: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Genera Bitcoin
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Non generare Bitcoin
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Parti in icona
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Specifica la cartella dati
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Specifica il timeout di connessione (in millisecondi)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Connessione tramite socks4 proxy
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Consenti ricerche DNS per aggiungere nodi e collegare
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Aggiungi un nodo e connetti a
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Connetti solo al nodo specificato
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Non accettare connessioni dall&apos;esterno
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Non usare l&apos;UPnP per mappare la porta
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Prova ad usare l&apos;UPnp per mappare la porta
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Commissione al kB da aggiungere alle transazioni in uscita
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Accetta da linea di comando e da comandi JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Esegui in background come demone e accetta i comandi
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Utilizza la rete di prova
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Nome utente per connessioni JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Password per connessioni JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Attendi le connessioni JSON-RPC su &lt;porta&gt; (default: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Consenti connessioni JSON-RPC dall&apos;indirizzo IP specificato
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Inviare comandi al nodo in esecuzione su &lt;ip&gt; (default: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Impostare la quantità di chiavi di riserva a &lt;n&gt; (default: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Ripeti analisi della catena dei blocchi per cercare le transazioni  mancanti dal portamonete
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+Opzioni SSL: (vedi il wiki di Bitcoin per le istruzioni di configurazione SSL)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Utilizzare OpenSSL (https) per le connessioni  JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>File certificato del server (default: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Chiave privata del server (default: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Cifrari accettabili (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Questo messaggio di aiuto
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Non è possibile ottenere i dati sulla directory %s. Probabilmente Bitcoin è già in esecuzione.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Caricamento indirizzi...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Errore nel caricamento di addr.dat     
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Caricamento dell&apos;indice del blocco...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Errore nel caricamento di blkindex.dat     
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Caricamento portamonete...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Errore nel caricamento di wallet.dat: il portamonete è danneggiato     
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Errore nel caricamento di wallet.dat: il portamonete richiede una versione più recente di Bitcoin     
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Errore nel caricamento di wallet.dat     
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Ripetere la scansione...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Caricamento completato</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Indirizzo -proxy non valido</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Importo non valido per -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Attenzione: -paytxfee è molto alta. Questa è la commissione che si paga quando si invia una transazione.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Errore: CreateThread(StartNode) non riuscito</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Attenzione: lo spazio su disco è scarso </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Impossibile collegarsi alla porta %d su questo computer. Probabilmente Bitcoin è già in esecuzione.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Attenzione: si prega di controllare che la data del computer e l&apos;ora siano corrette. Se il vostro orologio è sbagliato Bitcoin non funziona correttamente.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts
new file mode 100644 (file)
index 0000000..4b03d18
--- /dev/null
@@ -0,0 +1,1814 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="nb">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Om Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; versjon</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Utviklerne
+
+Dette er eksperimentell programvare.
+
+Distribuert under MIT/X11 programvarelisensen, se medfølgende fil license.txt eller http://www.opensource.org/licenses/mit-license.php.
+
+Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Adressebok</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Dette er dine Bitcoin adresser for å motta betalinger.  Du kan gi en separat adresse til hver avsender slik at du kan holde oversikt over hvem som betaler deg.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Dobbeltklikk for å redigere adresse eller merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Lag en ny adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation> &amp;Ny adresse...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Kopier den valgte adressen til systemets utklippstavle</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Kopier til utklippstavle</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Slett den valgte adressen fra listen. Bare adresser for sending kan slettes.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Slett</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Eksporter adressebok</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommaseparert fil (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Feil ved eksportering</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kunne ikke skrive til filen %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(ingen merkelapp)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Angi adgangsfrase</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Ny adgangsfrase</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Gjenta ny adgangsfrase</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Skriv inn den nye adgangsfrasen for lommeboken.&lt;br/&gt;Vennligst bruk en adgangsfrase med &lt;b&gt;10 eller flere tilfeldige tegn&lt;/b&gt;, eller &lt;b&gt;åtte eller flere ord&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Krypter lommebok</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Denne operasjonen krever adgangsfrasen til lommeboken for å låse den opp.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Lås opp lommebok</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Denne operasjonen krever adgangsfrasen til lommeboken for å dekryptere den.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Dekrypter lommebok</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Endre adgangsfrase</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Skriv inn gammel og ny adgangsfrase for lommeboken.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Bekreft kryptering av lommebok</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ADVARSEL: Hvis du krypterer lommeboken og mister adgangsfrasen vil du &lt;b&gt;MISTE ALLE DINE BITCOINS&lt;/b&gt;!
+Er du sikker på at du vil kryptere lommeboken?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Lommebok kryptert</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Advarsel: Caps lock tasten er på.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Kryptering av lommebok feilet</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Kryptering av lommebok feilet på grunn av en intern feil. Din lommebok ble ikke kryptert.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Bitcoin vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine bitcoins fra å bli stjålet om skadevare infiserer datamaskinen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>De angitte adgangsfrasene er ulike.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Opplåsing av lommebok feilet</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Adgangsfrasen angitt for dekryptering av lommeboken var feil.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Dekryptering av lommebok feilet</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Lommebokens adgangsfrase ble endret.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin Lommebok</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Synkroniserer med nettverk...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Synkronisering av blokk-kjede igang</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Oversikt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Vis generell oversikt over lommeboken</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transaksjoner</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Vis transaksjonshistorikk</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Adressebok</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Rediger listen over adresser og deres merkelapper</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Motta bitcoins</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Vis listen over adresser for mottak av betalinger</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Send bitcoins</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Send bitcoins til en adresse</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Avslutt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Avslutt applikasjonen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation> &amp;Om %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Vis informasjon om Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Innstillinger...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Endre innstillinger for bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Åpne &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Vis Bitcoin-vinduet</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Eksporter...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Eksporter visningen til en fil</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Krypter Lommebok</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Krypter eller dekrypter lommebok</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Endre Adgangsfrase</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Endre adgangsfrasen brukt for kryptering av lommebok</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Om &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Vis informasjon om Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Fil</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Innstillinger</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Hjelp</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Verktøylinje for faner</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Verktøylinje for handlinger</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnett]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n aktiv forbindelse til Bitcoin-nettverket</numerusform>
+            <numerusform>%n aktive forbindelser til Bitcoin-nettverket</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Lastet ned %1 av %2 blokker med transaksjonshistorikk.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Lastet ned %1 blokker med transaksjonshistorikk.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>for %n sekund siden</numerusform>
+            <numerusform>for %n sekunder siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>for %n minutt siden</numerusform>
+            <numerusform>for %n minutter siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>for %n time siden</numerusform>
+            <numerusform>for %n timer siden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>for %n dag siden</numerusform>
+            <numerusform>for %n dager siden</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Ajour</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Kommer ajour...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Siste mottatte blokk ble generert %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Denne transaksjonen overstiger størrelsesbegrensningen.  Du kan likevel sende den med et gebyr på %1, som går til nodene som prosesserer transaksjonen din og støtter nettverket.  Vil du betale gebyret?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Sender...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Sendt transaksjon</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Innkommende transaksjon</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Dato: %1
+Beløp: %2
+Type: %3
+Adresse: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Lommeboken er &lt;b&gt;kryptert&lt;/b&gt; og for tiden &lt;b&gt;ulåst&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Lommeboken er &lt;b&gt;kryptert&lt;/b&gt; og for tiden &lt;b&gt;låst&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Enhet for å vise beløp i: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Velg standard underenhet som skal vises i grensesnittet og ved sending av mynter</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Vis adresser i transaksjonslisten</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Rediger adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Merkelappen koblet til denne adressen i adresseboken</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Adresse</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Adressen til denne oppføringen i adresseboken. Denne kan kun endres for utsendingsadresser.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Ny mottaksadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Ny utsendingsadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Rediger mottaksadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Rediger utsendingsadresse</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Den oppgitte adressen &quot;%1&quot; er allerede i adresseboken.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>en oppgitte adressen &quot;%1&quot; er ikke en gyldig bitcoin-adresse.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Kunne ikke låse opp lommeboken.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Generering av ny nøkkel feilet.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Start Bitcoin ved oppstart</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Start Bitcoin automatisk når datamaskinen blir slått på</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimer til systemkurv istedenfor oppgavelinjen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Vis kun ikon i systemkurv etter minimering av vinduet</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Sett opp port vha. &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Åpne automatisk Bitcoin klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimér ved lukking</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimerer vinduet istedenfor å avslutte applikasjonen når vinduet lukkes. Når dette er slått på avsluttes applikasjonen kun ved å velge avslutt i menyen.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Koble til gjennom SOCKS4 proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Koble til Bitcoin nettverket gjennom en SOCKS4 mellomtjener (f.eks. for tilkobling gjennom Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Mellomtjeners &amp;IP: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-adresse for mellomtjener (f.eks. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Port: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Port for mellomtjener (f.eks. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Valgfritt transaksjonsgebyr per kB som sikrer at dine transaksjoner blir raskt prosessert.  De fleste transaksjoner er 1 kB.  Et gebyr på 0.01 er anbefalt.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Betal transaksjons&amp;gebyr</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Valgfritt transaksjonsgebyr per kB som sikrer at dine transaksjoner blir raskt prosessert. De fleste transaksjoner er 1 kB. Et gebyr på 0.01 er anbefalt.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Hoved</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Visning</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Innstillinger</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Skjema</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Antall transaksjoner:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Ubekreftet</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Lommebok</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Siste transaksjoner&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Din nåværende saldo</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Totalt antall ubekreftede transaksjoner som ikke telles med i saldo enda</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Totalt antall transaksjoner i lommeboken</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Send Bitcoins</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Send til flere enn én mottaker</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Legg til mottaker...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Fjern alle</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Fjern alle transaksjonsfelter</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Bekreft sending</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Send</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; til %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Bekreft sending av bitcoins</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Er du sikker på at du vil sende %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> og </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Mottaksadressen er ugyldig, prøv igjen.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Beløpen som skal betales må være over 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Beløpet overstiger saldoen din</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Totalen overgår din saldo når transaksjonsgebyret på %1 tas med</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Duplikate adresser funnet, kan kun sende til hver adresse en gang i hver sendeoperasjon</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Feil: Opprettelse av transaksjon feilet  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Feil: Transaksjonen ble avvist.  Dette kan skje hvis noen av myntene i lommeboken allerede var brukt, f.eks. hvis du kopierte wallet.dat og mynter ble brukt i kopien uten å bli markert brukt her.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Skjema</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>&amp;Beløp:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Betal &amp;Til:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Skriv inn en merkelapp for denne adressen for å legge den til i din adressebok</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Merkelapp:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Adressen betalingen skal sendes til  (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Velg adresse fra adresseboken</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Lim inn adresse fra utklippstavlen</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Fjern denne mottakeren</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Skriv inn en Bitcoin adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Åpen for %1 blokker</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Åpen til %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/frakoblet?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/ubekreftet</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 bekreftelser</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Status:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, har ikke blitt kringkastet uten problemer enda.</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, kringkast gjennom %1 node</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, kringkast gjennom %1 noder</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Dato:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Kilde:&lt;/b&gt; Generert&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Fra:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>ukjent</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Til:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (din, merkelapp: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (din)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Kredit:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 modnes om %2 flere blokker)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(ikke akseptert)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Debet:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Transaksjonsgebyr:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Nettobeløp:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Melding:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Kommentar:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Genererte mynter må vente 120 blokker før de kan brukes.  Da du genererte denne blokken ble den kringkastet på nettverket for å bli lagt til i kjeden av blokker.  Hvis den ikke kommer med i kjeden vil den endre seg til &quot;ikke akseptert og pengene vil ikke kunne brukes.  Dette vil noen ganger skje hvis en annen node genererer en blokk noen sekunder i tid fra din egen.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Transaksjonsdetaljer</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Her vises en detaljert beskrivelse av transaksjonen</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Dato</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Beløp</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Åpen for %n blokk</numerusform>
+            <numerusform>Åpen for %n blokker</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Åpen til %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Frakoblet (%1 bekreftelser)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Ubekreftet (%1 av %2 bekreftelser)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Bekreftet (%1 bekreftelser)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Utvunnet saldo vil bli tilgjengelig om %n blokk</numerusform>
+            <numerusform>Utvunnet saldo vil bli tilgjengelig om %n blokker</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Denne blokken har ikke blitt mottatt av noen andre noder og vil sannsynligvis ikke bli akseptert!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generert men ikke akseptert</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Mottatt med</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Mottatt fra</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Sendt til</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Betaling til deg selv</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Utvunnet</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>-</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Transaksjonsstatus. Hold muspekeren over dette feltet for å se antall bekreftelser.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Dato og tid for da transaksjonen ble mottat.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Type transaksjon.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Mottaksadresse for transaksjonen</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Beløp fjernet eller lagt til saldo.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Alle</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>I dag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Denne uken</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Denne måneden</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Forrige måned</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Dette året</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Intervall...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Mottatt med</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Sendt til</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Til deg selv</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Utvunnet</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Andre</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Skriv inn adresse eller merkelapp for søk</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Minimumsbeløp</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Kopier adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Kopier merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Rediger merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Vis detaljer...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Eksporter transaksjonsdata</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommaseparert fil (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Bekreftet</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Dato</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Merkelapp</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Adresse</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Beløp</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Feil ved eksport</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kunne ikke skrive til filen %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Intervall:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>til</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Sender...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoin versjon</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Bruk:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Send kommando til -server eller bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Vis liste over kommandoer
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Få hjelp til kommando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Innstillinger:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Angi konfigurasjonsfil (standard: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Angi pid-fil (standard: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Generer mynter
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Ikke generer mynter
+
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Start minimert
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Angi mappe for data
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Angi tidsavbrudd for forbindelser (i millisekunder)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Koble til gjennom sock4 mellomtjener
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Tillat DNS-oppslag for addnode og connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Legg til node for tilkobling
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Koble kun til en oppgitt node
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Ikke ta imot tilkoblinger fra utsiden
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Ikke forsøk å bruke UPnP for å sette opp lytteport</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Forsøk å bruke UPnP for å sette opp lytteport</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Gebyr per kB som skal legges til transaksjoner du sender
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Ta imot kommandoer fra både kommandolinje og JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Kjør som bakgrunnsprosess og ta imot kommandoer
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Bruk testnettet
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Brukernavn for JSON-RPC forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Passord for JSON-RPC forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Lytt etter JSON-RPC forbindelser på &lt;port&gt; (standard: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Tillat JSON-RPC forbindelser fra oppgitt IP-adresse
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Send kommandoer til noden som kjører på &lt;ip&gt; (standard: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Sett størrelsen på lager for nye nøkler til &lt;n&gt; (standard: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Se igjennom blokk-kjeden på nytt etter manglende lommebokstransaksjoner
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>SSL innstillinger: (se Bitcoin Wikien for instruksjoner for SSL-oppsett)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Bruk OpenSSL (https) for JSON-RPC forbindelser
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Fil for tjenersertifikat (standard: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Privat nøkkel for tjener (standard: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Akseptable krypteringsmetoder (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Denne hjelpemeldingen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Kunne ikke låse datamappen %s.  Bitcoin kjører sannsynligvis allerede.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Laster adresser...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Feil ved lasting av addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Laster blokkindeks...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Feil ved lasting av blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Laster lommebok...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Feil ved lasting av wallet.dat: Skadde data i lommeboken      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Feil ved lasting av wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Leser gjennom...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Ferdig med lasting</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Ugyldig -proxy adresse for mellomtjener</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Ugyldig gebyrbeløp for -paytxfee=&lt;beløp&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Advarsel: -paytxfee er satt veldig høyt.  Dette er transaksjonsgebyret du betaler når du sender en transaksjon.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Feil: CreateThread(StartNode) feilet</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Advarsel: Lite ledig diskplass  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Klarer ikke binde til port %d på denne datamaskinen.  Bitcoin kjører sannsynligvis allerede.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Advarsel: Vennligst sjekk at dato og klokke er riktig innstilt på datamaskinen.  Hvis klokken er feil vil ikke Bitcoin fungere ordentlig.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts
new file mode 100644 (file)
index 0000000..5925bf2
--- /dev/null
@@ -0,0 +1,1815 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="nl">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Over Bitcoin
+</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; versie</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Copyright © 2009-2012 Bitcoin Ontwikkelaars
+
+Dit is experimentele software.
+
+Gedistribueerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand license.txt of http://www.opensource.org/licenses/mit-license.php.
+
+Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in de OpenSSL Toolkit (http://www.openssl.org/) en cryptografische software gemaakt door Eric Young (eay@cryptsoft.com) en UPnP software geschreven door Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Adresboek</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Dit zijn uw Bitcoin-adressen om betalingen te ontvangen. U kunt er voor kiezen om een adres aan te maken voor elke afzender. Op deze manier kunt u bijhouden wie al aan u betaald heeft.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Dubbelklik om adres of label te wijzigen</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Maak een nieuw adres aan</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Nieuw Adres...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Kopieer het huidig geselecteerde adres naar het klembord</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Kopieer naar Klembord</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Verwijder het huidige geselecteerde adres van de lijst. Alleen zend-adressen kunnen verwijderd worden, niet uw ontvangstadressen.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Verwijder</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Exporteer Gegevens van het Adresboek</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommagescheiden bestand (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Fout bij exporteren</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kon niet schrijven naar bestand %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Label</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Adres</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(geen label)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialoog</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>TekstLabel</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Huidig wachtwoord</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Nieuwe wachtwoord</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Herhaal wachtwoord</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Vul een nieuw wachtwoord in voor uw portemonnee. &lt;br/&gt; Gebruik een wachtwoord van &lt;b&gt;10 of meer lukrake karakters&lt;/b&gt;, of &lt;b&gt; acht of meer woorden&lt;/b&gt; . </translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Versleutel portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Deze operatie vereist uw portemonneewachtwoord om de portemonnee te openen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Open portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Deze operatie vereist uw portemonneewachtwoord om de portemonnee te ontsleutelen</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Ontsleutel portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Wijzig wachtwoord</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Vul uw oude en nieuwe portemonneewachtwoord in.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Bevestig versleuteling van de portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>WAARSCHUWING: Wanneer uw portemonnee wordt versleuteld en u verliest uw wachtwoord, dan verliest u&lt;b&gt;AL UW BITCOINS&lt;/b&gt;!
+Bent u er zeker van uw dat u uw portemonnee wilt versleutelen?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Portemonnee versleuteld</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Waarschuwing: De Caps-Lock-toets staat aan.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Portemonneeversleuteling mislukt</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Portemonneeversleuteling mislukt door een interne fout, Uw portemonnee is niet versleuteld.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Bitcoin zal nu afsluiten om het versleutelingsproces te voltooien. Onthoud dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw bitcoins stelen.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Het opgegeven wachtwoord is niet correct</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Portemonnee openen mislukt</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Het opgegeven wachtwoord voor de portemonnee-ontsleuteling is niet correct.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Portemonnee-ontsleuteling mislukt</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Portemonneewachtwoord is succesvol gewijzigd</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin-portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Synchroniseren met netwerk...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Bezig met blokkenketen-synchronisatie</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Overzicht</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Toon algemeen overzicht van de portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transacties</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Blader door transactieverleden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Adresboek</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Bewerk de lijst van opgeslagen adressen en labels</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Ontvang munten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Toon lijst van adressen om betalingen mee te ontvangen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Verstuur munten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Verstuur munten naar een bitcoin-adres</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Afsluiten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Programma afsluiten</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;Over %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Laat informatie zien over Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opties...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Wijzig instellingen van Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Open &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Toon Bitcoin-venster </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exporteer...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Exporteer huidige overzicht naar een bestand</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Versleutel Portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Versleutel of ontsleutel portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Wijzig Wachtwoord</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>wijzig het wachtwoord voor uw portemonneversleuteling</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>Over &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Toon informatie over Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Bestand</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Instellingen</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Hulp</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Tab-werkbalk</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Actie-werkbalk</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnetwerk]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n actieve connectie naar Bitcoinnetwerk</numerusform>
+            <numerusform>%n actieve connecties naar Bitcoinnetwerk</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>%1 van %2 blokken van transactiehistorie opgehaald.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>%1 blokken van transactiehistorie opgehaald.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n seconde geleden</numerusform>
+            <numerusform>%n seconden geleden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n minuut geleden</numerusform>
+            <numerusform>%n minuten geleden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n uur geleden</numerusform>
+            <numerusform>%n uur geleden</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n dag geleden</numerusform>
+            <numerusform>%n dagen geleden</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Bijgewerkt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Aan het bijwerken...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Laatst ontvangen blok is %1 gegenereerd.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Deze transactie overschrijdt de groottelimiet. Om de transactie alsnog te versturen kunt u transactiekosten betalen van %1. Deze transactiekosten gaan naar de nodes die uw transactie verwerken en het helpt op deze manier bij het ondersteunen van het netwerk. Wilt u de transactiekosten betalen?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Versturen...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Verzonden transactie</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Binnenkomende transactie</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Datum: %1
+Bedrag: %2
+Type: %3
+Adres: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Portemonnee is &lt;b&gt;versleuteld&lt;/b&gt; en momenteel &lt;b&gt;geopend&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Portemonnee is &lt;b&gt;versleuteld&lt;/b&gt; en momenteel &lt;b&gt;gesloten&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Eenheid om bedrag in te tonen:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Kies de standaard onderverdelingseenheid om weer te geven in uw programma, en voor het versturen van munten</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Toon adressen in uw transactielijst</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Bewerk Adres</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Label</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Het label dat geassocieerd is met dit adres</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Adres</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Het adres dat geassocieerd is met deze adresboek-opgave. Dit kan alleen worden veranderd voor zend-adressen.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Nieuw ontvangstadres</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Nieuw adres om naar te verzenden</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Bewerk ontvangstadres</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Bewerk adres om naar te verzenden</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Het opgegeven adres &quot;%1&quot; bestaat al in uw adresboek.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>Het opgegeven adres &quot;%1&quot; is een ongeldig bitcoinadres</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Kon de portemonnee niet openen.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Genereren nieuwe sleutel mislukt.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>Start &amp;Bitcoin wanneer het systeem opstart</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Start Bitcoin automatisch wanneer de computer wordt aangezet</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimaliseer naar het systeemvak in plaats van de taakbalk</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Laat alleen een systeemvak-icoon zien wanneer het venster geminimaliseerd is</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Portmapping via &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Open de Bitcoin-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>Minimaliseer bij &amp;sluiten van het venster</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimaliseer het venster in de plaats van de applicatie af te sluiten als het venster gesloten wordt. Wanneer deze optie aan staan, kan de applicatie alleen worden afgesloten door Afsluiten te kiezen in het menu.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Verbind via SOCKS4 proxy: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Verbind met het Bitcoin-netwerk door een SOCKS4 proxy (bijv. wanneer Tor gebruikt wordt)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Proxy &amp;IP:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-adres van de proxy (bijv. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Poort:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Poort waarop de proxy luistert (bijv. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Optionele transactiekosten per kB die helpen om uw transacties snel te verwerken. De meeste transacties zijn 1 kB. Transactiekosten van 0,01 wordt aangeraden</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Betaal &amp;transactiekosten</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Optionele transactiekosten per kB die helpen om uw transacties snel te verwerken. De meeste transacties zijn 1 kB. Transactiekosten van 0,01 wordt aangeraden</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Algemeen</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Beeldscherm</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Opties</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Vorm</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Aantal transacties:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Onbevestigd:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Portemonnee</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Recente transacties&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Uw huidige saldo</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Totaal aantal transacties dat nog moet worden bevestigd, en nog niet is meegeteld in uw huidige saldo </translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Totaal aantal transacties in uw portemonnee</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Verstuur munten</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Verstuur aan verschillende ontvangers ineens</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>Voeg &amp;ontvanger toe...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Verwijder alles</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Verwijder alle transactievelden</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Saldo:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Bevestig de verstuuractie</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Verstuur</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; aan %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Bevestig versturen munten</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Weet u zeker dat u %1 wil versturen?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> en </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Het ontvangstadres is niet geldig, controleer uw opgave.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Het ingevoerde gedrag moet groter zijn dan 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Bedrag overschrijdt uw huidige saldo</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Dubbel adres gevonden, u kunt slechts eenmaal naar een bepaald adres verzenden per verstuurtransactie</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Fout: Aanmaak transactie mislukt</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Fout: De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Vorm</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>Bedra&amp;g:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Betaal &amp;Aan:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Vul een label in voor dit adres om het toe te voegen aan uw adresboek</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Label:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Het adres waaraan u wilt betalen  (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Kies adres uit adresboek</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Plak adres vanuit klembord</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Verwijder deze ontvanger</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Vul een Bitcoinadres in (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Openen voor %1 blokken</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Openen totdat %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/niet verbonden?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/onbevestigd</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 bevestigingen</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Status:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, is nog niet succesvol uitgezonden</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, uitgezonden naar %1 node</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, uitgezonden naar %1 nodes</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Datum:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Bron:&lt;/b&gt;Gegenereerd&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Van:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>onbekend</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt; Aan:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation>(Uw adres, label:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation>(uw)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Bij:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 komt beschikbaar na %2 blokken)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(niet geaccepteerd)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Af:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Transactiekosten:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Netto bedrag:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Bericht:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Opmerking:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Gegeneerde munten moeten 120 blokken wachten voor ze kunnen worden uitgegeven. Uw net gegenereerde blok is uitgezonden aan het netwerk om te worden toegevoegd aan de blokkenketen. Als het niet wordt geaccepteerd in de keten, zal het blok als &quot;ongeldig&quot; worden aangemerkt en kan het niet worden uitgegeven. Dit kan soms gebeuren als een andere node net iets sneller een blok heeft gegenereerd; een paar seconden voor het uwe.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Transactiedetails</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Dit venster laat een uitgebreide beschrijving van de transactie zien</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Datum</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Adres</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Bedrag</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Open gedurende %n blok</numerusform>
+            <numerusform>Open gedurende %n blokken</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Open tot %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Niet verbonden (%1 bevestigingen)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Onbevestigd (%1 van %2 bevestigd)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Bevestigd (%1 bevestigingen)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Ontgonnen saldo komt beschikbaar na %n blok</numerusform>
+            <numerusform>Ontgonnen saldo komt beschikbaar na %n blokken</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Dit blok is niet ontvangen bij andere nodes en zal waarschijnlijk niet worden geaccepteerd!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Gegenereerd maar niet geaccepteerd</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Ontvangen met</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Ontvangen van</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Verzonden aan</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Betaling aan uzelf</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Ontgonnen</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(nvt)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Datum en tijd waarop deze transactie is ontvangen.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Type transactie.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Ontvangend adres van transactie</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Bedrag verwijderd van of toegevoegd aan saldo</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Alles</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Vandaag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>Deze week</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>Deze maand</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Vorige maand</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Dit jaar</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Bereik...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Ontvangen met</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Verzonden aan</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Aan uzelf</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Ontgonnen</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Anders</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Vul adres of label in om te zoeken</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Min. bedrag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Kopieer adres</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Kopieer label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Bewerk label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Toon details...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Exporteer transactiegegevens</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Kommagescheiden bestand (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Bevestigd</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Datum</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Adres</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Bedrag</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Fout bij exporteren</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Kon niet schrijven naar bestand %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Bereik:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>naar</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Versturen...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoinversie</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Gebruik:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Stuur commando naar -server of bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>List van commando&apos;s
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Toon hulp voor een commando
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Opties:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Specifieer configuratiebestand (standaard: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Specifieer pid-bestand (standaard: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Genereer munten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Genereer geen munten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Geminimaliseerd starten
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Stel datamap in
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Specificeer de time-out tijd (in milliseconden)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Verbind via socks4 proxy
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Sta DNS-naslag toe voor addnode en connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Voeg een node toe om mee te verbinden
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Verbind alleen met deze node
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Sta geen verbindingen van buitenaf toe
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Probeer geen UPnP te gebruiken om de poort waarop geluisterd wordt te mappen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Probeer UPnP te gebruiken om de poort waarop geluisterd wordt te mappen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Kosten per kB om aan transacties toe te voegen die u verstuurt
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Aanvaard commandoregel en JSON-RPC commando&apos;s
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Draai in de achtergrond als daemon en aanvaard commando&apos;s
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Gebruik het testnetwerk
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Gebruikersnaam voor JSON-RPC verbindingen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Wachtwoord voor JSON-RPC verbindingen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Luister voor JSON-RPC verbindingen op &lt;poort&gt; (standaard: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Sta JSON-RPC verbindingen van opgegeven IP adres toe
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Verstuur commando&apos;s naar proces dat op &lt;ip&gt; draait (standaard: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Stel sleutelpoelgrootte in op &lt;n&gt; (standaard: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Doorzoek de blokkenketting op ontbrekende portemonnee-transacties
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL opties: (zie de Bitcoin wiki voor SSL instructies)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Gebruik OpenSSL (https) voor JSON-RPC verbindingen
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Certificaat-bestand voor server (standaard: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Geheime sleutel voor server (standaard: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Aanvaardbare ciphers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Dit helpbericht
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Kan geen lock op de gegevensdirectory %s verkrijgen. Bitcoin draait vermoedelijk reeds.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Adressen aan het laden...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Fout bij laden van bestand addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Blokindex aan het laden...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Fout bij laden van bestand addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Portemonnee aan het laden...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Fout bij het laden van wallet.dat: Portemonnee corrupt
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Fout bij het laden van wallet.dat: Portemonnee vereist nieuwere versie van Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Fout bij laden van bestand wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Opnieuw aan het scannen ...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Klaar met laden</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Foutief -proxy adres</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Ongeldig bedrag voor -paytxfee=&lt;bedrag&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Waarschuwing: -paytxfee is zeer hoog ingesteld.  Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Fout: CreateThread(StartNode) is mislukt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Waarschuwing: Weinig schijfruimte over  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Kan niet binden aan poort %d op deze computer. Bitcoin draait vermoedelijk reeds.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal Bitcoin niet correct werken.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts
new file mode 100644 (file)
index 0000000..22037b8
--- /dev/null
@@ -0,0 +1,1808 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt_BR">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Sobre o Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; versão</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Catálogo de endereços</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Estes são os seus endereços Bitcoin para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Clique duas vezes para editar o endereço ou o etiqueta</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Criar um novo endereço</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp; Novo endereço ...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Copie o endereço selecionado para a área de transferência do sistema</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp; Copie para a área de transferência do sistema</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Excluir o endereço selecionado da lista. Apenas endereços de envio podem ser excluídos.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp; Excluir</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Exportação de dados do Catálogo de Endereços</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Arquivo separado por vírgulas (*. csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Erro ao exportar</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Could not write to file %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Rótulo</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Endereço</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(Sem rótulo)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Diálogo</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>TextoDoRótulo</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Digite a frase de segurança</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Nova frase de segurança</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Repita a nova frase de segurança</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Digite a nova frase de seguraça da sua carteira. &lt;br/&gt; Por favor, use uma frase de &lt;b&gt;10 ou mais caracteres aleatórios,&lt;/b&gt; ou &lt;b&gt;oito ou mais palavras.&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Criptografar carteira</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Esta operação precisa de sua frase de segurança para desbloquear a carteira.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Desbloquear carteira</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Esta operação precisa de sua frase de segurança para descriptografar a carteira.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Descriptografar carteira</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Alterar frase de segurança</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Digite a frase de segurança antiga e nova para a carteira.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Confirmar criptografia da carteira</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>AVISO: Se você criptografar sua carteira e perder sua senha, você vai &lt;b&gt;perder todos os seus BITCOINS!&lt;/b&gt; Tem certeza de que deseja criptografar sua carteira?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Carteira criptografada</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>A criptografia da carteira falhou</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>A criptografia da carteira falhou devido a um erro interno. Sua carteira não estava criptografada.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation type="unfinished">Bitcoin will close now to finish the encryption process. Lembre-se que sua carteira criptografada não poderá proteger totalmente os seus bitcoins de serem roubados por softwares maldosos que infectem seu computador.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation type="unfinished">A frase de segurança fornecida não confere.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>A abertura da carteira falhou</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>A frase de segurança digitada para a descriptografia da carteira estava incorreta.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>A descriptografia da carteira falhou</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>A frase de segurança da carteira foi alterada com êxito.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Carteira Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Sincronizando com a rede...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Sincronização da corrente de blocos em andamento</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Visão geral</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Mostrar visão geral da carteira</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Transações</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Navegar pelo histórico de transações</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Catálogo de endereços</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Editar a lista de endereços e rótulos</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Receber moedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Mostrar a lista de endereços para receber pagamentos</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;Enviar moedas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Enviar moedas para um endereço bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>E&amp;xit</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Sair da aplicação</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;About %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Mostrar informação sobre Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Opções...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Modificar opções de configuração para bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Abrir &amp;Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Mostrar a janela Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Exportar...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Export para arquivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Criptografar Carteira</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Criptografar ou decriptogravar carteira</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Mudar frase de segurança</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Mudar a frase de segurança utilizada na criptografia da carteira</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>About &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Mostrar informação sobre Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp; Arquivo</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>E configurações</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp; Ajuda</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Barra de ferramentas</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Barra de ações</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n conexão ativa na rede Bitcoin</numerusform>
+            <numerusform>%n conexões ativas na rede Bitcoin</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Carregados %1 de %2 blocos do histórico de transações.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Carregados %1 blocos do histórico de transações.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n segundo atrás</numerusform>
+            <numerusform>%n segundos atrás</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n minutos atrás</numerusform>
+            <numerusform>%n minutos atrás</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n hora atrás</numerusform>
+            <numerusform>%n horas atrás</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n dia atrás</numerusform>
+            <numerusform>%n dias atrás</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Atualizado</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Recuperando o atraso ...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Last received block was generated %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Sending...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Sent transaction</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Incoming transaction</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Data: %1
+Quantidade: %2
+Tipo: %3
+Endereço: %4</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Unit to show amounts in: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Choose the default subdivision unit to show in the interface, and when sending coins</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Edit Address</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Label</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>The label associated with this address book entry</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Address</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>The address associated with this address book entry. This can only be modified for sending addresses.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>New receiving address</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>New sending address</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Edit receiving address</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Edit sending address</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>The entered address &quot;%1&quot; is already in the address book.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>The entered address &quot;%1&quot; is not a valid bitcoin address.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Could not unlock wallet.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>New key generation failed.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Start Bitcoin on window system startup</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Automatically start Bitcoin after the computer is turned on</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Minimize to the tray instead of the taskbar</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Show only a tray icon after minimizing the window</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Map port using &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>M&amp;inimize on close</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Connect through SOCKS4 proxy:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>Proxy &amp;IP: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP address of the proxy (e.g. 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Port: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Port of the proxy (e.g. 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Pay transaction &amp;fee</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Main</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Display</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Options</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Form</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Balance:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Number of transactions:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Unconfirmed:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Recent transactions&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Your current balance</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Total number of transactions in wallet</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Send Coins</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Send to multiple recipients at once</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Add recipient...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Clear all</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Balance:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Confirm the send action</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Send</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Confirm send coins</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Are you sure you want to send %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> and </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>The recepient address is not valid, please recheck.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>The amount to pay must be larger than 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Amount exceeds your balance</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Total exceeds your balance when the %1 transaction fee is included</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Duplicate address found, can only send to each address once in one send operation</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Error: Transaction creation failed  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Form</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>A&amp;mount:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Pay &amp;To:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Enter a label for this address to add it to your address book</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Label:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Choose address from address book</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Paste address from clipboard</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Remove this recipient</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Open for %1 blocks</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Open until %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/offline?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/unconfirmed</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 confirmations</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Status:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, has not been successfully broadcast yet</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, broadcast through %1 node</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, broadcast through %1 nodes</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Date:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;From:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>unknown</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;To:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (yours, label: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (yours)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Credit:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 matures in %2 more blocks)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(not accepted)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Debit:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Transaction fee:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Net amount:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Message:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Comment:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Transaction details</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>This pane shows a detailed description of the transaction</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Date</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Address</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Amount</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Open for %n block</numerusform>
+            <numerusform>Open for %n blocks</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Open until %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Offline (%1 confirmations)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Unconfirmed (%1 of %2 confirmations)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Confirmed (%1 confirmations)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Mined balance will be available in %n more block</numerusform>
+            <numerusform>Mined balance will be available in %n more blocks</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>This block was not received by any other nodes and will probably not be accepted!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Generated but not accepted</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Received with</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Sent to</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Payment to yourself</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Mined</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(n/a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Transaction status. Hover over this field to show number of confirmations.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Date and time that the transaction was received.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Type of transaction.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Destination address of transaction.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Amount removed from or added to balance.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>All</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Today</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>This week</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>This month</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Last month</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>This year</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Range...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Received with</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Sent to</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>To yourself</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Mined</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Other</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Enter address or label to search</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Min amount</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Copy address</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Copy label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Edit label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Show details...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Export Transaction Data</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Comma separated file (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Confirmed</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Date</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Label</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Address</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Amount</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Error exporting</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Could not write to file %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Range:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>to</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Sending...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Bitcoin version</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Usage:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Send command to -server or bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>List commands
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Get help for a command
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Options:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Specify configuration file (default: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Specify pid file (default: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Generate coins
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Don&apos;t generate coins
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Start minimized
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Specify data directory
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Specify connection timeout (in milliseconds)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Connect through socks4 proxy
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Allow DNS lookups for addnode and connect
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Add a node to connect to
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Connect only to the specified node
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Don&apos;t accept connections from outside
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Don&apos;t attempt to use UPnP to map the listening port
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Attempt to use UPnP to map the listening port
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Fee per kB to add to transactions you send
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Accept command line and JSON-RPC commands
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Run in the background as a daemon and accept commands
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Use the test network
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Username for JSON-RPC connections
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Password for JSON-RPC connections
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Allow JSON-RPC connections from specified IP address
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Set key pool size to &lt;n&gt; (default: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Rescan the block chain for missing wallet transactions
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Use OpenSSL (https) for JSON-RPC connections
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Server certificate file (default: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Server private key (default: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>This help message
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Loading addresses...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Error loading addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Loading block index...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Error loading blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Loading wallet...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Error loading wallet.dat: Wallet corrupted      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Error loading wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Rescanning...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Done loading</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Invalid -proxy address</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Invalid amount for -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Error: CreateThread(StartNode) failed</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Warning: Disk space is low  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>beta</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts
new file mode 100644 (file)
index 0000000..10a4ce4
--- /dev/null
@@ -0,0 +1,1820 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>О Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;Bitcoin&lt;/b&gt; версия</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Все права защищены © 2009-2012 Разработчики Bitcoin
+
+Это экспериментальная программа.
+
+Распространяется на правах лицензии MIT/X11, см. файл license.txt или http://www.opensource.org/licenses/mit-license.php.
+
+Этот продукт включате ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (http://www.openssl.org/) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com) и ПО для работы с UPnP, написанное Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Адресная книга</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Здесь перечислены Ваши адреса для получения платежей.  Вы можете использовать их для того, чтобы давать разным людям разные адреса и таким образом иметь возможность отслеживать кто и сколько Вам платил, а так же поддерживать бо́льшую анонимность..</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Для того, чтобы изменить адрес или метку давжды кликните по изменяемому объекту</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Создать новый адрес</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Создать адрес...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Копировать текущий выделенный адрес в буфер обмена</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Kопировать</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Удалить выделенный адрес из списка (могут быть удалены только записи из адресной книги).</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Удалить</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Экспортировать адресную книгу</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Текст, разделённый запятыми (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Ошибка экспорта</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Невозможно записать в файл %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Метка</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Адрес</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>[нет метки]</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>TextLabel</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Введите пароль</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Новый пароль</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Повторите новый пароль</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Введите новый пароль для бумажника. &lt;br/&gt; Пожалуйста, используйте фразы из &lt;b&gt;10 или более случайных символов,&lt;/b&gt; или &lt;b&gt;восьми и более слов.&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Зашифровать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Для выполнения операции требуется пароль вашего бумажника.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Разблокировать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Для выполнения операции требуется пароль вашего бумажника.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Расшифровать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Сменить пароль</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Введите старый и новый пароль для бумажника.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Подтвердите шифрование бумажника</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>ВНИМАНИЕ: Если вы зашифруете бумажник и потеряете свой \200b\200bпароль, вы &lt;b&gt;ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОИНЫ!&lt;/b&gt;
+Вы действительно хотите зашифровать ваш бумажник?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Бумажник зашифрован</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Внимание: Caps Lock включен.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Не удалось зашифровать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Шифрование бумажника не удалось из-за внутренней ошибки. Ваш бумажник не был зашифрован.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткоины от кражи с помощью инфицирования вашего компьютера вредоносным ПО.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Введённые пароли не совпадают.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Разблокировка бумажника не удалась</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Указанный пароль не подходит.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Расшифрование бумажника не удалось</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Пароль бумажника успешно изменён.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Bitcoin-бумажник</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Синхронизация с сетью...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Идёт синхронизация цепочки блоков</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>О&amp;бзор</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Показать общий обзор действий с бумажником</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;Транзакции</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Показать историю транзакций</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Адресная книга</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Изменить список сохранённых адресов и меток к ним</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;Получение монет</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Показать список адресов для получения платежей</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>Отп&amp;равка монет</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Отправить монеты на указанный адрес</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>В&amp;ыход</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Закрыть приложение</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;О %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Показать информацию о Bitcoin&apos;е</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>Оп&amp;ции...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Изменить настройки</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>&amp;Показать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Показать окно бумажника</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Экспорт...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Экспортировать в файл</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Зашифровать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Зашифровать или расшифровать бумажник</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;Изменить пароль</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Изменить пароль шифрования бумажника</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>О &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Показать информацию о Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Файл</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Настройки</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Помощь</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Панель вкладок</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Панель действий</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[тестовая сеть]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n активное соединение с сетью</numerusform>
+            <numerusform>%n активных соединений с сетью</numerusform>
+            <numerusform>%n активных соединений с сетью</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Загружено %1 из %2 блоков истории транзакций.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Загружено %1 блоков истории транзакций.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n секунду назад</numerusform>
+            <numerusform>%n секунды назад</numerusform>
+            <numerusform>%n секунд назад</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n минуту назад</numerusform>
+            <numerusform>%n минуты назад</numerusform>
+            <numerusform>%n минут назад</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n час назад</numerusform>
+            <numerusform>%n часа назад</numerusform>
+            <numerusform>%n часов назад</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n день назад</numerusform>
+            <numerusform>%n дня назад</numerusform>
+            <numerusform>%n дней назад</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Синхронизированно</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Синхронизируется...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Последний полученный блок был сгенерирован %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Данная транзакция превышает предельно допустимый размер.  Но Вы можете всё равно совершить ей, добавив комиссию в %1, которая отправится тем узлам, которые обработают Вашу транзакцию и поможет поддержать сеть.  Вы хотите добавить комиссию?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Отправка...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Исходящая транзакция</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Входящая транзакция</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Дата: %1
+Количество: %2
+Тип: %3
+Адрес: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>Бумажник &lt;b&gt;зашифрован&lt;/b&gt; и в настоящее время &lt;b&gt;разблокирован&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>Бумажник &lt;b&gt;зашифрован&lt;/b&gt; и в настоящее время &lt;b&gt;заблокирован&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;Измерять монеты в: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Единица измерения количества монет при отображении и при отправке</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Показывать адреса в списке транзакций</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Изменить адрес</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Метка</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Метка, связанная с данной записью</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Адрес</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Адрес, связанный с данной записью.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Новый адрес для получения</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Новый адрес для отправки</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Изменение адреса для получения</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Изменение адреса для отправки</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Введённый адрес «%1» уже находится в адресной книге.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>Введённый адрес «%1» не является правильным Bitcoin-адресом.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Не удается разблокировать бумажник.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Генерация нового ключа не удалась.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Запускать бумажник при входе в систему</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Автоматически запускать бумажник, когда включается компьютер</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;Cворачивать в системный лоток вместо панели задач</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Показывать только иконку в системном лотке при сворачивании окна</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Пробросить порт через &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Автоматически открыть порт для Bitcoin-клиента на роутере. Работает ТОЛЬКО если Ваш роутер поддерживает UPnP и данная функция включена.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>С&amp;ворачивать вместо закрытия</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Сворачивать вместо закрытия. Если данная опция будет выбрана — приложение закроется только после выбора соответствующего пункта в меню.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;Подключаться через SOCKS4 прокси:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Подключаться к сети Bitcoin через SOCKS4 прокси (например, при использовании Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>&amp;IP Прокси: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-адрес прокси (например 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>По&amp;рт: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Порт прокси-сервера (например 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Опциональная комиссия за каждый КБ транзакции, которая позволяет быть уверенным, что Ваша транзакция будет обработано быстро.  Большинство транзакций занимают 1КБ.  Рекомендуется комиссия 0.01.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Добавлять ко&amp;миссию</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Опциональная комиссия за каждый КБ транзакции, которая позволяет быть уверенным, что Ваша транзакция будет обработано быстро.  Большинство транзакций занимают 1КБ.  Рекомендуется комиссия 0.01.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Основное</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Отображение</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Опции</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Баланс:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Количество транзакций:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Не подтверждено:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Бумажник</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Последние транзакции&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Ваш текущий баланс</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Общая сумма всех транзакций, которые до сих пор не подтверждены, и до сих пор не учитываются в текущем балансе</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Общее количество транзакций в Вашем бумажнике</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Отправка</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Отправить нескольким получателям одновременно</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;Добавить получателя...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Очистить всё</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Удалить все поля транзакции</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Баланс:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Подтвердить отправку</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Отправить</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; адресату %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Подтвердите отправку монет</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Вы уверены, что хотите отправить %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> и </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Адрес получателя неверный, пожалуйста, перепроверьте.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Количество монет для отправки должно быть больше 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Количество отправляемых монет превышает Ваш баланс</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Сумма превысит Ваш баланс, если комиссия в %1 будет добавлена к транзакции</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Обнаружен дублирующийся адрес. Отправка на один и тот же адрес возможна только один раз за одну операцию отправки</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Ошибка: Создание транзакции не удалось  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Ошибка: В транзакции отказано.  Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой.  Или в случае кражи (компрометации) Вашего бумажника.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>Ко&amp;личество:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>Полу&amp;чатель:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Введите метку для данного адреса (для добавления в адресную книгу)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Метка:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Адрес получателя платежа (например 1LA5FtQhnnWnkK6zjFfutR7Stiit4wKd63)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Выберите адрес из адресной книги</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Вставить адрес из буфера обмена</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Удалить этого получателя</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Введите Bitcoin-адрес (например 1LA5FtQhnnWnkK6zjFfutR7Stiit4wKd63)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Открыто до получения %1 блоков</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Открыто до %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/оффлайн?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/не подтверждено</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 подтверждений</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Статус:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, ещё не было успешно разослано</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, разослано через %1 узел</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, разослано через %1 узлов</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Дата:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Источник:&lt;/b&gt; [сгенерированно]&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Отправитель:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>неизвестно</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Получатель:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (Ваш, метка:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (ваш)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Кредит:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 станет доступно через %2 блоков)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(не принято)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Дебет:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Комиссия:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Общая сумма:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Сообщение:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Комментарий:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Сгенерированные монеты должны подождать 120 блоков прежде, чем они смогут быть отправлены.  Когда Вы сгенерировали этот блок он был отправлен в сеть, чтобы он был добавлен к цепочке блоков.  Если данная процедура не удастся, статус изменится на «не подтверждено» и монеты будут непередаваемыми.  Такое может случайно происходить в случае, если другой узел сгенерирует блок на несколько секунд раньше.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Детали транзакции</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Данный диалог показывает детализированную статистику по выбранной транзакции</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Дата</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Адрес</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Количество</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Открыто для %n блока</numerusform>
+            <numerusform>Открыто для %n блоков</numerusform>
+            <numerusform>Открыто для %n блоков</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Открыто до %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Оффлайн (%1 подтверждений)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Не подтверждено (%1 из %2 подтверждений)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Подтверждено (%1 подтверждений)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Добытыми монетами можно будет воспользоваться через %n блок</numerusform>
+            <numerusform>Добытыми монетами можно будет воспользоваться через %n блока</numerusform>
+            <numerusform>Добытыми монетами можно будет воспользоваться через %n блоков</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Этот блок не был получен другими узлами и, возможно, не будет принят!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Сгенерированно, но не подтверждено</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Получено</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Получено от</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Отправлено</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Отправлено себе</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Добыто</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>[не доступно]</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Статус транзакции. Подведите курсор к нужному полю для того, чтобы увидеть количество подтверждений.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Дата и время, когда транзакция была получена.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Тип транзакции.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Адрес назначения транзакции.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Сумма, добавленная, или снятая с баланса.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Все</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Сегодня</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>На этой неделе</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>В этом месяце</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>За последний месяц</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>В этом году</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Промежуток...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Получено на</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Отправлено на</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Отправленные себе</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Добытые</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Другое</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Введите адрес или метку для поиска</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Мин. сумма</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Копировать адрес</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Копировать метку</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Изменить метку</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Показать детали...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Экспортировать данные транзакций</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Текс, разделённый запятыми (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Подтверждено</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Дата</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Метка</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Адрес</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Количество</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Ошибка экспорта</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Невозможно записать в файл %1.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Промежуток от:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>до</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Отправка....</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Версия</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Использование:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Отправить команду на сервер ( -server ) или демону
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Список команд
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Получить помощь по команде</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Опции:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Указать конфигурационный файл вместо используемого по умолчанию (bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Указать pid-файл вместо используемого по умолчанию (bitcoin.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Включить добычу монет
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Выключить добычу монет
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Запускать минимизированным
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Указать рабочую директорию
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Указать таймаут соединения (в миллисекундах)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Соединяться через socks4-прокси
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Разрешить поиск в DNS для комманд &quot;addnode&quot; и &quot;connect&quot;
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Добавить узел для соединения
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Соединяться только с указанным узлом
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Не принимать внешние соединения
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Не пытаться использовать UPnP
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Попытаться использовать UPnP для проброса прослушиваемого порта на роутере
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Комиссия (за каждый kB транзакции)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Принимать команды из командной строки и через JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Запустить в бекграунде (как демон) и принимать команды
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Использовать тестовую сеть
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Имя пользователя для JSON-RPC соединений
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Пароль для JSON-RPC соединений
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Слушать &lt;порт&gt; для JSON-RPC соединений (по умолчанию: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Разрешить JSON-RPC соединения с указанного адреса
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Отправлять команды на узел,запущенный на &lt;IP&gt; (по умолчанию: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Установить размер key pool&apos;а в &lt;n&gt; (по умолчанию: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Просканировать цепочку блоков в поисках пропущенных транзакций для бумажника
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>Опции SSL: (см. Bitcoin Wiki для инструкций)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Использовать OpenSSL (https) для JSON-RPC соединений
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Сертификат (публичный ключ) сервера (по умолчанию: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Закрытый ключ сервера (по умолчанию: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Допустимые Cipher&apos;ы для сервера (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Данная справка
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Невозможно установить блокировку на рабочую директорию %s.  Возможно, бумажник уже запущен.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Загрузка адресов...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Ошибка при загрузке addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Загрузка индекса блоков...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Ошибка при загрузке blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Загрузка бумажника...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Ошибка загрузки wallet.dat: Бумажник повреждён</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Ошибка загрузки wallet.dat: Для данного бумажника требуется более новая версия Bitcoin      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Ошибка при загрузке wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Сканирование...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Загрузка завершена</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Ошибка в адресе прокси</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Ошибка в сумме комиссии</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>ВНИМАНИЕ: Установлена слишком большая комиссия (-paytxfee=).  Данный параметр отвечает за комиссию, которую Вы будете добавлять к сумме при осуществлении транзакций.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Ошибка: Созданиние потока (запуск узла) не удался</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>ВНИМАНИЕ: На диске заканчивается свободное пространство  </translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Невозможно забиндить порт %d на данном компьютере.  Возможно, бумажник ужк запущен.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>ВНИМАНИЕ: Проверьте дату и время, установленные на Вашем компьютере. Если Ваши часы идут не правильно Bitcoin может наботать не корректно.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>бета</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts
new file mode 100644 (file)
index 0000000..70a13aa
--- /dev/null
@@ -0,0 +1,1823 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="uk">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>Про Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>Версія &lt;b&gt;Bitcoin&apos;a&lt;b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>Авторське право © 2009-2012 Розробники Bitcoin
+
+Це програмне забезпечення є експериментальним.
+
+Поширюється за ліцензією MIT/X11, додаткова інформація міститься у файлі license.txt, а також за адресою http://www.opensource.org/licenses/mit-license.php.
+
+Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (http://www.openssl.org/), криптографічне програмне забезпечення, написане Еріком Янгом (eay@cryptsoft.com), та функції для роботи з UPnP, написані Томасом Бернардом.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>Адресна книга</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>Це ваші адреси для отримання платежів. Ви можете давати різні адреси різним людям, таким чином маючи можливість відслідкувати хто конкретно і скільки вам заплатив. </translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>Двічі клікніть на адресу чи назву для їх зміни</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>Створити нову адресу</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;Створити адресу...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>Копіювати виділену адресу в буфер обміну</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;Копіювати</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>Видалити виділену адресу зі списку. Лише адреси з адресної книги можуть бути видалені.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;Видалити</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>Експортувати адресну книгу</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Файли відділені комами (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>Помилка при експортуванні</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>Неможливо записати у файл %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>Назва</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>Адреса</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(немає назви)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>Діалог</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>Текстова мітка</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>Введіть пароль</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>Новий пароль</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>Повторіть пароль</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>Введіть новий пароль для гаманця.&lt;br/&gt;Будь ласка, використовуйте паролі що містять &lt;b&gt; як мінімум 10 випадкових символів &lt;/b&gt; або &lt;b&gt; як мінімум 8 слів&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>Зашифрувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>Ця операція потребує пароль для розблокування гаманця.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>Розблокувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>Ця операція потребує пароль для дешифрування гаманця.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>Дешифрувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>Змінити пароль</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>Ввести старий та новий паролі для гаманця.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>Підтвердити шифрування гаманця</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>УВАГА: Якщо ви зашифруєте гаманець і забудете пароль, ви &lt;b&gt;ВТРАТИТЕ ВСІ СВОЇ БІТКОІНИ&lt;/b&gt;!
+Ви дійсно хочете зашифрувати свій гаманець?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>Гаманець зашифровано</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>Увага: Ввімкнено Caps Lock</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>Не вдалося зашифрувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>Виникла помилка під час шифрування гаманця. Ваш гаманець не було зашифровано.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>Біткоін-клієнт буде закрито для завершення процесу шифрування. Пам’ятайте, що шифрування гаманця не може повністю захистити ваші біткоіни від кражі, у випадку якщо ваш комп’ютер буде інфіковано шкідливими програмами.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>Введені паролі не співпадають.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>Не вдалося розблокувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>Введений пароль є невірним.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>Не вдалося розшифрувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>Пароль було успішно змінено.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>Гаманець</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>Синхронізація з мережею...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>Відбувається синхронізація ланцюжка блоків...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;Огляд</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>Показати загальний огляд гаманця</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>Пе&amp;реклади</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>Переглянути історію переказів</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;Адресна книга</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>Редагувати список збережених адрес та міток</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>О&amp;тримати</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>Показати список адрес для отримання платежів</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>В&amp;ідправити</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>Відправити монети на вказану адресу</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>&amp;Вихід</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>Вийти</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>П&amp;ро %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>Показати інформацію про Bitcoin</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;Параметри...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>Редагувати параметри</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>Показати &amp;гаманець</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>Показати вікно гаманця</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;Експорт...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>Експортувати в файл</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;Шифрування гаманця</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>Зашифрувати чи розшифрувати гаманець</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>Змінити парол&amp;ь</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>Змінити пароль, який використовується для шифрування гаманця</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>&amp;Про Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>Показати інформацію про Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;Файл</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Налаштування</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;Довідка</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>Панель вкладок</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>Панель дій</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[тестова мережа]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n активне з’єднання з мережею</numerusform>
+            <numerusform>%n активні з’єднання з мережею</numerusform>
+            <numerusform>%n активних з’єднань з мережею</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>Завантажено %1 з %2 блоків історії переказів.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>Завантажено %1 блоків історії транзакцій.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n секунду тому</numerusform>
+            <numerusform>%n секунди тому</numerusform>
+            <numerusform>%n секунд тому</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n хвилину тому</numerusform>
+            <numerusform>%n хвилини тому</numerusform>
+            <numerusform>%n хвилин тому</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n годину тому</numerusform>
+            <numerusform>%n години тому</numerusform>
+            <numerusform>%n годин тому</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n день тому</numerusform>
+            <numerusform>%n дня тому</numerusform>
+            <numerusform>%n днів тому</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>Синхронізовано</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>Синхронізується...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>Останній отриманий блок було згенеровано %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>Цей переказ перевищує максимально допустимий розмір. Проте ви можете здійснити її, додавши комісію в %1, яка відправиться тим вузлам що оброблять ваш переказ, та допоможе підтримати мережу. Ви хочете додати комісію?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>Відправлення...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>Надіслані перекази</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>Отримані перекази</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>Дата: %1
+Кількість: %2
+Тип: %3
+Адреса: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Зашифрований&lt;/b&gt; гаманець &lt;b&gt;розблоковано&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Зашифрований&lt;/b&gt; гаманець &lt;b&gt;заблоковано&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>В&amp;имірювати монети в: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>Виберіть одиницю вимірювання монет, яка буде відображатись в гаманці та при відправленні.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;Відображати адресу в списку переказів</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>Редагувати адресу</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;Мітка</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>Мітка, пов’язана з цим записом адресної книги</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;Адреса</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>Адреса, пов’язана з цим записом адресної книги.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>Нова адреса для отримання</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>Нова адреса для відправлення</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>Редагувати адресу для отримання</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>Редагувати адресу для відправлення</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>Введена адреса «%1» вже присутня в адресній книзі.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>Введена адреса «%1» не є коректною адресою в мережі Bitcoin.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>Неможливо розблокувати гаманець.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>Не вдалося згенерувати нові ключі.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;Запускати гаманець при вході в систему</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>Автоматично запускати гаманець при вмиканні комп’ютера</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>Мінімізувати &amp;у трей</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>Показувати лише іконку в треї після згортання вікна</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>Відображення порту через &amp;UPnP</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>Автоматично відкривати порт для клієнту біткоін на роутері. Працює лише якщо ваш роутер підтримує UPnP і ця функція увімкнена.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>Згортати замість закритт&amp;я</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>Згортати замість закриття. Якщо ця опція включена, програма закриється лише після вибору відповідного пункту в меню.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>Підключатись через &amp;SOCKS4-проксі:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>Підключатись до мережі Bitcoin через SOCKS4-проксі (наприклад при використанні Tor) </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>&amp;IP проксі: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>IP-адреса проксі-сервера (наприклад 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;Порт: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>Порт проксі-сервера (наприклад 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>Добровільна комісія за кожен Кб переказу, яка дозволяє бути впевненим у тому, що ваш переказ буде оброблено швидко. Розмір більшості переказів рівен 1 Кб. Рекомендована комісія: 0,01.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>Заплатити комісі&amp;ю</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>Добровільна комісія за кожен Кб переказу, яка дозволяє бути впевненим у тому, що ваш переказ буде оброблено швидко. Розмір більшості переказів рівен 1 Кб. Рекомендована комісія: 0,01.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>Головні</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>Відображення</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>Параметри</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>Баланс:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>Кількість переказів:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>Непідтверджені:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>Гаманець</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Недавні перекази&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>Ваш поточний баланс</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>Загальна сума всіх переказів, які ще не підтверджені, та до сих пір не враховуються в загальному балансі</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>Загальна кількість переказів в гаманці</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>Відправити</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>Відправити на декілька адрес</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>Дод&amp;ати одержувача... </translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>Очистити все</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>Видалити всі поля транзакції</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>Баланс:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>Підтвердити відправлення</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;Відправити</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; адресату %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>Підтвердіть відправлення</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>Ви впевнені що хочете відправити %1</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> і </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>Адреса отримувача невірна, будьласка перепровірте.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>Кількість монет для відправлення повинна бути більшою 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>Кількість монет для відправлення перевищує ваш баланс</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>Сума перевищить ваш баланс, якщо комісія %1 буде додана до вашого переказу</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>Знайдено адресу що дублюється. Відправлення на кожну адресу дозволяється лише один раз на кожну операцію переказу.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>Помилка: не вдалося створити переказ  </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>Помилка: переказ було відхилено.  Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>&amp;Кількість:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>&amp;Отримувач:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>Введіть мітку для цієї адреси для додавання її в адресну книгу</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;Мітка:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Адреса для отримувача платежу (наприклад, 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>Вибрати адресу з адресної книги</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>Вставити адресу</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>Видалити цього отримувача</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>Введіть адресу Bitcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>Відкрити для %1 блоків</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>Відкрити до %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/поза інтернетом?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/не підтверджено</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 підтверджень</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Статус:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, ще не було успішно розіслано</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, розіслано через %1 вузол</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, розіслано через %1 вузлів</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Дата:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;Джерело:&lt;/b&gt; згенеровано&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Відправник:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>невідомий</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Одержувач:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (Ваша, мітка: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (ваша)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Кредит:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 «дозріє» через %2 блоків)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(не прийнято)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Дебет:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Комісія за переказ:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;Загальна сума:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>Повідомлення:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>Коментар:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>Після генерації монет, потрібно зачекати 120 блоків, перш ніж їх можна буде використати.  Коли ви згенерували цей блок, його було відправлено в мережу для того, щоб він був доданий до ланцюжка блоків.  Якщо ця процедура не вдасться, статус буде змінено на «не підтверджено» і ви не зможете потратити згенеровані монету.  Таке може статись, якщо хтось інший згенерував блок на декілька секунд раніше.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>Деталі переказів</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>Даний діалог показує детальну статистику по вибраному переказу</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>Дата</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>Адреса</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>Кількість</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>Відкрити для %n блоку</numerusform>
+            <numerusform>Відкрити для %n блоків</numerusform>
+            <numerusform>Відкрити для %n блоків</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>Відкрити до %1</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>Поза інтернетом (%1 підтверджень)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>Непідтверджено (%1 із %2 підтверджень)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>Підтверджено (%1 підтверджень)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>Добутими монетами можна буде скористатись через %n блок</numerusform>
+            <numerusform>Добутими монетами можна буде скористатись через %n блоки</numerusform>
+            <numerusform>Добутими монетами можна буде скористатись через %n блоків</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>Цей блок не був отриманий жодними іншими вузлами і, ймовірно, не буде прийнятий!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>Згенеровано, але не підтверджено</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>Отримано</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>Отримано від</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>Відправлено</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>Відправлено собі</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>Добуто</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(недоступно)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>Статус переказу. Наведіть вказівник на це поле, щоб показати кількість підтверджень.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>Дата і час, коли переказ було отримано.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>Тип переказу.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>Адреса отримувача</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>Сума, додана чи знята з балансу.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>Всі</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>Сьогодні</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>На цьому тижні</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>На цьому місяці</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>Минулого місяця</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>Цього року</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>Проміжок</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>Отримані на</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>Відправлені на</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>Відправлені собі</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>Добуті</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>Інше</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>Введіть адресу чи мітку для пошуку</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>Мінімальна сума</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>Скопіювати адресу</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>Скопіювати мітку</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>Редагувати мітку</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>Показати деталі...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>Експортувати дані переказів</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>Файли, розділені комою (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>Підтверджені</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>Дата</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>Мітка</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>Адреса</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>Кількість</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>Ідентифікатор</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>Помилка експорту</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>Неможливо записати у файл %1</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>Діапазон від:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>до</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>Відправка...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>Версія</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>Вкористання:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>Відправити команду серверу -server чи демону
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>Список команд
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>Отримати довідку по команді
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>Параметри:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>Вкажіть файл конфігурації (за промовчуванням: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>Вкажіть pid-файл (за промовчуванням: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>Генерувати монети
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>Не генерувати монети
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>Запускати згорнутим
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>Вкажіть робочий каталог
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>Вкажіть таймаут з’єднання (в мілісекундах)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>Підключитись через SOCKS4-проксі
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>Дозволити пошук в DNS для команд «addnode» і «connect»
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>Додати вузол для підключення
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>Підключитись лише до вказаного вузла
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>Не приймати підключення ззовні
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>Не намагатись використовувати UPnP для відображення порту що прослуховується на роутері
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>Намагатись використовувати UPnP для відображення порту що прослуховується на роутері
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>Комісія за Кб
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>Приймати команди із командного рядка та команди JSON-RPC
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>Запустити в фоновому режимі (як демон) та приймати команди
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>Використовувати тестову мережу
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>Ім’я користувача для JSON-RPC-з’єднань
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>Пароль для JSON-RPC-з’єднань
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>Прослуховувати &lt;port&gt; для JSON-RPC-з’єднань (за промовчуванням: 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>Дозволити JSON-RPC-з’єднання з вказаної IP-адреси
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>Відправляти команди на вузол, запущений на &lt;ip&gt; (за промовчуванням: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>Встановити розмір пулу ключів &lt;n&gt; (за промовчуванням: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>Пересканувати ланцюжок блоків, в пошуку втрачених переказів
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+Параметри SSL: (див. Bitcoin Wiki)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>Використовувати OpenSSL (https) для JSON-RPC-з’єднань
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>Сертифікату сервера (за промовчуванням: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>Закритий ключ сервера (за промовчуванням: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>Допустимі шифри (за промовчуванням: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>Дана довідка
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>Неможливо встановити блокування на робочий каталог %s.  Можливо, гаманець вже запущено.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>Завантаження адрес...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>Помилка при завантаженні addr.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>Завантаження індексу блоків...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>Помилка при завантаженні blkindex.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>Завантаження гаманця...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>Помилка при завантаженні wallet.dat: Гаманець пошкоджено      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>Помилка при завантаженні wallet.dat: Гаманець потребує новішої версії Bitcoin&apos;а      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>Помилка при завантаженні wallet.dat      
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>Сканування...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>Завантаження завершене</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>Помилка в адресі проксі-сервера</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>Помилка у величині комісії</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>Увага: встановлено занадто велику комісію (-paytxfee).  Комісія зніматиметься кожен раз коли ви проводитимете перекази.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>Помилка: CreateThread(StartNode) дала збій</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>Увага: На диску мало вільного місця</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>Неможливо прив’язати до порту %d на цьому комп’ютері.  Молживо гаманець вже запущено.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>Увага: будь ласка, перевірте дату і час на свому комп’ютері.  Якщо ваш годинник йде неправильно, Bitcoin може працювати некоректно.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>бета</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts
new file mode 100644 (file)
index 0000000..73e7e6c
--- /dev/null
@@ -0,0 +1,1807 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>关于比特币</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;比特币&lt;/b&gt;版本</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>版权归比特币开发者所有  © 2009-2012
+
+这是一个实验性软件。
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>地址薄</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>这些是你接受支付的比特币地址。当支付时你可以给出不同的地址,以便追踪不同的支付者。</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>双击以编辑地址或标签</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>创建新地址</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>&amp;新地址...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>复制当前选中地址到系统剪贴板</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>&amp;复制到剪贴板</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>从列表中删除当前选中地址。只有发送地址可以被删除。</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>&amp;删除</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>导出地址薄数据</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>逗号分隔文件 (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>导出错误</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>无法写入文件 %1。</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>标签</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>地址</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(没有标签)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>会话</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>文本标签</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>输入口令</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>新口令</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>重复新口令</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>输入钱包的新口令。&lt;br/&gt;使用的口令请至少包含&lt;b&gt;10个以上随机字符&lt;/&gt;,或者是&lt;b&gt;8个以上的单词&lt;/b&gt;。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>加密钱包</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>该操作需要您首先使用口令解锁钱包。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>解锁钱包</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>该操作需要您首先使用口令解密钱包。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>解密钱包</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>修改口令</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>请输入钱包的旧口令与新口令。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>确认加密钱包</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>警告:如果您加密了您的钱包之后忘记了口令,您将会&lt;b&gt;失去所有的比特币&lt;/b&gt;!
+确定要加密钱包吗?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>钱包已加密</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>警告:大写锁定键CapsLock开启</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>钱包加密失败</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>由于一个本地错误,加密钱包操作已经失败。您的钱包没有被加密。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>将关闭软件以完成加密过程。 请您谨记:钱包加密并不是万能的,电脑中毒,您的比特币还是有可能丢失。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>口令不匹配。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>钱包解锁失败</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>用于解密钱包的口令不正确。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>钱包解密失败。</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>钱包口令修改成功</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>比特币钱包</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>正在与网络同步...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>正在同步区域锁链</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>&amp;概况</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>显示钱包概况</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>&amp;交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>查看交易历史</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>&amp;地址薄</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>修改存储的地址和标签列表</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>&amp;接收货币</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>显示接收支付的地址列表</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>&amp;发送货币</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>将货币发送到一个比特币地址</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>退出</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>退出程序</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>&amp;关于 %1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>显示比特币的相关信息</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>&amp;选项...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>修改比特币配置选项</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>打开 &amp;比特币</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>显示比特币窗口</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>&amp;导出...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>导出当前视图到指定文件</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>&amp;加密钱包</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>加密或解密钱包</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>&amp;修改口令</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>修改钱包加密口令</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>关于 &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>显示Qt相关信息</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>&amp;文件</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;设置</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>&amp;帮助</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>分页工具栏</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>动作工具栏</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>%n 个到比特币网络的活动连接</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>%1 / %2 个交易历史的区块已下载</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>%1 个交易历史的区块已下载</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n 秒前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n 分种前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n 小时前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n 天前</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>最新状态</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>更新中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>最新收到的区块产生于 %1。</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>该笔交易的数据量超限.您可以选择支付 %1 交易费, 交易费将支付给处理该笔交易的网络节点,有助于维持比特币网络的运行.  您愿意支付交易费用吗?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>发送中</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>已发送交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>流入交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>日期: %1
+金额: %2
+类别: %3
+地址: %4
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>钱包已被&lt;b&gt;加密&lt;/b&gt;,当前为&lt;b&gt;解锁&lt;/b&gt;状态</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>钱包已被&lt;b&gt;加密&lt;/b&gt;,当前为&lt;b&gt;锁定&lt;/b&gt;状态</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>&amp;金额显示单位:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>选择显示及发送比特币时使用的最小单位</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;在交易列表中显示地址</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>编辑地址</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>&amp;标签</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>与此地址条目关联的标签</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>&amp;地址</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>该地址与地址簿中的条目已关联,无法作为发送地址编辑。</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>新接收地址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>新发送地址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>编辑接收地址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>编辑发送地址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>输入的地址 &quot;%1&quot; 已经存在于地址薄。</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>输入的地址  &quot;%1&quot; 并不是一个有效的比特币地址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>无法解锁钱包</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>密钥创建失败.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>&amp;开机启动比特币</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>在计算机启动后自动运行比特币</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>&amp;最小化到托盘</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>最小化窗口后只显示一个托盘标志</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>使用 &amp;UPnP 映射端口</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>自动在路由器中打开比特币端口。只有当您的路由器开启 UPnP 选项时此功能才有效。</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>关闭时最小化</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>当窗口关闭时程序最小化而不是退出。当使用该选项时,程序只能通过在菜单中选择退出来关闭</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>&amp;通过SOCKS4代理连接</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>通过一个SOCKS4代理连接到比特币网络 (如使用Tor连接时)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>代理 &amp;IP:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>代理服务器IP (如 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>&amp;端口:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>代理端口 (比如 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>建议支付交易费用,有助于您的交易得到尽快处理.  绝大多数交易的字节数为 1 kB. 建议支付0.01个比特币.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>支付交易 &amp;费用</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>建议支付交易费用,有助于您的交易得到尽快处理.  绝大多数交易的字节数为 1 kB. 建议支付0.01个比特币.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>主要的</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>查看</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>选项</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>表单</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>余额</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>交易笔数</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>未确认:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>钱包</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;当前交易&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>您的当前余额</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>尚未确认的交易总额, 未计入当前余额</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>钱包总交易数量</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>发送货币</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>一次发送给多个接收者</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>&amp;添加接收者...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>清除全部</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>移除所有交易项</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>余额</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>确认并发送货币</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>&amp;发送</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; 到 %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>确认发送货币</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>确定您要发送 %1?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation> 和 </translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>接收者地址不合法,请检查。</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>支付金额必须大于0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>余额不足。</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>计入 %1 的交易费后,您的余额不足以支付总价。</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>发现重复地址,一次操作中只可以给每个地址发送一次</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>错误:交易创建失败。</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>错误:交易被拒绝。这种情况通常发生在您钱包中的一些货币已经被消费之后,比如您使用了一个wallet.dat的副本,而货币在那个副本中已经被消费,但在当前钱包中未被标记为已消费。</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>表单</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>金额</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>支付 &amp;到:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>为这个地址输入一个标签,以便将它添加到您的地址簿</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>&amp;标签:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>付款地址  (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>从地址薄选择地址</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>从剪贴板粘贴地址</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>移除此接收者</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>请输入比特币地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>开启 %1 个数据块</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>至 %1 个数据块时开启</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/离线?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/未确认</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>%1 确认项</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;状态:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, 未被成功广播</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>,同过 %1 节点广播</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>,同过 %1 节点组广播</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;日期:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;来源:&lt;/b&gt; 生成&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;从:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>未知</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;到:&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation>(您的, 标签:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation>(您的)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;到帐:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 成熟于 %2 以上数据块)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(未接受)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>支出</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>交易费</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;网络金额:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>消息:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>备注</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>新生产的比特币必须等待120个数据块之后才能被使用. 当您生产出此数据块,它将被广播至比特币网络并添加至数据链. 如果添加到数据链失败, 它的状态将变成&quot;不被接受&quot;,生产的比特币将不能使用. 在您生产新数据块的几秒钟内, 如果其它节点也生产出同样的数据块,有可能会发生这种情况.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>交易细节</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>当前面板显示了交易的详细描述</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>日期</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>类型</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>地址</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>数量</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>开启 %n 个数据块</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>至 %1 个数据块时开启</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>离线 (%1 个确认项)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>未确认 (%1 / %2 条确认信息)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>已确认 (%1 条确认信息)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>挖矿所得将在  %n 个数据块之后可用</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>此区块未被其他节点接收,并可能不被接受!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>已生成但未被接受</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>接收于</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>收款来自</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>发送到</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>付款给自己</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>挖矿所得</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(n/a)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>交易状态。 鼠标移到此区域上可显示确认消息项的数目。</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>接收交易的时间</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>交易类别。</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>交易目的地址。</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>从余额添加或移除的金额</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>全部</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>今天</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>本周</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>本月</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>上月</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>今年</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>范围...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>接收于</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>发送到</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>到自己</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>挖矿所得</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>其他</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>输入地址或标签进行搜索</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>最小金额</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>复制地址</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>复制标签</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>编辑标签</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>显示细节...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>导出交易数据</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>逗号分隔文件(*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>已确认</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>日期</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>类别</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>标签</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>地址</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>金额</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>导出错误</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>无法写入文件 %1。</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>范围:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>到</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>发送中...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>比特币版本</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>使用:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>发送命令到服务器或者 bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>列出命令
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>获得某条命令的帮助
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>选项:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>指定配置文件 (默认为 bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>指定 pid 文件 (默认为 bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>生成货币
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>不要生成货币
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>启动时最小化
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>指定数据目录
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>指定连接超时时间 (微秒)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>通过 socks4 代理连接
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>连接节点时允许DNS查找
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>连接到指定节点</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>只连接到指定节点
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>禁止接收外部连接
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>禁止使用 UPnP 映射监听端口
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>尝试使用 UPnP 映射监听端口
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>每发送1kB交易所需的费用</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>接受命令行和 JSON-RPC 命令
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>在后台运行并接受命令
+
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>使用测试网络
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>JSON-RPC连接用户名
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>JSON-RPC连接密码
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>JSON-RPC连接监听&lt;端口&gt; (默认为 8332)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>允许从指定IP接受到的JSON-RPC连接
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>向IP地址为 &lt;ip&gt; 的节点发送指令 (缺省: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>设置密钥池大小为 &lt;n&gt; (缺省: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>重新扫描数据链以查找遗漏的交易
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL 选项: (SSL 安装教程具体见比特币维基百科)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>为 JSON-RPC 连接使用 OpenSSL (https)连接</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>服务器证书 (默认为 server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>服务器私钥 (默认为 server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>可接受的加密器 (默认为 TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>该帮助信息
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>无法给数据目录 %s 加锁。比特币进程可能已在运行。</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>正在加载地址...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>加载 addr.dat 错误
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>加载区块索引...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>加载 blkindex.dat 失败
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>正在加载钱包...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>加载 wallet.dat 失败:钱包崩溃
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>加载 wallet.dat 失败:运行钱包需要一个更新版本的比特币软件
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>加载 wallet.dat 失败
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>正在重新扫描...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>加载完成</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>代理地址不合法</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>不合适的交易费 -paytxfee=&lt;amount&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>警告: -paytxfee 交易费设置过高.  每进行一笔交易您都将支付该数量的交易费.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>错误:线程创建(StartNode)失败</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>警告:磁盘空间不足</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>无法绑定端口 %d 到这台计算机。比特币进程可能已在运行。</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>警告:请确定您当前计算机的日期和时间是正确的。比特币将无法在错误的时间下正常工作。</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>测试</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation>比特币-Qt</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts
new file mode 100644 (file)
index 0000000..980a24d
--- /dev/null
@@ -0,0 +1,1802 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_TW">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+    <name>AboutDialog</name>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="14"/>
+        <source>About Bitcoin</source>
+        <translation>關於位元幣</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="53"/>
+        <source>&lt;b&gt;Bitcoin&lt;/b&gt; version</source>
+        <translation>&lt;b&gt;位元幣&lt;/b&gt;版本</translation>
+    </message>
+    <message>
+        <location filename="../forms/aboutdialog.ui" line="85"/>
+        <source>Copyright © 2009-2012 Bitcoin Developers
+
+This is experimental software.
+
+Distributed under the MIT/X11 software license, see the accompanying file license.txt or http://www.opensource.org/licenses/mit-license.php.
+
+This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard.</source>
+        <translation>版權為 Bitcoin 開發人員自西元 2009 至 2012 年起所有
+
+這是個實驗性的軟體.
+
+此軟體依據 MIX/X11 軟體授權條款散布, 詳情請見附帶的 license.txt 檔案, 或是以下網站: http://www.opensource.org/licenses/mit-license.php.
+
+此產品也包含了由 OpenSSL Project 所開發的 OpenSSL Toolkit (http://www.openssl.org/) 軟體, 由 Eric Young (eay@cryptsoft.com) 撰寫的加解密軟體, 以及由 Thomas Bernard 所撰寫的 UPnP 軟體.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressBookPage</name>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="14"/>
+        <source>Address Book</source>
+        <translation>位址簿</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="20"/>
+        <source>These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.</source>
+        <translation>這是你用來收款的位元幣位址. 你可以提供不同的位址給不同的付款人, 來追蹤是誰支付給你.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="33"/>
+        <source>Double-click to edit address or label</source>
+        <translation>點兩下來修改位址或標記</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="57"/>
+        <source>Create a new address</source>
+        <translation>產生新位址</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="60"/>
+        <source>&amp;New Address...</source>
+        <translation>新位址...</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="71"/>
+        <source>Copy the currently selected address to the system clipboard</source>
+        <translation>複製目前選取的位址到系統剪貼簿</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="74"/>
+        <source>&amp;Copy to Clipboard</source>
+        <translation>複製到剪貼簿</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="85"/>
+        <source>Delete the currently selected address from the list. Only sending addresses can be deleted.</source>
+        <translation>從列表中刪除目前選取的位址. 只能夠刪除付款位址.</translation>
+    </message>
+    <message>
+        <location filename="../forms/addressbookpage.ui" line="88"/>
+        <source>&amp;Delete</source>
+        <translation>刪除</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="211"/>
+        <source>Export Address Book Data</source>
+        <translation>匯出位址簿資料</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="212"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>逗號區隔資料檔 (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Error exporting</source>
+        <translation>資料匯出有誤</translation>
+    </message>
+    <message>
+        <location filename="../addressbookpage.cpp" line="225"/>
+        <source>Could not write to file %1.</source>
+        <translation>無法寫入檔案 %1.</translation>
+    </message>
+</context>
+<context>
+    <name>AddressTableModel</name>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Label</source>
+        <translation>標記</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="78"/>
+        <source>Address</source>
+        <translation>位址</translation>
+    </message>
+    <message>
+        <location filename="../addresstablemodel.cpp" line="114"/>
+        <source>(no label)</source>
+        <translation>(沒有標記)</translation>
+    </message>
+</context>
+<context>
+    <name>AskPassphraseDialog</name>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="26"/>
+        <source>Dialog</source>
+        <translation>對話視窗</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="32"/>
+        <location filename="../forms/askpassphrasedialog.ui" line="97"/>
+        <source>TextLabel</source>
+        <translation>文字標籤</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="50"/>
+        <source>Enter passphrase</source>
+        <translation>輸入密碼</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="64"/>
+        <source>New passphrase</source>
+        <translation>新的密碼</translation>
+    </message>
+    <message>
+        <location filename="../forms/askpassphrasedialog.ui" line="78"/>
+        <source>Repeat new passphrase</source>
+        <translation>重複新密碼</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="34"/>
+        <source>Enter the new passphrase to the wallet.&lt;br/&gt;Please use a passphrase of &lt;b&gt;10 or more random characters&lt;/b&gt;, or &lt;b&gt;eight or more words&lt;/b&gt;.</source>
+        <translation>輸入錢包的新密碼.&lt;br/&gt;請用&lt;b&gt;10個以上的字元&lt;/b&gt;, 或是&lt;b&gt;8個以上的字詞&lt;/b&gt;.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="35"/>
+        <source>Encrypt wallet</source>
+        <translation>錢包加密</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="38"/>
+        <source>This operation needs your wallet passphrase to unlock the wallet.</source>
+        <translation>這個動作需要用你的錢包密碼來解鎖</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="43"/>
+        <source>Unlock wallet</source>
+        <translation>錢包解鎖</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="46"/>
+        <source>This operation needs your wallet passphrase to decrypt the wallet.</source>
+        <translation>這個動作需要用你的錢包密碼來解密</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="51"/>
+        <source>Decrypt wallet</source>
+        <translation>錢包解密</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="54"/>
+        <source>Change passphrase</source>
+        <translation>變更密碼</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="55"/>
+        <source>Enter the old and new passphrase to the wallet.</source>
+        <translation>輸入錢包的新舊密碼.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="101"/>
+        <source>Confirm wallet encryption</source>
+        <translation>錢包加密確認</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="102"/>
+        <source>WARNING: If you encrypt your wallet and lose your passphrase, you will &lt;b&gt;LOSE ALL OF YOUR BITCOINS&lt;/b&gt;!
+Are you sure you wish to encrypt your wallet?</source>
+        <translation>警告: 如果將錢包加密後忘記密碼, 你會&lt;b&gt;失去其中所有的位元幣&lt;/b&gt;!
+你確定要將錢包加密嗎?</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="111"/>
+        <location filename="../askpassphrasedialog.cpp" line="160"/>
+        <source>Wallet encrypted</source>
+        <translation>錢包已加密</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="208"/>
+        <location filename="../askpassphrasedialog.cpp" line="232"/>
+        <source>Warning: The Caps Lock key is on.</source>
+        <translation>警告: 鍵盤輸入鎖定為大寫字母中.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="117"/>
+        <location filename="../askpassphrasedialog.cpp" line="124"/>
+        <location filename="../askpassphrasedialog.cpp" line="166"/>
+        <location filename="../askpassphrasedialog.cpp" line="172"/>
+        <source>Wallet encryption failed</source>
+        <translation>錢包加密失敗</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="118"/>
+        <source>Wallet encryption failed due to an internal error. Your wallet was not encrypted.</source>
+        <translation>錢包加密因程式內部有誤而失敗. 你的錢包還是沒有加密.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="112"/>
+        <source>Bitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer.</source>
+        <translation>位元幣現在要關閉以完成加密程序. 請記住, 加密錢包無法完全防止入侵電腦的惡意程式偷取你的位元幣.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="125"/>
+        <location filename="../askpassphrasedialog.cpp" line="173"/>
+        <source>The supplied passphrases do not match.</source>
+        <translation>提供的密碼不符.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="136"/>
+        <source>Wallet unlock failed</source>
+        <translation>錢包解鎖失敗</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="137"/>
+        <location filename="../askpassphrasedialog.cpp" line="148"/>
+        <location filename="../askpassphrasedialog.cpp" line="167"/>
+        <source>The passphrase entered for the wallet decryption was incorrect.</source>
+        <translation>用來解密錢包的密碼輸入錯誤.</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="147"/>
+        <source>Wallet decryption failed</source>
+        <translation>錢包解密失敗</translation>
+    </message>
+    <message>
+        <location filename="../askpassphrasedialog.cpp" line="161"/>
+        <source>Wallet passphrase was succesfully changed.</source>
+        <translation>錢包密碼變更成功.</translation>
+    </message>
+</context>
+<context>
+    <name>BitcoinGUI</name>
+    <message>
+        <location filename="../bitcoingui.cpp" line="69"/>
+        <source>Bitcoin Wallet</source>
+        <translation>位元幣錢包</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="138"/>
+        <location filename="../bitcoingui.cpp" line="432"/>
+        <source>Synchronizing with network...</source>
+        <translation>網路同步中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="141"/>
+        <source>Block chain synchronization in progress</source>
+        <translation>正在進行區塊鎖鏈的同步中</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="170"/>
+        <source>&amp;Overview</source>
+        <translation>總覽</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="171"/>
+        <source>Show general overview of wallet</source>
+        <translation>顯示錢包一般總覽</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="176"/>
+        <source>&amp;Transactions</source>
+        <translation>交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="177"/>
+        <source>Browse transaction history</source>
+        <translation>瀏覽交易紀錄</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="182"/>
+        <source>&amp;Address Book</source>
+        <translation>位址簿</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="183"/>
+        <source>Edit the list of stored addresses and labels</source>
+        <translation>編輯儲存位址與標記的列表</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="188"/>
+        <source>&amp;Receive coins</source>
+        <translation>收錢</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="189"/>
+        <source>Show the list of addresses for receiving payments</source>
+        <translation>顯示收款位址的列表</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="194"/>
+        <source>&amp;Send coins</source>
+        <translation>付錢</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="195"/>
+        <source>Send coins to a bitcoin address</source>
+        <translation>付錢至某個位元幣位址</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="211"/>
+        <source>E&amp;xit</source>
+        <translation>結束</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="212"/>
+        <source>Quit application</source>
+        <translation>結束應用程式</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="215"/>
+        <source>&amp;About %1</source>
+        <translation>關於%1</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="216"/>
+        <source>Show information about Bitcoin</source>
+        <translation>顯示位元幣相關資訊</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="221"/>
+        <source>&amp;Options...</source>
+        <translation>選項...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="222"/>
+        <source>Modify configuration options for bitcoin</source>
+        <translation>修改位元幣的設定選項</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="224"/>
+        <source>Open &amp;Bitcoin</source>
+        <translation>開啟位元幣</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="225"/>
+        <source>Show the Bitcoin window</source>
+        <translation>顯示位元幣主視窗</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="226"/>
+        <source>&amp;Export...</source>
+        <translation>匯出...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="227"/>
+        <source>Export the current view to a file</source>
+        <translation>將目前版面匯出至檔案</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="228"/>
+        <source>&amp;Encrypt Wallet</source>
+        <translation>錢包加密</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="229"/>
+        <source>Encrypt or decrypt wallet</source>
+        <translation>將錢包加解密</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="231"/>
+        <source>&amp;Change Passphrase</source>
+        <translation>變更密碼</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="232"/>
+        <source>Change the passphrase used for wallet encryption</source>
+        <translation>變更錢包加密用的密碼</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="218"/>
+        <source>About &amp;Qt</source>
+        <translation>關於 &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="219"/>
+        <source>Show information about Qt</source>
+        <translation>顯示有關於 Qt 的資訊</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="254"/>
+        <source>&amp;File</source>
+        <translation>檔案</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="257"/>
+        <source>&amp;Settings</source>
+        <translation>設定</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="263"/>
+        <source>&amp;Help</source>
+        <translation>求助</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="270"/>
+        <source>Tabs toolbar</source>
+        <translation>分頁工具列</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="278"/>
+        <source>Actions toolbar</source>
+        <translation>動作工具列</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="290"/>
+        <source>[testnet]</source>
+        <translation>[testnet]</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="375"/>
+        <source>bitcoin-qt</source>
+        <translation>bitcoin-qt</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="417"/>
+        <source>%n active connection(s) to Bitcoin network</source>
+        <translation>
+            <numerusform>與位元幣網路有 %n 個連線在使用中</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="443"/>
+        <source>Downloaded %1 of %2 blocks of transaction history.</source>
+        <translation>已下載了 %1/%2 個交易紀錄的區塊.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="455"/>
+        <source>Downloaded %1 blocks of transaction history.</source>
+        <translation>已下載了 %1 個交易紀錄的區塊.</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="470"/>
+        <source>%n second(s) ago</source>
+        <translation>
+            <numerusform>%n 秒鐘前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="474"/>
+        <source>%n minute(s) ago</source>
+        <translation>
+            <numerusform>%n 分鐘前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="478"/>
+        <source>%n hour(s) ago</source>
+        <translation>
+            <numerusform>%n 小時前</numerusform>
+        </translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../bitcoingui.cpp" line="482"/>
+        <source>%n day(s) ago</source>
+        <translation>
+            <numerusform>%n 天前</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="488"/>
+        <source>Up to date</source>
+        <translation>最新狀態</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="493"/>
+        <source>Catching up...</source>
+        <translation>進度追趕中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="501"/>
+        <source>Last received block was generated %1.</source>
+        <translation>最近收到的區塊產生於 %1.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="574"/>
+        <source>This transaction is over the size limit.  You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network.  Do you want to pay the fee?</source>
+        <translation>這筆交易的資料大小超過限制了. 你還是可以付出 %1 的費用來傳送. 這筆費用會付給處理該筆交易的節點, 並幫助維持整個網路. 你願意支付這項費用嗎?</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="579"/>
+        <source>Sending...</source>
+        <translation>付出中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="606"/>
+        <source>Sent transaction</source>
+        <translation>付款交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="607"/>
+        <source>Incoming transaction</source>
+        <translation>收款交易</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="608"/>
+        <source>Date: %1
+Amount: %2
+Type: %3
+Address: %4
+</source>
+        <translation>日期: %1
+金額: %2
+類別: %3
+位址: %4</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="702"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;unlocked&lt;/b&gt;</source>
+        <translation>錢包&lt;b&gt;已加密&lt;/b&gt;並且正&lt;b&gt;解鎖中&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoingui.cpp" line="710"/>
+        <source>Wallet is &lt;b&gt;encrypted&lt;/b&gt; and currently &lt;b&gt;locked&lt;/b&gt;</source>
+        <translation>錢包&lt;b&gt;已加密&lt;/b&gt;並且正&lt;b&gt;上鎖中&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../bitcoin.cpp" line="128"/>
+        <source>A fatal error occured. Bitcoin can no longer continue safely and will quit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DisplayOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="270"/>
+        <source>&amp;Unit to show amounts in: </source>
+        <translation>金額顯示單位: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="274"/>
+        <source>Choose the default subdivision unit to show in the interface, and when sending coins</source>
+        <translation>選擇操作界面與付錢時預設顯示的細分單位</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="281"/>
+        <source>&amp;Display addresses in transaction list</source>
+        <translation>&amp;在交易列表中顯示位址</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="282"/>
+        <source>Whether to show Bitcoin addresses in the transaction list</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>EditAddressDialog</name>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="14"/>
+        <source>Edit Address</source>
+        <translation>編輯位址</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="25"/>
+        <source>&amp;Label</source>
+        <translation>標記</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="35"/>
+        <source>The label associated with this address book entry</source>
+        <translation>與這個位址簿項目關聯的標記</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="42"/>
+        <source>&amp;Address</source>
+        <translation>位址</translation>
+    </message>
+    <message>
+        <location filename="../forms/editaddressdialog.ui" line="52"/>
+        <source>The address associated with this address book entry. This can only be modified for sending addresses.</source>
+        <translation>與這個位址簿項目關聯的位址. 只能修改付款位址.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="20"/>
+        <source>New receiving address</source>
+        <translation>新收款位址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="24"/>
+        <source>New sending address</source>
+        <translation>新付款位址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="27"/>
+        <source>Edit receiving address</source>
+        <translation>編輯收款位址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="31"/>
+        <source>Edit sending address</source>
+        <translation>編輯付款位址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="91"/>
+        <source>The entered address &quot;%1&quot; is already in the address book.</source>
+        <translation>輸入的位址&quot;%1&quot;已存在於位址簿中.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="96"/>
+        <source>The entered address &quot;%1&quot; is not a valid bitcoin address.</source>
+        <translation>輸入的位址&quot;%1&quot;並非有效的位元幣位址</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="101"/>
+        <source>Could not unlock wallet.</source>
+        <translation>無法將錢包解鎖.</translation>
+    </message>
+    <message>
+        <location filename="../editaddressdialog.cpp" line="106"/>
+        <source>New key generation failed.</source>
+        <translation>新密鑰產生失敗.</translation>
+    </message>
+</context>
+<context>
+    <name>MainOptionsPage</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="170"/>
+        <source>&amp;Start Bitcoin on window system startup</source>
+        <translation>視窗系統啓動時同時開啓位元幣</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="171"/>
+        <source>Automatically start Bitcoin after the computer is turned on</source>
+        <translation>電腦開啟後自動啟動位元幣</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="175"/>
+        <source>&amp;Minimize to the tray instead of the taskbar</source>
+        <translation>最小化至通知區域而非工作列</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="176"/>
+        <source>Show only a tray icon after minimizing the window</source>
+        <translation>視窗最小化時只顯示圖示於通知區域</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="180"/>
+        <source>Map port using &amp;UPnP</source>
+        <translation>用 &amp;UPnP 設定通訊埠對應</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="181"/>
+        <source>Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled.</source>
+        <translation>自動在路由器上開啟位元幣的客戶端通訊埠. 只有在你的路由器支援 UPnP 且開啟時才有作用.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="185"/>
+        <source>M&amp;inimize on close</source>
+        <translation>關閉時最小化</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="186"/>
+        <source>Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu.</source>
+        <translation>當視窗關閉時將其最小化, 而非結束應用程式. 當勾選這個選項時, 應用程式只能用選單中的結束來停止執行.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="190"/>
+        <source>&amp;Connect through SOCKS4 proxy:</source>
+        <translation>透過 SOCKS4 代理伺服器連線:</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="191"/>
+        <source>Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)</source>
+        <translation>透過 SOCKS4 代理伺服器連線至位元幣網路 (比如說透過 Tor)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="196"/>
+        <source>Proxy &amp;IP: </source>
+        <translation>伺服器位址: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="202"/>
+        <source>IP address of the proxy (e.g. 127.0.0.1)</source>
+        <translation>代理伺服器的 IP 位址 (比如說 127.0.0.1)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="205"/>
+        <source>&amp;Port: </source>
+        <translation>通訊埠: </translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="211"/>
+        <source>Port of the proxy (e.g. 1234)</source>
+        <translation>代理伺服器的通訊埠 (比如說 1234)</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="217"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly.  Most transactions are 1 kB.  Fee 0.01 recommended.</source>
+        <translation>非必要的交易手續費, 以 kB 為計費單位, 且有助於縮短你的交易處理時間.  大部份交易的資料大小是 1 kB.  建議設定為 0.01 元.</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="223"/>
+        <source>Pay transaction &amp;fee</source>
+        <translation>付交易手續費</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="226"/>
+        <source>Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended.</source>
+        <translation>非必要的交易手續費, 以 kB 為計費單位, 且有助於縮短你的交易處理時間. 大部份交易的資料大小是 1 kB. 建議設定為 0.01 元.</translation>
+    </message>
+</context>
+<context>
+    <name>OptionsDialog</name>
+    <message>
+        <location filename="../optionsdialog.cpp" line="79"/>
+        <source>Main</source>
+        <translation>主要</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="84"/>
+        <source>Display</source>
+        <translation>顯示</translation>
+    </message>
+    <message>
+        <location filename="../optionsdialog.cpp" line="104"/>
+        <source>Options</source>
+        <translation>選項</translation>
+    </message>
+</context>
+<context>
+    <name>OverviewPage</name>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="14"/>
+        <source>Form</source>
+        <translation>表單</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="40"/>
+        <source>Balance:</source>
+        <translation>餘額:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="47"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="54"/>
+        <source>Number of transactions:</source>
+        <translation>交易次數:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="61"/>
+        <source>0</source>
+        <translation>0</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="68"/>
+        <source>Unconfirmed:</source>
+        <translation>未確認額:</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="75"/>
+        <source>0 BTC</source>
+        <translation>0 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="88"/>
+        <source>Wallet</source>
+        <translation>錢包</translation>
+    </message>
+    <message>
+        <location filename="../forms/overviewpage.ui" line="124"/>
+        <source>&lt;b&gt;Recent transactions&lt;/b&gt;</source>
+        <translation>&lt;b&gt;最近交易&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="103"/>
+        <source>Your current balance</source>
+        <translation>目前餘額</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="108"/>
+        <source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
+        <translation>尚未確認之交易的總額, 不包含在目前餘額中</translation>
+    </message>
+    <message>
+        <location filename="../overviewpage.cpp" line="111"/>
+        <source>Total number of transactions in wallet</source>
+        <translation>錢包中紀錄的總交易次數</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsDialog</name>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="14"/>
+        <location filename="../sendcoinsdialog.cpp" line="116"/>
+        <location filename="../sendcoinsdialog.cpp" line="121"/>
+        <location filename="../sendcoinsdialog.cpp" line="126"/>
+        <location filename="../sendcoinsdialog.cpp" line="131"/>
+        <location filename="../sendcoinsdialog.cpp" line="137"/>
+        <location filename="../sendcoinsdialog.cpp" line="142"/>
+        <location filename="../sendcoinsdialog.cpp" line="147"/>
+        <source>Send Coins</source>
+        <translation>付錢</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="64"/>
+        <source>Send to multiple recipients at once</source>
+        <translation>一次付給多個人</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="67"/>
+        <source>&amp;Add recipient...</source>
+        <translation>加收款人...</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="87"/>
+        <source>Clear all</source>
+        <translation>全部清掉</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="84"/>
+        <source>Remove all transaction fields</source>
+        <translation>移除所有交易欄位</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="106"/>
+        <source>Balance:</source>
+        <translation>餘額:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="113"/>
+        <source>123.456 BTC</source>
+        <translation>123.456 BTC</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="144"/>
+        <source>Confirm the send action</source>
+        <translation>確認付款動作</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsdialog.ui" line="147"/>
+        <source>&amp;Send</source>
+        <translation>付出</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="92"/>
+        <source>&lt;b&gt;%1&lt;/b&gt; to %2 (%3)</source>
+        <translation>&lt;b&gt;%1&lt;/b&gt; 給 %2 (%3)</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="95"/>
+        <source>Confirm send coins</source>
+        <translation>確認付出金額</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source>Are you sure you want to send %1?</source>
+        <translation>確定要付出 %1 嗎?</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="96"/>
+        <source> and </source>
+        <translation>和</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="117"/>
+        <source>The recepient address is not valid, please recheck.</source>
+        <translation>無效的收款位址, 請再檢查看看.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="122"/>
+        <source>The amount to pay must be larger than 0.</source>
+        <translation>付款金額必須大於 0.</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="127"/>
+        <source>Amount exceeds your balance</source>
+        <translation>金額超過了你的餘額</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="132"/>
+        <source>Total exceeds your balance when the %1 transaction fee is included</source>
+        <translation>加上交易手續費  %1 後的總金額超過了你的餘額</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="138"/>
+        <source>Duplicate address found, can only send to each address once in one send operation</source>
+        <translation>發現了重複的位址; 在一次付款作業中, 只能付給每個位址一次</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="143"/>
+        <source>Error: Transaction creation failed  </source>
+        <translation>錯誤: 交易產生失敗</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsdialog.cpp" line="148"/>
+        <source>Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.</source>
+        <translation>錯誤: 交易被拒絕. 有時候會發生這種錯誤, 是因為你錢包中的一些錢已經被花掉了. 比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢, 你現在所用的原來的錢包中卻沒有該筆交易紀錄.</translation>
+    </message>
+</context>
+<context>
+    <name>SendCoinsEntry</name>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="14"/>
+        <source>Form</source>
+        <translation>表單</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="29"/>
+        <source>A&amp;mount:</source>
+        <translation>金額:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="42"/>
+        <source>Pay &amp;To:</source>
+        <translation>付給:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="66"/>
+        <location filename="../sendcoinsentry.cpp" line="26"/>
+        <source>Enter a label for this address to add it to your address book</source>
+        <translation>給這個位址輸入一個標記, 並加到位址簿中</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="75"/>
+        <source>&amp;Label:</source>
+        <translation>標記:</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="93"/>
+        <source>The address to send the payment to  (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>付款的目標位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="103"/>
+        <source>Choose address from address book</source>
+        <translation>從位址簿中選一個位址</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="113"/>
+        <source>Alt+A</source>
+        <translation>Alt+A</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="120"/>
+        <source>Paste address from clipboard</source>
+        <translation>從剪貼簿貼上位址</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="130"/>
+        <source>Alt+P</source>
+        <translation>Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../forms/sendcoinsentry.ui" line="137"/>
+        <source>Remove this recipient</source>
+        <translation>去掉這個收款人</translation>
+    </message>
+    <message>
+        <location filename="../sendcoinsentry.cpp" line="25"/>
+        <source>Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</source>
+        <translation>輸入位元幣位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDesc</name>
+    <message>
+        <location filename="../transactiondesc.cpp" line="34"/>
+        <source>Open for %1 blocks</source>
+        <translation>在 %1 個區塊內未定</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="36"/>
+        <source>Open until %1</source>
+        <translation>在 %1 前未定</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="42"/>
+        <source>%1/offline?</source>
+        <translation>%1/離線中?</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="44"/>
+        <source>%1/unconfirmed</source>
+        <translation>%1/未確認</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="46"/>
+        <source>%1 confirmations</source>
+        <translation>經確認 %1 次</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="63"/>
+        <source>&lt;b&gt;Status:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;狀態:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="68"/>
+        <source>, has not been successfully broadcast yet</source>
+        <translation>, 尚未成功公告出去</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="70"/>
+        <source>, broadcast through %1 node</source>
+        <translation>, 已公告至 %1 個節點</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="72"/>
+        <source>, broadcast through %1 nodes</source>
+        <translation>, 已公告至 %1 個節點</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="76"/>
+        <source>&lt;b&gt;Date:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;日期:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="83"/>
+        <source>&lt;b&gt;Source:&lt;/b&gt; Generated&lt;br&gt;</source>
+        <translation>&lt;b&gt;來源:&lt;/b&gt; 生產所得&lt;br&gt;</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="89"/>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>&lt;b&gt;From:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;來自:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="106"/>
+        <source>unknown</source>
+        <translation>未知</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="107"/>
+        <location filename="../transactiondesc.cpp" line="130"/>
+        <location filename="../transactiondesc.cpp" line="189"/>
+        <source>&lt;b&gt;To:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;目的:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="110"/>
+        <source> (yours, label: </source>
+        <translation> (你的, 標記為: </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="112"/>
+        <source> (yours)</source>
+        <translation> (你的)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="147"/>
+        <location filename="../transactiondesc.cpp" line="161"/>
+        <location filename="../transactiondesc.cpp" line="206"/>
+        <location filename="../transactiondesc.cpp" line="223"/>
+        <source>&lt;b&gt;Credit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;入帳:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="149"/>
+        <source>(%1 matures in %2 more blocks)</source>
+        <translation>(%1 將在 %2 個區塊產出後熟成)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="153"/>
+        <source>(not accepted)</source>
+        <translation>(不被接受)</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="197"/>
+        <location filename="../transactiondesc.cpp" line="205"/>
+        <location filename="../transactiondesc.cpp" line="220"/>
+        <source>&lt;b&gt;Debit:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;出帳:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="211"/>
+        <source>&lt;b&gt;Transaction fee:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;交易手續費:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="227"/>
+        <source>&lt;b&gt;Net amount:&lt;/b&gt; </source>
+        <translation>&lt;b&gt;淨額:&lt;/b&gt; </translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="233"/>
+        <source>Message:</source>
+        <translation>訊息:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="235"/>
+        <source>Comment:</source>
+        <translation>附註:</translation>
+    </message>
+    <message>
+        <location filename="../transactiondesc.cpp" line="238"/>
+        <source>Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to &quot;not accepted&quot; and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.</source>
+        <translation>生產出來的錢要再等 120 個區塊產出之後, 才能夠花用. 當你產出區塊時, 它會被公布到網路上, 以被串連至區塊鎖鏈. 如果串連失敗了, 它的狀態就會變成&quot;不被接受&quot;, 且不能被花用. 當你產出區塊的幾秒鐘內, 其他節點也產出了區塊的話, 有時候就會發生這種情形.</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionDescDialog</name>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="14"/>
+        <source>Transaction details</source>
+        <translation>交易明細</translation>
+    </message>
+    <message>
+        <location filename="../forms/transactiondescdialog.ui" line="20"/>
+        <source>This pane shows a detailed description of the transaction</source>
+        <translation>此版面顯示交易的詳細說明</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionTableModel</name>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Date</source>
+        <translation>日期</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Type</source>
+        <translation>種類</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Address</source>
+        <translation>位址</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="214"/>
+        <source>Amount</source>
+        <translation>金額</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="275"/>
+        <source>Open for %n block(s)</source>
+        <translation>
+            <numerusform>在 %n 個區塊內未定</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="278"/>
+        <source>Open until %1</source>
+        <translation>在 %1 前未定</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="281"/>
+        <source>Offline (%1 confirmations)</source>
+        <translation>離線中 (經確認 %1 次)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="284"/>
+        <source>Unconfirmed (%1 of %2 confirmations)</source>
+        <translation>未確認 (經確認 %1 次, 應確認 %2 次)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="287"/>
+        <source>Confirmed (%1 confirmations)</source>
+        <translation>已確認 (經確認 %1 次)</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../transactiontablemodel.cpp" line="295"/>
+        <source>Mined balance will be available in %n more blocks</source>
+        <translation>
+            <numerusform>生產金額將在 %n 個區塊產出後可用</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="301"/>
+        <source>This block was not received by any other nodes and will probably not be accepted!</source>
+        <translation>沒有其他節點收到這個區塊, 也許它不被接受!</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="304"/>
+        <source>Generated but not accepted</source>
+        <translation>產出但不被接受</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="347"/>
+        <source>Received with</source>
+        <translation>收受於</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="349"/>
+        <source>Received from</source>
+        <translation>收受自</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="352"/>
+        <source>Sent to</source>
+        <translation>付出至</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="354"/>
+        <source>Payment to yourself</source>
+        <translation>付給自己</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="356"/>
+        <source>Mined</source>
+        <translation>開採所得</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="394"/>
+        <source>(n/a)</source>
+        <translation>(不適用)</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="593"/>
+        <source>Transaction status. Hover over this field to show number of confirmations.</source>
+        <translation>交易狀態. 移動游標至欄位上方來顯示確認次數.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="595"/>
+        <source>Date and time that the transaction was received.</source>
+        <translation>收到交易的日期與時間.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="597"/>
+        <source>Type of transaction.</source>
+        <translation>交易的種類.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="599"/>
+        <source>Destination address of transaction.</source>
+        <translation>交易的目標位址.</translation>
+    </message>
+    <message>
+        <location filename="../transactiontablemodel.cpp" line="601"/>
+        <source>Amount removed from or added to balance.</source>
+        <translation>減去或加入至餘額的金額</translation>
+    </message>
+</context>
+<context>
+    <name>TransactionView</name>
+    <message>
+        <location filename="../transactionview.cpp" line="55"/>
+        <location filename="../transactionview.cpp" line="71"/>
+        <source>All</source>
+        <translation>全部</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="56"/>
+        <source>Today</source>
+        <translation>今天</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="57"/>
+        <source>This week</source>
+        <translation>這週</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="58"/>
+        <source>This month</source>
+        <translation>這個月</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="59"/>
+        <source>Last month</source>
+        <translation>上個月</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="60"/>
+        <source>This year</source>
+        <translation>今年</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="61"/>
+        <source>Range...</source>
+        <translation>指定範圍...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="72"/>
+        <source>Received with</source>
+        <translation>收受於</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="74"/>
+        <source>Sent to</source>
+        <translation>付出至</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="76"/>
+        <source>To yourself</source>
+        <translation>給自己</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="77"/>
+        <source>Mined</source>
+        <translation>開採所得</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="78"/>
+        <source>Other</source>
+        <translation>其他</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="84"/>
+        <source>Enter address or label to search</source>
+        <translation>輸入位址或標記來搜尋</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="90"/>
+        <source>Min amount</source>
+        <translation>最小金額</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="125"/>
+        <source>Copy address</source>
+        <translation>複製位址</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="126"/>
+        <source>Copy label</source>
+        <translation>複製標記</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="127"/>
+        <source>Edit label</source>
+        <translation>編輯標記</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="128"/>
+        <source>Show details...</source>
+        <translation>顯示明細...</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="270"/>
+        <source>Export Transaction Data</source>
+        <translation>匯出交易資料</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="271"/>
+        <source>Comma separated file (*.csv)</source>
+        <translation>逗號分隔資料檔 (*.csv)</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="279"/>
+        <source>Confirmed</source>
+        <translation>已確認</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="280"/>
+        <source>Date</source>
+        <translation>日期</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="281"/>
+        <source>Type</source>
+        <translation>種類</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="282"/>
+        <source>Label</source>
+        <translation>標記</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="283"/>
+        <source>Address</source>
+        <translation>位址</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="284"/>
+        <source>Amount</source>
+        <translation>金額</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="285"/>
+        <source>ID</source>
+        <translation>識別碼</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Error exporting</source>
+        <translation>匯出錯誤</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="289"/>
+        <source>Could not write to file %1.</source>
+        <translation>無法寫入至 %1 檔案.</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="391"/>
+        <source>Range:</source>
+        <translation>範圍:</translation>
+    </message>
+    <message>
+        <location filename="../transactionview.cpp" line="399"/>
+        <source>to</source>
+        <translation>至</translation>
+    </message>
+</context>
+<context>
+    <name>WalletModel</name>
+    <message>
+        <location filename="../walletmodel.cpp" line="144"/>
+        <source>Sending...</source>
+        <translation>付出中...</translation>
+    </message>
+</context>
+<context>
+    <name>bitcoin-core</name>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="8"/>
+        <source>Bitcoin version</source>
+        <translation>位元幣版本</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="9"/>
+        <source>Usage:</source>
+        <translation>用法:</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="10"/>
+        <source>Send command to -server or bitcoind
+</source>
+        <translation>送指令至 -server 或 bitcoind
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="11"/>
+        <source>List commands
+</source>
+        <translation>列出指令
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="12"/>
+        <source>Get help for a command
+</source>
+        <translation>取得指令說明
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="13"/>
+        <source>Options:
+</source>
+        <translation>選項:
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="14"/>
+        <source>Specify configuration file (default: bitcoin.conf)
+</source>
+        <translation>指定設定檔 (預設: bitcoin.conf)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="15"/>
+        <source>Specify pid file (default: bitcoind.pid)
+</source>
+        <translation>指定行程識別碼檔案 (預設: bitcoind.pid)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="16"/>
+        <source>Generate coins
+</source>
+        <translation>生產位元幣
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="17"/>
+        <source>Don&apos;t generate coins
+</source>
+        <translation>不生產位元幣
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="18"/>
+        <source>Start minimized
+</source>
+        <translation>啓動時最小化
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="19"/>
+        <source>Specify data directory
+</source>
+        <translation>指定資料目錄
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="20"/>
+        <source>Specify connection timeout (in milliseconds)
+</source>
+        <translation>指定連線逾時時間 (毫秒)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="21"/>
+        <source>Connect through socks4 proxy
+</source>
+        <translation>透過 socks4 代理伺服器連線
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="22"/>
+        <source>Allow DNS lookups for addnode and connect
+</source>
+        <translation>允許 addnode 和 connect 時做域名解析
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="23"/>
+        <source>Add a node to connect to
+</source>
+        <translation>新增連線節點
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="24"/>
+        <source>Connect only to the specified node
+</source>
+        <translation>只連線至指定節點
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="25"/>
+        <source>Don&apos;t accept connections from outside
+</source>
+        <translation>不接受外來連線
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="30"/>
+        <source>Don&apos;t attempt to use UPnP to map the listening port
+</source>
+        <translation>不嘗試用 UPnP 來設定服務連接埠的對應
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="31"/>
+        <source>Attempt to use UPnP to map the listening port
+</source>
+        <translation>嘗試用 UPnP 來設定服務連接埠的對應
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="32"/>
+        <source>Fee per kB to add to transactions you send
+</source>
+        <translation>交易付款時每 kB 的交易手續費
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="33"/>
+        <source>Accept command line and JSON-RPC commands
+</source>
+        <translation>接受命令列與 JSON-RPC 指令
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="34"/>
+        <source>Run in the background as a daemon and accept commands
+</source>
+        <translation>以背景程式執行並接受指令</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="35"/>
+        <source>Use the test network
+</source>
+        <translation>使用測試網路
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="36"/>
+        <source>Username for JSON-RPC connections
+</source>
+        <translation>JSON-RPC 連線使用者名稱</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="37"/>
+        <source>Password for JSON-RPC connections
+</source>
+        <translation>JSON-RPC 連線密碼</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="38"/>
+        <source>Listen for JSON-RPC connections on &lt;port&gt; (default: 8332)
+</source>
+        <translation>在通訊埠 &lt;port&gt; 聽候 JSON-RPC 連線 (預設: 8332)</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="39"/>
+        <source>Allow JSON-RPC connections from specified IP address
+</source>
+        <translation>只允許從指定網路位址來的 JSON-RPC 連線</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="40"/>
+        <source>Send commands to node running on &lt;ip&gt; (default: 127.0.0.1)
+</source>
+        <translation>送指令給在 &lt;ip&gt; 的節點 (預設: 127.0.0.1)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="41"/>
+        <source>Set key pool size to &lt;n&gt; (default: 100)
+</source>
+        <translation>設定密鑰池大小為 &lt;n&gt; (預設: 100)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="42"/>
+        <source>Rescan the block chain for missing wallet transactions
+</source>
+        <translation>重新掃描區塊鎖鏈, 以尋找錢包所遺漏的交易.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="43"/>
+        <source>
+SSL options: (see the Bitcoin Wiki for SSL setup instructions)
+</source>
+        <translation>
+SSL 選項: (SSL 設定程序請見 Bitcoin Wiki)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="46"/>
+        <source>Use OpenSSL (https) for JSON-RPC connections
+</source>
+        <translation>使用 OpenSSL (https) 於JSON-RPC 連線
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="47"/>
+        <source>Server certificate file (default: server.cert)
+</source>
+        <translation>伺服器憑證檔 (預設: server.cert)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="48"/>
+        <source>Server private key (default: server.pem)
+</source>
+        <translation>伺服器密鑰檔 (預設: server.pem)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="49"/>
+        <source>Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</source>
+        <translation>可以接受的加密法 (預設: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="52"/>
+        <source>This help message
+</source>
+        <translation>此協助訊息
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="53"/>
+        <source>Cannot obtain a lock on data directory %s.  Bitcoin is probably already running.</source>
+        <translation>無法鎖定資料目錄 %s. 也許位元幣已經在執行了.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="56"/>
+        <source>Loading addresses...</source>
+        <translation>載入位址中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="57"/>
+        <source>Error loading addr.dat      
+</source>
+        <translation>載入 addr.dat 錯誤
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="58"/>
+        <source>Loading block index...</source>
+        <translation>載入區塊索引中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="59"/>
+        <source>Error loading blkindex.dat      
+</source>
+        <translation>載入 blkindex.dat 失敗
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="60"/>
+        <source>Loading wallet...</source>
+        <translation>載入錢包中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="61"/>
+        <source>Error loading wallet.dat: Wallet corrupted      
+</source>
+        <translation>載入 wallet.dat 失敗: 錢包壞掉了
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="62"/>
+        <source>Error loading wallet.dat: Wallet requires newer version of Bitcoin      
+</source>
+        <translation>載入 wallet.dat 錯誤: 此錢包需要新版的 Bitcoin
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="64"/>
+        <source>Error loading wallet.dat      
+</source>
+        <translation>載入 wallet.dat 錯誤
+</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="65"/>
+        <source>Rescanning...</source>
+        <translation>重新掃描中...</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="26"/>
+        <source>Threshold for disconnecting misbehaving peers (default: 100)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="27"/>
+        <source>Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="66"/>
+        <source>Done loading</source>
+        <translation>載入完成</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="67"/>
+        <source>Invalid -proxy address</source>
+        <translation>無效的 -proxy 位址</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="68"/>
+        <source>Invalid amount for -paytxfee=&lt;amount&gt;</source>
+        <translation>-paytxfee=&lt;金額&gt; 中的金額無效</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="69"/>
+        <source>Warning: -paytxfee is set very high.  This is the transaction fee you will pay if you send a transaction.</source>
+        <translation>警告: -paytxfee 設定得很高. 這是當你交易付款時所要支付的手續費.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="72"/>
+        <source>Error: CreateThread(StartNode) failed</source>
+        <translation>錯誤: CreateThread(StartNode) 失敗</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="73"/>
+        <source>Warning: Disk space is low  </source>
+        <translation>警告: 磁碟空間很少</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="74"/>
+        <source>Unable to bind to port %d on this computer.  Bitcoin is probably already running.</source>
+        <translation>無法與這台電腦上的通訊埠 %d 連結. 也許 Bitcoin 已經在執行了.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="77"/>
+        <source>Warning: Please check that your computer&apos;s date and time are correct.  If your clock is wrong Bitcoin will not work properly.</source>
+        <translation>警告: 請檢查電腦時間日期是否正確. 位元幣無法在時鐘不準的情況下正常運作.</translation>
+    </message>
+    <message>
+        <location filename="../bitcoinstrings.cpp" line="80"/>
+        <source>beta</source>
+        <translation>公測版</translation>
+    </message>
+</context>
+<context>
+    <name>main</name>
+    <message>
+        <location filename="../bitcoin.cpp" line="164"/>
+        <source>Bitcoin-Qt</source>
+        <translation type="unfinished">位元幣Qt版</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h
new file mode 100644 (file)
index 0000000..d02c148
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef MACDOCKICONHANDLER_H
+#define MACDOCKICONHANDLER_H
+
+#include <QtCore/QObject>
+
+class QMenu;
+class QIcon;
+class QWidget;
+class objc_object;
+
+/** Macintosh-specific dock icon handler.
+ */
+class MacDockIconHandler : public QObject
+{
+    Q_OBJECT
+public:
+    ~MacDockIconHandler();
+
+    QMenu *dockMenu();
+    void setIcon(const QIcon &icon);
+
+    static MacDockIconHandler *instance();
+
+    void handleDockIconClickEvent();
+
+signals:
+    void dockIconClicked();
+
+public slots:
+
+private:
+    MacDockIconHandler();
+
+    objc_object *m_dockIconClickEventHandler;
+    QWidget *m_dummyWidget;
+    QMenu *m_dockMenu;
+};
+
+#endif // MACDOCKICONCLICKHANDLER_H
diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm
new file mode 100644 (file)
index 0000000..df56e69
--- /dev/null
@@ -0,0 +1,99 @@
+
+#include "macdockiconhandler.h"
+
+#include <QtGui/QMenu>
+#include <QtGui/QWidget>
+
+extern void qt_mac_set_dock_menu(QMenu*);
+
+#undef slots
+#include <Cocoa/Cocoa.h>
+
+@interface DockIconClickEventHandler : NSObject
+{
+    MacDockIconHandler* dockIconHandler;
+}
+
+@end
+
+@implementation DockIconClickEventHandler
+
+- (id)initWithDockIconHandler:(MacDockIconHandler *)aDockIconHandler
+{
+    self = [super init];
+    if (self) {
+        dockIconHandler = aDockIconHandler;
+
+        [[NSAppleEventManager sharedAppleEventManager]
+            setEventHandler:self
+                andSelector:@selector(handleDockClickEvent:withReplyEvent:)
+              forEventClass:kCoreEventClass
+                 andEventID:kAEReopenApplication];
+    }
+    return self;
+}
+
+- (void)handleDockClickEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
+{
+    Q_UNUSED(event)
+    Q_UNUSED(replyEvent)
+
+    if (dockIconHandler)
+        dockIconHandler->handleDockIconClickEvent();
+}
+
+@end
+
+MacDockIconHandler::MacDockIconHandler() : QObject()
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    this->m_dockIconClickEventHandler = [[DockIconClickEventHandler alloc] initWithDockIconHandler:this];
+
+    this->m_dummyWidget = new QWidget();
+    this->m_dockMenu = new QMenu(this->m_dummyWidget);
+    qt_mac_set_dock_menu(this->m_dockMenu);
+    [pool release];
+}
+
+MacDockIconHandler::~MacDockIconHandler()
+{
+    [this->m_dockIconClickEventHandler release];
+    delete this->m_dummyWidget;
+}
+
+QMenu *MacDockIconHandler::dockMenu()
+{
+    return this->m_dockMenu;
+}
+
+void MacDockIconHandler::setIcon(const QIcon &icon)
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    NSImage *image;
+    if (icon.isNull())
+        image = [[NSImage imageNamed:@"NSApplicationIcon"] retain];
+    else {
+        QSize size = icon.actualSize(QSize(128, 128));
+        QPixmap pixmap = icon.pixmap(size);
+        CGImageRef cgImage = pixmap.toMacCGImageRef();
+        image = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];
+        CFRelease(cgImage);
+    }
+
+    [NSApp setApplicationIconImage:image];
+    [image release];
+    [pool release];
+}
+
+MacDockIconHandler *MacDockIconHandler::instance()
+{
+    static MacDockIconHandler *s_instance = NULL;
+    if (!s_instance)
+        s_instance = new MacDockIconHandler();
+    return s_instance;
+}
+
+void MacDockIconHandler::handleDockIconClickEvent()
+{
+    emit this->dockIconClicked();
+}
diff --git a/src/qt/monitoreddatamapper.cpp b/src/qt/monitoreddatamapper.cpp
new file mode 100644 (file)
index 0000000..88948d0
--- /dev/null
@@ -0,0 +1,36 @@
+#include "monitoreddatamapper.h"
+
+#include <QWidget>
+#include <QMetaObject>
+#include <QMetaProperty>
+
+MonitoredDataMapper::MonitoredDataMapper(QObject *parent) :
+    QDataWidgetMapper(parent)
+{
+}
+
+
+void MonitoredDataMapper::addMapping(QWidget *widget, int section)
+{
+    QDataWidgetMapper::addMapping(widget, section);
+    addChangeMonitor(widget);
+}
+
+void MonitoredDataMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)
+{
+    QDataWidgetMapper::addMapping(widget, section, propertyName);
+    addChangeMonitor(widget);
+}
+
+void MonitoredDataMapper::addChangeMonitor(QWidget *widget)
+{
+    // Watch user property of widget for changes, and connect
+    //  the signal to our viewModified signal.
+    QMetaProperty prop = widget->metaObject()->userProperty();
+    int signal = prop.notifySignalIndex();
+    int method = this->metaObject()->indexOfMethod("viewModified()");
+    if(signal != -1 && method != -1)
+    {
+        QMetaObject::connect(widget, signal, this, method);
+    }
+}
diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h
new file mode 100644 (file)
index 0000000..33a874e
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef MONITOREDDATAMAPPER_H
+#define MONITOREDDATAMAPPER_H
+
+#include <QDataWidgetMapper>
+
+QT_BEGIN_NAMESPACE
+class QWidget;
+QT_END_NAMESPACE
+
+/** Data to Widget mapper that watches for edits and notifies listeners when a field is edited.
+   This can be used, for example, to enable a commit/apply button in a configuration dialog.
+ */
+class MonitoredDataMapper : public QDataWidgetMapper
+{
+    Q_OBJECT
+public:
+    explicit MonitoredDataMapper(QObject *parent=0);
+
+    void addMapping(QWidget *widget, int section);
+    void addMapping(QWidget *widget, int section, const QByteArray &propertyName);
+private:
+    void addChangeMonitor(QWidget *widget);
+
+signals:
+    void viewModified();
+
+};
+
+
+
+#endif // MONITOREDDATAMAPPER_H
diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp
new file mode 100644 (file)
index 0000000..e668079
--- /dev/null
@@ -0,0 +1,302 @@
+#include "notificator.h"
+
+#include <QMetaType>
+#include <QVariant>
+#include <QIcon>
+#include <QApplication>
+#include <QStyle>
+#include <QByteArray>
+#include <QSystemTrayIcon>
+#include <QMessageBox>
+#include <QTemporaryFile>
+#include <QImageWriter>
+
+#ifdef USE_DBUS
+#include <QtDBus/QtDBus>
+#include <stdint.h>
+#endif
+
+#ifdef Q_WS_MAC
+#include <ApplicationServices/ApplicationServices.h>
+extern bool qt_mac_execute_apple_script(const QString &script, AEDesc *ret);
+#endif
+
+// https://wiki.ubuntu.com/NotificationDevelopmentGuidelines recommends at least 128
+const int FREEDESKTOP_NOTIFICATION_ICON_SIZE = 128;
+
+Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, QWidget *parent):
+    QObject(parent),
+    parent(parent),
+    programName(programName),
+    mode(None),
+    trayIcon(trayicon)
+#ifdef USE_DBUS
+    ,interface(0)
+#endif
+{
+    if(trayicon && trayicon->supportsMessages())
+    {
+        mode = QSystemTray;
+    }
+#ifdef USE_DBUS
+    interface = new QDBusInterface("org.freedesktop.Notifications",
+          "/org/freedesktop/Notifications", "org.freedesktop.Notifications");
+    if(interface->isValid())
+    {
+        mode = Freedesktop;
+    }
+#endif
+#ifdef Q_WS_MAC
+    // Check if Growl is installed (based on Qt's tray icon implementation)
+    CFURLRef cfurl;
+    OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl);
+    if (status != kLSApplicationNotFoundErr) {
+        CFBundleRef bundle = CFBundleCreate(0, cfurl);
+        if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) {
+            if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/")))
+                mode = Growl13;
+            else
+                mode = Growl12;
+        }
+        CFRelease(cfurl);
+        CFRelease(bundle);
+    }
+#endif
+}
+
+Notificator::~Notificator()
+{
+#ifdef USE_DBUS
+    delete interface;
+#endif
+}
+
+#ifdef USE_DBUS
+
+// Loosely based on http://www.qtcentre.org/archive/index.php/t-25879.html
+class FreedesktopImage
+{
+public:
+    FreedesktopImage() {}
+    FreedesktopImage(const QImage &img);
+
+    static int metaType();
+
+    // Image to variant that can be marshaled over DBus
+    static QVariant toVariant(const QImage &img);
+
+private:
+    int width, height, stride;
+    bool hasAlpha;
+    int channels;
+    int bitsPerSample;
+    QByteArray image;
+
+    friend QDBusArgument &operator<<(QDBusArgument &a, const FreedesktopImage &i);
+    friend const QDBusArgument &operator>>(const QDBusArgument &a, FreedesktopImage &i);
+};
+
+Q_DECLARE_METATYPE(FreedesktopImage);
+
+// Image configuration settings
+const int CHANNELS = 4;
+const int BYTES_PER_PIXEL = 4;
+const int BITS_PER_SAMPLE = 8;
+
+FreedesktopImage::FreedesktopImage(const QImage &img):
+    width(img.width()),
+    height(img.height()),
+    stride(img.width() * BYTES_PER_PIXEL),
+    hasAlpha(true),
+    channels(CHANNELS),
+    bitsPerSample(BITS_PER_SAMPLE)
+{
+    // Convert 00xAARRGGBB to RGBA bytewise (endian-independent) format
+    QImage tmp = img.convertToFormat(QImage::Format_ARGB32);
+    const uint32_t *data = reinterpret_cast<const uint32_t*>(tmp.constBits());
+
+    unsigned int num_pixels = width * height;
+    image.resize(num_pixels * BYTES_PER_PIXEL);
+
+    for(unsigned int ptr = 0; ptr < num_pixels; ++ptr)
+    {
+        image[ptr*BYTES_PER_PIXEL+0] = data[ptr] >> 16; // R
+        image[ptr*BYTES_PER_PIXEL+1] = data[ptr] >> 8;  // G
+        image[ptr*BYTES_PER_PIXEL+2] = data[ptr];       // B
+        image[ptr*BYTES_PER_PIXEL+3] = data[ptr] >> 24; // A
+    }
+}
+
+QDBusArgument &operator<<(QDBusArgument &a, const FreedesktopImage &i)
+{
+    a.beginStructure();
+    a << i.width << i.height << i.stride << i.hasAlpha << i.bitsPerSample << i.channels << i.image;
+    a.endStructure();
+    return a;
+}
+
+const QDBusArgument &operator>>(const QDBusArgument &a, FreedesktopImage &i)
+{
+    a.beginStructure();
+    a >> i.width >> i.height >> i.stride >> i.hasAlpha >> i.bitsPerSample >> i.channels >> i.image;
+    a.endStructure();
+    return a;
+}
+
+int FreedesktopImage::metaType()
+{
+    return qDBusRegisterMetaType<FreedesktopImage>();
+}
+
+QVariant FreedesktopImage::toVariant(const QImage &img)
+{
+    FreedesktopImage fimg(img);
+    return QVariant(FreedesktopImage::metaType(), &fimg);
+}
+
+void Notificator::notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout)
+{
+    Q_UNUSED(cls);
+    // Arguments for DBus call:
+    QList<QVariant> args;
+
+    // Program Name:
+    args.append(programName);
+
+    // Unique ID of this notification type:
+    args.append(0U);
+
+    // Application Icon, empty string
+    args.append(QString());
+
+    // Summary
+    args.append(title);
+
+    // Body
+    args.append(text);
+
+    // Actions (none, actions are deprecated)
+    QStringList actions;
+    args.append(actions);
+
+    // Hints
+    QVariantMap hints;
+
+    // If no icon specified, set icon based on class
+    QIcon tmpicon;
+    if(icon.isNull())
+    {
+        QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion;
+        switch(cls)
+        {
+        case Information: sicon = QStyle::SP_MessageBoxInformation; break;
+        case Warning: sicon = QStyle::SP_MessageBoxWarning; break;
+        case Critical: sicon = QStyle::SP_MessageBoxCritical; break;
+        default: break;
+        }
+        tmpicon = QApplication::style()->standardIcon(sicon);
+    }
+    else
+    {
+        tmpicon = icon;
+    }
+    hints["icon_data"] = FreedesktopImage::toVariant(tmpicon.pixmap(FREEDESKTOP_NOTIFICATION_ICON_SIZE).toImage());
+    args.append(hints);
+
+    // Timeout (in msec)
+    args.append(millisTimeout);
+
+    // "Fire and forget"
+    interface->callWithArgumentList(QDBus::NoBlock, "Notify", args);
+}
+#endif
+
+void Notificator::notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout)
+{
+    Q_UNUSED(icon);
+    QSystemTrayIcon::MessageIcon sicon = QSystemTrayIcon::NoIcon;
+    switch(cls) // Set icon based on class
+    {
+    case Information: sicon = QSystemTrayIcon::Information; break;
+    case Warning: sicon = QSystemTrayIcon::Warning; break;
+    case Critical: sicon = QSystemTrayIcon::Critical; break;
+    }
+    trayIcon->showMessage(title, text, sicon, millisTimeout);
+}
+
+// Based on Qt's tray icon implementation
+#ifdef Q_WS_MAC
+void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon)
+{
+    const QString script(
+        "tell application \"%5\"\n"
+        "  set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all)
+        "  set the enabledNotificationsList to {\"Notification\"}\n" // -- Make a list of the notifications (enabled)
+        "  register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl
+        "  notify with name \"Notification\" title \"%2\" description \"%3\" application name \"%1\"%4\n" // -- Send a Notification
+        "end tell"
+    );
+
+    QString notificationApp(QApplication::applicationName());
+    if (notificationApp.isEmpty())
+        notificationApp = "Application";
+
+    QPixmap notificationIconPixmap;
+    if (icon.isNull()) { // If no icon specified, set icon based on class
+        QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion;
+        switch (cls)
+        {
+        case Information: sicon = QStyle::SP_MessageBoxInformation; break;
+        case Warning: sicon = QStyle::SP_MessageBoxWarning; break;
+        case Critical: sicon = QStyle::SP_MessageBoxCritical; break;
+        }
+        notificationIconPixmap = QApplication::style()->standardPixmap(sicon);
+    }
+    else {
+        QSize size = icon.actualSize(QSize(48, 48));
+        notificationIconPixmap = icon.pixmap(size);
+    }
+
+    QString notificationIcon;
+    QTemporaryFile notificationIconFile;
+    if (!notificationIconPixmap.isNull() && notificationIconFile.open()) {
+        QImageWriter writer(&notificationIconFile, "PNG");
+        if (writer.write(notificationIconPixmap.toImage()))
+            notificationIcon = QString(" image from location \"file://%1\"").arg(notificationIconFile.fileName());
+    }
+
+    QString quotedTitle(title), quotedText(text);
+    quotedTitle.replace("\\", "\\\\").replace("\"", "\\");
+    quotedText.replace("\\", "\\\\").replace("\"", "\\");
+    QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp");
+    qt_mac_execute_apple_script(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp), 0);
+}
+#endif
+
+void Notificator::notify(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout)
+{
+    switch(mode)
+    {
+#ifdef USE_DBUS
+    case Freedesktop:
+        notifyDBus(cls, title, text, icon, millisTimeout);
+        break;
+#endif
+    case QSystemTray:
+        notifySystray(cls, title, text, icon, millisTimeout);
+        break;
+#ifdef Q_WS_MAC
+    case Growl12:
+    case Growl13:
+        notifyGrowl(cls, title, text, icon);
+        break;
+#endif
+    default:
+        if(cls == Critical)
+        {
+            // Fall back to old fashioned popup dialog if critical and no other notification available
+            QMessageBox::critical(parent, title, text, QMessageBox::Ok, QMessageBox::Ok);
+        }
+        break;
+    }
+}
diff --git a/src/qt/notificator.h b/src/qt/notificator.h
new file mode 100644 (file)
index 0000000..0271c26
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef NOTIFICATOR_H
+#define NOTIFICATOR_H
+
+#include <QObject>
+#include <QIcon>
+
+QT_BEGIN_NAMESPACE
+class QSystemTrayIcon;
+#ifdef USE_DBUS
+class QDBusInterface;
+#endif
+QT_END_NAMESPACE
+
+/** Cross-platform desktop notification client. */
+class Notificator: public QObject
+{
+    Q_OBJECT
+public:
+    /** Create a new notificator.
+       @note Ownership of trayIcon is not transferred to this object.
+    */
+    Notificator(const QString &programName=QString(), QSystemTrayIcon *trayIcon=0, QWidget *parent=0);
+    ~Notificator();
+
+    // Message class
+    enum Class
+    {
+        Information,         /**< Informational message */
+        Warning,             /**< Notify user of potential problem */
+        Critical             /**< An error occured */
+    };
+
+public slots:
+
+    /** Show notification message.
+       @param[in] cls    general message class
+       @param[in] title  title shown with message
+       @param[in] text   message content
+       @param[in] icon   optional icon to show with message
+       @param[in] millisTimeout notification timeout in milliseconds (defaults to 10 seconds)
+       @note Platform implementations are free to ignore any of the provided fields except for \a text.
+     */
+    void notify(Class cls, const QString &title, const QString &text,
+                const QIcon &icon = QIcon(), int millisTimeout = 10000);
+
+private:
+    QWidget *parent;
+    enum Mode {
+        None,        /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */
+        Freedesktop, /**< Use DBus org.freedesktop.Notifications */
+        QSystemTray, /**< Use QSystemTray::showMessage */
+        Growl12,        /**< Use the Growl 1.2 notification system (Mac only) */
+        Growl13        /**< Use the Growl 1.3 notification system (Mac only) */
+    };
+    QString programName;
+    Mode mode;
+    QSystemTrayIcon *trayIcon;
+#ifdef USE_DBUS
+    QDBusInterface *interface;
+
+    void notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout);
+#endif
+    void notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout);
+#ifdef Q_WS_MAC
+    void notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon);
+#endif
+};
+
+#endif // NOTIFICATOR_H
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
new file mode 100644 (file)
index 0000000..bac0182
--- /dev/null
@@ -0,0 +1,293 @@
+#include "optionsdialog.h"
+#include "optionsmodel.h"
+#include "bitcoinamountfield.h"
+#include "monitoreddatamapper.h"
+#include "guiutil.h"
+#include "bitcoinunits.h"
+#include "qvaluecombobox.h"
+
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QListWidget>
+#include <QStackedWidget>
+
+#include <QCheckBox>
+#include <QLabel>
+#include <QLineEdit>
+#include <QIntValidator>
+#include <QDoubleValidator>
+#include <QRegExpValidator>
+#include <QDialogButtonBox>
+
+/* First page of options */
+class MainOptionsPage : public QWidget
+{
+    Q_OBJECT
+public:
+    explicit MainOptionsPage(QWidget *parent=0);
+
+    void setMapper(MonitoredDataMapper *mapper);
+private:
+    QCheckBox *bitcoin_at_startup;
+#ifndef Q_WS_MAC
+    QCheckBox *minimize_to_tray;
+#endif
+    QCheckBox *map_port_upnp;
+#ifndef Q_WS_MAC
+    QCheckBox *minimize_on_close;
+#endif
+    QCheckBox *connect_socks4;
+    QLineEdit *proxy_ip;
+    QLineEdit *proxy_port;
+    BitcoinAmountField *fee_edit;
+
+signals:
+
+public slots:
+
+};
+
+class DisplayOptionsPage : public QWidget
+{
+    Q_OBJECT
+public:
+    explicit DisplayOptionsPage(QWidget *parent=0);
+
+    void setMapper(MonitoredDataMapper *mapper);
+private:
+    QValueComboBox *unit;
+    QCheckBox *display_addresses;
+signals:
+
+public slots:
+
+};
+
+#include "optionsdialog.moc"
+
+OptionsDialog::OptionsDialog(QWidget *parent):
+    QDialog(parent), contents_widget(0), pages_widget(0),
+    model(0), main_page(0), display_page(0)
+{
+    contents_widget = new QListWidget();
+    contents_widget->setMaximumWidth(128);
+
+    pages_widget = new QStackedWidget();
+    pages_widget->setMinimumWidth(300);
+
+    QListWidgetItem *item_main = new QListWidgetItem(tr("Main"));
+    contents_widget->addItem(item_main);
+    main_page = new MainOptionsPage(this);
+    pages_widget->addWidget(main_page);
+
+    QListWidgetItem *item_display = new QListWidgetItem(tr("Display"));
+    contents_widget->addItem(item_display);
+    display_page = new DisplayOptionsPage(this);
+    pages_widget->addWidget(display_page);
+
+    contents_widget->setCurrentRow(0);
+
+    QHBoxLayout *main_layout = new QHBoxLayout();
+    main_layout->addWidget(contents_widget);
+    main_layout->addWidget(pages_widget, 1);
+
+    QVBoxLayout *layout = new QVBoxLayout();
+    layout->addLayout(main_layout);
+
+    QDialogButtonBox *buttonbox = new QDialogButtonBox();
+    buttonbox->setStandardButtons(QDialogButtonBox::Apply|QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
+    apply_button = buttonbox->button(QDialogButtonBox::Apply);
+    layout->addWidget(buttonbox);
+
+    setLayout(layout);
+    setWindowTitle(tr("Options"));
+
+    /* Widget-to-option mapper */
+    mapper = new MonitoredDataMapper(this);
+    mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
+    mapper->setOrientation(Qt::Vertical);
+    /* enable apply button when data modified */
+    connect(mapper, SIGNAL(viewModified()), this, SLOT(enableApply()));
+    /* disable apply button when new data loaded */
+    connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(disableApply()));
+
+    /* Event bindings */
+    connect(contents_widget, SIGNAL(currentRowChanged(int)), this, SLOT(changePage(int)));
+    connect(buttonbox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(okClicked()));
+    connect(buttonbox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(cancelClicked()));
+    connect(buttonbox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(applyClicked()));
+}
+
+void OptionsDialog::setModel(OptionsModel *model)
+{
+    this->model = model;
+
+    mapper->setModel(model);
+    main_page->setMapper(mapper);
+    display_page->setMapper(mapper);
+
+    mapper->toFirst();
+}
+
+void OptionsDialog::changePage(int index)
+{
+    pages_widget->setCurrentIndex(index);
+}
+
+void OptionsDialog::okClicked()
+{
+    mapper->submit();
+    accept();
+}
+
+void OptionsDialog::cancelClicked()
+{
+    reject();
+}
+
+void OptionsDialog::applyClicked()
+{
+    mapper->submit();
+    apply_button->setEnabled(false);
+}
+
+void OptionsDialog::enableApply()
+{
+    apply_button->setEnabled(true);
+}
+
+void OptionsDialog::disableApply()
+{
+    apply_button->setEnabled(false);
+}
+
+MainOptionsPage::MainOptionsPage(QWidget *parent):
+        QWidget(parent)
+{
+    QVBoxLayout *layout = new QVBoxLayout();
+
+    bitcoin_at_startup = new QCheckBox(tr("&Start Bitcoin on window system startup"));
+    bitcoin_at_startup->setToolTip(tr("Automatically start Bitcoin after the computer is turned on"));
+    layout->addWidget(bitcoin_at_startup);
+
+#ifndef Q_WS_MAC
+    minimize_to_tray = new QCheckBox(tr("&Minimize to the tray instead of the taskbar"));
+    minimize_to_tray->setToolTip(tr("Show only a tray icon after minimizing the window"));
+    layout->addWidget(minimize_to_tray);
+#endif
+
+    map_port_upnp = new QCheckBox(tr("Map port using &UPnP"));
+    map_port_upnp->setToolTip(tr("Automatically open the Bitcoin client port on the router. This only works when your router supports UPnP and it is enabled."));
+    layout->addWidget(map_port_upnp);
+
+#ifndef Q_WS_MAC
+    minimize_on_close = new QCheckBox(tr("M&inimize on close"));
+    minimize_on_close->setToolTip(tr("Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu."));
+    layout->addWidget(minimize_on_close);
+#endif
+
+    connect_socks4 = new QCheckBox(tr("&Connect through SOCKS4 proxy:"));
+    connect_socks4->setToolTip(tr("Connect to the Bitcon network through a SOCKS4 proxy (e.g. when connecting through Tor)"));
+    layout->addWidget(connect_socks4);
+
+    QHBoxLayout *proxy_hbox = new QHBoxLayout();
+    proxy_hbox->addSpacing(18);
+    QLabel *proxy_ip_label = new QLabel(tr("Proxy &IP: "));
+    proxy_hbox->addWidget(proxy_ip_label);
+    proxy_ip = new QLineEdit();
+    proxy_ip->setMaximumWidth(140);
+    proxy_ip->setEnabled(false);
+    proxy_ip->setValidator(new QRegExpValidator(QRegExp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"), this));
+    proxy_ip->setToolTip(tr("IP address of the proxy (e.g. 127.0.0.1)"));
+    proxy_ip_label->setBuddy(proxy_ip);
+    proxy_hbox->addWidget(proxy_ip);
+    QLabel *proxy_port_label = new QLabel(tr("&Port: "));
+    proxy_hbox->addWidget(proxy_port_label);
+    proxy_port = new QLineEdit();
+    proxy_port->setMaximumWidth(55);
+    proxy_port->setValidator(new QIntValidator(0, 65535, this));
+    proxy_port->setEnabled(false);
+    proxy_port->setToolTip(tr("Port of the proxy (e.g. 1234)"));
+    proxy_port_label->setBuddy(proxy_port);
+    proxy_hbox->addWidget(proxy_port);
+    proxy_hbox->addStretch(1);
+
+    layout->addLayout(proxy_hbox);
+    QLabel *fee_help = new QLabel(tr("Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Fee 0.01 recommended."));
+    fee_help->setWordWrap(true);
+    layout->addWidget(fee_help);
+
+    QHBoxLayout *fee_hbox = new QHBoxLayout();
+    fee_hbox->addSpacing(18);
+    QLabel *fee_label = new QLabel(tr("Pay transaction &fee"));
+    fee_hbox->addWidget(fee_label);
+    fee_edit = new BitcoinAmountField();
+
+    fee_label->setBuddy(fee_edit);
+    fee_hbox->addWidget(fee_edit);
+    fee_hbox->addStretch(1);
+
+    layout->addLayout(fee_hbox);
+
+    layout->addStretch(1); // Extra space at bottom
+
+    setLayout(layout);
+
+    connect(connect_socks4, SIGNAL(toggled(bool)), proxy_ip, SLOT(setEnabled(bool)));
+    connect(connect_socks4, SIGNAL(toggled(bool)), proxy_port, SLOT(setEnabled(bool)));
+
+#ifndef USE_UPNP
+    map_port_upnp->setDisabled(true);
+#endif
+}
+
+void MainOptionsPage::setMapper(MonitoredDataMapper *mapper)
+{
+    // Map model to widgets
+    mapper->addMapping(bitcoin_at_startup, OptionsModel::StartAtStartup);
+#ifndef Q_WS_MAC
+    mapper->addMapping(minimize_to_tray, OptionsModel::MinimizeToTray);
+#endif
+    mapper->addMapping(map_port_upnp, OptionsModel::MapPortUPnP);
+#ifndef Q_WS_MAC
+    mapper->addMapping(minimize_on_close, OptionsModel::MinimizeOnClose);
+#endif
+    mapper->addMapping(connect_socks4, OptionsModel::ConnectSOCKS4);
+    mapper->addMapping(proxy_ip, OptionsModel::ProxyIP);
+    mapper->addMapping(proxy_port, OptionsModel::ProxyPort);
+    mapper->addMapping(fee_edit, OptionsModel::Fee);
+}
+
+DisplayOptionsPage::DisplayOptionsPage(QWidget *parent):
+        QWidget(parent)
+{
+    QVBoxLayout *layout = new QVBoxLayout();
+
+    QHBoxLayout *unit_hbox = new QHBoxLayout();
+    unit_hbox->addSpacing(18);
+    QLabel *unit_label = new QLabel(tr("&Unit to show amounts in: "));
+    unit_hbox->addWidget(unit_label);
+    unit = new QValueComboBox(this);
+    unit->setModel(new BitcoinUnits(this));
+    unit->setToolTip(tr("Choose the default subdivision unit to show in the interface, and when sending coins"));
+
+    unit_label->setBuddy(unit);
+    unit_hbox->addWidget(unit);
+
+    layout->addLayout(unit_hbox);
+
+    display_addresses = new QCheckBox(tr("&Display addresses in transaction list"), this);
+    display_addresses->setToolTip(tr("Whether to show Bitcoin addresses in the transaction list"));
+    layout->addWidget(display_addresses);
+
+    layout->addStretch();
+
+    setLayout(layout);
+}
+
+void DisplayOptionsPage::setMapper(MonitoredDataMapper *mapper)
+{
+    mapper->addMapping(unit, OptionsModel::DisplayUnit);
+    mapper->addMapping(display_addresses, OptionsModel::DisplayAddresses);
+}
diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h
new file mode 100644 (file)
index 0000000..9e1f87c
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef OPTIONSDIALOG_H
+#define OPTIONSDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QStackedWidget;
+class QListWidget;
+class QListWidgetItem;
+class QPushButton;
+QT_END_NAMESPACE
+class OptionsModel;
+class MainOptionsPage;
+class DisplayOptionsPage;
+class MonitoredDataMapper;
+
+/** Preferences dialog. */
+class OptionsDialog : public QDialog
+{
+    Q_OBJECT
+public:
+    explicit OptionsDialog(QWidget *parent=0);
+
+    void setModel(OptionsModel *model);
+
+signals:
+
+public slots:
+    /** Change the current page to \a index. */
+    void changePage(int index);
+
+private slots:
+    void okClicked();
+    void cancelClicked();
+    void applyClicked();
+    void enableApply();
+    void disableApply();
+
+private:
+    QListWidget *contents_widget;
+    QStackedWidget *pages_widget;
+    OptionsModel *model;
+    MonitoredDataMapper *mapper;
+    QPushButton *apply_button;
+
+    // Pages
+    MainOptionsPage *main_page;
+    DisplayOptionsPage *display_page;
+
+    void setupMainPage();
+};
+
+#endif // OPTIONSDIALOG_H
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
new file mode 100644 (file)
index 0000000..02daef5
--- /dev/null
@@ -0,0 +1,164 @@
+#include "optionsmodel.h"
+#include "bitcoinunits.h"
+
+#include "headers.h"
+
+OptionsModel::OptionsModel(CWallet *wallet, QObject *parent) :
+    QAbstractListModel(parent),
+    wallet(wallet),
+    nDisplayUnit(BitcoinUnits::BTC),
+    bDisplayAddresses(false)
+{
+    // Read our specific settings from the wallet db
+    CWalletDB walletdb(wallet->strWalletFile);
+    walletdb.ReadSetting("nDisplayUnit", nDisplayUnit);
+    walletdb.ReadSetting("bDisplayAddresses", bDisplayAddresses);
+}
+
+int OptionsModel::rowCount(const QModelIndex & parent) const
+{
+    return OptionIDRowCount;
+}
+
+QVariant OptionsModel::data(const QModelIndex & index, int role) const
+{
+    if(role == Qt::EditRole)
+    {
+        switch(index.row())
+        {
+        case StartAtStartup:
+            return QVariant();
+        case MinimizeToTray:
+            return QVariant(fMinimizeToTray);
+        case MapPortUPnP:
+            return QVariant(fUseUPnP);
+        case MinimizeOnClose:
+            return QVariant(fMinimizeOnClose);
+        case ConnectSOCKS4:
+            return QVariant(fUseProxy);
+        case ProxyIP:
+            return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
+        case ProxyPort:
+            return QVariant(QString::fromStdString(addrProxy.ToStringPort()));
+        case Fee:
+            return QVariant(nTransactionFee);
+        case DisplayUnit:
+            return QVariant(nDisplayUnit);
+        case DisplayAddresses:
+            return QVariant(bDisplayAddresses);
+        default:
+            return QVariant();
+        }
+    }
+    return QVariant();
+}
+
+bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
+{
+    bool successful = true; /* set to false on parse error */
+    if(role == Qt::EditRole)
+    {
+        CWalletDB walletdb(wallet->strWalletFile);
+        switch(index.row())
+        {
+        case StartAtStartup:
+            successful = false; /*TODO*/
+            break;
+        case MinimizeToTray:
+            fMinimizeToTray = value.toBool();
+            walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray);
+            break;
+        case MapPortUPnP:
+            fUseUPnP = value.toBool();
+            walletdb.WriteSetting("fUseUPnP", fUseUPnP);
+#ifdef USE_UPNP
+            MapPort(fUseUPnP);
+#endif
+            break;
+        case MinimizeOnClose:
+            fMinimizeOnClose = value.toBool();
+            walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
+            break;
+        case ConnectSOCKS4:
+            fUseProxy = value.toBool();
+            walletdb.WriteSetting("fUseProxy", fUseProxy);
+            break;
+        case ProxyIP:
+            {
+                // Use CAddress to parse and check IP
+                CAddress addr(value.toString().toStdString() + ":1");
+                if (addr.ip != INADDR_NONE)
+                {
+                    addrProxy.ip = addr.ip;
+                    walletdb.WriteSetting("addrProxy", addrProxy);
+                }
+                else
+                {
+                    successful = false;
+                }
+            }
+            break;
+        case ProxyPort:
+            {
+                int nPort = atoi(value.toString().toAscii().data());
+                if (nPort > 0 && nPort < USHRT_MAX)
+                {
+                    addrProxy.port = htons(nPort);
+                    walletdb.WriteSetting("addrProxy", addrProxy);
+                }
+                else
+                {
+                    successful = false;
+                }
+            }
+            break;
+        case Fee: {
+            nTransactionFee = value.toLongLong();
+            walletdb.WriteSetting("nTransactionFee", nTransactionFee);
+            }
+            break;
+        case DisplayUnit: {
+            int unit = value.toInt();
+            nDisplayUnit = unit;
+            walletdb.WriteSetting("nDisplayUnit", nDisplayUnit);
+            emit displayUnitChanged(unit);
+            }
+            break;
+        case DisplayAddresses: {
+            bDisplayAddresses = value.toBool();
+            walletdb.WriteSetting("bDisplayAddresses", bDisplayAddresses);
+            }
+            break;
+        default:
+            break;
+        }
+    }
+    emit dataChanged(index, index);
+
+    return successful;
+}
+
+qint64 OptionsModel::getTransactionFee()
+{
+    return nTransactionFee;
+}
+
+bool OptionsModel::getMinimizeToTray()
+{
+    return fMinimizeToTray;
+}
+
+bool OptionsModel::getMinimizeOnClose()
+{
+    return fMinimizeOnClose;
+}
+
+int OptionsModel::getDisplayUnit()
+{
+    return nDisplayUnit;
+}
+
+bool OptionsModel::getDisplayAddresses()
+{
+    return bDisplayAddresses;
+}
diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h
new file mode 100644 (file)
index 0000000..775362d
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef OPTIONSMODEL_H
+#define OPTIONSMODEL_H
+
+#include <QAbstractListModel>
+
+class CWallet;
+
+/** Interface from QT to configuration data structure for bitcoin client.
+   To QT, the options are presented as a list with the different options
+   laid out vertically.
+   This can be changed to a tree once the settings become sufficiently
+   complex.
+ */
+class OptionsModel : public QAbstractListModel
+{
+    Q_OBJECT
+public:
+    explicit OptionsModel(CWallet *wallet, QObject *parent = 0);
+
+    enum OptionID {
+        StartAtStartup, // bool
+        MinimizeToTray, // bool
+        MapPortUPnP, // bool
+        MinimizeOnClose, // bool
+        ConnectSOCKS4, // bool
+        ProxyIP, // QString
+        ProxyPort, // QString
+        Fee, // qint64
+        DisplayUnit, // BitcoinUnits::Unit
+        DisplayAddresses, // bool
+        OptionIDRowCount
+    };
+
+    int rowCount(const QModelIndex & parent = QModelIndex()) const;
+    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+    bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
+
+    /* Explicit getters */
+    qint64 getTransactionFee();
+    bool getMinimizeToTray();
+    bool getMinimizeOnClose();
+    int getDisplayUnit();
+    bool getDisplayAddresses();
+private:
+    // Wallet stores persistent options
+    CWallet *wallet;
+    int nDisplayUnit;
+    bool bDisplayAddresses;
+signals:
+    void displayUnitChanged(int unit);
+
+public slots:
+
+};
+
+#endif // OPTIONSMODEL_H
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
new file mode 100644 (file)
index 0000000..5b5a8f5
--- /dev/null
@@ -0,0 +1,179 @@
+#include "overviewpage.h"
+#include "ui_overviewpage.h"
+
+#include "walletmodel.h"
+#include "bitcoinunits.h"
+#include "optionsmodel.h"
+#include "transactiontablemodel.h"
+#include "transactionfilterproxy.h"
+#include "guiutil.h"
+#include "guiconstants.h"
+
+#include <QAbstractItemDelegate>
+#include <QPainter>
+
+#define DECORATION_SIZE 64
+#define NUM_ITEMS 3
+
+class TxViewDelegate : public QAbstractItemDelegate
+{
+    Q_OBJECT
+public:
+    TxViewDelegate(): QAbstractItemDelegate(), unit(BitcoinUnits::BTC)
+    {
+
+    }
+
+    inline void paint(QPainter *painter, const QStyleOptionViewItem &option,
+                      const QModelIndex &index ) const
+    {
+        painter->save();
+
+        QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
+        QRect mainRect = option.rect;
+        QRect decorationRect(mainRect.topLeft(), QSize(DECORATION_SIZE, DECORATION_SIZE));
+        int xspace = DECORATION_SIZE + 8;
+        int ypad = 6;
+        int halfheight = (mainRect.height() - 2*ypad)/2;
+        QRect amountRect(mainRect.left() + xspace, mainRect.top()+ypad, mainRect.width() - xspace, halfheight);
+        QRect addressRect(mainRect.left() + xspace, mainRect.top()+ypad+halfheight, mainRect.width() - xspace, halfheight);
+        icon.paint(painter, decorationRect);
+
+        QDateTime date = index.data(TransactionTableModel::DateRole).toDateTime();
+        QString address = index.data(Qt::DisplayRole).toString();
+        qint64 amount = index.data(TransactionTableModel::AmountRole).toLongLong();
+        bool confirmed = index.data(TransactionTableModel::ConfirmedRole).toBool();
+        QVariant value = index.data(Qt::ForegroundRole);
+        QColor foreground = option.palette.color(QPalette::Text);
+        if(qVariantCanConvert<QColor>(value))
+        {
+            foreground = qvariant_cast<QColor>(value);
+        }
+
+        painter->setPen(foreground);
+        painter->drawText(addressRect, Qt::AlignLeft|Qt::AlignVCenter, address);
+
+        if(amount < 0)
+        {
+            foreground = COLOR_NEGATIVE;
+        }
+        else if(!confirmed)
+        {
+            foreground = COLOR_UNCONFIRMED;
+        }
+        else
+        {
+            foreground = option.palette.color(QPalette::Text);
+        }
+        painter->setPen(foreground);
+        QString amountText = BitcoinUnits::formatWithUnit(unit, amount, true);
+        if(!confirmed)
+        {
+            amountText = QString("[") + amountText + QString("]");
+        }
+        painter->drawText(amountRect, Qt::AlignRight|Qt::AlignVCenter, amountText);
+
+        painter->setPen(option.palette.color(QPalette::Text));
+        painter->drawText(amountRect, Qt::AlignLeft|Qt::AlignVCenter, GUIUtil::dateTimeStr(date));
+
+        painter->restore();
+    }
+
+    inline QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+    {
+        return QSize(DECORATION_SIZE, DECORATION_SIZE);
+    }
+
+    int unit;
+
+};
+#include "overviewpage.moc"
+
+OverviewPage::OverviewPage(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::OverviewPage),
+    currentBalance(-1),
+    currentUnconfirmedBalance(-1),
+    txdelegate(new TxViewDelegate())
+{
+    ui->setupUi(this);
+
+    // Balance: <balance>
+    ui->labelBalance->setFont(QFont("Monospace", -1, QFont::Bold));
+    ui->labelBalance->setToolTip(tr("Your current balance"));
+    ui->labelBalance->setTextInteractionFlags(Qt::TextSelectableByMouse|Qt::TextSelectableByKeyboard);
+
+    // Unconfirmed balance: <balance>
+    ui->labelUnconfirmed->setFont(QFont("Monospace", -1, QFont::Bold));
+    ui->labelUnconfirmed->setToolTip(tr("Total of transactions that have yet to be confirmed, and do not yet count toward the current balance"));
+    ui->labelUnconfirmed->setTextInteractionFlags(Qt::TextSelectableByMouse|Qt::TextSelectableByKeyboard);
+
+    ui->labelNumTransactions->setToolTip(tr("Total number of transactions in wallet"));
+
+    // Recent transactions
+    ui->listTransactions->setStyleSheet("QListView { background:transparent }");
+    ui->listTransactions->setItemDelegate(txdelegate);
+    ui->listTransactions->setIconSize(QSize(DECORATION_SIZE, DECORATION_SIZE));
+    ui->listTransactions->setSelectionMode(QAbstractItemView::NoSelection);
+    ui->listTransactions->setMinimumHeight(NUM_ITEMS * (DECORATION_SIZE + 2));
+    ui->listTransactions->setAttribute(Qt::WA_MacShowFocusRect, false);
+
+    connect(ui->listTransactions, SIGNAL(clicked(QModelIndex)), this, SIGNAL(transactionClicked(QModelIndex)));
+}
+
+OverviewPage::~OverviewPage()
+{
+    delete ui;
+}
+
+void OverviewPage::setBalance(qint64 balance, qint64 unconfirmedBalance)
+{
+    int unit = model->getOptionsModel()->getDisplayUnit();
+    currentBalance = balance;
+    currentUnconfirmedBalance = unconfirmedBalance;
+    ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
+    ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, unconfirmedBalance));
+}
+
+void OverviewPage::setNumTransactions(int count)
+{
+    ui->labelNumTransactions->setText(QLocale::system().toString(count));
+}
+
+void OverviewPage::setModel(WalletModel *model)
+{
+    this->model = model;
+    if(model)
+    {
+        // Set up transaction list
+        TransactionFilterProxy *filter = new TransactionFilterProxy();
+        filter->setSourceModel(model->getTransactionTableModel());
+        filter->setLimit(NUM_ITEMS);
+        filter->setDynamicSortFilter(true);
+        filter->setSortRole(Qt::EditRole);
+        filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
+
+        ui->listTransactions->setModel(filter);
+        ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
+
+        // Keep up to date with wallet
+        setBalance(model->getBalance(), model->getUnconfirmedBalance());
+        connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
+
+        setNumTransactions(model->getNumTransactions());
+        connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
+
+        connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(displayUnitChanged()));
+    }
+}
+
+void OverviewPage::displayUnitChanged()
+{
+    if(!model || !model->getOptionsModel())
+        return;
+    if(currentBalance != -1)
+        setBalance(currentBalance, currentUnconfirmedBalance);
+
+    txdelegate->unit = model->getOptionsModel()->getDisplayUnit();
+    ui->listTransactions->update();
+}
diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h
new file mode 100644 (file)
index 0000000..1199227
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef OVERVIEWPAGE_H
+#define OVERVIEWPAGE_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QModelIndex;
+QT_END_NAMESPACE
+
+namespace Ui {
+    class OverviewPage;
+}
+class WalletModel;
+class TxViewDelegate;
+
+/** Overview ("home") page widget */
+class OverviewPage : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit OverviewPage(QWidget *parent = 0);
+    ~OverviewPage();
+
+    void setModel(WalletModel *model);
+
+public slots:
+    void setBalance(qint64 balance, qint64 unconfirmedBalance);
+    void setNumTransactions(int count);
+
+signals:
+    void transactionClicked(const QModelIndex &index);
+
+private:
+    Ui::OverviewPage *ui;
+    WalletModel *model;
+    qint64 currentBalance;
+    qint64 currentUnconfirmedBalance;
+
+    TxViewDelegate *txdelegate;
+
+private slots:
+    void displayUnitChanged();
+};
+
+#endif // OVERVIEWPAGE_H
diff --git a/src/qt/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp
new file mode 100644 (file)
index 0000000..8ca230c
--- /dev/null
@@ -0,0 +1,45 @@
+#include "qvalidatedlineedit.h"
+
+#include "guiconstants.h"
+
+QValidatedLineEdit::QValidatedLineEdit(QWidget *parent) :
+    QLineEdit(parent), valid(true)
+{
+    connect(this, SIGNAL(textChanged(QString)), this, SLOT(markValid()));
+}
+
+void QValidatedLineEdit::setValid(bool valid)
+{
+    if(valid == this->valid)
+    {
+        return;
+    }
+
+    if(valid)
+    {
+        setStyleSheet("");
+    }
+    else
+    {
+        setStyleSheet(STYLE_INVALID);
+    }
+    this->valid = valid;
+}
+
+void QValidatedLineEdit::focusInEvent(QFocusEvent *evt)
+{
+    // Clear invalid flag on focus
+    setValid(true);
+    QLineEdit::focusInEvent(evt);
+}
+
+void QValidatedLineEdit::markValid()
+{
+    setValid(true);
+}
+
+void QValidatedLineEdit::clear()
+{
+    setValid(true);
+    QLineEdit::clear();
+}
diff --git a/src/qt/qvalidatedlineedit.h b/src/qt/qvalidatedlineedit.h
new file mode 100644 (file)
index 0000000..66e26be
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef QVALIDATEDLINEEDIT_H
+#define QVALIDATEDLINEEDIT_H
+
+#include <QLineEdit>
+
+/** Line edit that can be marked as "invalid" to show input validation feedback. When marked as invalid,
+   it will get a red background until it is focused.
+ */
+class QValidatedLineEdit : public QLineEdit
+{
+    Q_OBJECT
+public:
+    explicit QValidatedLineEdit(QWidget *parent = 0);
+    void clear();
+
+protected:
+    void focusInEvent(QFocusEvent *evt);
+
+private:
+    bool valid;
+
+public slots:
+    void setValid(bool valid);
+
+private slots:
+    void markValid();
+};
+
+#endif // QVALIDATEDLINEEDIT_H
diff --git a/src/qt/qvaluecombobox.cpp b/src/qt/qvaluecombobox.cpp
new file mode 100644 (file)
index 0000000..c0ad8c1
--- /dev/null
@@ -0,0 +1,27 @@
+#include "qvaluecombobox.h"
+
+QValueComboBox::QValueComboBox(QWidget *parent) :
+        QComboBox(parent), role(Qt::UserRole)
+{
+    connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(handleSelectionChanged(int)));
+}
+
+int QValueComboBox::value() const
+{
+    return itemData(currentIndex(), role).toInt();
+}
+
+void QValueComboBox::setValue(int value)
+{
+    setCurrentIndex(findData(value, role));
+}
+
+void QValueComboBox::setRole(int role)
+{
+    this->role = role;
+}
+
+void QValueComboBox::handleSelectionChanged(int idx)
+{
+    emit valueChanged();
+}
diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h
new file mode 100644 (file)
index 0000000..11f342d
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef QVALUECOMBOBOX_H
+#define QVALUECOMBOBOX_H
+
+#include <QComboBox>
+
+/* QComboBox that can be used with QDataWidgetMapper to select ordinal values from a model. */
+class QValueComboBox : public QComboBox
+{
+    Q_OBJECT
+    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true)
+public:
+    explicit QValueComboBox(QWidget *parent = 0);
+
+    int value() const;
+    void setValue(int value);
+
+    /** Specify model role to use as ordinal value */
+    void setRole(int role);
+
+signals:
+    void valueChanged();
+
+public slots:
+
+private:
+    int role;
+
+private slots:
+    void handleSelectionChanged(int idx);
+};
+
+#endif // QVALUECOMBOBOX_H
diff --git a/src/qt/res/bitcoin-qt.rc b/src/qt/res/bitcoin-qt.rc
new file mode 100644 (file)
index 0000000..1a1ab53
--- /dev/null
@@ -0,0 +1 @@
+IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
diff --git a/src/qt/res/icons/add.png b/src/qt/res/icons/add.png
new file mode 100644 (file)
index 0000000..f98e2a8
Binary files /dev/null and b/src/qt/res/icons/add.png differ
diff --git a/src/qt/res/icons/address-book.png b/src/qt/res/icons/address-book.png
new file mode 100644 (file)
index 0000000..d41dbe6
Binary files /dev/null and b/src/qt/res/icons/address-book.png differ
diff --git a/src/qt/res/icons/bitcoin.icns b/src/qt/res/icons/bitcoin.icns
new file mode 100644 (file)
index 0000000..3c75708
Binary files /dev/null and b/src/qt/res/icons/bitcoin.icns differ
diff --git a/src/qt/res/icons/bitcoin.ico b/src/qt/res/icons/bitcoin.ico
new file mode 100644 (file)
index 0000000..01afd3c
Binary files /dev/null and b/src/qt/res/icons/bitcoin.ico differ
diff --git a/src/qt/res/icons/bitcoin.png b/src/qt/res/icons/bitcoin.png
new file mode 100644 (file)
index 0000000..bf43144
Binary files /dev/null and b/src/qt/res/icons/bitcoin.png differ
diff --git a/src/qt/res/icons/bitcoin_testnet.png b/src/qt/res/icons/bitcoin_testnet.png
new file mode 100644 (file)
index 0000000..ee2dc40
Binary files /dev/null and b/src/qt/res/icons/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/clock1.png b/src/qt/res/icons/clock1.png
new file mode 100644 (file)
index 0000000..448e47f
Binary files /dev/null and b/src/qt/res/icons/clock1.png differ
diff --git a/src/qt/res/icons/clock2.png b/src/qt/res/icons/clock2.png
new file mode 100644 (file)
index 0000000..c1a6e99
Binary files /dev/null and b/src/qt/res/icons/clock2.png differ
diff --git a/src/qt/res/icons/clock3.png b/src/qt/res/icons/clock3.png
new file mode 100644 (file)
index 0000000..e429a40
Binary files /dev/null and b/src/qt/res/icons/clock3.png differ
diff --git a/src/qt/res/icons/clock4.png b/src/qt/res/icons/clock4.png
new file mode 100644 (file)
index 0000000..ba036f4
Binary files /dev/null and b/src/qt/res/icons/clock4.png differ
diff --git a/src/qt/res/icons/clock5.png b/src/qt/res/icons/clock5.png
new file mode 100644 (file)
index 0000000..411d7a7
Binary files /dev/null and b/src/qt/res/icons/clock5.png differ
diff --git a/src/qt/res/icons/configure.png b/src/qt/res/icons/configure.png
new file mode 100644 (file)
index 0000000..95bd319
Binary files /dev/null and b/src/qt/res/icons/configure.png differ
diff --git a/src/qt/res/icons/connect0_16.png b/src/qt/res/icons/connect0_16.png
new file mode 100644 (file)
index 0000000..66f3ae4
Binary files /dev/null and b/src/qt/res/icons/connect0_16.png differ
diff --git a/src/qt/res/icons/connect1_16.png b/src/qt/res/icons/connect1_16.png
new file mode 100644 (file)
index 0000000..76000be
Binary files /dev/null and b/src/qt/res/icons/connect1_16.png differ
diff --git a/src/qt/res/icons/connect2_16.png b/src/qt/res/icons/connect2_16.png
new file mode 100644 (file)
index 0000000..6d9a372
Binary files /dev/null and b/src/qt/res/icons/connect2_16.png differ
diff --git a/src/qt/res/icons/connect3_16.png b/src/qt/res/icons/connect3_16.png
new file mode 100644 (file)
index 0000000..a211700
Binary files /dev/null and b/src/qt/res/icons/connect3_16.png differ
diff --git a/src/qt/res/icons/connect4_16.png b/src/qt/res/icons/connect4_16.png
new file mode 100644 (file)
index 0000000..e2fe97d
Binary files /dev/null and b/src/qt/res/icons/connect4_16.png differ
diff --git a/src/qt/res/icons/edit.png b/src/qt/res/icons/edit.png
new file mode 100644 (file)
index 0000000..1d69145
Binary files /dev/null and b/src/qt/res/icons/edit.png differ
diff --git a/src/qt/res/icons/editcopy.png b/src/qt/res/icons/editcopy.png
new file mode 100644 (file)
index 0000000..f882aa2
Binary files /dev/null and b/src/qt/res/icons/editcopy.png differ
diff --git a/src/qt/res/icons/editpaste.png b/src/qt/res/icons/editpaste.png
new file mode 100644 (file)
index 0000000..a192060
Binary files /dev/null and b/src/qt/res/icons/editpaste.png differ
diff --git a/src/qt/res/icons/export.png b/src/qt/res/icons/export.png
new file mode 100644 (file)
index 0000000..1df9c23
Binary files /dev/null and b/src/qt/res/icons/export.png differ
diff --git a/src/qt/res/icons/history.png b/src/qt/res/icons/history.png
new file mode 100644 (file)
index 0000000..10ac0e1
Binary files /dev/null and b/src/qt/res/icons/history.png differ
diff --git a/src/qt/res/icons/key.png b/src/qt/res/icons/key.png
new file mode 100644 (file)
index 0000000..ece0164
Binary files /dev/null and b/src/qt/res/icons/key.png differ
diff --git a/src/qt/res/icons/lock_closed.png b/src/qt/res/icons/lock_closed.png
new file mode 100644 (file)
index 0000000..c566510
Binary files /dev/null and b/src/qt/res/icons/lock_closed.png differ
diff --git a/src/qt/res/icons/lock_open.png b/src/qt/res/icons/lock_open.png
new file mode 100644 (file)
index 0000000..c98ca86
Binary files /dev/null and b/src/qt/res/icons/lock_open.png differ
diff --git a/src/qt/res/icons/notsynced.png b/src/qt/res/icons/notsynced.png
new file mode 100644 (file)
index 0000000..c9e7118
Binary files /dev/null and b/src/qt/res/icons/notsynced.png differ
diff --git a/src/qt/res/icons/overview.png b/src/qt/res/icons/overview.png
new file mode 100644 (file)
index 0000000..ee2511f
Binary files /dev/null and b/src/qt/res/icons/overview.png differ
diff --git a/src/qt/res/icons/quit.png b/src/qt/res/icons/quit.png
new file mode 100644 (file)
index 0000000..0dde6f3
Binary files /dev/null and b/src/qt/res/icons/quit.png differ
diff --git a/src/qt/res/icons/receive.png b/src/qt/res/icons/receive.png
new file mode 100644 (file)
index 0000000..53ad1d1
Binary files /dev/null and b/src/qt/res/icons/receive.png differ
diff --git a/src/qt/res/icons/remove.png b/src/qt/res/icons/remove.png
new file mode 100644 (file)
index 0000000..a44b6d1
Binary files /dev/null and b/src/qt/res/icons/remove.png differ
diff --git a/src/qt/res/icons/send.png b/src/qt/res/icons/send.png
new file mode 100644 (file)
index 0000000..ceb91ea
Binary files /dev/null and b/src/qt/res/icons/send.png differ
diff --git a/src/qt/res/icons/synced.png b/src/qt/res/icons/synced.png
new file mode 100644 (file)
index 0000000..4d7e0e8
Binary files /dev/null and b/src/qt/res/icons/synced.png differ
diff --git a/src/qt/res/icons/toolbar.png b/src/qt/res/icons/toolbar.png
new file mode 100644 (file)
index 0000000..84c18e2
Binary files /dev/null and b/src/qt/res/icons/toolbar.png differ
diff --git a/src/qt/res/icons/toolbar_testnet.png b/src/qt/res/icons/toolbar_testnet.png
new file mode 100644 (file)
index 0000000..90ed6d9
Binary files /dev/null and b/src/qt/res/icons/toolbar_testnet.png differ
diff --git a/src/qt/res/icons/transaction0.png b/src/qt/res/icons/transaction0.png
new file mode 100644 (file)
index 0000000..4578666
Binary files /dev/null and b/src/qt/res/icons/transaction0.png differ
diff --git a/src/qt/res/icons/transaction2.png b/src/qt/res/icons/transaction2.png
new file mode 100644 (file)
index 0000000..01bb558
Binary files /dev/null and b/src/qt/res/icons/transaction2.png differ
diff --git a/src/qt/res/icons/tx_inout.png b/src/qt/res/icons/tx_inout.png
new file mode 100644 (file)
index 0000000..5f092f9
Binary files /dev/null and b/src/qt/res/icons/tx_inout.png differ
diff --git a/src/qt/res/icons/tx_input.png b/src/qt/res/icons/tx_input.png
new file mode 100644 (file)
index 0000000..0f5fea3
Binary files /dev/null and b/src/qt/res/icons/tx_input.png differ
diff --git a/src/qt/res/icons/tx_mined.png b/src/qt/res/icons/tx_mined.png
new file mode 100644 (file)
index 0000000..613f30f
Binary files /dev/null and b/src/qt/res/icons/tx_mined.png differ
diff --git a/src/qt/res/icons/tx_output.png b/src/qt/res/icons/tx_output.png
new file mode 100644 (file)
index 0000000..9ae39fb
Binary files /dev/null and b/src/qt/res/icons/tx_output.png differ
diff --git a/src/qt/res/images/about.png b/src/qt/res/images/about.png
new file mode 100644 (file)
index 0000000..c9ab951
Binary files /dev/null and b/src/qt/res/images/about.png differ
diff --git a/src/qt/res/images/splash2.jpg b/src/qt/res/images/splash2.jpg
new file mode 100644 (file)
index 0000000..3846e6f
Binary files /dev/null and b/src/qt/res/images/splash2.jpg differ
diff --git a/src/qt/res/movies/update_spinner.mng b/src/qt/res/movies/update_spinner.mng
new file mode 100644 (file)
index 0000000..7df3baa
Binary files /dev/null and b/src/qt/res/movies/update_spinner.mng differ
diff --git a/src/qt/res/src/bitcoin.svg b/src/qt/res/src/bitcoin.svg
new file mode 100644 (file)
index 0000000..96f1017
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   width="256"
+   height="256"
+   sodipodi:docname="bitcoin.svg"
+   inkscape:export-filename="/store/orion/projects/bitcoin/BC_Logo_icon32.png"
+   inkscape:export-xdpi="11.25"
+   inkscape:export-ydpi="11.25"
+   style="display:inline">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <linearGradient
+       id="linearGradient3800">
+      <stop
+         style="stop-color:#fbba6c;stop-opacity:1;"
+         offset="0"
+         id="stop3802" />
+      <stop
+         style="stop-color:#f89825;stop-opacity:1;"
+         offset="1"
+         id="stop3804" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3788">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.7328864"
+         id="feGaussianBlur3790" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3800"
+       id="radialGradient3806"
+       cx="137.01819"
+       cy="136.81316"
+       fx="137.01819"
+       fy="136.81316"
+       r="120.22619"
+       gradientTransform="matrix(1,0,0,0.99768745,0,0.29784356)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1204"
+     inkscape:window-height="972"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1"
+     inkscape:cx="-54.927212"
+     inkscape:cy="128"
+     inkscape:window-x="238"
+     inkscape:window-y="143"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="layer1" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:nodetypes="sssssssssssscssssscsssscscssssssssssscscsssssssscscssssscssscssssssscsssssssss"
+       inkscape:connector-curvature="0"
+       id="path2986"
+       d="M 111.77934,251.6677 C 67.147549,243.82973 30.788461,211.94464 17.111244,168.64858 7.1011053,136.9609 11.409199,100.0445 28.433065,71.630835 45.23974,43.579693 71.151762,24.409692 103.78036,15.888094 c 12.1652,-3.177178 33.00458,-3.99623 46.6577,-1.833789 45.59908,7.22219 82.56109,39.080427 96.48709,83.164011 10.01013,31.687684 5.70204,68.604084 -11.32183,97.017744 -16.8025,28.04418 -42.64131,47.16473 -75.34729,55.75648 -7.52834,1.97768 -11.60054,2.41566 -24.95273,2.68377 -10.90952,0.21906 -18.34974,-0.0999 -23.52396,-1.00861 z m 20.17619,-31.35425 c 0.63075,-2.39846 2.14458,-8.28561 3.36407,-13.08254 1.56481,-6.15521 2.69488,-8.60563 3.84031,-8.32722 0.89267,0.21696 7.39067,0.68131 14.43998,1.03189 16.31195,0.81124 23.9944,-1.14509 31.43693,-8.00537 7.63877,-7.04117 11.30337,-15.63267 11.82635,-27.72636 0.37592,-8.69327 0.10152,-10.44523 -2.27687,-14.53617 -1.48738,-2.55836 -5.17935,-6.48313 -8.20438,-8.7217 l -5.50006,-4.07013 4.37131,-1.87838 c 9.83682,-4.22697 14.47489,-11.84516 15.1401,-24.86816 0.41587,-8.14174 0.12573,-9.95645 -2.32406,-14.536178 -3.41249,-6.379435 -11.7129,-12.875301 -21.81801,-17.074696 -4.15735,-1.727672 -7.66196,-3.187464 -7.78803,-3.243983 -0.12607,-0.05651 1.28534,-6.088871 3.13645,-13.405229 1.85112,-7.316357 3.26253,-13.372021 3.13645,-13.457031 -0.12607,-0.08501 -2.84573,-0.778731 -6.04368,-1.541604 -3.19796,-0.762872 -6.6666,-1.640092 -7.70811,-1.949379 -1.54868,-0.459905 -2.47321,1.773902 -5.07541,12.262964 -2.215,8.928331 -3.69157,12.825303 -4.85951,12.825303 -2.30435,0 -12.01076,-2.489633 -12.01076,-3.080685 0,-0.263336 1.37739,-5.975631 3.06085,-12.693987 1.68345,-6.718356 2.78086,-12.49516 2.43868,-12.837341 -1.06646,-1.066455 -13.66473,-4.07084 -14.61292,-3.484827 -0.49474,0.305758 -2.13899,5.806491 -3.65393,12.223852 -1.51493,6.417361 -3.0693,12.177423 -3.45416,12.800138 -0.42537,0.68826 -6.84309,-0.416984 -16.36715,-2.818708 -8.617084,-2.173005 -15.989649,-3.583696 -16.383486,-3.13487 -0.393848,0.448826 -1.334199,3.432558 -2.089673,6.630515 -0.755474,3.197957 -1.623352,6.656241 -1.928612,7.685075 -0.438573,1.478093 0.970946,2.194444 6.717302,3.413902 7.407149,1.571906 12.549199,5.114005 12.549199,8.644526 0,3.559986 -18.770806,76.736553 -20.092504,78.329103 -1.007682,1.21419 -2.807318,1.40957 -7.196833,0.78135 -11.551776,-1.65329 -10.897277,-1.95681 -14.648875,6.7937 -1.878049,4.38054 -3.41465,8.32832 -3.41465,8.77286 0,0.44453 6.14881,2.29784 13.664008,4.11848 7.515199,1.82065 14.792647,3.72851 16.172114,4.23971 l 2.508106,0.92945 -3.31877,13.11716 c -1.825323,7.21442 -3.215633,13.21726 -3.089563,13.33965 0.549874,0.53382 15.058297,4.01313 15.382497,3.68892 0.19792,-0.19791 1.74688,-5.83164 3.44215,-12.51942 1.69526,-6.68778 3.30839,-12.52544 3.58472,-12.97256 0.443,-0.71676 11.73522,1.68597 12.76544,2.7162 0.21981,0.21981 -1.08467,6.26629 -2.89884,13.43664 l -3.29849,13.03696 4.8136,1.23571 c 2.6475,0.67965 5.33693,1.42786 5.97652,1.66271 3.63321,1.33406 5.19855,0.40079 6.2902,-3.75024 z m 0.68716,-43.88623 c -0.63959,-0.21166 -5.21848,-1.29512 -10.17531,-2.40768 -4.95684,-1.11255 -9.01243,-2.23295 -9.01243,-2.48975 0,-0.65492 8.11353,-33.1852 8.69895,-34.87745 0.34957,-1.01046 3.32218,-0.62569 10.96233,1.41895 12.84914,3.43866 18.00073,5.54314 23.11146,9.44128 8.35514,6.37277 10.49752,14.36232 5.75489,21.46161 -3.94917,5.91153 -9.15813,8.03413 -19.45529,7.92788 -4.79693,-0.0496 -9.245,-0.26317 -9.8846,-0.47484 z m 2.50991,-54.7082 c -3.73627,-0.93479 -7.21128,-1.958 -7.72221,-2.27376 -0.72057,-0.44534 6.3168,-31.740173 7.3756,-32.798964 0.64276,-0.642776 19.09068,4.708848 22.8588,6.631196 2.34875,1.19824 5.92162,4.059214 7.93975,6.357724 2.94919,3.358944 3.66929,5.201504 3.66929,9.388734 0,4.31035 -0.68714,5.95944 -3.98073,9.55341 -3.93586,4.2948 -4.08991,4.34657 -13.664,4.59252 -5.49512,0.14117 -12.62142,-0.48635 -16.4765,-1.45086 z"
+       style="opacity:0.8176923;fill:#000000;fill-opacity:1;filter:url(#filter3788)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Front"
+     style="display:inline">
+    <path
+       style="fill:url(#radialGradient3806);fill-opacity:1;display:inline"
+       d="M 107.77934,247.6677 C 63.147549,239.82973 26.788461,207.94464 13.111244,164.64858 3.1011053,132.9609 7.4091993,96.044496 24.433065,67.630835 41.23974,39.579693 67.151762,20.409692 99.780356,11.888094 111.94556,8.7109163 132.78494,7.8918643 146.43806,10.054305 c 45.59908,7.22219 82.56109,39.080427 96.48709,83.164011 10.01013,31.687684 5.70204,68.604084 -11.32183,97.017744 -16.8025,28.04418 -42.64131,47.16473 -75.34729,55.75648 -7.52834,1.97768 -11.60054,2.41566 -24.95273,2.68377 -10.90952,0.21906 -18.34974,-0.0999 -23.52396,-1.00861 z m 20.17619,-31.35425 c 0.63075,-2.39846 2.14458,-8.28561 3.36407,-13.08254 1.56481,-6.15521 2.69488,-8.60563 3.84031,-8.32722 0.89267,0.21696 7.39067,0.68131 14.43998,1.03189 16.31195,0.81124 23.9944,-1.14509 31.43693,-8.00537 7.63877,-7.04117 11.30337,-15.63267 11.82635,-27.72636 0.37592,-8.69327 0.10152,-10.44523 -2.27687,-14.53617 -1.48738,-2.55836 -5.17935,-6.48313 -8.20438,-8.7217 l -5.50006,-4.07013 4.37131,-1.87838 c 9.83682,-4.22697 14.47489,-11.84516 15.1401,-24.86816 0.41587,-8.141744 0.12573,-9.956454 -2.32406,-14.536178 -3.41249,-6.379435 -11.7129,-12.875301 -21.81801,-17.074696 -4.15735,-1.727672 -7.66196,-3.187464 -7.78803,-3.243983 -0.12607,-0.05651 1.28534,-6.088871 3.13645,-13.405229 1.85112,-7.316357 3.26253,-13.372021 3.13645,-13.457031 -0.12607,-0.08501 -2.84573,-0.778731 -6.04368,-1.541604 -3.19796,-0.762872 -6.6666,-1.640092 -7.70811,-1.949379 -1.54868,-0.459905 -2.47321,1.773902 -5.07541,12.262964 -2.215,8.928331 -3.69157,12.825303 -4.85951,12.825303 -2.30435,0 -12.01076,-2.489633 -12.01076,-3.080685 0,-0.263336 1.37739,-5.975631 3.06085,-12.693987 1.68345,-6.718356 2.78086,-12.49516 2.43868,-12.837341 -1.06646,-1.066455 -13.66473,-4.07084 -14.61292,-3.484827 -0.49474,0.305758 -2.13899,5.806491 -3.65393,12.223852 -1.51493,6.417361 -3.0693,12.177423 -3.45416,12.800138 -0.42537,0.68826 -6.84309,-0.416984 -16.36715,-2.818708 -8.617084,-2.173005 -15.989649,-3.583696 -16.383486,-3.13487 -0.393848,0.448826 -1.334199,3.432558 -2.089673,6.630515 -0.755474,3.197957 -1.623352,6.656241 -1.928612,7.685075 -0.438573,1.478093 0.970946,2.194444 6.717302,3.413902 7.407145,1.571906 12.549199,5.114005 12.549199,8.644526 0,3.559986 -18.770806,76.736553 -20.092504,78.329103 -1.007682,1.21419 -2.807318,1.40957 -7.196833,0.78135 -11.551776,-1.65329 -10.897277,-1.95681 -14.648875,6.7937 -1.878049,4.38054 -3.41465,8.32832 -3.41465,8.77286 0,0.44453 6.14881,2.29784 13.664008,4.11848 7.515199,1.82065 14.792647,3.72851 16.172114,4.23971 l 2.508106,0.92945 -3.31877,13.11716 c -1.825323,7.21442 -3.215633,13.21726 -3.089563,13.33965 0.549874,0.53382 15.058293,4.01313 15.382493,3.68892 0.19792,-0.19791 1.74688,-5.83164 3.442154,-12.51942 1.69526,-6.68778 3.30839,-12.52544 3.58472,-12.97256 0.443,-0.71676 11.73522,1.68597 12.76544,2.7162 0.21981,0.21981 -1.08467,6.26629 -2.89884,13.43664 l -3.29849,13.03696 4.8136,1.23571 c 2.6475,0.67965 5.33693,1.42786 5.97652,1.66271 3.63321,1.33406 5.19855,0.40079 6.2902,-3.75024 z m 0.68716,-43.88623 c -0.63959,-0.21166 -5.21848,-1.29512 -10.17531,-2.40768 -4.95684,-1.11255 -9.01243,-2.23295 -9.01243,-2.48975 0,-0.65492 8.11353,-33.1852 8.69895,-34.87745 0.34957,-1.01046 3.32218,-0.62569 10.96233,1.41895 12.84914,3.43866 18.00073,5.54314 23.11146,9.44128 8.35514,6.37277 10.49752,14.36232 5.75489,21.46161 -3.94917,5.91153 -9.15813,8.03413 -19.45529,7.92788 -4.79693,-0.0496 -9.245,-0.26317 -9.8846,-0.47484 z m 2.50991,-54.7082 c -3.73627,-0.93479 -7.21128,-1.958 -7.72221,-2.27376 -0.72057,-0.44534 6.3168,-31.740173 7.3756,-32.798964 0.64276,-0.642776 19.09068,4.708848 22.8588,6.631196 2.34875,1.19824 5.92162,4.059214 7.93975,6.357724 2.94919,3.35894 3.66929,5.201504 3.66929,9.388734 0,4.31035 -0.68714,5.95944 -3.98073,9.55341 -3.93586,4.2948 -4.08991,4.34657 -13.664,4.59252 -5.49512,0.14117 -12.62142,-0.48635 -16.4765,-1.45086 z"
+       id="path2987"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="sssssssssssscssssscsssscscssssssssssscscsssssssscscssssscssscssssssscsssssssss"
+       inkscape:export-xdpi="11.98"
+       inkscape:export-ydpi="11.98" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock1.svg b/src/qt/res/src/clock1.svg
new file mode 100644 (file)
index 0000000..793dc7f
--- /dev/null
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock0.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ff84a6;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#ff0a4d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#909090;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#3c3c3c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#ff8282;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#ff1919;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="0.31530906"
+     inkscape:cy="12.478576"
+     inkscape:current-layer="layer4"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     sodipodi:insensitive="true"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 14.4287,3.6919089 A 7.7781744,7.7781744 0 1 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="5.675432"
+       sodipodi:end="10.999096" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock2.svg b/src/qt/res/src/clock2.svg
new file mode 100644 (file)
index 0000000..6a78adf
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock0.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ff848d;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#ff0a1b;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#909090;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#3c3c3c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#ffae82;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#ff6a19;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="10.569917"
+     inkscape:cy="10.828475"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 15.197954,11.184912 A 7.7781744,7.7781744 0 1 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="0.4031442"
+       sodipodi:end="4.7159107" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock3.svg b/src/qt/res/src/clock3.svg
new file mode 100644 (file)
index 0000000..09ccc25
--- /dev/null
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock1.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffa184;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#ff440a;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#909090;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#3c3c3c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#ffda82;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#ffbb19;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="23.894737"
+     inkscape:cx="16"
+     inkscape:cy="-1"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 8.2135533,15.909749 A 7.7781744,7.7781744 0 1 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="1.5489111"
+       sodipodi:end="4.7159107" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock4.svg b/src/qt/res/src/clock4.svg
new file mode 100644 (file)
index 0000000..7d9dc37
--- /dev/null
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock2.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffcc84;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#ff9a0a;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#909090;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#3c3c3c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#f8ff82;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#f1ff19;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="8.6111742"
+     inkscape:cy="6.6684704"
+     inkscape:current-layer="layer5"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 1.7005474,12.635546 A 7.7781744,7.7781744 0 0 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="2.5243203"
+       sodipodi:end="4.7159107" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock5.svg b/src/qt/res/src/clock5.svg
new file mode 100644 (file)
index 0000000..9fd58d9
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock3.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#fff884;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#fff10a;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#909090;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#3c3c3c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#ccff82;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#a0ff19;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="8.6111742"
+     inkscape:cy="6.6684704"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 1.0968082,4.6340519 A 7.7781744,7.7781744 0 0 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="3.6082438"
+       sodipodi:end="4.7159107" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/clock_green.svg b/src/qt/res/src/clock_green.svg
new file mode 100644 (file)
index 0000000..e31f0e7
--- /dev/null
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2987"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="clock_green.svg">
+  <defs
+     id="defs2989">
+    <linearGradient
+       id="linearGradient4465">
+      <stop
+         id="stop4467"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4469"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4424">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4426" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:1;"
+         offset="1"
+         id="stop4428" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4357">
+      <stop
+         id="stop4359"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#baff84;stop-opacity:0.49803922;"
+         offset="0.36363637"
+         id="stop4473" />
+      <stop
+         id="stop4361"
+         offset="1"
+         style="stop-color:#76ff0a;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4347">
+      <stop
+         id="stop4349"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop4351"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#82ff82;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#19ff19;stop-opacity:1;"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4347"
+       id="linearGradient3779"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4339">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.3240906"
+         id="feGaussianBlur4341" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient4345"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4424"
+       id="linearGradient4430"
+       x1="10.740074"
+       y1="16.148634"
+       x2="6.3055735"
+       y2="-1.2798394"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4357"
+       id="radialGradient4440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5712985,0.01074232,-0.01353758,1.9801676,-4.5655476,-0.68355868)"
+       cx="8.1975746"
+       cy="-0.080271922"
+       fx="8.1975746"
+       fy="-0.080271922"
+       r="7.7781744" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4465"
+       id="linearGradient4471"
+       gradientUnits="userSpaceOnUse"
+       x1="2.224874"
+       y1="2.8301363"
+       x2="14.038582"
+       y2="13.171574" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="9.1870806"
+     inkscape:cy="14.089546"
+     inkscape:current-layer="layer3"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata2992">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Shadow"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient3779);fill-opacity:1;stroke:none;display:inline;filter:url(#filter4339)"
+       id="path2997"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       transform="translate(0,-0.08838835)" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Clock"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       d="m 15.821514,8.1334372 a 7.7781744,7.7781744 0 1 1 -15.55634867,0 7.7781744,7.7781744 0 1 1 15.55634867,0 z"
+       sodipodi:ry="7.7781744"
+       sodipodi:rx="7.7781744"
+       sodipodi:cy="8.1334372"
+       sodipodi:cx="8.0433397"
+       id="path4343"
+       style="fill:url(#linearGradient4345);fill-opacity:1;stroke:none"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Block"
+     sodipodi:insensitive="true"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#linearGradient4471);fill-opacity:1;stroke:none;display:inline"
+       id="path4462"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.7781744"
+       sodipodi:ry="7.7781744"
+       d="M 14.4287,3.6919089 A 7.7781744,7.7781744 0 1 1 8.0707322,0.35531099 L 8.0433397,8.1334372 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)"
+       sodipodi:start="5.675432"
+       sodipodi:end="10.999096" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Ticks"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       id="use4309"
+       transform="matrix(0.77323696,-0.44642857,0.44642857,0.77323696,-1.9715899,5.5529328)"
+       style="fill:url(#linearGradient4430);fill-opacity:1;stroke:none"
+       d="M 8.875,2.03125 C 8.875,2.5317581 8.4832492,2.9375 8,2.9375 7.5167508,2.9375 7.125,2.5317581 7.125,2.03125 7.125,1.5307419 7.5167508,1.125 8,1.125 c 0.4832492,0 0.875,0.4057419 0.875,0.90625 z M 5.8484195,2.6358993 C 6.0986735,3.069352 5.9622783,3.6166102 5.5437722,3.8582348 5.1252661,4.0998594 4.583129,3.944352 4.332875,3.5108993 4.082621,3.0774465 4.2190162,2.5301884 4.6375222,2.2885638 5.0560283,2.0469392 5.5981654,2.2024466 5.8484195,2.6358993 z M 3.5296488,4.6728304 C 3.9631015,4.9230844 4.1186089,5.4652215 3.8769843,5.8837276 3.6353597,6.3022337 3.0881015,6.4386289 2.6546488,6.1883748 2.221196,5.9381208 2.0656886,5.3959837 2.3073132,4.9774776 2.5489379,4.5589715 3.096196,4.4225763 3.5296488,4.6728304 z m -0.989649,2.9234201 c 0.5005081,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.4057419,0.875 -0.90625,0.875 -0.5005081,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.4057419,-0.875 0.90625,-0.875 z M 3.144649,10.622831 c 0.4334527,-0.250254 0.9807109,-0.113859 1.2223355,0.304647 0.2416246,0.418506 0.086117,0.960643 -0.3473355,1.210897 C 3.5861963,12.388629 3.0389381,12.252234 2.7973135,11.833728 2.5556889,11.415222 2.7111963,10.873085 3.144649,10.622831 z m 2.036931,2.31877 c 0.2502541,-0.433452 0.7923912,-0.58896 1.2108973,-0.347335 0.4185061,0.241624 0.5549012,0.788883 0.3046472,1.222335 -0.2502541,0.433453 -0.7923912,0.58896 -1.2108972,0.347336 C 5.0677212,13.922312 4.931326,13.375054 5.18158,12.941601 z m 2.9234201,0.989649 c 0,-0.500508 0.3917508,-0.90625 0.875,-0.90625 0.4832492,0 0.875,0.405742 0.875,0.90625 0,0.500509 -0.3917508,0.90625 -0.875,0.90625 -0.4832492,0 -0.875,-0.405741 -0.875,-0.90625 z M 11.13158,13.326601 c -0.250254,-0.433453 -0.113859,-0.980711 0.304647,-1.222335 0.418507,-0.241625 0.960644,-0.08612 1.210898,0.347335 0.250254,0.433453 0.113859,0.980711 -0.304648,1.222336 -0.418506,0.241624 -0.960643,0.08612 -1.210897,-0.347336 z m 2.318771,-2.036931 c -0.433453,-0.250254 -0.58896,-0.792391 -0.347335,-1.210897 0.241624,-0.4185064 0.788882,-0.5549016 1.222335,-0.3046476 0.433453,0.2502536 0.58896,0.7923916 0.347336,1.2108976 -0.241625,0.418506 -0.788883,0.554901 -1.222336,0.304647 z M 14.44,8.36625 c -0.500508,0 -0.90625,-0.3917508 -0.90625,-0.875 0,-0.4832492 0.405742,-0.875 0.90625,-0.875 0.500508,0 0.90625,0.3917508 0.90625,0.875 0,0.4832492 -0.405742,0.875 -0.90625,0.875 z M 13.835351,5.3396697 C 13.401898,5.5899238 12.85464,5.4535286 12.613016,5.0350225 12.371391,4.6165164 12.526898,4.0743793 12.960351,3.8241252 c 0.433453,-0.250254 0.980711,-0.1138588 1.222336,0.3046473 0.241624,0.4185061 0.08612,0.9606432 -0.347336,1.2108972 z M 11.79842,3.0208989 C 11.548166,3.4543516 11.006029,3.609859 10.587523,3.3682344 10.169017,3.1266098 10.032621,2.5793516 10.282875,2.1458989 10.533129,1.7124461 11.075267,1.5569388 11.493773,1.7985634 11.912279,2.040188 12.048674,2.5874462 11.79842,3.0208989 z"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 7.875,2.8017767 0,5.25"
+       id="path4436"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 7.7781746,7.4629419 10.783378,7.6397186"
+       id="path4438"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Shine"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient4440);fill-opacity:1;stroke:none"
+       id="path4353"
+       sodipodi:cx="8.0433397"
+       sodipodi:cy="8.1334372"
+       sodipodi:rx="7.3686199"
+       sodipodi:ry="7.4368792"
+       d="m 15.41196,8.1334372 a 7.3686199,7.4368792 0 1 1 -14.73724019,0 7.3686199,7.4368792 0 1 1 14.73724019,0 z"
+       transform="matrix(0.91562931,0,0,0.91562931,0.64737218,0.56658541)" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/inout.svg b/src/qt/res/src/inout.svg
new file mode 100644 (file)
index 0000000..bfab8ef
--- /dev/null
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg3039"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   width="120"
+   height="120"
+   sodipodi:docname="inout3.svg"
+   inkscape:export-filename="/home/orion/projects2/bitcoin/tx_mined.png"
+   inkscape:export-xdpi="12"
+   inkscape:export-ydpi="12"
+   style="display:inline">
+  <metadata
+     id="metadata3045">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3043" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     id="namedview3041"
+     showgrid="false"
+     inkscape:zoom="1"
+     inkscape:cx="87.12655"
+     inkscape:cy="67.287943"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer7" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="base"
+     style="display:none">
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#afafaf;fill-opacity:1;stroke:none;stroke-width:7;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m 45.375,17 c -13.984022,0.241082 -24.968241,3.28976 -37.4375,9.59375 -8.9920665,21.871558 -6.680947,46.393002 -1.96875,69 26.190925,13.15317 55.594909,12.97748 81.75,-0.21875 3.852144,-9.729509 1.599587,-12.800015 2.375,-23.15625 C 83.917272,72.423868 77.129905,67.688094 74.1875,75.25 72.702487,79.722025 76.119709,82.645519 69.15625,83.34375 53.023957,88.536726 37.721719,89.140031 21.875,82.28125 19.715285,68.367979 18.599566,53.65725 22.5,40 c 16.868164,-6.642068 33.121079,-6.120062 50.03125,-0.15625 1.285344,5.854815 1.574746,5.763255 2.375,11.6875 C 80.46378,51.970623 89.644961,53.334736 91.3125,46 91.85305,36.007959 89.372312,31.625095 87.1875,25.6875 73.709743,21.03478 59.804255,16.698888 45.375,17 z"
+       id="path3053"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="arrow_out"
+     style="display:none">
+    <path
+       style="fill:#6e6e6e;fill-opacity:1;stroke:none;display:inline"
+       d="m 63.983409,65.48134 0.267857,-9.514444 36.161424,-0.194173 -7.414458,-8.757971 3.798312,-7.572721 c 0,0 23.437946,20.796656 22.500436,21.185 -0.93751,0.388345 -23.170094,22.73838 -23.170094,22.73838 l -3.128654,-8.931927 7.548388,-8.5638 z"
+       id="path3844"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccscccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="arrow_in"
+     style="display:none">
+    <path
+       inkscape:connector-curvature="0"
+       id="path4080"
+       d="m 99.28763,65.48134 -0.26786,-9.514444 -36.161422,-0.194173 7.768009,-6.283097 -4.151865,-9.279828 c 0,0 -23.43795,20.028889 -22.500436,20.417233 0.937514,0.388345 23.170094,20.970613 23.170094,20.970613 l 3.482207,-9.639034 -7.901936,-6.088926 z"
+       style="fill:#6e6e6e;fill-opacity:1;stroke:none;display:inline"
+       sodipodi:nodetypes="cccccscccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="mined"
+     style="display:inline">
+    <path
+       style="fill:#a9a9a9;fill-opacity:1;stroke:none;display:inline"
+       d="M 9.4375,99.758169 78.14665,33.110294 73.680556,28.300653 67.153187,8.375 l 18.55147,6.527369 4.80964,3.779003 4.809641,-4.80964 11.680552,12.367647 -6.18382,4.80964 13.74183,14.085377 -12.71119,14.42892 -14.77247,-16.14665 -65.273693,70.770424 z"
+       id="path4103"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       sodipodi:nodetypes="cccccccccccccc"
+       inkscape:connector-curvature="0"
+       id="path4619"
+       d="M 114.5625,99.758169 45.85335,33.110294 50.319444,28.300653 56.846813,8.375 l -18.55147,6.527369 -4.80964,3.779003 -4.809641,-4.80964 -11.680556,12.367647 6.183825,4.80964 L 9.4375,45.134396 22.148693,59.563316 36.92116,43.416666 102.19485,114.18709 z"
+       style="fill:#a9a9a9;fill-opacity:1;stroke:none;display:inline" />
+    <path
+       style="fill:#6e6e6e;fill-opacity:1;stroke:none"
+       d="M 10.960155,44.693128 38.53732,16.408856 54.093669,10.752002 48.436815,28.076118 22.273864,56.713943 z"
+       id="path5256"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       style="fill:#6e6e6e;fill-opacity:1;stroke:none"
+       d="M 69.296465,10.398449 85.559921,17.115963 111.72287,45.046681 102.17693,56.713943 74.953319,27.722565 z"
+       id="path5258"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccc" />
+  </g>
+</svg>
diff --git a/src/qt/res/src/questionmark.svg b/src/qt/res/src/questionmark.svg
new file mode 100644 (file)
index 0000000..c03c159
--- /dev/null
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16px"
+   height="16px"
+   id="svg2993"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="questionmark.svg"
+   inkscape:export-filename="/store/orion/projects/bitcoin/questionmark.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs2995">
+    <linearGradient
+       id="linearGradient3808">
+      <stop
+         style="stop-color:#c8c8c8;stop-opacity:1;"
+         offset="0"
+         id="stop3810" />
+      <stop
+         style="stop-color:#959595;stop-opacity:1"
+         offset="1"
+         id="stop3812" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3804"
+       x="-0.2510722"
+       width="1.5021444"
+       y="-0.13164773"
+       height="1.2632955">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.73280473"
+         id="feGaussianBlur3806" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3808"
+       id="linearGradient3844"
+       x1="8.4916801"
+       y1="1.4395804"
+       x2="8.6022711"
+       y2="14.211697"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter3889"
+       x="-0.13954329"
+       width="1.2790866"
+       y="-0.073168421"
+       height="1.1463368">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.40728516"
+         id="feGaussianBlur3891" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter3897"
+       x="-0.17178624"
+       width="1.3435725"
+       y="-0.090074761"
+       height="1.1801495">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.50139271"
+         id="feGaussianBlur3899" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="10.789648"
+     inkscape:cy="7.6382159"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata2998">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Below"
+     style="display:inline">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3006"
+       y="14.748394"
+       x="4.1060953"
+       style="font-size:18px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;filter:url(#filter3897)"
+       xml:space="preserve"><tspan
+         y="14.748394"
+         x="4.1060953"
+         id="tspan3008"
+         sodipodi:role="line">?</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;filter:url(#filter3889)"
+       x="4.1060953"
+       y="14.748394"
+       id="text3824"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3826"
+         x="4.1060953"
+         y="14.748394">?</tspan></text>
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="QuestionMark"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient3844);fill-opacity:1;stroke:none;font-family:Sans"
+       x="4.1060953"
+       y="14.748394"
+       id="text3001"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3003"
+         x="4.1060953"
+         y="14.748394"
+         style="fill:url(#linearGradient3844);fill-opacity:1">?</tspan></text>
+  </g>
+</svg>
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
new file mode 100644 (file)
index 0000000..4c58b38
--- /dev/null
@@ -0,0 +1,288 @@
+#include "sendcoinsdialog.h"
+#include "ui_sendcoinsdialog.h"
+#include "walletmodel.h"
+#include "bitcoinunits.h"
+#include "addressbookpage.h"
+#include "optionsmodel.h"
+#include "sendcoinsentry.h"
+#include "guiutil.h"
+#include "askpassphrasedialog.h"
+
+#include <QMessageBox>
+#include <QLocale>
+#include <QTextDocument>
+#include <QScrollBar>
+
+SendCoinsDialog::SendCoinsDialog(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::SendCoinsDialog),
+    model(0)
+{
+    ui->setupUi(this);
+
+#ifdef Q_WS_MAC // Icons on push buttons are very uncommon on Mac
+    ui->addButton->setIcon(QIcon());
+    ui->clearButton->setIcon(QIcon());
+    ui->sendButton->setIcon(QIcon());
+#endif
+
+    addEntry();
+
+    connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addEntry()));
+    connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear()));
+}
+
+void SendCoinsDialog::setModel(WalletModel *model)
+{
+    this->model = model;
+
+    for(int i = 0; i < ui->entries->count(); ++i)
+    {
+        SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
+        if(entry)
+        {
+            entry->setModel(model);
+        }
+    }
+    if(model)
+    {
+        setBalance(model->getBalance(), model->getUnconfirmedBalance());
+        connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
+    }
+}
+
+SendCoinsDialog::~SendCoinsDialog()
+{
+    delete ui;
+}
+
+void SendCoinsDialog::on_sendButton_clicked()
+{
+    QList<SendCoinsRecipient> recipients;
+    bool valid = true;
+
+    if(!model)
+        return;
+
+    for(int i = 0; i < ui->entries->count(); ++i)
+    {
+        SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
+        if(entry)
+        {
+            if(entry->validate())
+            {
+                recipients.append(entry->getValue());
+            }
+            else
+            {
+                valid = false;
+            }
+        }
+    }
+
+    if(!valid || recipients.isEmpty())
+    {
+        return;
+    }
+
+    // Format confirmation message
+    QStringList formatted;
+    foreach(const SendCoinsRecipient &rcp, recipients)
+    {
+        formatted.append(tr("<b>%1</b> to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), Qt::escape(rcp.label), rcp.address));
+    }
+
+    QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm send coins"),
+                          tr("Are you sure you want to send %1?").arg(formatted.join(tr(" and "))),
+          QMessageBox::Yes|QMessageBox::Cancel,
+          QMessageBox::Cancel);
+
+    if(retval != QMessageBox::Yes)
+    {
+        return;
+    }
+
+    WalletModel::UnlockContext ctx(model->requestUnlock());
+    if(!ctx.isValid())
+    {
+        // Unlock wallet was cancelled
+        return;
+    }
+
+    WalletModel::SendCoinsReturn sendstatus = model->sendCoins(recipients);
+    switch(sendstatus.status)
+    {
+    case WalletModel::InvalidAddress:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("The recepient address is not valid, please recheck."),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::InvalidAmount:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("The amount to pay must be larger than 0."),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::AmountExceedsBalance:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("Amount exceeds your balance"),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::AmountWithFeeExceedsBalance:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("Total exceeds your balance when the %1 transaction fee is included").
+            arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, sendstatus.fee)),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::DuplicateAddress:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("Duplicate address found, can only send to each address once in one send operation"),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::TransactionCreationFailed:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("Error: Transaction creation failed  "),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::TransactionCommitFailed:
+        QMessageBox::warning(this, tr("Send Coins"),
+            tr("Error: The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."),
+            QMessageBox::Ok, QMessageBox::Ok);
+        break;
+    case WalletModel::Aborted: // User aborted, nothing to do
+        break;
+    case WalletModel::OK:
+        accept();
+        break;
+    }
+}
+
+void SendCoinsDialog::clear()
+{
+    // Remove entries until only one left
+    while(ui->entries->count())
+    {
+        delete ui->entries->takeAt(0)->widget();
+    }
+    addEntry();
+
+    updateRemoveEnabled();
+
+    ui->sendButton->setDefault(true);
+}
+
+void SendCoinsDialog::reject()
+{
+    clear();
+}
+
+void SendCoinsDialog::accept()
+{
+    clear();
+}
+
+SendCoinsEntry *SendCoinsDialog::addEntry()
+{
+    SendCoinsEntry *entry = new SendCoinsEntry(this);
+    entry->setModel(model);
+    ui->entries->addWidget(entry);
+    connect(entry, SIGNAL(removeEntry(SendCoinsEntry*)), this, SLOT(removeEntry(SendCoinsEntry*)));
+
+    updateRemoveEnabled();
+
+    // Focus the field, so that entry can start immediately
+    entry->clear();
+    entry->setFocus();
+    ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->sizeHint());
+    QCoreApplication::instance()->processEvents();
+    QScrollBar* bar = ui->scrollArea->verticalScrollBar();
+    if (bar)
+        bar->setSliderPosition(bar->maximum());
+    return entry;
+}
+
+void SendCoinsDialog::updateRemoveEnabled()
+{
+    // Remove buttons are enabled as soon as there is more than one send-entry
+    bool enabled = (ui->entries->count() > 1);
+    for(int i = 0; i < ui->entries->count(); ++i)
+    {
+        SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
+        if(entry)
+        {
+            entry->setRemoveEnabled(enabled);
+        }
+    }
+    setupTabChain(0);
+}
+
+void SendCoinsDialog::removeEntry(SendCoinsEntry* entry)
+{
+    delete entry;
+    updateRemoveEnabled();
+}
+
+QWidget *SendCoinsDialog::setupTabChain(QWidget *prev)
+{
+    for(int i = 0; i < ui->entries->count(); ++i)
+    {
+        SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
+        if(entry)
+        {
+            prev = entry->setupTabChain(prev);
+        }
+    }
+    QWidget::setTabOrder(prev, ui->addButton);
+    QWidget::setTabOrder(ui->addButton, ui->sendButton);
+    return ui->sendButton;
+}
+
+void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv)
+{
+    SendCoinsEntry *entry = 0;
+    // Replace the first entry if it is still unused
+    if(ui->entries->count() == 1)
+    {
+        SendCoinsEntry *first = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(0)->widget());
+        if(first->isClear())
+        {
+            entry = first;
+        }
+    }
+    if(!entry)
+    {
+        entry = addEntry();
+    }
+
+    entry->setValue(rv);
+}
+
+
+void SendCoinsDialog::handleURI(const QUrl *uri)
+{
+    SendCoinsRecipient rv;
+    if(!GUIUtil::parseBitcoinURI(uri, &rv))
+    {
+        return;
+    }
+    pasteEntry(rv);
+}
+
+void SendCoinsDialog::handleURI(const QString &uri)
+{
+    SendCoinsRecipient rv;
+    if(!GUIUtil::parseBitcoinURI(uri, &rv))
+    {
+        return;
+    }
+    pasteEntry(rv);
+}
+
+void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
+{
+    Q_UNUSED(unconfirmedBalance);
+    if(!model || !model->getOptionsModel())
+        return;
+
+    int unit = model->getOptionsModel()->getDisplayUnit();
+    ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
+}
diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h
new file mode 100644 (file)
index 0000000..7912576
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef SENDCOINSDIALOG_H
+#define SENDCOINSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+    class SendCoinsDialog;
+}
+class WalletModel;
+class SendCoinsEntry;
+class SendCoinsRecipient;
+
+QT_BEGIN_NAMESPACE
+class QUrl;
+QT_END_NAMESPACE
+
+/** Dialog for sending bitcoins */
+class SendCoinsDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit SendCoinsDialog(QWidget *parent = 0);
+    ~SendCoinsDialog();
+
+    void setModel(WalletModel *model);
+
+    /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907).
+     */
+    QWidget *setupTabChain(QWidget *prev);
+
+    void pasteEntry(const SendCoinsRecipient &rv);
+    void handleURI(const QUrl *uri);
+    void handleURI(const QString &uri);
+
+public slots:
+    void clear();
+    void reject();
+    void accept();
+    SendCoinsEntry *addEntry();
+    void updateRemoveEnabled();
+    void setBalance(qint64 balance, qint64 unconfirmedBalance);
+
+private:
+    Ui::SendCoinsDialog *ui;
+    WalletModel *model;
+
+private slots:
+    void on_sendButton_clicked();
+
+    void removeEntry(SendCoinsEntry* entry);
+};
+
+#endif // SENDCOINSDIALOG_H
diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp
new file mode 100644 (file)
index 0000000..c8242d8
--- /dev/null
@@ -0,0 +1,162 @@
+#include "sendcoinsentry.h"
+#include "ui_sendcoinsentry.h"
+#include "guiutil.h"
+#include "bitcoinunits.h"
+#include "addressbookpage.h"
+#include "walletmodel.h"
+#include "optionsmodel.h"
+#include "addresstablemodel.h"
+
+#include <QApplication>
+#include <QClipboard>
+
+SendCoinsEntry::SendCoinsEntry(QWidget *parent) :
+    QFrame(parent),
+    ui(new Ui::SendCoinsEntry),
+    model(0)
+{
+    ui->setupUi(this);
+
+#ifdef Q_WS_MAC
+    ui->payToLayout->setSpacing(4);
+#endif
+
+#if QT_VERSION >= 0x040700
+    ui->payTo->setPlaceholderText(tr("Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"));
+    ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book"));
+#endif
+    setFocusPolicy(Qt::TabFocus);
+    setFocusProxy(ui->payTo);
+
+    GUIUtil::setupAddressWidget(ui->payTo, this);
+}
+
+SendCoinsEntry::~SendCoinsEntry()
+{
+    delete ui;
+}
+
+void SendCoinsEntry::on_pasteButton_clicked()
+{
+    // Paste text from clipboard into recipient field
+    ui->payTo->setText(QApplication::clipboard()->text());
+}
+
+void SendCoinsEntry::on_addressBookButton_clicked()
+{
+    if(!model)
+        return;
+    AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this);
+    dlg.setModel(model->getAddressTableModel());
+    if(dlg.exec())
+    {
+        ui->payTo->setText(dlg.getReturnValue());
+        ui->payAmount->setFocus();
+    }
+}
+
+void SendCoinsEntry::on_payTo_textChanged(const QString &address)
+{
+    if(!model)
+        return;
+    // Fill in label from address book, if address has an associated label
+    QString associatedLabel = model->getAddressTableModel()->labelForAddress(address);
+    if(!associatedLabel.isEmpty())
+        ui->addAsLabel->setText(associatedLabel);
+}
+
+void SendCoinsEntry::setModel(WalletModel *model)
+{
+    this->model = model;
+    clear();
+}
+
+void SendCoinsEntry::setRemoveEnabled(bool enabled)
+{
+    ui->deleteButton->setEnabled(enabled);
+}
+
+void SendCoinsEntry::clear()
+{
+    ui->payTo->clear();
+    ui->addAsLabel->clear();
+    ui->payAmount->clear();
+    ui->payTo->setFocus();
+    if(model && model->getOptionsModel())
+    {
+        ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
+    }
+}
+
+void SendCoinsEntry::on_deleteButton_clicked()
+{
+    emit removeEntry(this);
+}
+
+bool SendCoinsEntry::validate()
+{
+    // Check input validity
+    bool retval = true;
+
+    if(!ui->payAmount->validate())
+    {
+        retval = false;
+    }
+    else
+    {
+        if(ui->payAmount->value() <= 0)
+        {
+            // Cannot send 0 coins or less
+            ui->payAmount->setValid(false);
+            retval = false;
+        }
+    }
+
+    if(!ui->payTo->hasAcceptableInput() ||
+       (model && !model->validateAddress(ui->payTo->text())))
+    {
+        ui->payTo->setValid(false);
+        retval = false;
+    }
+
+    return retval;
+}
+
+SendCoinsRecipient SendCoinsEntry::getValue()
+{
+    SendCoinsRecipient rv;
+
+    rv.address = ui->payTo->text();
+    rv.label = ui->addAsLabel->text();
+    rv.amount = ui->payAmount->value();
+
+    return rv;
+}
+
+QWidget *SendCoinsEntry::setupTabChain(QWidget *prev)
+{
+    QWidget::setTabOrder(prev, ui->payTo);
+    QWidget::setTabOrder(ui->payTo, ui->addressBookButton);
+    QWidget::setTabOrder(ui->addressBookButton, ui->pasteButton);
+    QWidget::setTabOrder(ui->pasteButton, ui->deleteButton);
+    QWidget::setTabOrder(ui->deleteButton, ui->addAsLabel);
+    return ui->payAmount->setupTabChain(ui->addAsLabel);
+}
+
+void SendCoinsEntry::setValue(const SendCoinsRecipient &value)
+{
+    ui->payTo->setText(value.address);
+    ui->addAsLabel->setText(value.label);
+    ui->payAmount->setValue(value.amount);
+}
+
+bool SendCoinsEntry::isClear()
+{
+    return ui->payTo->text().isEmpty();
+}
+
+void SendCoinsEntry::setFocus()
+{
+    ui->payTo->setFocus();
+}
+
diff --git a/src/qt/sendcoinsentry.h b/src/qt/sendcoinsentry.h
new file mode 100644 (file)
index 0000000..cdbf893
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef SENDCOINSENTRY_H
+#define SENDCOINSENTRY_H
+
+#include <QFrame>
+
+namespace Ui {
+    class SendCoinsEntry;
+}
+class WalletModel;
+class SendCoinsRecipient;
+
+/** A single entry in the dialog for sending bitcoins. */
+class SendCoinsEntry : public QFrame
+{
+    Q_OBJECT
+
+public:
+    explicit SendCoinsEntry(QWidget *parent = 0);
+    ~SendCoinsEntry();
+
+    void setModel(WalletModel *model);
+    bool validate();
+    SendCoinsRecipient getValue();
+
+    /** Return whether the entry is still empty and unedited */
+    bool isClear();
+
+    void setValue(const SendCoinsRecipient &value);
+
+    /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue http://bugreports.qt.nokia.com/browse/QTBUG-10907).
+     */
+    QWidget *setupTabChain(QWidget *prev);
+
+    void setFocus();
+
+public slots:
+    void setRemoveEnabled(bool enabled);
+    void clear();
+
+signals:
+    void removeEntry(SendCoinsEntry *entry);
+
+private slots:
+    void on_deleteButton_clicked();
+    void on_payTo_textChanged(const QString &address);
+    void on_addressBookButton_clicked();
+    void on_pasteButton_clicked();
+
+private:
+    Ui::SendCoinsEntry *ui;
+    WalletModel *model;
+};
+
+#endif // SENDCOINSENTRY_H
diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp
new file mode 100644 (file)
index 0000000..6ca3ac8
--- /dev/null
@@ -0,0 +1,292 @@
+#include <transactiondesc.h>
+
+#include "guiutil.h"
+#include "bitcoinunits.h"
+
+#include "headers.h"
+#include "qtui.h"
+
+#include <QString>
+#include <QTextDocument> // For Qt::escape
+
+using namespace std;
+
+QString TransactionDesc::HtmlEscape(const QString& str, bool fMultiLine)
+{
+    QString escaped = Qt::escape(str);
+    if(fMultiLine)
+    {
+        escaped = escaped.replace("\n", "<br>\n");
+    }
+    return escaped;
+}
+
+QString TransactionDesc::HtmlEscape(const std::string& str, bool fMultiLine)
+{
+    return HtmlEscape(QString::fromStdString(str), fMultiLine);
+}
+
+QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx)
+{
+    if (!wtx.IsFinal())
+    {
+        if (wtx.nLockTime < LOCKTIME_THRESHOLD)
+            return tr("Open for %1 blocks").arg(nBestHeight - wtx.nLockTime);
+        else
+            return tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx.nLockTime));
+    }
+    else
+    {
+        int nDepth = wtx.GetDepthInMainChain();
+        if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
+            return tr("%1/offline?").arg(nDepth);
+        else if (nDepth < 6)
+            return tr("%1/unconfirmed").arg(nDepth);
+        else
+            return tr("%1 confirmations").arg(nDepth);
+    }
+}
+
+QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx)
+{
+    QString strHTML;
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        strHTML.reserve(4000);
+        strHTML += "<html><font face='verdana, arial, helvetica, sans-serif'>";
+
+        int64 nTime = wtx.GetTxTime();
+        int64 nCredit = wtx.GetCredit();
+        int64 nDebit = wtx.GetDebit();
+        int64 nNet = nCredit - nDebit;
+
+        strHTML += tr("<b>Status:</b> ") + FormatTxStatus(wtx);
+        int nRequests = wtx.GetRequestCount();
+        if (nRequests != -1)
+        {
+            if (nRequests == 0)
+                strHTML += tr(", has not been successfully broadcast yet");
+            else if (nRequests == 1)
+                strHTML += tr(", broadcast through %1 node").arg(nRequests);
+            else
+                strHTML += tr(", broadcast through %1 nodes").arg(nRequests);
+        }
+        strHTML += "<br>";
+
+        strHTML += tr("<b>Date:</b> ") + (nTime ? GUIUtil::dateTimeStr(nTime) : QString("")) + "<br>";
+
+        //
+        // From
+        //
+        if (wtx.IsCoinBase())
+        {
+            strHTML += tr("<b>Source:</b> Generated<br>");
+        }
+        else if (!wtx.mapValue["from"].empty())
+        {
+            // Online transaction
+            if (!wtx.mapValue["from"].empty())
+                strHTML += tr("<b>From:</b> ") + HtmlEscape(wtx.mapValue["from"]) + "<br>";
+        }
+        else
+        {
+            // Offline transaction
+            if (nNet > 0)
+            {
+                // Credit
+                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                {
+                    if (wallet->IsMine(txout))
+                    {
+                        CBitcoinAddress address;
+                        if (ExtractAddress(txout.scriptPubKey, wallet, address))
+                        {
+                            if (wallet->mapAddressBook.count(address))
+                            {
+                                strHTML += tr("<b>From:</b> ") + tr("unknown") + "<br>";
+                                strHTML += tr("<b>To:</b> ");
+                                strHTML += HtmlEscape(address.ToString());
+                                if (!wallet->mapAddressBook[address].empty())
+                                    strHTML += tr(" (yours, label: ") + HtmlEscape(wallet->mapAddressBook[address]) + ")";
+                                else
+                                    strHTML += tr(" (yours)");
+                                strHTML += "<br>";
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+        //
+        // To
+        //
+        string strAddress;
+        if (!wtx.mapValue["to"].empty())
+        {
+            // Online transaction
+            strAddress = wtx.mapValue["to"];
+            strHTML += tr("<b>To:</b> ");
+            if (wallet->mapAddressBook.count(strAddress) && !wallet->mapAddressBook[strAddress].empty())
+                strHTML += HtmlEscape(wallet->mapAddressBook[strAddress]) + " ";
+            strHTML += HtmlEscape(strAddress) + "<br>";
+        }
+
+        //
+        // Amount
+        //
+        if (wtx.IsCoinBase() && nCredit == 0)
+        {
+            //
+            // Coinbase
+            //
+            int64 nUnmatured = 0;
+            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                nUnmatured += wallet->GetCredit(txout);
+            strHTML += tr("<b>Credit:</b> ");
+            if (wtx.IsInMainChain())
+                strHTML += tr("(%1 matures in %2 more blocks)")
+                        .arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nUnmatured))
+                        .arg(wtx.GetBlocksToMaturity());
+            else
+                strHTML += tr("(not accepted)");
+            strHTML += "<br>";
+        }
+        else if (nNet > 0)
+        {
+            //
+            // Credit
+            //
+            strHTML += tr("<b>Credit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nNet) + "<br>";
+        }
+        else
+        {
+            bool fAllFromMe = true;
+            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                fAllFromMe = fAllFromMe && wallet->IsMine(txin);
+
+            bool fAllToMe = true;
+            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                fAllToMe = fAllToMe && wallet->IsMine(txout);
+
+            if (fAllFromMe)
+            {
+                //
+                // Debit
+                //
+                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                {
+                    if (wallet->IsMine(txout))
+                        continue;
+
+                    if (wtx.mapValue["to"].empty())
+                    {
+                        // Offline transaction
+                        CBitcoinAddress address;
+                        if (ExtractAddress(txout.scriptPubKey, 0, address))
+                        {
+                            strHTML += tr("<b>To:</b> ");
+                            if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty())
+                                strHTML += HtmlEscape(wallet->mapAddressBook[address]) + " ";
+                            strHTML += HtmlEscape(address.ToString());
+                            strHTML += "<br>";
+                        }
+                    }
+
+                    strHTML += tr("<b>Debit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -txout.nValue) + "<br>";
+                }
+
+                if (fAllToMe)
+                {
+                    // Payment to self
+                    int64 nChange = wtx.GetChange();
+                    int64 nValue = nCredit - nChange;
+                    strHTML += tr("<b>Debit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -nValue) + "<br>";
+                    strHTML += tr("<b>Credit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nValue) + "<br>";
+                }
+
+                int64 nTxFee = nDebit - wtx.GetValueOut();
+                if (nTxFee > 0)
+                    strHTML += tr("<b>Transaction fee:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,-nTxFee) + "<br>";
+            }
+            else
+            {
+                //
+                // Mixed debit transaction
+                //
+                BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                    if (wallet->IsMine(txin))
+                        strHTML += tr("<b>Debit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,-wallet->GetDebit(txin)) + "<br>";
+                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                    if (wallet->IsMine(txout))
+                        strHTML += tr("<b>Credit:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,wallet->GetCredit(txout)) + "<br>";
+            }
+        }
+
+        strHTML += tr("<b>Net amount:</b> ") + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,nNet, true) + "<br>";
+
+        //
+        // Message
+        //
+        if (!wtx.mapValue["message"].empty())
+            strHTML += QString("<br><b>") + tr("Message:") + "</b><br>" + HtmlEscape(wtx.mapValue["message"], true) + "<br>";
+        if (!wtx.mapValue["comment"].empty())
+            strHTML += QString("<br><b>") + tr("Comment:") + "</b><br>" + HtmlEscape(wtx.mapValue["comment"], true) + "<br>";
+
+        if (wtx.IsCoinBase())
+            strHTML += QString("<br>") + tr("Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.") + "<br>";
+
+        //
+        // Debug view
+        //
+        if (fDebug)
+        {
+            strHTML += "<hr><br>Debug information<br><br>";
+            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                if(wallet->IsMine(txin))
+                    strHTML += "<b>Debit:</b> " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,-wallet->GetDebit(txin)) + "<br>";
+            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                if(wallet->IsMine(txout))
+                    strHTML += "<b>Credit:</b> " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,wallet->GetCredit(txout)) + "<br>";
+
+            strHTML += "<br><b>Transaction:</b><br>";
+            strHTML += HtmlEscape(wtx.ToString(), true);
+
+            CTxDB txdb("r"); // To fetch source txouts
+
+            strHTML += "<br><b>Inputs:</b>";
+            strHTML += "<ul>";
+            CRITICAL_BLOCK(wallet->cs_wallet)
+            {
+                BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                {
+                    COutPoint prevout = txin.prevout;
+
+                    CTransaction prev;
+                    if(txdb.ReadDiskTx(prevout.hash, prev))
+                    {
+                        if (prevout.n < prev.vout.size())
+                        {
+                            strHTML += "<li>";
+                            const CTxOut &vout = prev.vout[prevout.n];
+                            CBitcoinAddress address;
+                            if (ExtractAddress(vout.scriptPubKey, 0, address))
+                            {
+                                if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty())
+                                    strHTML += HtmlEscape(wallet->mapAddressBook[address]) + " ";
+                                strHTML += QString::fromStdString(address.ToString());
+                            }
+                            strHTML = strHTML + " Amount=" + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC,vout.nValue);
+                            strHTML = strHTML + " IsMine=" + (wallet->IsMine(vout) ? "true" : "false") + "</li>";
+                        }
+                    }
+                }
+            }
+            strHTML += "</ul>";
+        }
+
+        strHTML += "</font></html>";
+    }
+    return strHTML;
+}
diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h
new file mode 100644 (file)
index 0000000..55b9eaf
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef TRANSACTIONDESC_H
+#define TRANSACTIONDESC_H
+
+#include <QString>
+#include <QObject>
+#include <string>
+
+class CWallet;
+class CWalletTx;
+
+/** Provide a human-readable extended HTML description of a transaction.
+ */
+class TransactionDesc: public QObject
+{
+    Q_OBJECT
+public:
+    static QString toHTML(CWallet *wallet, CWalletTx &wtx);
+private:
+    TransactionDesc() {}
+
+    static QString HtmlEscape(const QString& str, bool fMultiLine=false);
+    static QString HtmlEscape(const std::string &str, bool fMultiLine=false);
+    static QString FormatTxStatus(const CWalletTx& wtx);
+};
+
+#endif // TRANSACTIONDESC_H
diff --git a/src/qt/transactiondescdialog.cpp b/src/qt/transactiondescdialog.cpp
new file mode 100644 (file)
index 0000000..3bd4808
--- /dev/null
@@ -0,0 +1,20 @@
+#include "transactiondescdialog.h"
+#include "ui_transactiondescdialog.h"
+
+#include "transactiontablemodel.h"
+
+#include <QModelIndex>
+
+TransactionDescDialog::TransactionDescDialog(const QModelIndex &idx, QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::TransactionDescDialog)
+{
+    ui->setupUi(this);
+    QString desc = idx.data(TransactionTableModel::LongDescriptionRole).toString();
+    ui->detailText->setHtml(desc);
+}
+
+TransactionDescDialog::~TransactionDescDialog()
+{
+    delete ui;
+}
diff --git a/src/qt/transactiondescdialog.h b/src/qt/transactiondescdialog.h
new file mode 100644 (file)
index 0000000..e86fb58
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef TRANSACTIONDESCDIALOG_H
+#define TRANSACTIONDESCDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+    class TransactionDescDialog;
+}
+QT_BEGIN_NAMESPACE
+class QModelIndex;
+QT_END_NAMESPACE
+
+/** Dialog showing transaction details. */
+class TransactionDescDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit TransactionDescDialog(const QModelIndex &idx, QWidget *parent = 0);
+    ~TransactionDescDialog();
+
+private:
+    Ui::TransactionDescDialog *ui;
+};
+
+#endif // TRANSACTIONDESCDIALOG_H
diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp
new file mode 100644 (file)
index 0000000..16fb4da
--- /dev/null
@@ -0,0 +1,86 @@
+#include "transactionfilterproxy.h"
+#include "transactiontablemodel.h"
+
+#include <QDateTime>
+
+#include <cstdlib>
+
+// Earliest date that can be represented (far in the past)
+const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0);
+// Last date that can be represented (far in the future)
+const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF);
+
+TransactionFilterProxy::TransactionFilterProxy(QObject *parent) :
+    QSortFilterProxyModel(parent),
+    dateFrom(MIN_DATE),
+    dateTo(MAX_DATE),
+    addrPrefix(),
+    typeFilter(ALL_TYPES),
+    minAmount(0),
+    limitRows(-1)
+{
+}
+
+bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
+{
+    QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
+
+    int type = index.data(TransactionTableModel::TypeRole).toInt();
+    QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime();
+    QString address = index.data(TransactionTableModel::AddressRole).toString();
+    QString label = index.data(TransactionTableModel::LabelRole).toString();
+    qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
+
+    if(!(TYPE(type) & typeFilter))
+        return false;
+    if(datetime < dateFrom || datetime > dateTo)
+        return false;
+    if (!address.contains(addrPrefix, Qt::CaseInsensitive) && !label.contains(addrPrefix, Qt::CaseInsensitive))
+        return false;
+    if(amount < minAmount)
+        return false;
+
+    return true;
+}
+
+void TransactionFilterProxy::setDateRange(const QDateTime &from, const QDateTime &to)
+{
+    this->dateFrom = from;
+    this->dateTo = to;
+    invalidateFilter();
+}
+
+void TransactionFilterProxy::setAddressPrefix(const QString &addrPrefix)
+{
+    this->addrPrefix = addrPrefix;
+    invalidateFilter();
+}
+
+void TransactionFilterProxy::setTypeFilter(quint32 modes)
+{
+    this->typeFilter = modes;
+    invalidateFilter();
+}
+
+void TransactionFilterProxy::setMinAmount(qint64 minimum)
+{
+    this->minAmount = minimum;
+    invalidateFilter();
+}
+
+void TransactionFilterProxy::setLimit(int limit)
+{
+    this->limitRows = limit;
+}
+
+int TransactionFilterProxy::rowCount(const QModelIndex &parent) const
+{
+    if(limitRows != -1)
+    {
+        return std::min(QSortFilterProxyModel::rowCount(parent), limitRows);
+    }
+    else
+    {
+        return QSortFilterProxyModel::rowCount(parent);
+    }
+}
diff --git a/src/qt/transactionfilterproxy.h b/src/qt/transactionfilterproxy.h
new file mode 100644 (file)
index 0000000..8d6829d
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef TRANSACTIONFILTERPROXY_H
+#define TRANSACTIONFILTERPROXY_H
+
+#include <QSortFilterProxyModel>
+#include <QDateTime>
+
+/** Filter the transaction list according to pre-specified rules. */
+class TransactionFilterProxy : public QSortFilterProxyModel
+{
+    Q_OBJECT
+public:
+    explicit TransactionFilterProxy(QObject *parent = 0);
+
+    /** Earliest date that can be represented (far in the past) */
+    static const QDateTime MIN_DATE;
+    /** Last date that can be represented (far in the future) */
+    static const QDateTime MAX_DATE;
+    /** Type filter bit field (all types) */
+    static const quint32 ALL_TYPES = 0xFFFFFFFF;
+
+    static quint32 TYPE(int type) { return 1<<type; }
+
+    void setDateRange(const QDateTime &from, const QDateTime &to);
+    void setAddressPrefix(const QString &addrPrefix);
+    /**
+      @note Type filter takes a bitfield created with TYPE() or ALL_TYPES
+     */
+    void setTypeFilter(quint32 modes);
+    void setMinAmount(qint64 minimum);
+
+    /** Set maximum number of rows returned, -1 if unlimited. */
+    void setLimit(int limit);
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+protected:
+    bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const;
+
+private:
+    QDateTime dateFrom;
+    QDateTime dateTo;
+    QString addrPrefix;
+    quint32 typeFilter;
+    qint64 minAmount;
+    int limitRows;
+
+signals:
+
+public slots:
+
+};
+
+#endif // TRANSACTIONFILTERPROXY_H
diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp
new file mode 100644 (file)
index 0000000..4059207
--- /dev/null
@@ -0,0 +1,249 @@
+#include "transactionrecord.h"
+
+#include "headers.h"
+
+/* Return positive answer if transaction should be shown in list.
+ */
+bool TransactionRecord::showTransaction(const CWalletTx &wtx)
+{
+    if (wtx.IsCoinBase())
+    {
+        // Don't show generated coin until confirmed by at least one block after it
+        // so we don't get the user's hopes up until it looks like it's probably accepted.
+        //
+        // It is not an error when generated blocks are not accepted.  By design,
+        // some percentage of blocks, like 10% or more, will end up not accepted.
+        // This is the normal mechanism by which the network copes with latency.
+        //
+        // We display regular transactions right away before any confirmation
+        // because they can always get into some block eventually.  Generated coins
+        // are special because if their block is not accepted, they are not valid.
+        //
+        if (wtx.GetDepthInMainChain() < 2)
+        {
+            return false;
+        }
+    }
+    return true;
+}
+
+/*
+ * Decompose CWallet transaction to model transaction records.
+ */
+QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx)
+{
+    QList<TransactionRecord> parts;
+    int64 nTime = wtx.nTimeDisplayed = wtx.GetTxTime();
+    int64 nCredit = wtx.GetCredit(true);
+    int64 nDebit = wtx.GetDebit();
+    int64 nNet = nCredit - nDebit;
+    uint256 hash = wtx.GetHash();
+    std::map<std::string, std::string> mapValue = wtx.mapValue;
+
+    if (showTransaction(wtx))
+    {
+        if (nNet > 0 || wtx.IsCoinBase())
+        {
+            //
+            // Credit
+            //
+            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+            {
+                if(wallet->IsMine(txout))
+                {
+                    TransactionRecord sub(hash, nTime);
+                    CBitcoinAddress address;
+                    sub.idx = parts.size(); // sequence number
+                    sub.credit = txout.nValue;
+                    if (wtx.IsCoinBase())
+                    {
+                        // Generated
+                        sub.type = TransactionRecord::Generated;
+                    }
+                    else if (ExtractAddress(txout.scriptPubKey, wallet, address))
+                    {
+                        // Received by Bitcoin Address
+                        sub.type = TransactionRecord::RecvWithAddress;
+                        sub.address = address.ToString();
+                    }
+                    else
+                    {
+                        // Received by IP connection (deprecated features), or a multisignature or other non-simple transaction
+                        sub.type = TransactionRecord::RecvFromOther;
+                        sub.address = mapValue["from"];
+                    }
+
+                    parts.append(sub);
+                }
+            }
+        }
+        else
+        {
+            bool fAllFromMe = true;
+            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                fAllFromMe = fAllFromMe && wallet->IsMine(txin);
+
+            bool fAllToMe = true;
+            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                fAllToMe = fAllToMe && wallet->IsMine(txout);
+
+            if (fAllFromMe && fAllToMe)
+            {
+                // Payment to self
+                int64 nChange = wtx.GetChange();
+
+                parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "",
+                                -(nDebit - nChange), nCredit - nChange));
+            }
+            else if (fAllFromMe)
+            {
+                //
+                // Debit
+                //
+                int64 nTxFee = nDebit - wtx.GetValueOut();
+
+                for (int nOut = 0; nOut < wtx.vout.size(); nOut++)
+                {
+                    const CTxOut& txout = wtx.vout[nOut];
+                    TransactionRecord sub(hash, nTime);
+                    sub.idx = parts.size();
+
+                    if(wallet->IsMine(txout))
+                    {
+                        // Ignore parts sent to self, as this is usually the change
+                        // from a transaction sent back to our own address.
+                        continue;
+                    }
+
+                    CBitcoinAddress address;
+                    if (ExtractAddress(txout.scriptPubKey, 0, address))
+                    {
+                        // Sent to Bitcoin Address
+                        sub.type = TransactionRecord::SendToAddress;
+                        sub.address = address.ToString();
+                    }
+                    else
+                    {
+                        // Sent to IP, or other non-address transaction like OP_EVAL
+                        sub.type = TransactionRecord::SendToOther;
+                        sub.address = mapValue["to"];
+                    }
+
+                    int64 nValue = txout.nValue;
+                    /* Add fee to first output */
+                    if (nTxFee > 0)
+                    {
+                        nValue += nTxFee;
+                        nTxFee = 0;
+                    }
+                    sub.debit = -nValue;
+
+                    parts.append(sub);
+                }
+            }
+            else
+            {
+                //
+                // Mixed debit transaction, can't break down payees
+                //
+                bool fAllMine = true;
+                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
+                    fAllMine = fAllMine && wallet->IsMine(txout);
+                BOOST_FOREACH(const CTxIn& txin, wtx.vin)
+                    fAllMine = fAllMine && wallet->IsMine(txin);
+
+                parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nNet, 0));
+            }
+        }
+    }
+
+    return parts;
+}
+
+void TransactionRecord::updateStatus(const CWalletTx &wtx)
+{
+    // Determine transaction status
+
+    // Find the block the tx is in
+    CBlockIndex* pindex = NULL;
+    std::map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(wtx.hashBlock);
+    if (mi != mapBlockIndex.end())
+        pindex = (*mi).second;
+
+    // Sort order, unrecorded transactions sort to the top
+    status.sortKey = strprintf("%010d-%01d-%010u-%03d",
+        (pindex ? pindex->nHeight : INT_MAX),
+        (wtx.IsCoinBase() ? 1 : 0),
+        wtx.nTimeReceived,
+        idx);
+    status.confirmed = wtx.IsConfirmed();
+    status.depth = wtx.GetDepthInMainChain();
+    status.cur_num_blocks = nBestHeight;
+
+    if (!wtx.IsFinal())
+    {
+        if (wtx.nLockTime < LOCKTIME_THRESHOLD)
+        {
+            status.status = TransactionStatus::OpenUntilBlock;
+            status.open_for = nBestHeight - wtx.nLockTime;
+        }
+        else
+        {
+            status.status = TransactionStatus::OpenUntilDate;
+            status.open_for = wtx.nLockTime;
+        }
+    }
+    else
+    {
+        if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
+        {
+            status.status = TransactionStatus::Offline;
+        }
+        else if (status.depth < NumConfirmations)
+        {
+            status.status = TransactionStatus::Unconfirmed;
+        }
+        else
+        {
+            status.status = TransactionStatus::HaveConfirmations;
+        }
+    }
+
+    // For generated transactions, determine maturity
+    if(type == TransactionRecord::Generated)
+    {
+        int64 nCredit = wtx.GetCredit(true);
+        if (nCredit == 0)
+        {
+            status.maturity = TransactionStatus::Immature;
+
+            if (wtx.IsInMainChain())
+            {
+                status.matures_in = wtx.GetBlocksToMaturity();
+
+                // Check if the block was requested by anyone
+                if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
+                    status.maturity = TransactionStatus::MaturesWarning;
+            }
+            else
+            {
+                status.maturity = TransactionStatus::NotAccepted;
+            }
+        }
+        else
+        {
+            status.maturity = TransactionStatus::Mature;
+        }
+    }
+}
+
+bool TransactionRecord::statusUpdateNeeded()
+{
+    return status.cur_num_blocks != nBestHeight;
+}
+
+std::string TransactionRecord::getTxID()
+{
+    return hash.ToString() + strprintf("-%03d", idx);
+}
+
diff --git a/src/qt/transactionrecord.h b/src/qt/transactionrecord.h
new file mode 100644 (file)
index 0000000..db06374
--- /dev/null
@@ -0,0 +1,129 @@
+#ifndef TRANSACTIONRECORD_H
+#define TRANSACTIONRECORD_H
+
+#include "uint256.h"
+
+#include <QList>
+
+class CWallet;
+class CWalletTx;
+
+/** UI model for transaction status. The transaction status is the part of a transaction that will change over time.
+ */
+class TransactionStatus
+{
+public:
+    TransactionStatus():
+            confirmed(false), sortKey(""), maturity(Mature),
+            matures_in(0), status(Offline), depth(0), open_for(0), cur_num_blocks(-1)
+    { }
+
+    enum Maturity
+    {
+        Immature,
+        Mature,
+        MaturesWarning, /**< Transaction will likely not mature because no nodes have confirmed */
+        NotAccepted
+    };
+
+    enum Status {
+        OpenUntilDate,
+        OpenUntilBlock,
+        Offline,
+        Unconfirmed,
+        HaveConfirmations
+    };
+
+    bool confirmed;
+    std::string sortKey;
+
+    /** @name Generated (mined) transactions
+       @{*/
+    Maturity maturity;
+    int matures_in;
+    /**@}*/
+
+    /** @name Reported status
+       @{*/
+    Status status;
+    int64 depth;
+    int64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number of blocks */
+    /**@}*/
+
+    /** Current number of blocks (to know whether cached status is still valid) */
+    int cur_num_blocks;
+};
+
+/** UI model for a transaction. A core transaction can be represented by multiple UI transactions if it has
+    multiple outputs.
+ */
+class TransactionRecord
+{
+public:
+    enum Type
+    {
+        Other,
+        Generated,
+        SendToAddress,
+        SendToOther,
+        RecvWithAddress,
+        RecvFromOther,
+        SendToSelf
+    };
+
+    /** Number of confirmation needed for transaction */
+    static const int NumConfirmations = 6;
+
+    TransactionRecord():
+            hash(), time(0), type(Other), address(""), debit(0), credit(0), idx(0)
+    {
+    }
+
+    TransactionRecord(uint256 hash, int64 time):
+            hash(hash), time(time), type(Other), address(""), debit(0),
+            credit(0), idx(0)
+    {
+    }
+
+    TransactionRecord(uint256 hash, int64 time,
+                Type type, const std::string &address,
+                int64 debit, int64 credit):
+            hash(hash), time(time), type(type), address(address), debit(debit), credit(credit),
+            idx(0)
+    {
+    }
+
+    /** Decompose CWallet transaction to model transaction records.
+     */
+    static bool showTransaction(const CWalletTx &wtx);
+    static QList<TransactionRecord> decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx);
+
+    /** @name Immutable transaction attributes
+      @{*/
+    uint256 hash;
+    int64 time;
+    Type type;
+    std::string address;
+    int64 debit;
+    int64 credit;
+    /**@}*/
+
+    /** Subtransaction index, for sort key */
+    int idx;
+
+    /** Status: can change with block chain update */
+    TransactionStatus status;
+
+    /** Return the unique identifier for this transaction (part) */
+    std::string getTxID();
+
+    /** Update status from core wallet tx.
+     */
+    void updateStatus(const CWalletTx &wtx);
+
+    /** Return whether a status update is needed.
+     */
+    bool statusUpdateNeeded();
+};
+
+#endif // TRANSACTIONRECORD_H
diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
new file mode 100644 (file)
index 0000000..28620bf
--- /dev/null
@@ -0,0 +1,621 @@
+#include "transactiontablemodel.h"
+#include "guiutil.h"
+#include "transactionrecord.h"
+#include "guiconstants.h"
+#include "transactiondesc.h"
+#include "walletmodel.h"
+#include "optionsmodel.h"
+#include "addresstablemodel.h"
+#include "bitcoinunits.h"
+
+#include "headers.h"
+
+#include <QLocale>
+#include <QList>
+#include <QColor>
+#include <QTimer>
+#include <QIcon>
+#include <QDateTime>
+#include <QtAlgorithms>
+
+// Amount column is right-aligned it contains numbers
+static int column_alignments[] = {
+        Qt::AlignLeft|Qt::AlignVCenter,
+        Qt::AlignLeft|Qt::AlignVCenter,
+        Qt::AlignLeft|Qt::AlignVCenter,
+        Qt::AlignLeft|Qt::AlignVCenter,
+        Qt::AlignRight|Qt::AlignVCenter
+    };
+
+// Comparison operator for sort/binary search of model tx list
+struct TxLessThan
+{
+    bool operator()(const TransactionRecord &a, const TransactionRecord &b) const
+    {
+        return a.hash < b.hash;
+    }
+    bool operator()(const TransactionRecord &a, const uint256 &b) const
+    {
+        return a.hash < b;
+    }
+    bool operator()(const uint256 &a, const TransactionRecord &b) const
+    {
+        return a < b.hash;
+    }
+};
+
+// Private implementation
+class TransactionTablePriv
+{
+public:
+    TransactionTablePriv(CWallet *wallet, TransactionTableModel *parent):
+            wallet(wallet),
+            parent(parent)
+    {
+    }
+    CWallet *wallet;
+    TransactionTableModel *parent;
+
+    /* Local cache of wallet.
+     * As it is in the same order as the CWallet, by definition
+     * this is sorted by sha256.
+     */
+    QList<TransactionRecord> cachedWallet;
+
+    /* Query entire wallet anew from core.
+     */
+    void refreshWallet()
+    {
+#ifdef WALLET_UPDATE_DEBUG
+        qDebug() << "refreshWallet";
+#endif
+        cachedWallet.clear();
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            for(std::map<uint256, CWalletTx>::iterator it = wallet->mapWallet.begin(); it != wallet->mapWallet.end(); ++it)
+            {
+                cachedWallet.append(TransactionRecord::decomposeTransaction(wallet, it->second));
+            }
+        }
+    }
+
+    /* Update our model of the wallet incrementally, to synchronize our model of the wallet
+       with that of the core.
+
+       Call with list of hashes of transactions that were added, removed or changed.
+     */
+    void updateWallet(const QList<uint256> &updated)
+    {
+        // Walk through updated transactions, update model as needed.
+#ifdef WALLET_UPDATE_DEBUG
+        qDebug() << "updateWallet";
+#endif
+        // Sort update list, and iterate through it in reverse, so that model updates
+        //  can be emitted from end to beginning (so that earlier updates will not influence
+        // the indices of latter ones).
+        QList<uint256> updated_sorted = updated;
+        qSort(updated_sorted);
+
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            for(int update_idx = updated_sorted.size()-1; update_idx >= 0; --update_idx)
+            {
+                const uint256 &hash = updated_sorted.at(update_idx);
+                // Find transaction in wallet
+                std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(hash);
+                bool inWallet = mi != wallet->mapWallet.end();
+                // Find bounds of this transaction in model
+                QList<TransactionRecord>::iterator lower = qLowerBound(
+                    cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());
+                QList<TransactionRecord>::iterator upper = qUpperBound(
+                    cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());
+                int lowerIndex = (lower - cachedWallet.begin());
+                int upperIndex = (upper - cachedWallet.begin());
+
+                // Determine if transaction is in model already
+                bool inModel = false;
+                if(lower != upper)
+                {
+                    inModel = true;
+                }
+
+#ifdef WALLET_UPDATE_DEBUG
+                qDebug() << "  " << QString::fromStdString(hash.ToString()) << inWallet << " " << inModel
+                        << lowerIndex << "-" << upperIndex;
+#endif
+
+                if(inWallet && !inModel)
+                {
+                    // Added -- insert at the right position
+                    QList<TransactionRecord> toInsert =
+                            TransactionRecord::decomposeTransaction(wallet, mi->second);
+                    if(!toInsert.isEmpty()) /* only if something to insert */
+                    {
+                        parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex+toInsert.size()-1);
+                        int insert_idx = lowerIndex;
+                        foreach(const TransactionRecord &rec, toInsert)
+                        {
+                            cachedWallet.insert(insert_idx, rec);
+                            insert_idx += 1;
+                        }
+                        parent->endInsertRows();
+                    }
+                }
+                else if(!inWallet && inModel)
+                {
+                    // Removed -- remove entire transaction from table
+                    parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);
+                    cachedWallet.erase(lower, upper);
+                    parent->endRemoveRows();
+                }
+                else if(inWallet && inModel)
+                {
+                    // Updated -- nothing to do, status update will take care of this
+                }
+            }
+        }
+    }
+
+    int size()
+    {
+        return cachedWallet.size();
+    }
+
+    TransactionRecord *index(int idx)
+    {
+        if(idx >= 0 && idx < cachedWallet.size())
+        {
+            TransactionRecord *rec = &cachedWallet[idx];
+
+            // If a status update is needed (blocks came in since last check),
+            //  update the status of this transaction from the wallet. Otherwise,
+            // simply re-use the cached status.
+            if(rec->statusUpdateNeeded())
+            {
+                CRITICAL_BLOCK(wallet->cs_wallet)
+                {
+                    std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(rec->hash);
+
+                    if(mi != wallet->mapWallet.end())
+                    {
+                        rec->updateStatus(mi->second);
+                    }
+                }
+            }
+            return rec;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+
+    QString describe(TransactionRecord *rec)
+    {
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(rec->hash);
+            if(mi != wallet->mapWallet.end())
+            {
+                return TransactionDesc::toHTML(wallet, mi->second);
+            }
+        }
+        return QString("");
+    }
+
+};
+
+TransactionTableModel::TransactionTableModel(CWallet* wallet, WalletModel *parent):
+        QAbstractTableModel(parent),
+        wallet(wallet),
+        walletModel(parent),
+        priv(new TransactionTablePriv(wallet, this))
+{
+    columns << QString() << tr("Date") << tr("Type") << tr("Address") << tr("Amount");
+
+    priv->refreshWallet();
+
+    QTimer *timer = new QTimer(this);
+    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
+    timer->start(MODEL_UPDATE_DELAY);
+}
+
+TransactionTableModel::~TransactionTableModel()
+{
+    delete priv;
+}
+
+void TransactionTableModel::update()
+{
+    QList<uint256> updated;
+
+    // Check if there are changes to wallet map
+    TRY_CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        if(!wallet->vWalletUpdated.empty())
+        {
+            BOOST_FOREACH(uint256 hash, wallet->vWalletUpdated)
+            {
+                updated.append(hash);
+            }
+            wallet->vWalletUpdated.clear();
+        }
+    }
+
+    if(!updated.empty())
+    {
+        priv->updateWallet(updated);
+
+        // Status (number of confirmations) and (possibly) description
+        //  columns changed for all rows.
+        emit dataChanged(index(0, Status), index(priv->size()-1, Status));
+        emit dataChanged(index(0, ToAddress), index(priv->size()-1, ToAddress));
+    }
+}
+
+int TransactionTableModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return priv->size();
+}
+
+int TransactionTableModel::columnCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return columns.length();
+}
+
+QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) const
+{
+    QString status;
+
+    switch(wtx->status.status)
+    {
+    case TransactionStatus::OpenUntilBlock:
+        status = tr("Open for %n block(s)","",wtx->status.open_for);
+        break;
+    case TransactionStatus::OpenUntilDate:
+        status = tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx->status.open_for));
+        break;
+    case TransactionStatus::Offline:
+        status = tr("Offline (%1 confirmations)").arg(wtx->status.depth);
+        break;
+    case TransactionStatus::Unconfirmed:
+        status = tr("Unconfirmed (%1 of %2 confirmations)").arg(wtx->status.depth).arg(TransactionRecord::NumConfirmations);
+        break;
+    case TransactionStatus::HaveConfirmations:
+        status = tr("Confirmed (%1 confirmations)").arg(wtx->status.depth);
+        break;
+    }
+    if(wtx->type == TransactionRecord::Generated)
+    {
+        switch(wtx->status.maturity)
+        {
+        case TransactionStatus::Immature:
+            status += "\n" + tr("Mined balance will be available in %n more blocks", "",
+                           wtx->status.matures_in);
+            break;
+        case TransactionStatus::Mature:
+            break;
+        case TransactionStatus::MaturesWarning:
+            status += "\n" + tr("This block was not received by any other nodes and will probably not be accepted!");
+            break;
+        case TransactionStatus::NotAccepted:
+            status += "\n" + tr("Generated but not accepted");
+            break;
+        }
+    }
+
+    return status;
+}
+
+QString TransactionTableModel::formatTxDate(const TransactionRecord *wtx) const
+{
+    if(wtx->time)
+    {
+        return GUIUtil::dateTimeStr(wtx->time);
+    }
+    else
+    {
+        return QString();
+    }
+}
+
+/* Look up address in address book, if found return label (address)
+   otherwise just return (address)
+ */
+QString TransactionTableModel::lookupAddress(const std::string &address, bool tooltip) const
+{
+    QString label = walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(address));
+    QString description;
+    if(!label.isEmpty())
+    {
+        description += label + QString(" ");
+    }
+    if(label.isEmpty() || walletModel->getOptionsModel()->getDisplayAddresses() || tooltip)
+    {
+        description += QString("(") + QString::fromStdString(address) + QString(")");
+    }
+    return description;
+}
+
+QString TransactionTableModel::formatTxType(const TransactionRecord *wtx) const
+{
+    switch(wtx->type)
+    {
+    case TransactionRecord::RecvWithAddress:
+        return tr("Received with");
+    case TransactionRecord::RecvFromOther:
+        return tr("Received from");
+    case TransactionRecord::SendToAddress:
+    case TransactionRecord::SendToOther:
+        return tr("Sent to");
+    case TransactionRecord::SendToSelf:
+        return tr("Payment to yourself");
+    case TransactionRecord::Generated:
+        return tr("Mined");
+    default:
+        return QString();
+    }
+}
+
+QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx) const
+{
+    switch(wtx->type)
+    {
+    case TransactionRecord::Generated:
+        return QIcon(":/icons/tx_mined");
+    case TransactionRecord::RecvWithAddress:
+    case TransactionRecord::RecvFromOther:
+        return QIcon(":/icons/tx_input");
+    case TransactionRecord::SendToAddress:
+    case TransactionRecord::SendToOther:
+        return QIcon(":/icons/tx_output");
+    default:
+        return QIcon(":/icons/tx_inout");
+    }
+    return QVariant();
+}
+
+QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const
+{
+    switch(wtx->type)
+    {
+    case TransactionRecord::RecvFromOther:
+        return QString::fromStdString(wtx->address);
+    case TransactionRecord::RecvWithAddress:
+    case TransactionRecord::SendToAddress:
+        return lookupAddress(wtx->address, tooltip);
+    case TransactionRecord::SendToOther:
+        return QString::fromStdString(wtx->address);
+    case TransactionRecord::SendToSelf:
+    case TransactionRecord::Generated:
+    default:
+        return tr("(n/a)");
+    }
+}
+
+QVariant TransactionTableModel::addressColor(const TransactionRecord *wtx) const
+{
+    // Show addresses without label in a less visible color
+    switch(wtx->type)
+    {
+    case TransactionRecord::RecvWithAddress:
+    case TransactionRecord::SendToAddress:
+        {
+        QString label = walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(wtx->address));
+        if(label.isEmpty())
+            return COLOR_BAREADDRESS;
+        } break;
+    case TransactionRecord::SendToSelf:
+    case TransactionRecord::Generated:
+        return COLOR_BAREADDRESS;
+    default:
+        break;
+    }
+    return QVariant();
+}
+
+QString TransactionTableModel::formatTxAmount(const TransactionRecord *wtx, bool showUnconfirmed) const
+{
+    QString str = BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), wtx->credit + wtx->debit);
+    if(showUnconfirmed)
+    {
+        if(!wtx->status.confirmed || wtx->status.maturity != TransactionStatus::Mature)
+        {
+            str = QString("[") + str + QString("]");
+        }
+    }
+    return QString(str);
+}
+
+QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx) const
+{
+    if(wtx->type == TransactionRecord::Generated)
+    {
+        switch(wtx->status.maturity)
+        {
+        case TransactionStatus::Immature: {
+            int total = wtx->status.depth + wtx->status.matures_in;
+            int part = (wtx->status.depth * 4 / total) + 1;
+            return QIcon(QString(":/icons/transaction_%1").arg(part));
+            }
+        case TransactionStatus::Mature:
+            return QIcon(":/icons/transaction_confirmed");
+        case TransactionStatus::MaturesWarning:
+        case TransactionStatus::NotAccepted:
+            return QIcon(":/icons/transaction_0");
+        }
+    }
+    else
+    {
+        switch(wtx->status.status)
+        {
+        case TransactionStatus::OpenUntilBlock:
+        case TransactionStatus::OpenUntilDate:
+            return QColor(64,64,255);
+            break;
+        case TransactionStatus::Offline:
+            return QColor(192,192,192);
+        case TransactionStatus::Unconfirmed:
+            switch(wtx->status.depth)
+            {
+            case 0: return QIcon(":/icons/transaction_0");
+            case 1: return QIcon(":/icons/transaction_1");
+            case 2: return QIcon(":/icons/transaction_2");
+            case 3: return QIcon(":/icons/transaction_3");
+            case 4: return QIcon(":/icons/transaction_4");
+            default: return QIcon(":/icons/transaction_5");
+            };
+        case TransactionStatus::HaveConfirmations:
+            return QIcon(":/icons/transaction_confirmed");
+        }
+    }
+    return QColor(0,0,0);
+}
+
+QString TransactionTableModel::formatTooltip(const TransactionRecord *rec) const
+{
+    QString tooltip = formatTxStatus(rec) + QString("\n") + formatTxType(rec);
+    if(rec->type==TransactionRecord::RecvFromOther || rec->type==TransactionRecord::SendToOther ||
+       rec->type==TransactionRecord::SendToAddress || rec->type==TransactionRecord::RecvWithAddress)
+    {
+        tooltip += QString(" ") + formatTxToAddress(rec, true);
+    }
+    return tooltip;
+}
+
+QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
+{
+    if(!index.isValid())
+        return QVariant();
+    TransactionRecord *rec = static_cast<TransactionRecord*>(index.internalPointer());
+
+    switch(role)
+    {
+    case Qt::DecorationRole:
+        switch(index.column())
+        {
+        case Status:
+            return txStatusDecoration(rec);
+        case ToAddress:
+            return txAddressDecoration(rec);
+        }
+        break;
+    case Qt::DisplayRole:
+        switch(index.column())
+        {
+        case Date:
+            return formatTxDate(rec);
+        case Type:
+            return formatTxType(rec);
+        case ToAddress:
+            return formatTxToAddress(rec, false);
+        case Amount:
+            return formatTxAmount(rec);
+        }
+        break;
+    case Qt::EditRole:
+        // Edit role is used for sorting, so return the unformatted values
+        switch(index.column())
+        {
+        case Status:
+            return QString::fromStdString(rec->status.sortKey);
+        case Date:
+            return rec->time;
+        case Type:
+            return formatTxType(rec);
+        case ToAddress:
+            return formatTxToAddress(rec, true);
+        case Amount:
+            return rec->credit + rec->debit;
+        }
+        break;
+    case Qt::ToolTipRole:
+        return formatTooltip(rec);
+    case Qt::TextAlignmentRole:
+        return column_alignments[index.column()];
+    case Qt::ForegroundRole:
+        // Non-confirmed transactions are grey
+        if(!rec->status.confirmed)
+        {
+            return COLOR_UNCONFIRMED;
+        }
+        if(index.column() == Amount && (rec->credit+rec->debit) < 0)
+        {
+            return COLOR_NEGATIVE;
+        }
+        if(index.column() == ToAddress)
+        {
+            return addressColor(rec);
+        }
+        break;
+    case TypeRole:
+        return rec->type;
+    case DateRole:
+        return QDateTime::fromTime_t(static_cast<uint>(rec->time));
+    case LongDescriptionRole:
+        return priv->describe(rec);
+    case AddressRole:
+        return QString::fromStdString(rec->address);
+    case LabelRole:
+        return walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(rec->address));
+    case AmountRole:
+        return rec->credit + rec->debit;
+    case TxIDRole:
+        return QString::fromStdString(rec->getTxID());
+    case ConfirmedRole:
+        // Return True if transaction counts for balance
+        return rec->status.confirmed && !(rec->type == TransactionRecord::Generated &&
+                                          rec->status.maturity != TransactionStatus::Mature);
+    case FormattedAmountRole:
+        return formatTxAmount(rec, false);
+    }
+    return QVariant();
+}
+
+QVariant TransactionTableModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    if(orientation == Qt::Horizontal)
+    {
+        if(role == Qt::DisplayRole)
+        {
+            return columns[section];
+        }
+        else if (role == Qt::TextAlignmentRole)
+        {
+            return column_alignments[section];
+        } else if (role == Qt::ToolTipRole)
+        {
+            switch(section)
+            {
+            case Status:
+                return tr("Transaction status. Hover over this field to show number of confirmations.");
+            case Date:
+                return tr("Date and time that the transaction was received.");
+            case Type:
+                return tr("Type of transaction.");
+            case ToAddress:
+                return tr("Destination address of transaction.");
+            case Amount:
+                return tr("Amount removed from or added to balance.");
+            }
+        }
+    }
+    return QVariant();
+}
+
+QModelIndex TransactionTableModel::index(int row, int column, const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    TransactionRecord *data = priv->index(row);
+    if(data)
+    {
+        return createIndex(row, column, priv->index(row));
+    }
+    else
+    {
+        return QModelIndex();
+    }
+}
+
diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h
new file mode 100644 (file)
index 0000000..db88a06
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef TRANSACTIONTABLEMODEL_H
+#define TRANSACTIONTABLEMODEL_H
+
+#include <QAbstractTableModel>
+#include <QStringList>
+
+class CWallet;
+class TransactionTablePriv;
+class TransactionRecord;
+class WalletModel;
+
+/** UI model for the transaction table of a wallet.
+ */
+class TransactionTableModel : public QAbstractTableModel
+{
+    Q_OBJECT
+public:
+    explicit TransactionTableModel(CWallet* wallet, WalletModel *parent = 0);
+    ~TransactionTableModel();
+
+    enum ColumnIndex {
+        Status = 0,
+        Date = 1,
+        Type = 2,
+        ToAddress = 3,
+        Amount = 4
+    };
+
+    /** Roles to get specific information from a transaction row.
+        These are independent of column.
+    */
+    enum RoleIndex {
+        /** Type of transaction */
+        TypeRole = Qt::UserRole,
+        /** Date and time this transaction was created */
+        DateRole,
+        /** Long description (HTML format) */
+        LongDescriptionRole,
+        /** Address of transaction */
+        AddressRole,
+        /** Label of address related to transaction */
+        LabelRole,
+        /** Net amount of transaction */
+        AmountRole,
+        /** Unique identifier */
+        TxIDRole,
+        /** Is transaction confirmed? */
+        ConfirmedRole,
+        /** Formatted amount, without brackets when unconfirmed */
+        FormattedAmountRole
+    };
+
+    int rowCount(const QModelIndex &parent) const;
+    int columnCount(const QModelIndex &parent) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+    QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const;
+private:
+    CWallet* wallet;
+    WalletModel *walletModel;
+    QStringList columns;
+    TransactionTablePriv *priv;
+
+    QString lookupAddress(const std::string &address, bool tooltip) const;
+    QVariant addressColor(const TransactionRecord *wtx) const;
+    QString formatTxStatus(const TransactionRecord *wtx) const;
+    QString formatTxDate(const TransactionRecord *wtx) const;
+    QString formatTxType(const TransactionRecord *wtx) const;
+    QString formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const;
+    QString formatTxAmount(const TransactionRecord *wtx, bool showUnconfirmed=true) const;
+    QString formatTooltip(const TransactionRecord *rec) const;
+    QVariant txStatusDecoration(const TransactionRecord *wtx) const;
+    QVariant txAddressDecoration(const TransactionRecord *wtx) const;
+
+private slots:
+    void update();
+
+    friend class TransactionTablePriv;
+};
+
+#endif
+
diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp
new file mode 100644 (file)
index 0000000..1dd4c7b
--- /dev/null
@@ -0,0 +1,426 @@
+#include "transactionview.h"
+
+#include "transactionfilterproxy.h"
+#include "transactionrecord.h"
+#include "walletmodel.h"
+#include "addresstablemodel.h"
+#include "transactiontablemodel.h"
+#include "bitcoinunits.h"
+#include "csvmodelwriter.h"
+#include "transactiondescdialog.h"
+#include "editaddressdialog.h"
+#include "optionsmodel.h"
+#include "guiutil.h"
+
+#include <QScrollBar>
+#include <QComboBox>
+#include <QDoubleValidator>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QTableView>
+#include <QHeaderView>
+#include <QPushButton>
+#include <QMessageBox>
+#include <QPoint>
+#include <QMenu>
+#include <QApplication>
+#include <QClipboard>
+#include <QLabel>
+#include <QDateTimeEdit>
+
+TransactionView::TransactionView(QWidget *parent) :
+    QWidget(parent), model(0), transactionProxyModel(0),
+    transactionView(0)
+{
+    // Build filter row
+    setContentsMargins(0,0,0,0);
+
+    QHBoxLayout *hlayout = new QHBoxLayout();
+    hlayout->setContentsMargins(0,0,0,0);
+#ifdef Q_WS_MAC
+    hlayout->setSpacing(5);
+    hlayout->addSpacing(26);
+#else
+    hlayout->setSpacing(0);
+    hlayout->addSpacing(23);
+#endif
+
+    dateWidget = new QComboBox(this);
+#ifdef Q_WS_MAC
+    dateWidget->setFixedWidth(121);
+#else
+    dateWidget->setFixedWidth(120);
+#endif
+    dateWidget->addItem(tr("All"), All);
+    dateWidget->addItem(tr("Today"), Today);
+    dateWidget->addItem(tr("This week"), ThisWeek);
+    dateWidget->addItem(tr("This month"), ThisMonth);
+    dateWidget->addItem(tr("Last month"), LastMonth);
+    dateWidget->addItem(tr("This year"), ThisYear);
+    dateWidget->addItem(tr("Range..."), Range);
+    hlayout->addWidget(dateWidget);
+
+    typeWidget = new QComboBox(this);
+#ifdef Q_WS_MAC
+    typeWidget->setFixedWidth(121);
+#else
+    typeWidget->setFixedWidth(120);
+#endif
+
+    typeWidget->addItem(tr("All"), TransactionFilterProxy::ALL_TYPES);
+    typeWidget->addItem(tr("Received with"), TransactionFilterProxy::TYPE(TransactionRecord::RecvWithAddress) |
+                                        TransactionFilterProxy::TYPE(TransactionRecord::RecvFromOther));
+    typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) |
+                                  TransactionFilterProxy::TYPE(TransactionRecord::SendToOther));
+    typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf));
+    typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated));
+    typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other));
+
+    hlayout->addWidget(typeWidget);
+
+    addressWidget = new QLineEdit(this);
+#if QT_VERSION >= 0x040700
+    addressWidget->setPlaceholderText(tr("Enter address or label to search"));
+#endif
+    hlayout->addWidget(addressWidget);
+
+    amountWidget = new QLineEdit(this);
+#if QT_VERSION >= 0x040700
+    amountWidget->setPlaceholderText(tr("Min amount"));
+#endif
+#ifdef Q_WS_MAC
+    amountWidget->setFixedWidth(97);
+#else
+    amountWidget->setFixedWidth(100);
+#endif
+    amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this));
+    hlayout->addWidget(amountWidget);
+
+    QVBoxLayout *vlayout = new QVBoxLayout(this);
+    vlayout->setContentsMargins(0,0,0,0);
+    vlayout->setSpacing(0);
+    //vlayout->addLayout(hlayout2);
+
+    QTableView *view = new QTableView(this);
+    vlayout->addLayout(hlayout);
+    vlayout->addWidget(createDateRangeWidget());
+    vlayout->addWidget(view);
+    vlayout->setSpacing(0);
+    int width = view->verticalScrollBar()->sizeHint().width();
+    // Cover scroll bar width with spacing
+#ifdef Q_WS_MAC
+    hlayout->addSpacing(width+2);
+#else
+    hlayout->addSpacing(width);
+#endif
+    // Always show scroll bar
+    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+    view->setTabKeyNavigation(false);
+    view->setContextMenuPolicy(Qt::CustomContextMenu);
+
+    transactionView = view;
+
+    // Actions
+    QAction *copyAddressAction = new QAction(tr("Copy address"), this);
+    QAction *copyLabelAction = new QAction(tr("Copy label"), this);
+    QAction *editLabelAction = new QAction(tr("Edit label"), this);
+    QAction *showDetailsAction = new QAction(tr("Show details..."), this);
+
+    contextMenu = new QMenu();
+    contextMenu->addAction(copyAddressAction);
+    contextMenu->addAction(copyLabelAction);
+    contextMenu->addAction(editLabelAction);
+    contextMenu->addAction(showDetailsAction);
+
+    // Connect actions
+    connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int)));
+    connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int)));
+    connect(addressWidget, SIGNAL(textChanged(QString)), this, SLOT(changedPrefix(QString)));
+    connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString)));
+
+    connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex)));
+
+    connect(view,
+            SIGNAL(customContextMenuRequested(QPoint)),
+            this,
+            SLOT(contextualMenu(QPoint)));
+
+    connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress()));
+    connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel()));
+    connect(editLabelAction, SIGNAL(triggered()), this, SLOT(editLabel()));
+    connect(showDetailsAction, SIGNAL(triggered()), this, SLOT(showDetails()));
+}
+
+void TransactionView::setModel(WalletModel *model)
+{
+    this->model = model;
+    if(model)
+    {
+        transactionProxyModel = new TransactionFilterProxy(this);
+        transactionProxyModel->setSourceModel(model->getTransactionTableModel());
+        transactionProxyModel->setDynamicSortFilter(true);
+
+        transactionProxyModel->setSortRole(Qt::EditRole);
+
+        transactionView->setModel(transactionProxyModel);
+        transactionView->setAlternatingRowColors(true);
+        transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
+        transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+        transactionView->setSortingEnabled(true);
+        transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder);
+        transactionView->verticalHeader()->hide();
+
+        transactionView->horizontalHeader()->resizeSection(
+                TransactionTableModel::Status, 23);
+        transactionView->horizontalHeader()->resizeSection(
+                TransactionTableModel::Date, 120);
+        transactionView->horizontalHeader()->resizeSection(
+                TransactionTableModel::Type, 120);
+        transactionView->horizontalHeader()->setResizeMode(
+                TransactionTableModel::ToAddress, QHeaderView::Stretch);
+        transactionView->horizontalHeader()->resizeSection(
+                TransactionTableModel::Amount, 100);
+    }
+}
+
+void TransactionView::chooseDate(int idx)
+{
+    if(!transactionProxyModel)
+        return;
+    QDate current = QDate::currentDate();
+    dateRangeWidget->setVisible(false);
+    switch(dateWidget->itemData(idx).toInt())
+    {
+    case All:
+        transactionProxyModel->setDateRange(
+                TransactionFilterProxy::MIN_DATE,
+                TransactionFilterProxy::MAX_DATE);
+        break;
+    case Today:
+        transactionProxyModel->setDateRange(
+                QDateTime(current),
+                TransactionFilterProxy::MAX_DATE);
+        break;
+    case ThisWeek: {
+        // Find last monday
+        QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1));
+        transactionProxyModel->setDateRange(
+                QDateTime(startOfWeek),
+                TransactionFilterProxy::MAX_DATE);
+
+        } break;
+    case ThisMonth:
+        transactionProxyModel->setDateRange(
+                QDateTime(QDate(current.year(), current.month(), 1)),
+                TransactionFilterProxy::MAX_DATE);
+        break;
+    case LastMonth:
+        transactionProxyModel->setDateRange(
+                QDateTime(QDate(current.year(), current.month()-1, 1)),
+                QDateTime(QDate(current.year(), current.month(), 1)));
+        break;
+    case ThisYear:
+        transactionProxyModel->setDateRange(
+                QDateTime(QDate(current.year(), 1, 1)),
+                TransactionFilterProxy::MAX_DATE);
+        break;
+    case Range:
+        dateRangeWidget->setVisible(true);
+        dateRangeChanged();
+        break;
+    }
+}
+
+void TransactionView::chooseType(int idx)
+{
+    if(!transactionProxyModel)
+        return;
+    transactionProxyModel->setTypeFilter(
+        typeWidget->itemData(idx).toInt());
+}
+
+void TransactionView::changedPrefix(const QString &prefix)
+{
+    if(!transactionProxyModel)
+        return;
+    transactionProxyModel->setAddressPrefix(prefix);
+}
+
+void TransactionView::changedAmount(const QString &amount)
+{
+    if(!transactionProxyModel)
+        return;
+    qint64 amount_parsed = 0;
+    if(BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed))
+    {
+        transactionProxyModel->setMinAmount(amount_parsed);
+    }
+    else
+    {
+        transactionProxyModel->setMinAmount(0);
+    }
+}
+
+void TransactionView::exportClicked()
+{
+    // CSV is currently the only supported format
+    QString filename = GUIUtil::getSaveFileName(
+            this,
+            tr("Export Transaction Data"), QString(),
+            tr("Comma separated file (*.csv)"));
+
+    if (filename.isNull()) return;
+
+    CSVModelWriter writer(filename);
+
+    // name, column, role
+    writer.setModel(transactionProxyModel);
+    writer.addColumn(tr("Confirmed"), 0, TransactionTableModel::ConfirmedRole);
+    writer.addColumn(tr("Date"), 0, TransactionTableModel::DateRole);
+    writer.addColumn(tr("Type"), TransactionTableModel::Type, Qt::EditRole);
+    writer.addColumn(tr("Label"), 0, TransactionTableModel::LabelRole);
+    writer.addColumn(tr("Address"), 0, TransactionTableModel::AddressRole);
+    writer.addColumn(tr("Amount"), 0, TransactionTableModel::FormattedAmountRole);
+    writer.addColumn(tr("ID"), 0, TransactionTableModel::TxIDRole);
+
+    if(!writer.write())
+    {
+        QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
+                              QMessageBox::Abort, QMessageBox::Abort);
+    }
+}
+
+void TransactionView::contextualMenu(const QPoint &point)
+{
+    QModelIndex index = transactionView->indexAt(point);
+    if(index.isValid())
+    {
+        contextMenu->exec(QCursor::pos());
+    }
+}
+
+void TransactionView::copyAddress()
+{
+    if(!transactionView->selectionModel())
+        return;
+    QModelIndexList selection = transactionView->selectionModel()->selectedRows();
+    if(!selection.isEmpty())
+    {
+        QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::AddressRole).toString());
+    }
+}
+
+void TransactionView::copyLabel()
+{
+    if(!transactionView->selectionModel())
+        return;
+    QModelIndexList selection = transactionView->selectionModel()->selectedRows();
+    if(!selection.isEmpty())
+    {
+        QApplication::clipboard()->setText(selection.at(0).data(TransactionTableModel::LabelRole).toString());
+    }
+}
+
+void TransactionView::editLabel()
+{
+    if(!transactionView->selectionModel() ||!model)
+        return;
+    QModelIndexList selection = transactionView->selectionModel()->selectedRows();
+    if(!selection.isEmpty())
+    {
+        AddressTableModel *addressBook = model->getAddressTableModel();
+        if(!addressBook)
+            return;
+        QString address = selection.at(0).data(TransactionTableModel::AddressRole).toString();
+        if(address.isEmpty())
+        {
+            // If this transaction has no associated address, exit
+            return;
+        }
+        // Is address in address book? Address book can miss address when a transaction is
+        // sent from outside the UI.
+        int idx = addressBook->lookupAddress(address);
+        if(idx != -1)
+        {
+            // Edit sending / receiving address
+            QModelIndex modelIdx = addressBook->index(idx, 0, QModelIndex());
+            // Determine type of address, launch appropriate editor dialog type
+            QString type = modelIdx.data(AddressTableModel::TypeRole).toString();
+
+            EditAddressDialog dlg(type==AddressTableModel::Receive
+                                         ? EditAddressDialog::EditReceivingAddress
+                                         : EditAddressDialog::EditSendingAddress,
+                                  this);
+            dlg.setModel(addressBook);
+            dlg.loadRow(idx);
+            dlg.exec();
+        }
+        else
+        {
+            // Add sending address
+            EditAddressDialog dlg(EditAddressDialog::NewSendingAddress,
+                                  this);
+            dlg.setModel(addressBook);
+            dlg.setAddress(address);
+            dlg.exec();
+        }
+    }
+}
+
+void TransactionView::showDetails()
+{
+    if(!transactionView->selectionModel())
+        return;
+    QModelIndexList selection = transactionView->selectionModel()->selectedRows();
+    if(!selection.isEmpty())
+    {
+        TransactionDescDialog dlg(selection.at(0));
+        dlg.exec();
+    }
+}
+
+QWidget *TransactionView::createDateRangeWidget()
+{
+    dateRangeWidget = new QFrame();
+    dateRangeWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
+    dateRangeWidget->setContentsMargins(1,1,1,1);
+    QHBoxLayout *layout = new QHBoxLayout(dateRangeWidget);
+    layout->setContentsMargins(0,0,0,0);
+    layout->addSpacing(23);
+    layout->addWidget(new QLabel(tr("Range:")));
+
+    dateFrom = new QDateTimeEdit(this);
+    dateFrom->setDisplayFormat("dd/MM/yy");
+    dateFrom->setCalendarPopup(true);
+    dateFrom->setMinimumWidth(100);
+    dateFrom->setDate(QDate::currentDate().addDays(-7));
+    layout->addWidget(dateFrom);
+    layout->addWidget(new QLabel(tr("to")));
+
+    dateTo = new QDateTimeEdit(this);
+    dateTo->setDisplayFormat("dd/MM/yy");
+    dateTo->setCalendarPopup(true);
+    dateTo->setMinimumWidth(100);
+    dateTo->setDate(QDate::currentDate());
+    layout->addWidget(dateTo);
+    layout->addStretch();
+
+    // Hide by default
+    dateRangeWidget->setVisible(false);
+
+    // Notify on change
+    connect(dateFrom, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));
+    connect(dateTo, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));
+
+    return dateRangeWidget;
+}
+
+void TransactionView::dateRangeChanged()
+{
+    if(!transactionProxyModel)
+        return;
+    transactionProxyModel->setDateRange(
+            QDateTime(dateFrom->date()),
+            QDateTime(dateTo->date()).addDays(1));
+}
diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h
new file mode 100644 (file)
index 0000000..67d0b46
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef TRANSACTIONVIEW_H
+#define TRANSACTIONVIEW_H
+
+#include <QWidget>
+
+class WalletModel;
+class TransactionFilterProxy;
+
+QT_BEGIN_NAMESPACE
+class QTableView;
+class QComboBox;
+class QLineEdit;
+class QModelIndex;
+class QMenu;
+class QFrame;
+class QDateTimeEdit;
+QT_END_NAMESPACE
+
+/** Widget showing the transaction list for a wallet, including a filter row.
+    Using the filter row, the user can view or export a subset of the transactions.
+  */
+class TransactionView : public QWidget
+{
+    Q_OBJECT
+public:
+    explicit TransactionView(QWidget *parent = 0);
+
+    void setModel(WalletModel *model);
+
+    // Date ranges for filter
+    enum DateEnum
+    {
+        All,
+        Today,
+        ThisWeek,
+        ThisMonth,
+        LastMonth,
+        ThisYear,
+        Range
+    };
+
+private:
+    WalletModel *model;
+    TransactionFilterProxy *transactionProxyModel;
+    QTableView *transactionView;
+
+    QComboBox *dateWidget;
+    QComboBox *typeWidget;
+    QLineEdit *addressWidget;
+    QLineEdit *amountWidget;
+
+    QMenu *contextMenu;
+
+    QFrame *dateRangeWidget;
+    QDateTimeEdit *dateFrom;
+    QDateTimeEdit *dateTo;
+
+    QWidget *createDateRangeWidget();
+
+private slots:
+    void contextualMenu(const QPoint &);
+    void dateRangeChanged();
+
+signals:
+    void doubleClicked(const QModelIndex&);
+
+public slots:
+    void chooseDate(int idx);
+    void chooseType(int idx);
+    void changedPrefix(const QString &prefix);
+    void changedAmount(const QString &amount);
+    void exportClicked();
+    void showDetails();
+    void copyAddress();
+    void editLabel();
+    void copyLabel();
+
+};
+
+#endif // TRANSACTIONVIEW_H
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
new file mode 100644 (file)
index 0000000..710d3aa
--- /dev/null
@@ -0,0 +1,283 @@
+#include "walletmodel.h"
+#include "guiconstants.h"
+#include "optionsmodel.h"
+#include "addresstablemodel.h"
+#include "transactiontablemodel.h"
+
+#include "headers.h"
+
+#include <QTimer>
+#include <QSet>
+
+WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) :
+    QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0),
+    transactionTableModel(0),
+    cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0),
+    cachedEncryptionStatus(Unencrypted)
+{
+    // Until signal notifications is built into the bitcoin core,
+    //  simply update everything after polling using a timer.
+    QTimer *timer = new QTimer(this);
+    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
+    timer->start(MODEL_UPDATE_DELAY);
+
+    addressTableModel = new AddressTableModel(wallet, this);
+    transactionTableModel = new TransactionTableModel(wallet, this);
+}
+
+qint64 WalletModel::getBalance() const
+{
+    return wallet->GetBalance();
+}
+
+qint64 WalletModel::getUnconfirmedBalance() const
+{
+    return wallet->GetUnconfirmedBalance();
+}
+
+int WalletModel::getNumTransactions() const
+{
+    int numTransactions = 0;
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        numTransactions = wallet->mapWallet.size();
+    }
+    return numTransactions;
+}
+
+void WalletModel::update()
+{
+    qint64 newBalance = getBalance();
+    qint64 newUnconfirmedBalance = getUnconfirmedBalance();
+    int newNumTransactions = getNumTransactions();
+    EncryptionStatus newEncryptionStatus = getEncryptionStatus();
+
+    if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance)
+        emit balanceChanged(newBalance, newUnconfirmedBalance);
+
+    if(cachedNumTransactions != newNumTransactions)
+        emit numTransactionsChanged(newNumTransactions);
+
+    if(cachedEncryptionStatus != newEncryptionStatus)
+        emit encryptionStatusChanged(newEncryptionStatus);
+
+    cachedBalance = newBalance;
+    cachedUnconfirmedBalance = newUnconfirmedBalance;
+    cachedNumTransactions = newNumTransactions;
+
+    addressTableModel->update();
+}
+
+bool WalletModel::validateAddress(const QString &address)
+{
+    CBitcoinAddress addressParsed(address.toStdString());
+    return addressParsed.IsValid();
+}
+
+WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipient> &recipients)
+{
+    qint64 total = 0;
+    QSet<QString> setAddress;
+    QString hex;
+
+    if(recipients.empty())
+    {
+        return OK;
+    }
+
+    // Pre-check input data for validity
+    foreach(const SendCoinsRecipient &rcp, recipients)
+    {
+        if(!validateAddress(rcp.address))
+        {
+            return InvalidAddress;
+        }
+        setAddress.insert(rcp.address);
+
+        if(rcp.amount <= 0)
+        {
+            return InvalidAmount;
+        }
+        total += rcp.amount;
+    }
+
+    if(recipients.size() > setAddress.size())
+    {
+        return DuplicateAddress;
+    }
+
+    if(total > getBalance())
+    {
+        return AmountExceedsBalance;
+    }
+
+    if((total + nTransactionFee) > getBalance())
+    {
+        return SendCoinsReturn(AmountWithFeeExceedsBalance, nTransactionFee);
+    }
+
+    CRITICAL_BLOCK(cs_main)
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        // Sendmany
+        std::vector<std::pair<CScript, int64> > vecSend;
+        foreach(const SendCoinsRecipient &rcp, recipients)
+        {
+            CScript scriptPubKey;
+            scriptPubKey.SetBitcoinAddress(rcp.address.toStdString());
+            vecSend.push_back(make_pair(scriptPubKey, rcp.amount));
+        }
+
+        CWalletTx wtx;
+        CReserveKey keyChange(wallet);
+        int64 nFeeRequired = 0;
+        bool fCreated = wallet->CreateTransaction(vecSend, wtx, keyChange, nFeeRequired);
+
+        if(!fCreated)
+        {
+            if((total + nFeeRequired) > wallet->GetBalance())
+            {
+                return SendCoinsReturn(AmountWithFeeExceedsBalance, nFeeRequired);
+            }
+            return TransactionCreationFailed;
+        }
+        if(!ThreadSafeAskFee(nFeeRequired, tr("Sending...").toStdString(), NULL))
+        {
+            return Aborted;
+        }
+        if(!wallet->CommitTransaction(wtx, keyChange))
+        {
+            return TransactionCommitFailed;
+        }
+        hex = QString::fromStdString(wtx.GetHash().GetHex());
+    }
+
+    // Add addresses / update labels that we've sent to to the address book
+    foreach(const SendCoinsRecipient &rcp, recipients)
+    {
+        std::string strAddress = rcp.address.toStdString();
+        std::string strLabel = rcp.label.toStdString();
+        CRITICAL_BLOCK(wallet->cs_wallet)
+        {
+            std::map<CBitcoinAddress, std::string>::iterator mi = wallet->mapAddressBook.find(strAddress);
+
+            // Check if we have a new address or an updated label
+            if (mi == wallet->mapAddressBook.end() || mi->second != strLabel)
+            {
+                wallet->SetAddressBookName(strAddress, strLabel);
+            }
+        }
+    }
+
+    // Update our model of the address table
+    addressTableModel->updateList();
+
+    return SendCoinsReturn(OK, 0, hex);
+}
+
+OptionsModel *WalletModel::getOptionsModel()
+{
+    return optionsModel;
+}
+
+AddressTableModel *WalletModel::getAddressTableModel()
+{
+    return addressTableModel;
+}
+
+TransactionTableModel *WalletModel::getTransactionTableModel()
+{
+    return transactionTableModel;
+}
+
+WalletModel::EncryptionStatus WalletModel::getEncryptionStatus() const
+{
+    if(!wallet->IsCrypted())
+    {
+        return Unencrypted;
+    }
+    else if(wallet->IsLocked())
+    {
+        return Locked;
+    }
+    else
+    {
+        return Unlocked;
+    }
+}
+
+bool WalletModel::setWalletEncrypted(bool encrypted, const SecureString &passphrase)
+{
+    if(encrypted)
+    {
+        // Encrypt
+        return wallet->EncryptWallet(passphrase);
+    }
+    else
+    {
+        // Decrypt -- TODO; not supported yet
+        return false;
+    }
+}
+
+bool WalletModel::setWalletLocked(bool locked, const SecureString &passPhrase)
+{
+    if(locked)
+    {
+        // Lock
+        return wallet->Lock();
+    }
+    else
+    {
+        // Unlock
+        return wallet->Unlock(passPhrase);
+    }
+}
+
+bool WalletModel::changePassphrase(const SecureString &oldPass, const SecureString &newPass)
+{
+    bool retval;
+    CRITICAL_BLOCK(wallet->cs_wallet)
+    {
+        wallet->Lock(); // Make sure wallet is locked before attempting pass change
+        retval = wallet->ChangeWalletPassphrase(oldPass, newPass);
+    }
+    return retval;
+}
+
+// WalletModel::UnlockContext implementation
+WalletModel::UnlockContext WalletModel::requestUnlock()
+{
+    bool was_locked = getEncryptionStatus() == Locked;
+    if(was_locked)
+    {
+        // Request UI to unlock wallet
+        emit requireUnlock();
+    }
+    // If wallet is still locked, unlock was failed or cancelled, mark context as invalid
+    bool valid = getEncryptionStatus() != Locked;
+
+    return UnlockContext(this, valid, was_locked);
+}
+
+WalletModel::UnlockContext::UnlockContext(WalletModel *wallet, bool valid, bool relock):
+        wallet(wallet),
+        valid(valid),
+        relock(relock)
+{
+}
+
+WalletModel::UnlockContext::~UnlockContext()
+{
+    if(valid && relock)
+    {
+        wallet->setWalletLocked(true);
+    }
+}
+
+void WalletModel::UnlockContext::CopyFrom(const UnlockContext& rhs)
+{
+    // Transfer context; old object no longer relocks wallet
+    *this = rhs;
+    rhs.relock = false;
+}
diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h
new file mode 100644 (file)
index 0000000..a129808
--- /dev/null
@@ -0,0 +1,143 @@
+#ifndef WALLETMODEL_H
+#define WALLETMODEL_H
+
+#include <QObject>
+
+#include "util.h"
+
+class OptionsModel;
+class AddressTableModel;
+class TransactionTableModel;
+class CWallet;
+
+struct SendCoinsRecipient
+{
+    QString address;
+    QString label;
+    qint64 amount;
+};
+
+/** Interface to Bitcoin wallet from Qt view code. */
+class WalletModel : public QObject
+{
+    Q_OBJECT
+public:
+    explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0);
+
+    enum StatusCode // Returned by sendCoins
+    {
+        OK,
+        InvalidAmount,
+        InvalidAddress,
+        AmountExceedsBalance,
+        AmountWithFeeExceedsBalance,
+        DuplicateAddress,
+        TransactionCreationFailed, // Error returned when wallet is still locked
+        TransactionCommitFailed,
+        Aborted
+    };
+
+    enum EncryptionStatus
+    {
+        Unencrypted,  // !wallet->IsCrypted()
+        Locked,       // wallet->IsCrypted() && wallet->IsLocked()
+        Unlocked      // wallet->IsCrypted() && !wallet->IsLocked()
+    };
+
+    OptionsModel *getOptionsModel();
+    AddressTableModel *getAddressTableModel();
+    TransactionTableModel *getTransactionTableModel();
+
+    qint64 getBalance() const;
+    qint64 getUnconfirmedBalance() const;
+    int getNumTransactions() const;
+    EncryptionStatus getEncryptionStatus() const;
+
+    // Check address for validity
+    bool validateAddress(const QString &address);
+
+    // Return status record for SendCoins, contains error id + information
+    struct SendCoinsReturn
+    {
+        SendCoinsReturn(StatusCode status,
+                         qint64 fee=0,
+                         QString hex=QString()):
+            status(status), fee(fee), hex(hex) {}
+        StatusCode status;
+        qint64 fee; // is used in case status is "AmountWithFeeExceedsBalance"
+        QString hex; // is filled with the transaction hash if status is "OK"
+    };
+
+    // Send coins to a list of recipients
+    SendCoinsReturn sendCoins(const QList<SendCoinsRecipient> &recipients);
+
+    // Wallet encryption
+    bool setWalletEncrypted(bool encrypted, const SecureString &passphrase);
+    // Passphrase only needed when unlocking
+    bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString());
+    bool changePassphrase(const SecureString &oldPass, const SecureString &newPass);
+
+    // RAI object for unlocking wallet, returned by requestUnlock()
+    class UnlockContext
+    {
+    public:
+        UnlockContext(WalletModel *wallet, bool valid, bool relock);
+        ~UnlockContext();
+
+        bool isValid() const { return valid; }
+
+        // Copy operator and constructor transfer the context
+        UnlockContext(const UnlockContext& obj) { CopyFrom(obj); }
+        UnlockContext& operator=(const UnlockContext& rhs) { CopyFrom(rhs); return *this; }
+    private:
+        WalletModel *wallet;
+        bool valid;
+        mutable bool relock; // mutable, as it can be set to false by copying
+
+        void CopyFrom(const UnlockContext& rhs);
+    };
+
+    UnlockContext requestUnlock();
+
+private:
+    CWallet *wallet;
+
+    // Wallet has an options model for wallet-specific options
+    // (transaction fee, for example)
+    OptionsModel *optionsModel;
+
+    AddressTableModel *addressTableModel;
+    TransactionTableModel *transactionTableModel;
+
+    // Cache some values to be able to detect changes
+    qint64 cachedBalance;
+    qint64 cachedUnconfirmedBalance;
+    qint64 cachedNumTransactions;
+    EncryptionStatus cachedEncryptionStatus;
+
+signals:
+    // Signal that balance in wallet changed
+    void balanceChanged(qint64 balance, qint64 unconfirmedBalance);
+
+    // Number of transactions in wallet changed
+    void numTransactionsChanged(int count);
+
+    // Encryption status of wallet changed
+    void encryptionStatusChanged(int status);
+
+    // Signal emitted when wallet needs to be unlocked
+    // It is valid behaviour for listeners to keep the wallet locked after this signal;
+    // this means that the unlocking failed or was cancelled.
+    void requireUnlock();
+
+    // Asynchronous error notification
+    void error(const QString &title, const QString &message);
+
+public slots:
+
+private slots:
+    void update();
+};
+
+
+#endif // WALLETMODEL_H
diff --git a/src/qtui.h b/src/qtui.h
new file mode 100644 (file)
index 0000000..52983b8
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright (c) 2010 Satoshi Nakamoto
+// Distributed under the MIT/X11 software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+#ifndef BITCOIN_EXTERNUI_H
+#define BITCOIN_EXTERNUI_H
+
+#include <string>
+#include <boost/function/function0.hpp>
+#include "wallet.h"
+
+typedef void wxWindow;
+#define wxYES                   0x00000002
+#define wxOK                    0x00000004
+#define wxNO                    0x00000008
+#define wxYES_NO                (wxYES|wxNO)
+#define wxCANCEL                0x00000010
+#define wxAPPLY                 0x00000020
+#define wxCLOSE                 0x00000040
+#define wxOK_DEFAULT            0x00000000
+#define wxYES_DEFAULT           0x00000000
+#define wxNO_DEFAULT            0x00000080
+#define wxCANCEL_DEFAULT        0x80000000
+#define wxICON_EXCLAMATION      0x00000100
+#define wxICON_HAND             0x00000200
+#define wxICON_WARNING          wxICON_EXCLAMATION
+#define wxICON_ERROR            wxICON_HAND
+#define wxICON_QUESTION         0x00000400
+#define wxICON_INFORMATION      0x00000800
+#define wxICON_STOP             wxICON_HAND
+#define wxICON_ASTERISK         wxICON_INFORMATION
+#define wxICON_MASK             (0x00000100|0x00000200|0x00000400|0x00000800)
+#define wxFORWARD               0x00001000
+#define wxBACKWARD              0x00002000
+#define wxRESET                 0x00004000
+#define wxHELP                  0x00008000
+#define wxMORE                  0x00010000
+#define wxSETUP                 0x00020000
+// Force blocking, modal message box dialog (not just notification)
+#define wxMODAL                 0x00040000
+
+extern int MyMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
+#define wxMessageBox  MyMessageBox
+extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
+extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent);
+extern void CalledSetStatusBar(const std::string& strText, int nField);
+extern void UIThreadCall(boost::function0<void> fn);
+extern void MainFrameRepaint();
+extern void QueueShutdown();
+extern void InitMessage(const std::string &message);
+extern std::string _(const char* psz);
+
+#endif
index e7664d2..bbb32f6 100644 (file)
@@ -1132,6 +1132,7 @@ bool static ExtractAddressInner(const CScript& scriptPubKey, const CKeyStore* ke
         if (keystore == NULL || keystore->HaveKey(addressRet))
             return true;
     }
+
     return false;
 }
 
index db3c963..61d80d7 100644 (file)
@@ -30,7 +30,8 @@ typedef unsigned long long  uint64;
 #define for  if (false) ; else for
 #endif
 
-#ifdef __WXMSW__
+#ifdef WIN32
+#include <windows.h>
 // This is used to attempt to keep keying material out of swap
 // Note that VirtualLock does not provide this as a guarantee on Windows,
 // but, in practice, memory that has been VirtualLock'd almost never gets written to
@@ -59,7 +60,7 @@ class CDataStream;
 class CAutoFile;
 static const unsigned int MAX_SIZE = 0x02000000;
 
-static const int VERSION = 40701;
+static const int VERSION = 50601;
 static const char* pszSubVer = "";
 static const bool VERSION_IS_BETA = true;
 
diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp
new file mode 100644 (file)
index 0000000..01e6691
--- /dev/null
@@ -0,0 +1,118 @@
+//
+// Unit tests for denial-of-service detection/prevention code
+//
+#include <boost/assign/list_of.hpp> // for 'map_list_of()'
+#include <boost/test/unit_test.hpp>
+#include <boost/foreach.hpp>
+
+#include "../main.h"
+#include "../net.h"
+#include "../util.h"
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(DoS_tests)
+
+BOOST_AUTO_TEST_CASE(DoS_banning)
+{
+    CNode::ClearBanned();
+    CAddress addr1(0xa0b0c001);
+    CNode dummyNode1(INVALID_SOCKET, addr1, true);
+    dummyNode1.Misbehaving(100); // Should get banned
+    BOOST_CHECK(CNode::IsBanned(addr1.ip));
+    BOOST_CHECK(!CNode::IsBanned(addr1.ip|0x0000ff00)); // Different ip, not banned
+
+    CAddress addr2(0xa0b0c002);
+    CNode dummyNode2(INVALID_SOCKET, addr2, true);
+    dummyNode2.Misbehaving(50);
+    BOOST_CHECK(!CNode::IsBanned(addr2.ip)); // 2 not banned yet...
+    BOOST_CHECK(CNode::IsBanned(addr1.ip));  // ... but 1 still should be
+    dummyNode2.Misbehaving(50);
+    BOOST_CHECK(CNode::IsBanned(addr2.ip));
+}    
+
+BOOST_AUTO_TEST_CASE(DoS_banscore)
+{
+    CNode::ClearBanned();
+    mapArgs["-banscore"] = "111"; // because 11 is my favorite number
+    CAddress addr1(0xa0b0c001);
+    CNode dummyNode1(INVALID_SOCKET, addr1, true);
+    dummyNode1.Misbehaving(100);
+    BOOST_CHECK(!CNode::IsBanned(addr1.ip));
+    dummyNode1.Misbehaving(10);
+    BOOST_CHECK(!CNode::IsBanned(addr1.ip));
+    dummyNode1.Misbehaving(1);
+    BOOST_CHECK(CNode::IsBanned(addr1.ip));
+    mapArgs["-banscore"] = "100";
+}
+
+BOOST_AUTO_TEST_CASE(DoS_bantime)
+{
+    CNode::ClearBanned();
+    int64 nStartTime = GetTime();
+    SetMockTime(nStartTime); // Overrides future calls to GetTime()
+
+    CAddress addr(0xa0b0c001);
+    CNode dummyNode(INVALID_SOCKET, addr, true);
+
+    dummyNode.Misbehaving(100);
+    BOOST_CHECK(CNode::IsBanned(addr.ip));
+
+    SetMockTime(nStartTime+60*60);
+    BOOST_CHECK(CNode::IsBanned(addr.ip));
+
+    SetMockTime(nStartTime+60*60*24+1);
+    BOOST_CHECK(!CNode::IsBanned(addr.ip));
+}    
+
+static bool CheckNBits(unsigned int nbits1, int64 time1, unsigned int nbits2, int64 time2)
+{
+    if (time1 > time2)
+        return CheckNBits(nbits2, time2, nbits1, time1);
+    int64 deltaTime = time2-time1;
+
+    CBigNum required;
+    required.SetCompact(ComputeMinWork(nbits1, deltaTime));
+    CBigNum have;
+    have.SetCompact(nbits2);
+    return (have <= required);
+}
+
+BOOST_AUTO_TEST_CASE(DoS_checknbits)
+{
+    using namespace boost::assign; // for 'map_list_of()'
+
+    // Timestamps,nBits from the bitcoin blockchain.
+    // These are the block-chain checkpoint blocks
+    typedef std::map<int64, unsigned int> BlockData;
+    BlockData chainData =
+        map_list_of(1239852051,486604799)(1262749024,486594666)
+        (1279305360,469854461)(1280200847,469830746)(1281678674,469809688)
+        (1296207707,453179945)(1302624061,453036989)(1309640330,437004818)
+        (1313172719,436789733);
+
+    // Make sure CheckNBits considers every combination of block-chain-lock-in-points
+    // "sane":
+    BOOST_FOREACH(const BlockData::value_type& i, chainData)
+    {
+        BOOST_FOREACH(const BlockData::value_type& j, chainData)
+        {
+            BOOST_CHECK(CheckNBits(i.second, i.first, j.second, j.first));
+        }
+    }
+
+    // Test a couple of insane combinations:
+    BlockData::value_type firstcheck = *(chainData.begin());
+    BlockData::value_type lastcheck = *(chainData.rbegin());
+
+    // First checkpoint difficulty at or a while after the last checkpoint time should fail when
+    // compared to last checkpoint
+    BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*10, lastcheck.second, lastcheck.first));
+    BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*60*24*14, lastcheck.second, lastcheck.first));
+
+    // ... but OK if enough time passed for difficulty to adjust downward:
+    BOOST_CHECK(CheckNBits(firstcheck.second, lastcheck.first+60*60*24*365*4, lastcheck.second, lastcheck.first));
+    
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/base58_tests.cpp b/src/test/base58_tests.cpp
new file mode 100644 (file)
index 0000000..c7fa74e
--- /dev/null
@@ -0,0 +1,87 @@
+#include <boost/test/unit_test.hpp>
+
+#include "../util.h"
+
+BOOST_AUTO_TEST_SUITE(base58_tests)
+
+// TODO:
+// EncodeBase58Check
+// DecodeBase58Check
+// CBase58Data
+//    bool SetString(const char* psz)
+    // bool SetString(const std::string& str)
+    // std::string ToString() const
+    // int CompareTo(const CBase58Data& b58) const
+    // bool operator==(const CBase58Data& b58) const
+    // bool operator<=(const CBase58Data& b58) const
+    // bool operator>=(const CBase58Data& b58) const
+    // bool operator< (const CBase58Data& b58) const
+    // bool operator> (const CBase58Data& b58) const
+
+// CBitcoinAddress
+    // bool SetHash160(const uint160& hash160)
+    // bool SetPubKey(const std::vector<unsigned char>& vchPubKey)
+    // bool IsValid() const
+    // CBitcoinAddress()
+    // CBitcoinAddress(uint160 hash160In)
+    // CBitcoinAddress(const std::vector<unsigned char>& vchPubKey)
+    // CBitcoinAddress(const std::string& strAddress)
+    // CBitcoinAddress(const char* pszAddress)
+    // uint160 GetHash160() const
+
+#define U(x) (reinterpret_cast<const unsigned char*>(x))
+static struct {
+    const unsigned char *data;
+    int size;
+} vstrIn[] = {
+{U(""), 0},
+{U("\x61"), 1},
+{U("\x62\x62\x62"), 3},
+{U("\x63\x63\x63"), 3},
+{U("\x73\x69\x6d\x70\x6c\x79\x20\x61\x20\x6c\x6f\x6e\x67\x20\x73\x74\x72\x69\x6e\x67"), 20},
+{U("\x00\xeb\x15\x23\x1d\xfc\xeb\x60\x92\x58\x86\xb6\x7d\x06\x52\x99\x92\x59\x15\xae\xb1\x72\xc0\x66\x47"), 25},
+{U("\x51\x6b\x6f\xcd\x0f"), 5},
+{U("\xbf\x4f\x89\x00\x1e\x67\x02\x74\xdd"), 9},
+{U("\x57\x2e\x47\x94"), 4},
+{U("\xec\xac\x89\xca\xd9\x39\x23\xc0\x23\x21"), 10},
+{U("\x10\xc8\x51\x1e"), 4},
+{U("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), 10},
+};
+
+const char *vstrOut[] = {
+"",
+"2g",
+"a3gV",
+"aPEr",
+"2cFupjhnEsSn59qHXstmK2ffpLv2",
+"1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L",
+"ABnLTmg",
+"3SEo3LWLoPntC",
+"3EFU7m",
+"EJDM8drfXA6uyA",
+"Rt5zm",
+"1111111111"
+};
+
+BOOST_AUTO_TEST_CASE(base58_EncodeBase58)
+{
+    for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++)
+    {
+        BOOST_CHECK_EQUAL(EncodeBase58(vstrIn[i].data, vstrIn[i].data + vstrIn[i].size), vstrOut[i]);
+    }
+}
+
+BOOST_AUTO_TEST_CASE(base58_DecodeBase58)
+{
+    std::vector<unsigned char> result;
+    for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++)
+    {
+        std::vector<unsigned char> expected(vstrIn[i].data, vstrIn[i].data + vstrIn[i].size);
+        BOOST_CHECK(DecodeBase58(vstrOut[i], result));
+        BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
+    }
+    BOOST_CHECK(!DecodeBase58("invalid", result));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp
new file mode 100644 (file)
index 0000000..f30f7f8
--- /dev/null
@@ -0,0 +1,20 @@
+#include <boost/test/unit_test.hpp>
+
+#include "../util.h"
+
+BOOST_AUTO_TEST_SUITE(base64_tests)
+
+BOOST_AUTO_TEST_CASE(base64_testvectors)
+{
+    static const string vstrIn[]  = {"","f","fo","foo","foob","fooba","foobar"};
+    static const string vstrOut[] = {"","Zg==","Zm8=","Zm9v","Zm9vYg==","Zm9vYmE=","Zm9vYmFy"};
+    for (int i=0; i<sizeof(vstrIn)/sizeof(vstrIn[0]); i++)
+    {
+        string strEnc = EncodeBase64(vstrIn[i]);
+        BOOST_CHECK(strEnc == vstrOut[i]);
+        string strDec = DecodeBase64(strEnc);
+        BOOST_CHECK(strDec == vstrIn[i]);
+    }
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
new file mode 100644 (file)
index 0000000..8fc5347
--- /dev/null
@@ -0,0 +1,35 @@
+#include <boost/test/unit_test.hpp>
+
+#include "../uint256.h"
+
+extern void SHA256Transform(void* pstate, void* pinput, const void* pinit);
+
+BOOST_AUTO_TEST_SUITE(miner_tests)
+
+BOOST_AUTO_TEST_CASE(sha256transform_equality)
+{
+    unsigned int pSHA256InitState[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
+
+
+    unsigned char pstate[32];
+    unsigned char pinput[64];
+
+    int i;
+
+    for (i = 0; i < 32; i++) {
+        pinput[i] = i;
+        pinput[i+32] = 0;
+    }
+
+    uint256 hash;
+
+    SHA256Transform(&hash, pinput, pSHA256InitState);
+
+    BOOST_TEST_MESSAGE(hash.GetHex());
+
+    uint256 hash_reference("0x2df5e1c65ef9f8cde240d23cae2ec036d31a15ec64bc68f64be242b1da6631f3");
+
+    BOOST_CHECK(hash == hash_reference);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
index 645d8a2..a21801b 100644 (file)
@@ -8,12 +8,22 @@
 #include "uint256_tests.cpp"
 #include "script_tests.cpp"
 #include "transaction_tests.cpp"
+#include "DoS_tests.cpp"
+#include "base64_tests.cpp"
+#include "util_tests.cpp"
+#include "base58_tests.cpp"
+#include "miner_tests.cpp"
 #include "Checkpoints_tests.cpp"
 
-
 CWallet* pwalletMain;
 
 void Shutdown(void* parg)
 {
-       exit(0);
+  exit(0);
 }
+
+void StartShutdown()
+{
+  exit(0);
+}
+
diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp
new file mode 100644 (file)
index 0000000..8c8b99e
--- /dev/null
@@ -0,0 +1,233 @@
+#include <vector>
+#include <boost/test/unit_test.hpp>
+#include <boost/foreach.hpp>
+
+#include "../util.h"
+
+using namespace std;
+
+BOOST_AUTO_TEST_SUITE(util_tests)
+
+BOOST_AUTO_TEST_CASE(util_criticalsection)
+{
+    CCriticalSection cs;
+
+    do {
+        CRITICAL_BLOCK(cs)
+            break;
+
+        BOOST_ERROR("break was swallowed!");
+    } while(0);
+
+    do {
+        TRY_CRITICAL_BLOCK(cs)
+            break;
+
+        BOOST_ERROR("break was swallowed!");
+    } while(0);
+}
+
+BOOST_AUTO_TEST_CASE(util_MedianFilter)
+{    
+    CMedianFilter<int> filter(5, 15);
+
+    BOOST_CHECK_EQUAL(filter.median(), 15);
+
+    filter.input(20); // [15 20]
+    BOOST_CHECK_EQUAL(filter.median(), 17);
+
+    filter.input(30); // [15 20 30]
+    BOOST_CHECK_EQUAL(filter.median(), 20);
+
+    filter.input(3); // [3 15 20 30]
+    BOOST_CHECK_EQUAL(filter.median(), 17);
+
+    filter.input(7); // [3 7 15 20 30]
+    BOOST_CHECK_EQUAL(filter.median(), 15);
+
+    filter.input(18); // [3 7 18 20 30]
+    BOOST_CHECK_EQUAL(filter.median(), 18);
+
+    filter.input(0); // [0 3 7 18 30]
+    BOOST_CHECK_EQUAL(filter.median(), 7);
+}
+
+static const unsigned char ParseHex_expected[65] = {
+    0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, 0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, 0xb7, 
+    0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, 0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, 0xde, 
+    0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, 0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, 
+    0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 
+    0x5f
+};
+BOOST_AUTO_TEST_CASE(util_ParseHex)
+{
+    std::vector<unsigned char> result;
+    std::vector<unsigned char> expected(ParseHex_expected, ParseHex_expected + sizeof(ParseHex_expected));
+    // Basic test vector
+    result = ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f");
+    BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end());
+
+    // Spaces between bytes must be supported
+    result = ParseHex("12 34 56 78");
+    BOOST_CHECK(result.size() == 4 && result[0] == 0x12 && result[1] == 0x34 && result[2] == 0x56 && result[3] == 0x78);
+
+    // Stop parsing at invalid value
+    result = ParseHex("1234 invalid 1234");
+    BOOST_CHECK(result.size() == 2 && result[0] == 0x12 && result[1] == 0x34);
+}
+
+BOOST_AUTO_TEST_CASE(util_HexStr)
+{
+    BOOST_CHECK_EQUAL(
+        HexStr(ParseHex_expected, ParseHex_expected + sizeof(ParseHex_expected)),
+        "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f");
+
+    BOOST_CHECK_EQUAL(
+        HexStr(ParseHex_expected, ParseHex_expected + 5, true),
+        "04 67 8a fd b0");
+}
+
+BOOST_AUTO_TEST_CASE(util_DateTimeStrFormat)
+{
+    BOOST_CHECK_EQUAL(DateTimeStrFormat("%x %H:%M:%S", 0), "01/01/70 00:00:00");
+    BOOST_CHECK_EQUAL(DateTimeStrFormat("%x %H:%M:%S", 0x7FFFFFFF), "01/19/38 03:14:07");
+    // Formats used within bitcoin
+    BOOST_CHECK_EQUAL(DateTimeStrFormat("%x %H:%M:%S", 1317425777), "09/30/11 23:36:17");
+    BOOST_CHECK_EQUAL(DateTimeStrFormat("%x %H:%M", 1317425777), "09/30/11 23:36");
+}
+
+BOOST_AUTO_TEST_CASE(util_ParseParameters)
+{
+    const char *argv_test[] = {"-ignored", "-a", "-b", "-ccc=argument", "-ccc=multiple", "f", "-d=e"};
+
+    ParseParameters(0, (char**)argv_test);
+    BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty());
+
+    ParseParameters(1, (char**)argv_test);
+    BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty());
+
+    ParseParameters(5, (char**)argv_test);
+    // expectation: -ignored is ignored (program name argument), 
+    // -a, -b and -ccc end up in map, -d ignored because it is after
+    // a non-option argument (non-GNU option parsing)
+    BOOST_CHECK(mapArgs.size() == 3 && mapMultiArgs.size() == 3);
+    BOOST_CHECK(mapArgs.count("-a") && mapArgs.count("-b") && mapArgs.count("-ccc") 
+                && !mapArgs.count("f") && !mapArgs.count("-d"));
+    BOOST_CHECK(mapMultiArgs.count("-a") && mapMultiArgs.count("-b") && mapMultiArgs.count("-ccc") 
+                && !mapMultiArgs.count("f") && !mapMultiArgs.count("-d"));
+
+    BOOST_CHECK(mapArgs["-a"] == "" && mapArgs["-ccc"] == "multiple");
+    BOOST_CHECK(mapMultiArgs["-ccc"].size() == 2);
+}
+
+BOOST_AUTO_TEST_CASE(util_GetArg)
+{
+    mapArgs.clear();
+    mapArgs["strtest1"] = "string...";
+    // strtest2 undefined on purpose
+    mapArgs["inttest1"] = "12345";
+    mapArgs["inttest2"] = "81985529216486895";
+    // inttest3 undefined on purpose
+    mapArgs["booltest1"] = "";
+    // booltest2 undefined on purpose
+    mapArgs["booltest3"] = "0";
+    mapArgs["booltest4"] = "1";
+
+    BOOST_CHECK_EQUAL(GetArg("strtest1", "default"), "string...");
+    BOOST_CHECK_EQUAL(GetArg("strtest2", "default"), "default");
+    BOOST_CHECK_EQUAL(GetArg("inttest1", -1), 12345);
+    BOOST_CHECK_EQUAL(GetArg("inttest2", -1), 81985529216486895LL);
+    BOOST_CHECK_EQUAL(GetArg("inttest3", -1), -1);
+    BOOST_CHECK_EQUAL(GetBoolArg("booltest1"), true);
+    BOOST_CHECK_EQUAL(GetBoolArg("booltest2"), false);
+    BOOST_CHECK_EQUAL(GetBoolArg("booltest3"), false);
+    BOOST_CHECK_EQUAL(GetBoolArg("booltest4"), true);
+}
+
+BOOST_AUTO_TEST_CASE(util_WildcardMatch)
+{
+    BOOST_CHECK(WildcardMatch("127.0.0.1", "*"));
+    BOOST_CHECK(WildcardMatch("127.0.0.1", "127.*"));
+    BOOST_CHECK(WildcardMatch("abcdef", "a?cde?"));
+    BOOST_CHECK(!WildcardMatch("abcdef", "a?cde??"));
+    BOOST_CHECK(WildcardMatch("abcdef", "a*f"));
+    BOOST_CHECK(!WildcardMatch("abcdef", "a*x"));
+    BOOST_CHECK(WildcardMatch("", "*"));
+}
+
+BOOST_AUTO_TEST_CASE(util_FormatMoney)
+{
+    BOOST_CHECK_EQUAL(FormatMoney(0, false), "0.00");
+    BOOST_CHECK_EQUAL(FormatMoney((COIN/10000)*123456789, false), "12345.6789");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN, true), "+1.00");
+    BOOST_CHECK_EQUAL(FormatMoney(-COIN, false), "-1.00");
+    BOOST_CHECK_EQUAL(FormatMoney(-COIN, true), "-1.00");
+
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*100000000, false), "100000000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*10000000, false), "10000000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*1000000, false), "1000000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*100000, false), "100000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*10000, false), "10000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*1000, false), "1000.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*100, false), "100.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN*10, false), "10.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN, false), "1.00");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/10, false), "0.10");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/100, false), "0.01");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/1000, false), "0.001");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/10000, false), "0.0001");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/100000, false), "0.00001");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/1000000, false), "0.000001");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/10000000, false), "0.0000001");
+    BOOST_CHECK_EQUAL(FormatMoney(COIN/100000000, false), "0.00000001");
+}
+
+BOOST_AUTO_TEST_CASE(util_ParseMoney)
+{
+    int64 ret = 0;
+    BOOST_CHECK(ParseMoney("0.0", ret));
+    BOOST_CHECK_EQUAL(ret, 0);
+
+    BOOST_CHECK(ParseMoney("12345.6789", ret));
+    BOOST_CHECK_EQUAL(ret, (COIN/10000)*123456789);
+
+    BOOST_CHECK(ParseMoney("100000000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*100000000);
+    BOOST_CHECK(ParseMoney("10000000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*10000000);
+    BOOST_CHECK(ParseMoney("1000000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*1000000);
+    BOOST_CHECK(ParseMoney("100000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*100000);
+    BOOST_CHECK(ParseMoney("10000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*10000);
+    BOOST_CHECK(ParseMoney("1000.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*1000);
+    BOOST_CHECK(ParseMoney("100.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*100);
+    BOOST_CHECK(ParseMoney("10.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN*10);
+    BOOST_CHECK(ParseMoney("1.00", ret));
+    BOOST_CHECK_EQUAL(ret, COIN);
+    BOOST_CHECK(ParseMoney("0.1", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/10);
+    BOOST_CHECK(ParseMoney("0.01", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/100);
+    BOOST_CHECK(ParseMoney("0.001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/1000);
+    BOOST_CHECK(ParseMoney("0.0001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/10000);
+    BOOST_CHECK(ParseMoney("0.00001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/100000);
+    BOOST_CHECK(ParseMoney("0.000001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/1000000);
+    BOOST_CHECK(ParseMoney("0.0000001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/10000000);
+    BOOST_CHECK(ParseMoney("0.00000001", ret));
+    BOOST_CHECK_EQUAL(ret, COIN/100000000);
+
+    // Attempted 63 bit overflow should fail
+    BOOST_CHECK(!ParseMoney("92233720368.54775808", ret));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/ui.cpp b/src/ui.cpp
deleted file mode 100644 (file)
index 1fcfff6..0000000
+++ /dev/null
@@ -1,3220 +0,0 @@
-// Copyright (c) 2009-2010 Satoshi Nakamoto
-// Copyright (c) 2011 The Bitcoin developers
-// Distributed under the MIT/X11 software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-#include "headers.h"
-#include "db.h"
-#include "init.h"
-#include "strlcpy.h"
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/convenience.hpp>
-#ifdef _MSC_VER
-#include <crtdbg.h>
-#endif
-
-using namespace std;
-using namespace boost;
-
-
-DEFINE_EVENT_TYPE(wxEVT_UITHREADCALL)
-
-CMainFrame* pframeMain = NULL;
-CMyTaskBarIcon* ptaskbaricon = NULL;
-bool fClosedToTray = false;
-wxLocale g_locale;
-
-#ifdef __WXMSW__
-double nScaleX = 1.0;
-double nScaleY = 1.0;
-#else
-static const double nScaleX = 1.0;
-static const double nScaleY = 1.0;
-#endif
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Util
-//
-
-void HandleCtrlA(wxKeyEvent& event)
-{
-    // Ctrl-a select all
-    event.Skip();
-    wxTextCtrl* textCtrl = (wxTextCtrl*)event.GetEventObject();
-    if (event.GetModifiers() == wxMOD_CONTROL && event.GetKeyCode() == 'A')
-        textCtrl->SetSelection(-1, -1);
-}
-
-bool Is24HourTime()
-{
-    //char pszHourFormat[256];
-    //pszHourFormat[0] = '\0';
-    //GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, pszHourFormat, 256);
-    //return (pszHourFormat[0] != '0');
-    return true;
-}
-
-string DateStr(int64 nTime)
-{
-    // Can only be used safely here in the UI
-    return (string)wxDateTime((time_t)nTime).FormatDate();
-}
-
-string DateTimeStr(int64 nTime)
-{
-    // Can only be used safely here in the UI
-    wxDateTime datetime((time_t)nTime);
-    if (Is24HourTime())
-        return (string)datetime.Format("%x %H:%M");
-    else
-        return (string)datetime.Format("%x ") + itostr((datetime.GetHour() + 11) % 12 + 1) + (string)datetime.Format(":%M %p");
-}
-
-wxString GetItemText(wxListCtrl* listCtrl, int nIndex, int nColumn)
-{
-    // Helper to simplify access to listctrl
-    wxListItem item;
-    item.m_itemId = nIndex;
-    item.m_col = nColumn;
-    item.m_mask = wxLIST_MASK_TEXT;
-    if (!listCtrl->GetItem(item))
-        return "";
-    return item.GetText();
-}
-
-int InsertLine(wxListCtrl* listCtrl, const wxString& str0, const wxString& str1)
-{
-    int nIndex = listCtrl->InsertItem(listCtrl->GetItemCount(), str0);
-    listCtrl->SetItem(nIndex, 1, str1);
-    return nIndex;
-}
-
-int InsertLine(wxListCtrl* listCtrl, const wxString& str0, const wxString& str1, const wxString& str2, const wxString& str3, const wxString& str4)
-{
-    int nIndex = listCtrl->InsertItem(listCtrl->GetItemCount(), str0);
-    listCtrl->SetItem(nIndex, 1, str1);
-    listCtrl->SetItem(nIndex, 2, str2);
-    listCtrl->SetItem(nIndex, 3, str3);
-    listCtrl->SetItem(nIndex, 4, str4);
-    return nIndex;
-}
-
-int InsertLine(wxListCtrl* listCtrl, void* pdata, const wxString& str0, const wxString& str1, const wxString& str2, const wxString& str3, const wxString& str4)
-{
-    int nIndex = listCtrl->InsertItem(listCtrl->GetItemCount(), str0);
-    listCtrl->SetItemPtrData(nIndex, (wxUIntPtr)pdata);
-    listCtrl->SetItem(nIndex, 1, str1);
-    listCtrl->SetItem(nIndex, 2, str2);
-    listCtrl->SetItem(nIndex, 3, str3);
-    listCtrl->SetItem(nIndex, 4, str4);
-    return nIndex;
-}
-
-void SetItemTextColour(wxListCtrl* listCtrl, int nIndex, const wxColour& colour)
-{
-    // Repaint on Windows is more flickery if the colour has ever been set,
-    // so don't want to set it unless it's different.  Default colour has
-    // alpha 0 transparent, so our colours don't match using operator==.
-    wxColour c1 = listCtrl->GetItemTextColour(nIndex);
-    if (!c1.IsOk())
-        c1 = wxColour(0,0,0);
-    if (colour.Red() != c1.Red() || colour.Green() != c1.Green() || colour.Blue() != c1.Blue())
-        listCtrl->SetItemTextColour(nIndex, colour);
-}
-
-void SetSelection(wxListCtrl* listCtrl, int nIndex)
-{
-    int nSize = listCtrl->GetItemCount();
-    long nState = (wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);
-    for (int i = 0; i < nSize; i++)
-        listCtrl->SetItemState(i, (i == nIndex ? nState : 0), nState);
-}
-
-int GetSelection(wxListCtrl* listCtrl)
-{
-    int nSize = listCtrl->GetItemCount();
-    for (int i = 0; i < nSize; i++)
-        if (listCtrl->GetItemState(i, wxLIST_STATE_FOCUSED))
-            return i;
-    return -1;
-}
-
-string HtmlEscape(const char* psz, bool fMultiLine=false)
-{
-    int len = 0;
-    for (const char* p = psz; *p; p++)
-    {
-             if (*p == '<') len += 4;
-        else if (*p == '>') len += 4;
-        else if (*p == '&') len += 5;
-        else if (*p == '"') len += 6;
-        else if (*p == ' ' && p > psz && p[-1] == ' ' && p[1] == ' ') len += 6;
-        else if (*p == '\n' && fMultiLine) len += 5;
-        else
-            len++;
-    }
-    string str;
-    str.reserve(len);
-    for (const char* p = psz; *p; p++)
-    {
-             if (*p == '<') str += "&lt;";
-        else if (*p == '>') str += "&gt;";
-        else if (*p == '&') str += "&amp;";
-        else if (*p == '"') str += "&quot;";
-        else if (*p == ' ' && p > psz && p[-1] == ' ' && p[1] == ' ') str += "&nbsp;";
-        else if (*p == '\n' && fMultiLine) str += "<br>\n";
-        else
-            str += *p;
-    }
-    return str;
-}
-
-string HtmlEscape(const string& str, bool fMultiLine=false)
-{
-    return HtmlEscape(str.c_str(), fMultiLine);
-}
-
-void CalledMessageBox(const string& message, const string& caption, int style, wxWindow* parent, int x, int y, int* pnRet, bool* pfDone)
-{
-    *pnRet = wxMessageBox(message, caption, style, parent, x, y);
-    *pfDone = true;
-}
-
-int ThreadSafeMessageBox(const string& message, const string& caption, int style, wxWindow* parent, int x, int y)
-{
-#ifdef __WXMSW__
-    return wxMessageBox(message, caption, style, parent, x, y);
-#else
-    if (wxThread::IsMain() || fDaemon)
-    {
-        return wxMessageBox(message, caption, style, parent, x, y);
-    }
-    else
-    {
-        int nRet = 0;
-        bool fDone = false;
-        UIThreadCall(bind(CalledMessageBox, message, caption, style, parent, x, y, &nRet, &fDone));
-        while (!fDone)
-            Sleep(100);
-        return nRet;
-    }
-#endif
-}
-
-bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, wxWindow* parent)
-{
-    if (nFeeRequired < MIN_TX_FEE || nFeeRequired <= nTransactionFee || fDaemon)
-        return true;
-    string strMessage = strprintf(
-        _("This transaction is over the size limit.  You can still send it for a fee of %s, "
-          "which goes to the nodes that process your transaction and helps to support the network.  "
-          "Do you want to pay the fee?"),
-        FormatMoney(nFeeRequired).c_str());
-    return (ThreadSafeMessageBox(strMessage, strCaption, wxYES_NO, parent) == wxYES);
-}
-
-void CalledSetStatusBar(const string& strText, int nField)
-{
-    if (nField == 0 && GetWarnings("statusbar") != "")
-        return;
-    if (pframeMain && pframeMain->m_statusBar)
-        pframeMain->m_statusBar->SetStatusText(strText, nField);
-}
-
-void SetDefaultReceivingAddress(const string& strAddress)
-{
-    // Update main window address and database
-    if (pframeMain == NULL)
-        return;
-    if (strAddress != pframeMain->m_textCtrlAddress->GetValue())
-    {
-        CBitcoinAddress address(strAddress);
-        if (!address.IsValid())
-            return;
-        vector<unsigned char> vchPubKey;
-        if (!pwalletMain->GetPubKey(address, vchPubKey))
-            return;
-        pwalletMain->SetDefaultKey(vchPubKey);
-        pframeMain->m_textCtrlAddress->SetValue(strAddress);
-    }
-}
-
-bool GetWalletPassphrase()
-{
-    if (pwalletMain->IsLocked())
-    {
-        string strWalletPass;
-        strWalletPass.reserve(100);
-        mlock(&strWalletPass[0], strWalletPass.capacity());
-
-        // obtain current wallet encrypt/decrypt key, from passphrase
-        // Note that the passphrase is not mlock()d during this entry and could potentially
-        // be obtained from disk long after bitcoin has run.
-        strWalletPass = wxGetPasswordFromUser(_("Enter the current passphrase to the wallet."),
-                                              _("Passphrase")).ToStdString();
-
-        if (!strWalletPass.size())
-        {
-            fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-            munlock(&strWalletPass[0], strWalletPass.capacity());
-            wxMessageBox(_("Please supply the current wallet decryption passphrase."), "Bitcoin");
-            return false;
-        }
-
-        if (!pwalletMain->Unlock(strWalletPass))
-        {
-            fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-            munlock(&strWalletPass[0], strWalletPass.capacity());
-            wxMessageBox(_("The passphrase entered for the wallet decryption was incorrect."), "Bitcoin");
-            return false;
-        }
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
-    }
-    return true;
-}
-
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CMainFrame
-//
-
-CMainFrame::CMainFrame(wxWindow* parent) : CMainFrameBase(parent)
-{
-    Connect(wxEVT_UITHREADCALL, wxCommandEventHandler(CMainFrame::OnUIThreadCall), NULL, this);
-
-    // Set initially selected page
-    wxNotebookEvent event;
-    event.SetSelection(0);
-    OnNotebookPageChanged(event);
-    m_notebook->ChangeSelection(0);
-
-    // Init
-    fRefreshListCtrl = false;
-    fRefreshListCtrlRunning = false;
-    fOnSetFocusAddress = false;
-    fRefresh = false;
-    m_choiceFilter->SetSelection(0);
-    double dResize = nScaleX;
-#ifdef __WXMSW__
-    SetIcon(wxICON(bitcoin));
-    SetSize(dResize * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#else
-    SetIcon(bitcoin80_xpm);
-    SetBackgroundColour(m_toolBar->GetBackgroundColour());
-    wxFont fontTmp = m_staticText41->GetFont();
-    fontTmp.SetFamily(wxFONTFAMILY_TELETYPE);
-    m_staticTextBalance->SetFont(fontTmp);
-    m_staticTextBalance->SetSize(140, 17);
-    // resize to fit ubuntu's huge default font
-    dResize = 1.22;
-    SetSize(dResize * GetSize().GetWidth(), 1.15 * GetSize().GetHeight());
-#endif
-    m_staticTextBalance->SetLabel(FormatMoney(pwalletMain->GetBalance()) + "  ");
-    m_listCtrl->SetFocus();
-    ptaskbaricon = new CMyTaskBarIcon();
-#ifdef __WXMAC_OSX__
-    // Mac automatically moves wxID_EXIT, wxID_PREFERENCES and wxID_ABOUT
-    // to their standard places, leaving these menus empty.
-    GetMenuBar()->Remove(2); // remove Help menu
-    GetMenuBar()->Remove(0); // remove File menu
-#endif
-
-    // Init column headers
-    int nDateWidth = DateTimeStr(1229413914).size() * 6 + 8;
-    if (!strstr(DateTimeStr(1229413914).c_str(), "2008"))
-        nDateWidth += 12;
-#ifdef __WXMAC_OSX__
-    nDateWidth += 5;
-    dResize -= 0.01;
-#endif
-    wxListCtrl* pplistCtrl[] = {m_listCtrlAll, m_listCtrlSentReceived, m_listCtrlSent, m_listCtrlReceived};
-    BOOST_FOREACH(wxListCtrl* p, pplistCtrl)
-    {
-        p->InsertColumn(0, "",               wxLIST_FORMAT_LEFT,  dResize * 0);
-        p->InsertColumn(1, "",               wxLIST_FORMAT_LEFT,  dResize * 0);
-        p->InsertColumn(2, _("Status"),      wxLIST_FORMAT_LEFT,  dResize * 112);
-        p->InsertColumn(3, _("Date"),        wxLIST_FORMAT_LEFT,  dResize * nDateWidth);
-        p->InsertColumn(4, _("Description"), wxLIST_FORMAT_LEFT,  dResize * 409 - nDateWidth);
-        p->InsertColumn(5, _("Debit"),       wxLIST_FORMAT_RIGHT, dResize * 79);
-        p->InsertColumn(6, _("Credit"),      wxLIST_FORMAT_RIGHT, dResize * 79);
-    }
-
-    // Init status bar
-    int pnWidths[3] = { -100, 88, 300 };
-#ifndef __WXMSW__
-    pnWidths[1] = pnWidths[1] * 1.1 * dResize;
-    pnWidths[2] = pnWidths[2] * 1.1 * dResize;
-#endif
-    m_statusBar->SetFieldsCount(3, pnWidths);
-
-    // Fill your address text box
-    vector<unsigned char> vchPubKey;
-    if (CWalletDB(pwalletMain->strWalletFile,"r").ReadDefaultKey(vchPubKey))
-        m_textCtrlAddress->SetValue(CBitcoinAddress(vchPubKey).ToString());
-
-    if (pwalletMain->IsCrypted())
-        m_menuOptions->Remove(m_menuOptionsEncryptWallet);
-    else
-        m_menuOptions->Remove(m_menuOptionsChangeWalletPassphrase);
-
-    // Fill listctrl with wallet transactions
-    RefreshListCtrl();
-}
-
-CMainFrame::~CMainFrame()
-{
-    pframeMain = NULL;
-    delete ptaskbaricon;
-    ptaskbaricon = NULL;
-}
-
-void CMainFrame::OnNotebookPageChanged(wxNotebookEvent& event)
-{
-    event.Skip();
-    nPage = event.GetSelection();
-    if (nPage == ALL)
-    {
-        m_listCtrl = m_listCtrlAll;
-        fShowGenerated = true;
-        fShowSent = true;
-        fShowReceived = true;
-    }
-    else if (nPage == SENTRECEIVED)
-    {
-        m_listCtrl = m_listCtrlSentReceived;
-        fShowGenerated = false;
-        fShowSent = true;
-        fShowReceived = true;
-    }
-    else if (nPage == SENT)
-    {
-        m_listCtrl = m_listCtrlSent;
-        fShowGenerated = false;
-        fShowSent = true;
-        fShowReceived = false;
-    }
-    else if (nPage == RECEIVED)
-    {
-        m_listCtrl = m_listCtrlReceived;
-        fShowGenerated = false;
-        fShowSent = false;
-        fShowReceived = true;
-    }
-    RefreshListCtrl();
-    m_listCtrl->SetFocus();
-}
-
-void CMainFrame::OnClose(wxCloseEvent& event)
-{
-    if (fMinimizeOnClose && event.CanVeto() && !IsIconized())
-    {
-        // Divert close to minimize
-        event.Veto();
-        fClosedToTray = true;
-        Iconize(true);
-    }
-    else
-    {
-        Destroy();
-        CreateThread(Shutdown, NULL);
-    }
-}
-
-void CMainFrame::OnIconize(wxIconizeEvent& event)
-{
-    event.Skip();
-    // Hide the task bar button when minimized.
-    // Event is sent when the frame is minimized or restored.
-    // wxWidgets 2.8.9 doesn't have IsIconized() so there's no way
-    // to get rid of the deprecated warning.  Just ignore it.
-    if (!event.Iconized())
-        fClosedToTray = false;
-#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
-    if (GetBoolArg("-minimizetotray")) {
-#endif
-    // The tray icon sometimes disappears on ubuntu karmic
-    // Hiding the taskbar button doesn't work cleanly on ubuntu lucid
-    // Reports of CPU peg on 64-bit linux
-    if (fMinimizeToTray && event.Iconized())
-        fClosedToTray = true;
-    Show(!fClosedToTray);
-    ptaskbaricon->Show(fMinimizeToTray || fClosedToTray);
-#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
-    }
-#endif
-}
-
-void CMainFrame::OnMouseEvents(wxMouseEvent& event)
-{
-    event.Skip();
-    RandAddSeed();
-    RAND_add(&event.m_x, sizeof(event.m_x), 0.25);
-    RAND_add(&event.m_y, sizeof(event.m_y), 0.25);
-}
-
-void CMainFrame::OnListColBeginDrag(wxListEvent& event)
-{
-    // Hidden columns not resizeable
-    if (event.GetColumn() <= 1 && !fDebug)
-        event.Veto();
-    else
-        event.Skip();
-}
-
-int CMainFrame::GetSortIndex(const string& strSort)
-{
-#ifdef __WXMSW__
-    return 0;
-#else
-    // The wx generic listctrl implementation used on GTK doesn't sort,
-    // so we have to do it ourselves.  Remember, we sort in reverse order.
-    // In the wx generic implementation, they store the list of items
-    // in a vector, so indexed lookups are fast, but inserts are slower
-    // the closer they are to the top.
-    int low = 0;
-    int high = m_listCtrl->GetItemCount();
-    while (low < high)
-    {
-        int mid = low + ((high - low) / 2);
-        if (strSort.compare(m_listCtrl->GetItemText(mid).c_str()) >= 0)
-            high = mid;
-        else
-            low = mid + 1;
-    }
-    return low;
-#endif
-}
-
-void CMainFrame::InsertLine(bool fNew, int nIndex, uint256 hashKey, string strSort, const wxColour& colour, const wxString& str2, const wxString& str3, const wxString& str4, const wxString& str5, const wxString& str6)
-{
-    strSort = " " + strSort;       // leading space to workaround wx2.9.0 ubuntu 9.10 bug
-    long nData = *(long*)&hashKey; //  where first char of hidden column is displayed
-
-    // Find item
-    if (!fNew && nIndex == -1)
-    {
-        string strHash = " " + hashKey.ToString();
-        while ((nIndex = m_listCtrl->FindItem(nIndex, nData)) != -1)
-            if (GetItemText(m_listCtrl, nIndex, 1) == strHash)
-                break;
-    }
-
-    // fNew is for blind insert, only use if you're sure it's new
-    if (fNew || nIndex == -1)
-    {
-        nIndex = m_listCtrl->InsertItem(GetSortIndex(strSort), strSort);
-    }
-    else
-    {
-        // If sort key changed, must delete and reinsert to make it relocate
-        if (GetItemText(m_listCtrl, nIndex, 0) != strSort)
-        {
-            m_listCtrl->DeleteItem(nIndex);
-            nIndex = m_listCtrl->InsertItem(GetSortIndex(strSort), strSort);
-        }
-    }
-
-    m_listCtrl->SetItem(nIndex, 1, " " + hashKey.ToString());
-    m_listCtrl->SetItem(nIndex, 2, str2);
-    m_listCtrl->SetItem(nIndex, 3, str3);
-    m_listCtrl->SetItem(nIndex, 4, str4);
-    m_listCtrl->SetItem(nIndex, 5, str5);
-    m_listCtrl->SetItem(nIndex, 6, str6);
-    m_listCtrl->SetItemData(nIndex, nData);
-    SetItemTextColour(m_listCtrl, nIndex, colour);
-}
-
-bool CMainFrame::DeleteLine(uint256 hashKey)
-{
-    long nData = *(long*)&hashKey;
-
-    // Find item
-    int nIndex = -1;
-    string strHash = " " + hashKey.ToString();
-    while ((nIndex = m_listCtrl->FindItem(nIndex, nData)) != -1)
-        if (GetItemText(m_listCtrl, nIndex, 1) == strHash)
-            break;
-
-    if (nIndex != -1)
-        m_listCtrl->DeleteItem(nIndex);
-
-    return nIndex != -1;
-}
-
-string FormatTxStatus(const CWalletTx& wtx)
-{
-    // Status
-    if (!wtx.IsFinal())
-    {
-        if (wtx.nLockTime < LOCKTIME_THRESHOLD)
-            return strprintf(_("Open for %d blocks"), nBestHeight - wtx.nLockTime);
-        else
-            return strprintf(_("Open until %s"), DateTimeStr(wtx.nLockTime).c_str());
-    }
-    else
-    {
-        int nDepth = wtx.GetDepthInMainChain();
-        if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
-            return strprintf(_("%d/offline?"), nDepth);
-        else if (nDepth < 6)
-            return strprintf(_("%d/unconfirmed"), nDepth);
-        else
-            return strprintf(_("%d confirmations"), nDepth);
-    }
-}
-
-string SingleLine(const string& strIn)
-{
-    string strOut;
-    bool fOneSpace = false;
-    BOOST_FOREACH(unsigned char c, strIn)
-    {
-        if (isspace(c))
-        {
-            fOneSpace = true;
-        }
-        else if (c > ' ')
-        {
-            if (fOneSpace && !strOut.empty())
-                strOut += ' ';
-            strOut += c;
-            fOneSpace = false;
-        }
-    }
-    return strOut;
-}
-
-bool CMainFrame::InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex)
-{
-    int64 nTime = wtx.nTimeDisplayed = wtx.GetTxTime();
-    int64 nCredit = wtx.GetCredit(true);
-    int64 nDebit = wtx.GetDebit();
-    int64 nNet = nCredit - nDebit;
-    uint256 hash = wtx.GetHash();
-    string strStatus = FormatTxStatus(wtx);
-    bool fConfirmed = wtx.fConfirmedDisplayed = wtx.IsConfirmed();
-    wxColour colour = (fConfirmed ? wxColour(0,0,0) : wxColour(128,128,128));
-    map<string, string> mapValue = wtx.mapValue;
-    wtx.nLinesDisplayed = 1;
-    nListViewUpdated++;
-
-    // Filter
-    if (wtx.IsCoinBase())
-    {
-        // Don't show generated coin until confirmed by at least one block after it
-        // so we don't get the user's hopes up until it looks like it's probably accepted.
-        //
-        // It is not an error when generated blocks are not accepted.  By design,
-        // some percentage of blocks, like 10% or more, will end up not accepted.
-        // This is the normal mechanism by which the network copes with latency.
-        //
-        // We display regular transactions right away before any confirmation
-        // because they can always get into some block eventually.  Generated coins
-        // are special because if their block is not accepted, they are not valid.
-        //
-        if (wtx.GetDepthInMainChain() < 2)
-        {
-            wtx.nLinesDisplayed = 0;
-            return false;
-        }
-
-        if (!fShowGenerated)
-            return false;
-    }
-
-    // Find the block the tx is in
-    CBlockIndex* pindex = NULL;
-    map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(wtx.hashBlock);
-    if (mi != mapBlockIndex.end())
-        pindex = (*mi).second;
-
-    // Sort order, unrecorded transactions sort to the top
-    string strSort = strprintf("%010d-%01d-%010u",
-        (pindex ? pindex->nHeight : INT_MAX),
-        (wtx.IsCoinBase() ? 1 : 0),
-        wtx.nTimeReceived);
-
-    // Insert line
-    if (nNet > 0 || wtx.IsCoinBase())
-    {
-        //
-        // Credit
-        //
-        string strDescription;
-        if (wtx.IsCoinBase())
-        {
-            // Generated
-            strDescription = _("Generated");
-            if (nCredit == 0)
-            {
-                int64 nUnmatured = 0;
-                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                    nUnmatured += pwalletMain->GetCredit(txout);
-                if (wtx.IsInMainChain())
-                {
-                    strDescription = strprintf(_("Generated (%s matures in %d more blocks)"), FormatMoney(nUnmatured).c_str(), wtx.GetBlocksToMaturity());
-
-                    // Check if the block was requested by anyone
-                    if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
-                        strDescription = _("Generated - Warning: This block was not received by any other nodes and will probably not be accepted!");
-                }
-                else
-                {
-                    strDescription = _("Generated (not accepted)");
-                }
-            }
-        }
-        else if (!mapValue["from"].empty() || !mapValue["message"].empty())
-        {
-            // Received by IP connection
-            if (!fShowReceived)
-                return false;
-            if (!mapValue["from"].empty())
-                strDescription += _("From: ") + mapValue["from"];
-            if (!mapValue["message"].empty())
-            {
-                if (!strDescription.empty())
-                    strDescription += " - ";
-                strDescription += mapValue["message"];
-            }
-        }
-        else
-        {
-            // Received by Bitcoin Address
-            if (!fShowReceived)
-                return false;
-            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-            {
-                if (pwalletMain->IsMine(txout))
-                {
-                    CBitcoinAddress address;
-                    if (ExtractAddress(txout.scriptPubKey, pwalletMain, address))
-                    {
-                        CRITICAL_BLOCK(pwalletMain->cs_wallet)
-                        {
-                            //strDescription += _("Received payment to ");
-                            //strDescription += _("Received with address ");
-                            strDescription += _("Received with: ");
-                            map<CBitcoinAddress, string>::iterator mi = pwalletMain->mapAddressBook.find(address);
-                            if (mi != pwalletMain->mapAddressBook.end() && !(*mi).second.empty())
-                            {
-                                string strLabel = (*mi).second;
-                                strDescription += address.ToString().substr(0,12) + "... ";
-                                strDescription += "(" + strLabel + ")";
-                            }
-                            else
-                                strDescription += address.ToString();
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-
-        string strCredit = FormatMoney(nNet, true);
-        if (!fConfirmed)
-            strCredit = "[" + strCredit + "]";
-
-        InsertLine(fNew, nIndex, hash, strSort, colour,
-                   strStatus,
-                   nTime ? DateTimeStr(nTime) : "",
-                   SingleLine(strDescription),
-                   "",
-                   strCredit);
-    }
-    else
-    {
-        bool fAllFromMe = true;
-        BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-            fAllFromMe = fAllFromMe && pwalletMain->IsMine(txin);
-
-        bool fAllToMe = true;
-        BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-            fAllToMe = fAllToMe && pwalletMain->IsMine(txout);
-
-        if (fAllFromMe && fAllToMe)
-        {
-            // Payment to self
-            int64 nChange = wtx.GetChange();
-            InsertLine(fNew, nIndex, hash, strSort, colour,
-                       strStatus,
-                       nTime ? DateTimeStr(nTime) : "",
-                       _("Payment to yourself"),
-                       FormatMoney(-(nDebit - nChange), true),
-                       FormatMoney(nCredit - nChange, true));
-        }
-        else if (fAllFromMe)
-        {
-            //
-            // Debit
-            //
-            if (!fShowSent)
-                return false;
-
-            int64 nTxFee = nDebit - wtx.GetValueOut();
-            wtx.nLinesDisplayed = 0;
-            for (int nOut = 0; nOut < wtx.vout.size(); nOut++)
-            {
-                const CTxOut& txout = wtx.vout[nOut];
-                if (pwalletMain->IsMine(txout))
-                    continue;
-
-                CBitcoinAddress address;
-                string strAddress;
-                if (!mapValue["to"].empty())
-                {
-                    // Sent to IP
-                    strAddress = mapValue["to"];
-                }
-                else
-                {
-                    // Sent to Bitcoin Address
-                    if (ExtractAddress(txout.scriptPubKey, NULL, address))
-                        strAddress = address.ToString();
-                }
-
-                string strDescription = _("To: ");
-                CRITICAL_BLOCK(pwalletMain->cs_wallet)
-                    if (pwalletMain->mapAddressBook.count(address) && !pwalletMain->mapAddressBook[address].empty())
-                        strDescription += pwalletMain->mapAddressBook[address] + " ";
-                strDescription += strAddress;
-                if (!mapValue["message"].empty())
-                {
-                    if (!strDescription.empty())
-                        strDescription += " - ";
-                    strDescription += mapValue["message"];
-                }
-                else if (!mapValue["comment"].empty())
-                {
-                    if (!strDescription.empty())
-                        strDescription += " - ";
-                    strDescription += mapValue["comment"];
-                }
-
-                int64 nValue = txout.nValue;
-                if (nTxFee > 0)
-                {
-                    nValue += nTxFee;
-                    nTxFee = 0;
-                }
-
-                InsertLine(fNew, nIndex, hash, strprintf("%s-%d", strSort.c_str(), nOut), colour,
-                           strStatus,
-                           nTime ? DateTimeStr(nTime) : "",
-                           SingleLine(strDescription),
-                           FormatMoney(-nValue, true),
-                           "");
-                nIndex = -1;
-                wtx.nLinesDisplayed++;
-            }
-        }
-        else
-        {
-            //
-            // Mixed debit transaction, can't break down payees
-            //
-            bool fAllMine = true;
-            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                fAllMine = fAllMine && pwalletMain->IsMine(txout);
-            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-                fAllMine = fAllMine && pwalletMain->IsMine(txin);
-
-            InsertLine(fNew, nIndex, hash, strSort, colour,
-                       strStatus,
-                       nTime ? DateTimeStr(nTime) : "",
-                       "",
-                       FormatMoney(nNet, true),
-                       "");
-        }
-    }
-
-    return true;
-}
-
-void CMainFrame::RefreshListCtrl()
-{
-    fRefreshListCtrl = true;
-    ::wxWakeUpIdle();
-}
-
-void CMainFrame::OnIdle(wxIdleEvent& event)
-{
-    if (fRefreshListCtrl)
-    {
-        // Collect list of wallet transactions and sort newest first
-        bool fEntered = false;
-        vector<pair<unsigned int, uint256> > vSorted;
-        TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-        {
-            printf("RefreshListCtrl starting\n");
-            fEntered = true;
-            fRefreshListCtrl = false;
-            pwalletMain->vWalletUpdated.clear();
-
-            // Do the newest transactions first
-            vSorted.reserve(pwalletMain->mapWallet.size());
-            for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it)
-            {
-                const CWalletTx& wtx = (*it).second;
-                unsigned int nTime = UINT_MAX - wtx.GetTxTime();
-                vSorted.push_back(make_pair(nTime, (*it).first));
-            }
-            m_listCtrl->DeleteAllItems();
-        }
-        if (!fEntered)
-            return;
-
-        sort(vSorted.begin(), vSorted.end());
-
-        // Fill list control
-        for (int i = 0; i < vSorted.size();)
-        {
-            if (fShutdown)
-                return;
-            bool fEntered = false;
-            TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-            {
-                fEntered = true;
-                uint256& hash = vSorted[i++].second;
-                map<uint256, CWalletTx>::iterator mi = pwalletMain->mapWallet.find(hash);
-                if (mi != pwalletMain->mapWallet.end())
-                    InsertTransaction((*mi).second, true);
-            }
-            if (!fEntered || i == 100 || i % 500 == 0)
-                wxYield();
-        }
-
-        printf("RefreshListCtrl done\n");
-
-        // Update transaction total display
-        MainFrameRepaint();
-    }
-    else
-    {
-        // Check for time updates
-        static int64 nLastTime;
-        if (GetTime() > nLastTime + 30)
-        {
-            TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-            {
-                nLastTime = GetTime();
-                for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it)
-                {
-                    CWalletTx& wtx = (*it).second;
-                    if (wtx.nTimeDisplayed && wtx.nTimeDisplayed != wtx.GetTxTime())
-                        InsertTransaction(wtx, false);
-                }
-            }
-        }
-    }
-}
-
-void CMainFrame::RefreshStatusColumn()
-{
-    static int nLastTop;
-    static CBlockIndex* pindexLastBest;
-    static unsigned int nLastRefreshed;
-
-    int nTop = max((int)m_listCtrl->GetTopItem(), 0);
-    if (nTop == nLastTop && pindexLastBest == pindexBest)
-        return;
-
-    TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        int nStart = nTop;
-        int nEnd = min(nStart + 100, m_listCtrl->GetItemCount());
-
-        if (pindexLastBest == pindexBest && nLastRefreshed == nListViewUpdated)
-        {
-            // If no updates, only need to do the part that moved onto the screen
-            if (nStart >= nLastTop && nStart < nLastTop + 100)
-                nStart = nLastTop + 100;
-            if (nEnd >= nLastTop && nEnd < nLastTop + 100)
-                nEnd = nLastTop;
-        }
-        nLastTop = nTop;
-        pindexLastBest = pindexBest;
-        nLastRefreshed = nListViewUpdated;
-
-        for (int nIndex = nStart; nIndex < min(nEnd, m_listCtrl->GetItemCount()); nIndex++)
-        {
-            uint256 hash((string)GetItemText(m_listCtrl, nIndex, 1));
-            map<uint256, CWalletTx>::iterator mi = pwalletMain->mapWallet.find(hash);
-            if (mi == pwalletMain->mapWallet.end())
-            {
-                printf("CMainFrame::RefreshStatusColumn() : tx not found in mapWallet\n");
-                continue;
-            }
-            CWalletTx& wtx = (*mi).second;
-            if (wtx.IsCoinBase() ||
-                wtx.GetTxTime() != wtx.nTimeDisplayed ||
-                wtx.IsConfirmed() != wtx.fConfirmedDisplayed)
-            {
-                if (!InsertTransaction(wtx, false, nIndex))
-                    m_listCtrl->DeleteItem(nIndex--);
-            }
-            else
-            {
-                m_listCtrl->SetItem(nIndex, 2, FormatTxStatus(wtx));
-            }
-        }
-    }
-}
-
-void CMainFrame::OnPaint(wxPaintEvent& event)
-{
-    event.Skip();
-    if (fRefresh)
-    {
-        fRefresh = false;
-        Refresh();
-    }
-}
-
-
-unsigned int nNeedRepaint = 0;
-unsigned int nLastRepaint = 0;
-int64 nLastRepaintTime = 0;
-int64 nRepaintInterval = 500;
-
-void ThreadDelayedRepaint(void* parg)
-{
-    while (!fShutdown)
-    {
-        if (nLastRepaint != nNeedRepaint && GetTimeMillis() - nLastRepaintTime >= nRepaintInterval)
-        {
-            nLastRepaint = nNeedRepaint;
-            if (pframeMain)
-            {
-                printf("DelayedRepaint\n");
-                wxPaintEvent event;
-                pframeMain->fRefresh = true;
-                pframeMain->GetEventHandler()->AddPendingEvent(event);
-            }
-        }
-        Sleep(nRepaintInterval);
-    }
-}
-
-void MainFrameRepaint()
-{
-    // This is called by network code that shouldn't access pframeMain
-    // directly because it could still be running after the UI is closed.
-    if (pframeMain)
-    {
-        // Don't repaint too often
-        static int64 nLastRepaintRequest;
-        if (GetTimeMillis() - nLastRepaintRequest < 100)
-        {
-            nNeedRepaint++;
-            return;
-        }
-        nLastRepaintRequest = GetTimeMillis();
-
-        printf("MainFrameRepaint\n");
-        wxPaintEvent event;
-        pframeMain->fRefresh = true;
-        pframeMain->GetEventHandler()->AddPendingEvent(event);
-    }
-}
-
-void CMainFrame::OnPaintListCtrl(wxPaintEvent& event)
-{
-    // Skip lets the listctrl do the paint, we're just hooking the message
-    event.Skip();
-
-    if (ptaskbaricon)
-        ptaskbaricon->UpdateTooltip();
-
-    //
-    // Slower stuff
-    //
-    static int nTransactionCount;
-    bool fPaintedBalance = false;
-    if (GetTimeMillis() - nLastRepaintTime >= nRepaintInterval)
-    {
-        nLastRepaint = nNeedRepaint;
-        nLastRepaintTime = GetTimeMillis();
-
-        // Update listctrl contents
-        if (!pwalletMain->vWalletUpdated.empty())
-        {
-            TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-            {
-                string strTop;
-                if (m_listCtrl->GetItemCount())
-                    strTop = (string)m_listCtrl->GetItemText(0);
-                BOOST_FOREACH(uint256 hash, pwalletMain->vWalletUpdated)
-                {
-                    map<uint256, CWalletTx>::iterator mi = pwalletMain->mapWallet.find(hash);
-                    if (mi != pwalletMain->mapWallet.end())
-                        InsertTransaction((*mi).second, false);
-                }
-                pwalletMain->vWalletUpdated.clear();
-                if (m_listCtrl->GetItemCount() && strTop != (string)m_listCtrl->GetItemText(0))
-                    m_listCtrl->ScrollList(0, INT_MIN/2);
-            }
-        }
-
-        // Balance total
-        TRY_CRITICAL_BLOCK(pwalletMain->cs_wallet)
-        {
-            fPaintedBalance = true;
-            m_staticTextBalance->SetLabel(FormatMoney(pwalletMain->GetBalance()) + "  ");
-
-            // Count hidden and multi-line transactions
-            nTransactionCount = 0;
-            for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it)
-            {
-                CWalletTx& wtx = (*it).second;
-                nTransactionCount += wtx.nLinesDisplayed;
-            }
-        }
-    }
-    if (!pwalletMain->vWalletUpdated.empty() || !fPaintedBalance)
-        nNeedRepaint++;
-
-    // Update status column of visible items only
-    RefreshStatusColumn();
-
-    // Update status bar
-    static string strPrevWarning;
-    string strWarning = GetWarnings("statusbar");
-    if (strWarning != "")
-        m_statusBar->SetStatusText(string("    ") + _(strWarning), 0);
-    else if (strPrevWarning != "")
-        m_statusBar->SetStatusText("", 0);
-    strPrevWarning = strWarning;
-
-    string strGen = "";
-    if (fGenerateBitcoins)
-        strGen = _("    Generating");
-    if (fGenerateBitcoins && vNodes.empty())
-        strGen = _("(not connected)");
-    m_statusBar->SetStatusText(strGen, 1);
-
-    string strStatus = strprintf(_("     %d connections     %d blocks     %d transactions"), vNodes.size(), nBestHeight, nTransactionCount);
-    m_statusBar->SetStatusText(strStatus, 2);
-
-    // Update receiving address
-    string strDefaultAddress = CBitcoinAddress(pwalletMain->vchDefaultKey).ToString();
-    if (m_textCtrlAddress->GetValue() != strDefaultAddress)
-        m_textCtrlAddress->SetValue(strDefaultAddress);
-}
-
-
-void UIThreadCall(boost::function0<void> fn)
-{
-    // Call this with a function object created with bind.
-    // bind needs all parameters to match the function's expected types
-    // and all default parameters specified.  Some examples:
-    //  UIThreadCall(bind(wxBell));
-    //  UIThreadCall(bind(wxMessageBox, wxT("Message"), wxT("Title"), wxOK, (wxWindow*)NULL, -1, -1));
-    //  UIThreadCall(bind(&CMainFrame::OnMenuHelpAbout, pframeMain, event));
-    if (pframeMain)
-    {
-        wxCommandEvent event(wxEVT_UITHREADCALL);
-        event.SetClientData((void*)new boost::function0<void>(fn));
-        pframeMain->GetEventHandler()->AddPendingEvent(event);
-    }
-}
-
-void CMainFrame::OnUIThreadCall(wxCommandEvent& event)
-{
-    boost::function0<void>* pfn = (boost::function0<void>*)event.GetClientData();
-    (*pfn)();
-    delete pfn;
-}
-
-void CMainFrame::OnMenuFileExit(wxCommandEvent& event)
-{
-    // File->Exit
-    Close(true);
-}
-
-void CMainFrame::OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event)
-{
-    event.Check(fGenerateBitcoins);
-}
-
-void CMainFrame::OnMenuOptionsChangeYourAddress(wxCommandEvent& event)
-{
-    // Options->Your Receiving Addresses
-    CAddressBookDialog dialog(this, "", CAddressBookDialog::RECEIVING, false);
-    if (!dialog.ShowModal())
-        return;
-}
-
-void CMainFrame::OnMenuOptionsEncryptWallet(wxCommandEvent& event)
-{
-    // Options->Encrypt Wallet
-    if (pwalletMain->IsCrypted())
-    {
-        wxMessageBox(_("Wallet already encrypted."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    string strWalletPass;
-    strWalletPass.reserve(100);
-    mlock(&strWalletPass[0], strWalletPass.capacity());
-
-    // obtain current wallet encrypt/decrypt key, from passphrase
-    // Note that the passphrase is not mlock()d during this entry and could potentially
-    // be obtained from disk long after bitcoin has run.
-    strWalletPass = wxGetPasswordFromUser(_("Enter the new passphrase to the wallet.\nPlease use a passphrase of 10 or more random characters, or eight or more words."),
-                                          _("Passphrase")).ToStdString();
-
-    if (!strWalletPass.size())
-    {
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
-        wxMessageBox(_("Error: The supplied passphrase was too short."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    if(wxMessageBox(_("WARNING: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITCOINS!\nAre you sure you wish to encrypt your wallet?"), "Bitcoin", wxYES_NO) != wxYES)
-        return;
-
-    string strWalletPassTest;
-    strWalletPassTest.reserve(100);
-    mlock(&strWalletPassTest[0], strWalletPassTest.capacity());
-    strWalletPassTest = wxGetPasswordFromUser(_("Please re-enter your new wallet passphrase."),
-                                              _("Passphrase")).ToStdString();
-
-    if (strWalletPassTest != strWalletPass)
-    {
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        fill(strWalletPassTest.begin(), strWalletPassTest.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
-        munlock(&strWalletPassTest[0], strWalletPassTest.capacity());
-        wxMessageBox(_("Error: the supplied passphrases didn't match."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    if (!pwalletMain->EncryptWallet(strWalletPass))
-    {
-        fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-        fill(strWalletPassTest.begin(), strWalletPassTest.end(), '\0');
-        munlock(&strWalletPass[0], strWalletPass.capacity());
-        munlock(&strWalletPassTest[0], strWalletPassTest.capacity());
-        wxMessageBox(_("Wallet encryption failed."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-    fill(strWalletPass.begin(), strWalletPass.end(), '\0');
-    fill(strWalletPassTest.begin(), strWalletPassTest.end(), '\0');
-    munlock(&strWalletPass[0], strWalletPass.capacity());
-    munlock(&strWalletPassTest[0], strWalletPassTest.capacity());
-    wxMessageBox(_("Wallet Encrypted.\nBitcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your bitcoins from being stolen by malware infecting your computer."), "Bitcoin");
-
-    Close(true);
-}
-
-void CMainFrame::OnMenuOptionsChangeWalletPassphrase(wxCommandEvent& event)
-{
-    // Options->Change Wallet Encryption Passphrase
-    if (!pwalletMain->IsCrypted())
-    {
-        wxMessageBox(_("Wallet is unencrypted, please encrypt it first."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    string strOldWalletPass;
-    strOldWalletPass.reserve(100);
-    mlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-
-    // obtain current wallet encrypt/decrypt key, from passphrase
-    // Note that the passphrase is not mlock()d during this entry and could potentially
-    // be obtained from disk long after bitcoin has run.
-    strOldWalletPass = wxGetPasswordFromUser(_("Enter the current passphrase to the wallet."),
-                                             _("Passphrase")).ToStdString();
-
-    bool fWasLocked = pwalletMain->IsLocked();
-    pwalletMain->Lock();
-
-    if (!strOldWalletPass.size() || !pwalletMain->Unlock(strOldWalletPass))
-    {
-        fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-        munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-        wxMessageBox(_("The passphrase entered for the wallet decryption was incorrect."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    if (fWasLocked)
-        pwalletMain->Lock();
-
-    string strNewWalletPass;
-    strNewWalletPass.reserve(100);
-    mlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-
-    // obtain new wallet encrypt/decrypt key, from passphrase
-    // Note that the passphrase is not mlock()d during this entry and could potentially
-    // be obtained from disk long after bitcoin has run.
-    strNewWalletPass = wxGetPasswordFromUser(_("Enter the new passphrase for the wallet."),
-                                             _("Passphrase")).ToStdString();
-
-    if (!strNewWalletPass.size())
-    {
-        fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-        fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-        munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-        munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-        wxMessageBox(_("Error: The supplied passphrase was too short."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    string strNewWalletPassTest;
-    strNewWalletPassTest.reserve(100);
-    mlock(&strNewWalletPassTest[0], strNewWalletPassTest.capacity());
-
-    // obtain new wallet encrypt/decrypt key, from passphrase
-    // Note that the passphrase is not mlock()d during this entry and could potentially
-    // be obtained from disk long after bitcoin has run.
-    strNewWalletPassTest = wxGetPasswordFromUser(_("Re-enter the new passphrase for the wallet."),
-                                                 _("Passphrase")).ToStdString();
-
-    if (strNewWalletPassTest != strNewWalletPass)
-    {
-        fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-        fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-        fill(strNewWalletPassTest.begin(), strNewWalletPassTest.end(), '\0');
-        munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-        munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-        munlock(&strNewWalletPassTest[0], strNewWalletPassTest.capacity());
-        wxMessageBox(_("Error: the supplied passphrases didn't match."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-
-    if (!pwalletMain->ChangeWalletPassphrase(strOldWalletPass, strNewWalletPass))
-    {
-        fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-        fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-        fill(strNewWalletPassTest.begin(), strNewWalletPassTest.end(), '\0');
-        munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-        munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-        munlock(&strNewWalletPassTest[0], strNewWalletPassTest.capacity());
-        wxMessageBox(_("The passphrase entered for the wallet decryption was incorrect."), "Bitcoin", wxOK | wxICON_ERROR);
-        return;
-    }
-    fill(strOldWalletPass.begin(), strOldWalletPass.end(), '\0');
-    fill(strNewWalletPass.begin(), strNewWalletPass.end(), '\0');
-    fill(strNewWalletPassTest.begin(), strNewWalletPassTest.end(), '\0');
-    munlock(&strOldWalletPass[0], strOldWalletPass.capacity());
-    munlock(&strNewWalletPass[0], strNewWalletPass.capacity());
-    munlock(&strNewWalletPassTest[0], strNewWalletPassTest.capacity());
-    wxMessageBox(_("Wallet Passphrase Changed."), "Bitcoin");
-}
-
-void CMainFrame::OnMenuOptionsOptions(wxCommandEvent& event)
-{
-    // Options->Options
-    COptionsDialog dialog(this);
-    dialog.ShowModal();
-}
-
-void CMainFrame::OnMenuHelpAbout(wxCommandEvent& event)
-{
-    // Help->About
-    CAboutDialog dialog(this);
-    dialog.ShowModal();
-}
-
-void CMainFrame::OnButtonSend(wxCommandEvent& event)
-{
-    // Toolbar: Send
-    CSendDialog dialog(this);
-    dialog.ShowModal();
-}
-
-void CMainFrame::OnButtonAddressBook(wxCommandEvent& event)
-{
-    // Toolbar: Address Book
-    CAddressBookDialog dialogAddr(this, "", CAddressBookDialog::SENDING, false);
-    if (dialogAddr.ShowModal() == 2)
-    {
-        // Send
-        CSendDialog dialogSend(this, dialogAddr.GetSelectedAddress());
-        dialogSend.ShowModal();
-    }
-}
-
-void CMainFrame::OnSetFocusAddress(wxFocusEvent& event)
-{
-    // Automatically select-all when entering window
-    event.Skip();
-    m_textCtrlAddress->SetSelection(-1, -1);
-    fOnSetFocusAddress = true;
-}
-
-void CMainFrame::OnMouseEventsAddress(wxMouseEvent& event)
-{
-    event.Skip();
-    if (fOnSetFocusAddress)
-        m_textCtrlAddress->SetSelection(-1, -1);
-    fOnSetFocusAddress = false;
-}
-
-void CMainFrame::OnButtonNew(wxCommandEvent& event)
-{
-    // Ask name
-    CGetTextFromUserDialog dialog(this,
-        _("New Receiving Address"),
-        _("You should use a new address for each payment you receive.\n\nLabel"),
-        "");
-    if (!dialog.ShowModal())
-        return;
-    string strName = dialog.GetValue();
-
-    string strAddress;
-
-    bool fWasLocked = pwalletMain->IsLocked();
-    if (!GetWalletPassphrase())
-        return;
-
-    // Generate new key
-    std::vector<unsigned char> newKey;
-    pwalletMain->GetKeyFromPool(newKey, true);
-    strAddress = CBitcoinAddress(newKey).ToString();
-
-    if (fWasLocked)
-        pwalletMain->Lock();
-
-    // Save
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-        pwalletMain->SetAddressBookName(strAddress, strName);
-    SetDefaultReceivingAddress(strAddress);
-}
-
-void CMainFrame::OnButtonCopy(wxCommandEvent& event)
-{
-    // Copy address box to clipboard
-    if (wxTheClipboard->Open())
-    {
-        wxTheClipboard->SetData(new wxTextDataObject(m_textCtrlAddress->GetValue()));
-        wxTheClipboard->Close();
-    }
-}
-
-void CMainFrame::OnListItemActivated(wxListEvent& event)
-{
-    uint256 hash((string)GetItemText(m_listCtrl, event.GetIndex(), 1));
-    CWalletTx wtx;
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        map<uint256, CWalletTx>::iterator mi = pwalletMain->mapWallet.find(hash);
-        if (mi == pwalletMain->mapWallet.end())
-        {
-            printf("CMainFrame::OnListItemActivated() : tx not found in mapWallet\n");
-            return;
-        }
-        wtx = (*mi).second;
-    }
-    CTxDetailsDialog dialog(this, wtx);
-    dialog.ShowModal();
-    //CTxDetailsDialog* pdialog = new CTxDetailsDialog(this, wtx);
-    //pdialog->Show();
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CTxDetailsDialog
-//
-
-CTxDetailsDialog::CTxDetailsDialog(wxWindow* parent, CWalletTx wtx) : CTxDetailsDialogBase(parent)
-{
-#ifdef __WXMSW__
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        string strHTML;
-        strHTML.reserve(4000);
-        strHTML += "<html><font face='verdana, arial, helvetica, sans-serif'>";
-
-        int64 nTime = wtx.GetTxTime();
-        int64 nCredit = wtx.GetCredit();
-        int64 nDebit = wtx.GetDebit();
-        int64 nNet = nCredit - nDebit;
-
-
-
-        strHTML += _("<b>Status:</b> ") + FormatTxStatus(wtx);
-        int nRequests = wtx.GetRequestCount();
-        if (nRequests != -1)
-        {
-            if (nRequests == 0)
-                strHTML += _(", has not been successfully broadcast yet");
-            else if (nRequests == 1)
-                strHTML += strprintf(_(", broadcast through %d node"), nRequests);
-            else
-                strHTML += strprintf(_(", broadcast through %d nodes"), nRequests);
-        }
-        strHTML += "<br>";
-
-        strHTML += _("<b>Date:</b> ") + (nTime ? DateTimeStr(nTime) : "") + "<br>";
-
-
-        //
-        // From
-        //
-        if (wtx.IsCoinBase())
-        {
-            strHTML += _("<b>Source:</b> Generated<br>");
-        }
-        else if (!wtx.mapValue["from"].empty())
-        {
-            // Online transaction
-            if (!wtx.mapValue["from"].empty())
-                strHTML += _("<b>From:</b> ") + HtmlEscape(wtx.mapValue["from"]) + "<br>";
-        }
-        else
-        {
-            // Offline transaction
-            if (nNet > 0)
-            {
-                // Credit
-                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                {
-                    if (pwalletMain->IsMine(txout))
-                    {
-                        CBitcoinAddress address;
-                        if (ExtractAddress(txout.scriptPubKey, pwalletMain, address))
-                        {
-                            if (pwalletMain->mapAddressBook.count(address))
-                            {
-                                strHTML += string() + _("<b>From:</b> ") + _("unknown") + "<br>";
-                                strHTML += _("<b>To:</b> ");
-                                strHTML += HtmlEscape(address.ToString());
-                                if (!pwalletMain->mapAddressBook[address].empty())
-                                    strHTML += _(" (yours, label: ") + pwalletMain->mapAddressBook[address] + ")";
-                                else
-                                    strHTML += _(" (yours)");
-                                strHTML += "<br>";
-                            }
-                        }
-                        break;
-                    }
-                }
-            }
-        }
-
-
-        //
-        // To
-        //
-        string strAddress;
-        if (!wtx.mapValue["to"].empty())
-        {
-            // Online transaction
-            strAddress = wtx.mapValue["to"];
-            strHTML += _("<b>To:</b> ");
-            if (pwalletMain->mapAddressBook.count(strAddress) && !pwalletMain->mapAddressBook[strAddress].empty())
-                strHTML += pwalletMain->mapAddressBook[strAddress] + " ";
-            strHTML += HtmlEscape(strAddress) + "<br>";
-        }
-
-
-        //
-        // Amount
-        //
-        if (wtx.IsCoinBase() && nCredit == 0)
-        {
-            //
-            // Coinbase
-            //
-            int64 nUnmatured = 0;
-            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                nUnmatured += pwalletMain->GetCredit(txout);
-            strHTML += _("<b>Credit:</b> ");
-            if (wtx.IsInMainChain())
-                strHTML += strprintf(_("(%s matures in %d more blocks)"), FormatMoney(nUnmatured).c_str(), wtx.GetBlocksToMaturity());
-            else
-                strHTML += _("(not accepted)");
-            strHTML += "<br>";
-        }
-        else if (nNet > 0)
-        {
-            //
-            // Credit
-            //
-            strHTML += _("<b>Credit:</b> ") + FormatMoney(nNet) + "<br>";
-        }
-        else
-        {
-            bool fAllFromMe = true;
-            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-                fAllFromMe = fAllFromMe && pwalletMain->IsMine(txin);
-
-            bool fAllToMe = true;
-            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                fAllToMe = fAllToMe && pwalletMain->IsMine(txout);
-
-            if (fAllFromMe)
-            {
-                //
-                // Debit
-                //
-                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                {
-                    if (pwalletMain->IsMine(txout))
-                        continue;
-
-                    if (wtx.mapValue["to"].empty())
-                    {
-                        // Offline transaction
-                        CBitcoinAddress address;
-                        if (ExtractAddress(txout.scriptPubKey, pwalletMain, address))
-                        {
-                            string strAddress = address.ToString();
-                            strHTML += _("<b>To:</b> ");
-                            if (pwalletMain->mapAddressBook.count(address) && !pwalletMain->mapAddressBook[address].empty())
-                                strHTML += pwalletMain->mapAddressBook[address] + " ";
-                            strHTML += strAddress;
-                            strHTML += "<br>";
-                        }
-                    }
-
-                    strHTML += _("<b>Debit:</b> ") + FormatMoney(-txout.nValue) + "<br>";
-                }
-
-                if (fAllToMe)
-                {
-                    // Payment to self
-                    int64 nChange = wtx.GetChange();
-                    int64 nValue = nCredit - nChange;
-                    strHTML += _("<b>Debit:</b> ") + FormatMoney(-nValue) + "<br>";
-                    strHTML += _("<b>Credit:</b> ") + FormatMoney(nValue) + "<br>";
-                }
-
-                int64 nTxFee = nDebit - wtx.GetValueOut();
-                if (nTxFee > 0)
-                    strHTML += _("<b>Transaction fee:</b> ") + FormatMoney(-nTxFee) + "<br>";
-            }
-            else
-            {
-                //
-                // Mixed debit transaction
-                //
-                BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-                    if (pwalletMain->IsMine(txin))
-                        strHTML += _("<b>Debit:</b> ") + FormatMoney(-pwalletMain->GetDebit(txin)) + "<br>";
-                BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                    if (pwalletMain->IsMine(txout))
-                        strHTML += _("<b>Credit:</b> ") + FormatMoney(pwalletMain->GetCredit(txout)) + "<br>";
-            }
-        }
-
-        strHTML += _("<b>Net amount:</b> ") + FormatMoney(nNet, true) + "<br>";
-
-
-        //
-        // Message
-        //
-        if (!wtx.mapValue["message"].empty())
-            strHTML += string() + "<br><b>" + _("Message:") + "</b><br>" + HtmlEscape(wtx.mapValue["message"], true) + "<br>";
-        if (!wtx.mapValue["comment"].empty())
-            strHTML += string() + "<br><b>" + _("Comment:") + "</b><br>" + HtmlEscape(wtx.mapValue["comment"], true) + "<br>";
-
-        if (wtx.IsCoinBase())
-            strHTML += string() + "<br>" + _("Generated coins must wait 120 blocks before they can be spent.  When you generated this block, it was broadcast to the network to be added to the block chain.  If it fails to get into the chain, it will change to \"not accepted\" and not be spendable.  This may occasionally happen if another node generates a block within a few seconds of yours.") + "<br>";
-
-
-        //
-        // Debug view
-        //
-        if (fDebug)
-        {
-            strHTML += "<hr><br>debug print<br><br>";
-            BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-                if (pwalletMain->IsMine(txin))
-                    strHTML += "<b>Debit:</b> " + FormatMoney(-pwalletMain->GetDebit(txin)) + "<br>";
-            BOOST_FOREACH(const CTxOut& txout, wtx.vout)
-                if (pwalletMain->IsMine(txout))
-                    strHTML += "<b>Credit:</b> " + FormatMoney(pwalletMain->GetCredit(txout)) + "<br>";
-
-            strHTML += "<br><b>Transaction:</b><br>";
-            strHTML += HtmlEscape(wtx.ToString(), true);
-
-            strHTML += "<br><b>Inputs:</b><br>";
-            CRITICAL_BLOCK(pwalletMain->cs_wallet)
-            {
-                BOOST_FOREACH(const CTxIn& txin, wtx.vin)
-                {
-                    COutPoint prevout = txin.prevout;
-                    map<uint256, CWalletTx>::iterator mi = pwalletMain->mapWallet.find(prevout.hash);
-                    if (mi != pwalletMain->mapWallet.end())
-                    {
-                        const CWalletTx& prev = (*mi).second;
-                        if (prevout.n < prev.vout.size())
-                        {
-                            strHTML += HtmlEscape(prev.ToString(), true);
-                            strHTML += " &nbsp;&nbsp; " + FormatTxStatus(prev) + ", ";
-                            strHTML = strHTML + "IsMine=" + (pwalletMain->IsMine(prev.vout[prevout.n]) ? "true" : "false") + "<br>";
-                        }
-                    }
-                }
-            }
-        }
-
-
-
-        strHTML += "</font></html>";
-        string(strHTML.begin(), strHTML.end()).swap(strHTML);
-        m_htmlWin->SetPage(strHTML);
-        m_buttonOK->SetFocus();
-    }
-}
-
-void CTxDetailsDialog::OnButtonOK(wxCommandEvent& event)
-{
-    EndModal(false);
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Startup folder
-//
-
-#ifdef __WXMSW__
-string StartupShortcutPath()
-{
-    return MyGetSpecialFolderPath(CSIDL_STARTUP, true) + "\\Bitcoin.lnk";
-}
-
-bool GetStartOnSystemStartup()
-{
-    return filesystem::exists(StartupShortcutPath().c_str());
-}
-
-void SetStartOnSystemStartup(bool fAutoStart)
-{
-    // If the shortcut exists already, remove it for updating
-    remove(StartupShortcutPath().c_str());
-
-    if (fAutoStart)
-    {
-        CoInitialize(NULL);
-
-        // Get a pointer to the IShellLink interface.
-        IShellLink* psl = NULL;
-        HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL,
-                                CLSCTX_INPROC_SERVER, IID_IShellLink,
-                                reinterpret_cast<void**>(&psl));
-
-        if (SUCCEEDED(hres))
-        {
-            // Get the current executable path
-            TCHAR pszExePath[MAX_PATH];
-            GetModuleFileName(NULL, pszExePath, sizeof(pszExePath));
-
-            // Set the path to the shortcut target
-            psl->SetPath(pszExePath);
-            PathRemoveFileSpec(pszExePath);
-            psl->SetWorkingDirectory(pszExePath);
-            psl->SetShowCmd(SW_SHOWMINNOACTIVE);
-
-            // Query IShellLink for the IPersistFile interface for
-            // saving the shortcut in persistent storage.
-            IPersistFile* ppf = NULL;
-            hres = psl->QueryInterface(IID_IPersistFile,
-                                       reinterpret_cast<void**>(&ppf));
-            if (SUCCEEDED(hres))
-            {
-                WCHAR pwsz[MAX_PATH];
-                // Ensure that the string is ANSI.
-                MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().c_str(), -1, pwsz, MAX_PATH);
-                // Save the link by calling IPersistFile::Save.
-                hres = ppf->Save(pwsz, TRUE);
-                ppf->Release();
-            }
-            psl->Release();
-        }
-        CoUninitialize();
-    }
-}
-
-#elif defined(__WXGTK__)
-
-// Follow the Desktop Application Autostart Spec:
-//  http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
-
-boost::filesystem::path GetAutostartDir()
-{
-    namespace fs = boost::filesystem;
-
-    char* pszConfigHome = getenv("XDG_CONFIG_HOME");
-    if (pszConfigHome) return fs::path(pszConfigHome) / fs::path("autostart");
-    char* pszHome = getenv("HOME");
-    if (pszHome) return fs::path(pszHome) / fs::path(".config/autostart");
-    return fs::path();
-}
-
-boost::filesystem::path GetAutostartFilePath()
-{
-    return GetAutostartDir() / boost::filesystem::path("bitcoin.desktop");
-}
-
-bool GetStartOnSystemStartup()
-{
-    boost::filesystem::ifstream optionFile(GetAutostartFilePath());
-    if (!optionFile.good())
-        return false;
-    // Scan through file for "Hidden=true":
-    string line;
-    while (!optionFile.eof())
-    {
-        getline(optionFile, line);
-        if (line.find("Hidden") != string::npos &&
-            line.find("true") != string::npos)
-            return false;
-    }
-    optionFile.close();
-
-    return true;
-}
-
-void SetStartOnSystemStartup(bool fAutoStart)
-{
-    if (!fAutoStart)
-    {
-#if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION >= 3
-        unlink(GetAutostartFilePath().string().c_str());
-#else
-        unlink(GetAutostartFilePath().native_file_string().c_str());
-#endif
-    }
-    else
-    {
-        char pszExePath[MAX_PATH+1];
-        memset(pszExePath, 0, sizeof(pszExePath));
-        if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1)
-            return;
-
-        boost::filesystem::create_directories(GetAutostartDir());
-
-        boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc);
-        if (!optionFile.good())
-        {
-            wxMessageBox(_("Cannot write autostart/bitcoin.desktop file"), "Bitcoin");
-            return;
-        }
-        // Write a bitcoin.desktop file to the autostart directory:
-        optionFile << "[Desktop Entry]\n";
-        optionFile << "Type=Application\n";
-        optionFile << "Name=Bitcoin\n";
-        optionFile << "Exec=" << pszExePath << "\n";
-        optionFile << "Terminal=false\n";
-        optionFile << "Hidden=false\n";
-        optionFile.close();
-    }
-}
-#else
-
-// TODO: OSX startup stuff; see:
-// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html
-
-bool GetStartOnSystemStartup() { return false; }
-void SetStartOnSystemStartup(bool fAutoStart) { }
-
-#endif
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// COptionsDialog
-//
-
-COptionsDialog::COptionsDialog(wxWindow* parent) : COptionsDialogBase(parent)
-{
-    // Set up list box of page choices
-    m_listBox->Append(_("Main"));
-    //m_listBox->Append(_("Test 2"));
-    m_listBox->SetSelection(0);
-    SelectPage(0);
-#ifndef __WXMSW__
-    SetSize(1.0 * GetSize().GetWidth(), 1.2 * GetSize().GetHeight());
-#else
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
-    m_checkBoxStartOnSystemStartup->SetLabel(_("&Start Bitcoin on window system startup"));
-    if (!GetBoolArg("-minimizetotray"))
-    {
-        // Minimize to tray is just too buggy on Linux
-        fMinimizeToTray = false;
-        m_checkBoxMinimizeToTray->SetValue(false);
-        m_checkBoxMinimizeToTray->Enable(false);
-        m_checkBoxMinimizeOnClose->SetLabel(_("&Minimize on close"));
-    }
-#endif
-#ifdef __WXMAC_OSX__
-    m_checkBoxStartOnSystemStartup->Enable(false); // not implemented yet
-#endif
-
-    // Init values
-    m_textCtrlTransactionFee->SetValue(FormatMoney(nTransactionFee));
-    m_checkBoxStartOnSystemStartup->SetValue(fTmpStartOnSystemStartup = GetStartOnSystemStartup());
-    m_checkBoxMinimizeToTray->SetValue(fMinimizeToTray);
-    m_checkBoxMinimizeOnClose->SetValue(fMinimizeOnClose);
-    if (fHaveUPnP)
-        m_checkBoxUseUPnP->SetValue(fUseUPnP);
-    else
-        m_checkBoxUseUPnP->Enable(false);
-    m_checkBoxUseProxy->SetValue(fUseProxy);
-    m_textCtrlProxyIP->Enable(fUseProxy);
-    m_textCtrlProxyPort->Enable(fUseProxy);
-    m_staticTextProxyIP->Enable(fUseProxy);
-    m_staticTextProxyPort->Enable(fUseProxy);
-    m_textCtrlProxyIP->SetValue(addrProxy.ToStringIP());
-    m_textCtrlProxyPort->SetValue(addrProxy.ToStringPort());
-
-    m_buttonOK->SetFocus();
-}
-
-void COptionsDialog::SelectPage(int nPage)
-{
-    m_panelMain->Show(nPage == 0);
-    m_panelTest2->Show(nPage == 1);
-
-    m_scrolledWindow->Layout();
-    m_scrolledWindow->SetScrollbars(0, 0, 0, 0, 0, 0);
-}
-
-void COptionsDialog::OnListBox(wxCommandEvent& event)
-{
-    SelectPage(event.GetSelection());
-}
-
-void COptionsDialog::OnKillFocusTransactionFee(wxFocusEvent& event)
-{
-    event.Skip();
-    int64 nTmp = nTransactionFee;
-    ParseMoney(m_textCtrlTransactionFee->GetValue(), nTmp);
-    m_textCtrlTransactionFee->SetValue(FormatMoney(nTmp));
-}
-
-void COptionsDialog::OnCheckBoxUseProxy(wxCommandEvent& event)
-{
-    m_textCtrlProxyIP->Enable(event.IsChecked());
-    m_textCtrlProxyPort->Enable(event.IsChecked());
-    m_staticTextProxyIP->Enable(event.IsChecked());
-    m_staticTextProxyPort->Enable(event.IsChecked());
-}
-
-CAddress COptionsDialog::GetProxyAddr()
-{
-    // Be careful about byte order, addr.ip and addr.port are big endian
-    CAddress addr(m_textCtrlProxyIP->GetValue() + ":" + m_textCtrlProxyPort->GetValue());
-    if (addr.ip == INADDR_NONE)
-        addr.ip = addrProxy.ip;
-    int nPort = atoi(m_textCtrlProxyPort->GetValue());
-    addr.port = htons(nPort);
-    if (nPort <= 0 || nPort > USHRT_MAX)
-        addr.port = addrProxy.port;
-    return addr;
-}
-
-void COptionsDialog::OnKillFocusProxy(wxFocusEvent& event)
-{
-    event.Skip();
-    m_textCtrlProxyIP->SetValue(GetProxyAddr().ToStringIP());
-    m_textCtrlProxyPort->SetValue(GetProxyAddr().ToStringPort());
-}
-
-
-void COptionsDialog::OnButtonOK(wxCommandEvent& event)
-{
-    OnButtonApply(event);
-    EndModal(false);
-}
-
-void COptionsDialog::OnButtonCancel(wxCommandEvent& event)
-{
-    EndModal(false);
-}
-
-void COptionsDialog::OnButtonApply(wxCommandEvent& event)
-{
-    CWalletDB walletdb(pwalletMain->strWalletFile);
-
-    int64 nPrevTransactionFee = nTransactionFee;
-    if (ParseMoney(m_textCtrlTransactionFee->GetValue(), nTransactionFee) && nTransactionFee != nPrevTransactionFee)
-        walletdb.WriteSetting("nTransactionFee", nTransactionFee);
-
-    if (fTmpStartOnSystemStartup != m_checkBoxStartOnSystemStartup->GetValue())
-    {
-        fTmpStartOnSystemStartup = m_checkBoxStartOnSystemStartup->GetValue();
-        SetStartOnSystemStartup(fTmpStartOnSystemStartup);
-    }
-
-    if (fMinimizeToTray != m_checkBoxMinimizeToTray->GetValue())
-    {
-        fMinimizeToTray = m_checkBoxMinimizeToTray->GetValue();
-        walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray);
-        ptaskbaricon->Show(fMinimizeToTray || fClosedToTray);
-    }
-
-    if (fMinimizeOnClose != m_checkBoxMinimizeOnClose->GetValue())
-    {
-        fMinimizeOnClose = m_checkBoxMinimizeOnClose->GetValue();
-        walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
-    }
-
-    if (fHaveUPnP && fUseUPnP != m_checkBoxUseUPnP->GetValue())
-    {
-        fUseUPnP = m_checkBoxUseUPnP->GetValue();
-        walletdb.WriteSetting("fUseUPnP", fUseUPnP);
-        MapPort(fUseUPnP);
-    }
-
-    fUseProxy = m_checkBoxUseProxy->GetValue();
-    walletdb.WriteSetting("fUseProxy", fUseProxy);
-
-    addrProxy = GetProxyAddr();
-    walletdb.WriteSetting("addrProxy", addrProxy);
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CAboutDialog
-//
-
-CAboutDialog::CAboutDialog(wxWindow* parent) : CAboutDialogBase(parent)
-{
-    m_staticTextVersion->SetLabel(strprintf(_("version %s"), FormatFullVersion().c_str()));
-
-    // Change (c) into UTF-8 or ANSI copyright symbol
-    wxString str = m_staticTextMain->GetLabel();
-#if wxUSE_UNICODE
-    str.Replace("(c)", wxString::FromUTF8("\xC2\xA9"));
-#else
-    str.Replace("(c)", "\xA9");
-#endif
-    m_staticTextMain->SetLabel(str);
-#ifndef __WXMSW__
-    // Resize on Linux to make the window fit the text.
-    // The text was wrapped manually rather than using the Wrap setting because
-    // the wrap would be too small on Linux and it can't be changed at this point.
-    wxFont fontTmp = m_staticTextMain->GetFont();
-    if (fontTmp.GetPointSize() > 8);
-        fontTmp.SetPointSize(8);
-    m_staticTextMain->SetFont(fontTmp);
-    SetSize(GetSize().GetWidth() + 44, GetSize().GetHeight() + 10);
-#else
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-}
-
-void CAboutDialog::OnButtonOK(wxCommandEvent& event)
-{
-    EndModal(false);
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CSendDialog
-//
-
-CSendDialog::CSendDialog(wxWindow* parent, const wxString& strAddress) : CSendDialogBase(parent)
-{
-    // Init
-    m_textCtrlAddress->SetValue(strAddress);
-    m_choiceTransferType->SetSelection(0);
-    m_bitmapCheckMark->Show(false);
-    fEnabledPrev = true;
-    m_textCtrlAddress->SetFocus();
-    
-    //// todo: should add a display of your balance for convenience
-#ifndef __WXMSW__
-    wxFont fontTmp = m_staticTextInstructions->GetFont();
-    if (fontTmp.GetPointSize() > 9);
-        fontTmp.SetPointSize(9);
-    m_staticTextInstructions->SetFont(fontTmp);
-    SetSize(725, 180);
-#else
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-    
-    // Set Icon
-    if (nScaleX == 1.0 && nScaleY == 1.0) // We don't have icons of the proper size otherwise
-    {
-        wxIcon iconSend;
-        iconSend.CopyFromBitmap(wxBitmap(send16noshadow_xpm));
-        SetIcon(iconSend);
-    }
-#ifdef __WXMSW__
-    else
-        SetIcon(wxICON(bitcoin));
-#endif
-
-    // Fixup the tab order
-    m_buttonPaste->MoveAfterInTabOrder(m_buttonCancel);
-    m_buttonAddress->MoveAfterInTabOrder(m_buttonPaste);
-    this->Layout();
-}
-
-void CSendDialog::OnKillFocusAmount(wxFocusEvent& event)
-{
-    // Reformat the amount
-    event.Skip();
-    if (m_textCtrlAmount->GetValue().Trim().empty())
-        return;
-    int64 nTmp;
-    if (ParseMoney(m_textCtrlAmount->GetValue(), nTmp))
-        m_textCtrlAmount->SetValue(FormatMoney(nTmp));
-}
-
-void CSendDialog::OnButtonAddressBook(wxCommandEvent& event)
-{
-    // Open address book
-    CAddressBookDialog dialog(this, m_textCtrlAddress->GetValue(), CAddressBookDialog::SENDING, true);
-    if (dialog.ShowModal())
-        m_textCtrlAddress->SetValue(dialog.GetSelectedAddress());
-}
-
-void CSendDialog::OnButtonPaste(wxCommandEvent& event)
-{
-    // Copy clipboard to address box
-    if (wxTheClipboard->Open())
-    {
-        if (wxTheClipboard->IsSupported(wxDF_TEXT))
-        {
-            wxTextDataObject data;
-            wxTheClipboard->GetData(data);
-            m_textCtrlAddress->SetValue(data.GetText());
-        }
-        wxTheClipboard->Close();
-    }
-}
-
-void CSendDialog::OnButtonSend(wxCommandEvent& event)
-{
-    static CCriticalSection cs_sendlock;
-    TRY_CRITICAL_BLOCK(cs_sendlock)
-    {
-        CWalletTx wtx;
-        string strAddress = (string)m_textCtrlAddress->GetValue();
-
-        // Parse amount
-        int64 nValue = 0;
-        if (!ParseMoney(m_textCtrlAmount->GetValue(), nValue) || nValue <= 0)
-        {
-            wxMessageBox(_("Error in amount  "), _("Send Coins"));
-            return;
-        }
-        if (nValue > pwalletMain->GetBalance())
-        {
-            wxMessageBox(_("Amount exceeds your balance  "), _("Send Coins"));
-            return;
-        }
-        if (nValue + nTransactionFee > pwalletMain->GetBalance())
-        {
-            wxMessageBox(string(_("Total exceeds your balance when the ")) + FormatMoney(nTransactionFee) + _(" transaction fee is included  "), _("Send Coins"));
-            return;
-        }
-
-        // Parse bitcoin address
-        CBitcoinAddress address(strAddress);
-        bool fBitcoinAddress = address.IsValid();
-
-        if (fBitcoinAddress)
-        {
-            bool fWasLocked = pwalletMain->IsLocked();
-            if (!GetWalletPassphrase())
-                return;
-
-            string strError;
-           CRITICAL_BLOCK(cs_main)
-            CRITICAL_BLOCK(pwalletMain->cs_wallet)
-           {
-                // Send to bitcoin address
-                CScript scriptPubKey;
-                scriptPubKey.SetBitcoinAddress(address);
-
-                strError = pwalletMain->SendMoney(scriptPubKey, nValue, wtx, true);
-            }
-            if (strError == "")
-            {
-                pframeMain->RefreshListCtrl();
-                wxMessageBox(_("Payment sent  "), _("Sending..."));
-            }
-            else if (strError == "ABORTED")
-            {
-                if (fWasLocked)
-                    pwalletMain->Lock();
-                return; // leave send dialog open
-            }
-            else
-            {
-                wxMessageBox(strError + "  ", _("Sending..."));
-                EndModal(false);
-                if (fWasLocked)
-                    pwalletMain->Lock();
-                return;
-            }
-
-            if (fWasLocked)
-                pwalletMain->Lock();
-        }
-        else
-        {
-            // Parse IP address
-            CAddress addr(strAddress);
-            if (!addr.IsValid())
-            {
-                wxMessageBox(_("Invalid address  "), _("Send Coins"));
-                return;
-            }
-
-            // Message
-            wtx.mapValue["to"] = strAddress;
-
-            // Send to IP address
-            CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx);
-            if (!pdialog->ShowModal())
-                return;
-        }
-
-        CRITICAL_BLOCK(pwalletMain->cs_wallet)
-            if (!pwalletMain->mapAddressBook.count(address))
-                pwalletMain->SetAddressBookName(strAddress, "");
-
-        EndModal(true);
-    }
-}
-
-void CSendDialog::OnButtonCancel(wxCommandEvent& event)
-{
-    // Cancel
-    EndModal(false);
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CSendingDialog
-//
-
-CSendingDialog::CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn) : CSendingDialogBase(NULL) // we have to give null so parent can't destroy us
-{
-    addr = addrIn;
-    nPrice = nPriceIn;
-    wtx = wtxIn;
-    start = wxDateTime::UNow();
-    memset(pszStatus, 0, sizeof(pszStatus));
-    fCanCancel = true;
-    fAbort = false;
-    fSuccess = false;
-    fUIDone = false;
-    fWorkDone = false;
-#ifndef __WXMSW__
-    SetSize(1.2 * GetSize().GetWidth(), 1.08 * GetSize().GetHeight());
-#else
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-
-    SetTitle(strprintf(_("Sending %s to %s"), FormatMoney(nPrice).c_str(), wtx.mapValue["to"].c_str()));
-    m_textCtrlStatus->SetValue("");
-
-    CreateThread(SendingDialogStartTransfer, this);
-}
-
-CSendingDialog::~CSendingDialog()
-{
-    printf("~CSendingDialog()\n");
-}
-
-void CSendingDialog::Close()
-{
-    // Last one out turn out the lights.
-    // fWorkDone signals that work side is done and UI thread should call destroy.
-    // fUIDone signals that UI window has closed and work thread should call destroy.
-    // This allows the window to disappear and end modality when cancelled
-    // without making the user wait for ConnectNode to return.  The dialog object
-    // hangs around in the background until the work thread exits.
-    if (IsModal())
-        EndModal(fSuccess);
-    else
-        Show(false);
-    if (fWorkDone)
-        Destroy();
-    else
-        fUIDone = true;
-}
-
-void CSendingDialog::OnClose(wxCloseEvent& event)
-{
-    if (!event.CanVeto() || fWorkDone || fAbort || !fCanCancel)
-    {
-        Close();
-    }
-    else
-    {
-        event.Veto();
-        wxCommandEvent cmdevent;
-        OnButtonCancel(cmdevent);
-    }
-}
-
-void CSendingDialog::OnButtonOK(wxCommandEvent& event)
-{
-    if (fWorkDone)
-        Close();
-}
-
-void CSendingDialog::OnButtonCancel(wxCommandEvent& event)
-{
-    if (fCanCancel)
-        fAbort = true;
-}
-
-void CSendingDialog::OnPaint(wxPaintEvent& event)
-{
-    event.Skip();
-    if (strlen(pszStatus) > 130)
-        m_textCtrlStatus->SetValue(string("\n") + pszStatus);
-    else
-        m_textCtrlStatus->SetValue(string("\n\n") + pszStatus);
-    m_staticTextSending->SetFocus();
-    if (!fCanCancel)
-        m_buttonCancel->Enable(false);
-    if (fWorkDone)
-    {
-        m_buttonOK->Enable(true);
-        m_buttonOK->SetFocus();
-        m_buttonCancel->Enable(false);
-    }
-    if (fAbort && fCanCancel && IsShown())
-    {
-        strcpy(pszStatus, _("CANCELLED"));
-        m_buttonOK->Enable(true);
-        m_buttonOK->SetFocus();
-        m_buttonCancel->Enable(false);
-        m_buttonCancel->SetLabel(_("Cancelled"));
-        Close();
-        wxMessageBox(_("Transfer cancelled  "), _("Sending..."), wxOK, this);
-    }
-}
-
-
-//
-// Everything from here on is not in the UI thread and must only communicate
-// with the rest of the dialog through variables and calling repaint.
-//
-
-void CSendingDialog::Repaint()
-{
-    Refresh();
-    wxPaintEvent event;
-    GetEventHandler()->AddPendingEvent(event);
-}
-
-bool CSendingDialog::Status()
-{
-    if (fUIDone)
-    {
-        Destroy();
-        return false;
-    }
-    if (fAbort && fCanCancel)
-    {
-        memset(pszStatus, 0, 10);
-        strcpy(pszStatus, _("CANCELLED"));
-        Repaint();
-        fWorkDone = true;
-        return false;
-    }
-    return true;
-}
-
-bool CSendingDialog::Status(const string& str)
-{
-    if (!Status())
-        return false;
-
-    // This can be read by the UI thread at any time,
-    // so copy in a way that can be read cleanly at all times.
-    memset(pszStatus, 0, min(str.size()+1, sizeof(pszStatus)));
-    strlcpy(pszStatus, str.c_str(), sizeof(pszStatus));
-
-    Repaint();
-    return true;
-}
-
-bool CSendingDialog::Error(const string& str)
-{
-    fCanCancel = false;
-    fWorkDone = true;
-    Status(string(_("Error: ")) + str);
-    return false;
-}
-
-void SendingDialogStartTransfer(void* parg)
-{
-    ((CSendingDialog*)parg)->StartTransfer();
-}
-
-void CSendingDialog::StartTransfer()
-{
-    // Make sure we have enough money
-    if (nPrice + nTransactionFee > pwalletMain->GetBalance())
-    {
-        Error(_("Insufficient funds"));
-        return;
-    }
-
-    // We may have connected already for product details
-    if (!Status(_("Connecting...")))
-        return;
-    CNode* pnode = ConnectNode(addr, 15 * 60);
-    if (!pnode)
-    {
-        Error(_("Unable to connect"));
-        return;
-    }
-
-    // Send order to seller, with response going to OnReply2 via event handler
-    if (!Status(_("Requesting public key...")))
-        return;
-    pnode->PushRequest("checkorder", wtx, SendingDialogOnReply2, this);
-}
-
-void SendingDialogOnReply2(void* parg, CDataStream& vRecv)
-{
-    ((CSendingDialog*)parg)->OnReply2(vRecv);
-}
-
-void CSendingDialog::OnReply2(CDataStream& vRecv)
-{
-    if (!Status(_("Received public key...")))
-        return;
-
-    CScript scriptPubKey;
-    int nRet;
-    try
-    {
-        vRecv >> nRet;
-        if (nRet > 0)
-        {
-            string strMessage;
-            if (!vRecv.empty())
-                vRecv >> strMessage;
-            if (nRet == 2)
-                Error(_("Recipient is not accepting transactions sent by IP address"));
-            else
-                Error(_("Transfer was not accepted"));
-            //// todo: enlarge the window and enable a hidden white box to put seller's message
-            return;
-        }
-        vRecv >> scriptPubKey;
-    }
-    catch (...)
-    {
-        //// what do we want to do about this?
-        Error(_("Invalid response received"));
-        return;
-    }
-
-    // Pause to give the user a chance to cancel
-    while (wxDateTime::UNow() < start + wxTimeSpan(0, 0, 0, 2 * 1000))
-    {
-        Sleep(200);
-        if (!Status())
-            return;
-    }
-
-    // Pay
-    if (!Status(_("Creating transaction...")))
-        return;
-    if (nPrice + nTransactionFee > pwalletMain->GetBalance())
-    {
-        Error(_("Insufficient funds"));
-        return;
-    }
-
-    CReserveKey reservekey(pwalletMain);
-    int64 nFeeRequired;
-    bool fWasLocked = pwalletMain->IsLocked();
-    if (!GetWalletPassphrase())
-        return;
-
-    bool fTxCreated = false;
-    CRITICAL_BLOCK(cs_main)
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        fTxCreated = pwalletMain->CreateTransaction(scriptPubKey, nPrice, wtx, reservekey, nFeeRequired);
-    }
-    if (!fTxCreated)
-    {
-        if (nPrice + nFeeRequired > pwalletMain->GetBalance())
-            Error(strprintf(_("This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"), FormatMoney(nFeeRequired).c_str()));
-        else
-            Error(_("Transaction creation failed"));
-        return;
-    }
-
-    if (fWasLocked)
-        pwalletMain->Lock();
-
-    // Transaction fee
-    if (!ThreadSafeAskFee(nFeeRequired, _("Sending..."), this))
-    {
-        Error(_("Transaction aborted"));
-        return;
-    }
-
-    // Make sure we're still connected
-    CNode* pnode = ConnectNode(addr, 2 * 60 * 60);
-    if (!pnode)
-    {
-        Error(_("Lost connection, transaction cancelled"));
-        return;
-    }
-
-    // Last chance to cancel
-    Sleep(50);
-    if (!Status())
-        return;
-    fCanCancel = false;
-    if (fAbort)
-    {
-        fCanCancel = true;
-        if (!Status())
-            return;
-        fCanCancel = false;
-    }
-    if (!Status(_("Sending payment...")))
-        return;
-
-    // Commit
-    bool fTxCommitted = false;
-    CRITICAL_BLOCK(cs_main)
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        fTxCommitted = pwalletMain->CommitTransaction(wtx, reservekey);
-    }
-    if (!fTxCommitted)
-    {
-        Error(_("The transaction was rejected.  This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."));
-        return;
-    }
-
-    // Send payment tx to seller, with response going to OnReply3 via event handler
-    CWalletTx wtxSend = wtx;
-    wtxSend.fFromMe = false;
-    pnode->PushRequest("submitorder", wtxSend, SendingDialogOnReply3, this);
-
-    Status(_("Waiting for confirmation..."));
-    MainFrameRepaint();
-}
-
-void SendingDialogOnReply3(void* parg, CDataStream& vRecv)
-{
-    ((CSendingDialog*)parg)->OnReply3(vRecv);
-}
-
-void CSendingDialog::OnReply3(CDataStream& vRecv)
-{
-    int nRet;
-    try
-    {
-        vRecv >> nRet;
-        if (nRet > 0)
-        {
-            Error(_("The payment was sent, but the recipient was unable to verify it.\n"
-                    "The transaction is recorded and will credit to the recipient,\n"
-                    "but the comment information will be blank."));
-            return;
-        }
-    }
-    catch (...)
-    {
-        //// what do we want to do about this?
-        Error(_("Payment was sent, but an invalid response was received"));
-        return;
-    }
-
-    fSuccess = true;
-    fWorkDone = true;
-    Status(_("Payment completed"));
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CAddressBookDialog
-//
-
-CAddressBookDialog::CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn) : CAddressBookDialogBase(parent)
-{
-#ifdef __WXMSW__
-    SetSize(nScaleX * GetSize().GetWidth(), nScaleY * GetSize().GetHeight());
-#endif
-
-    // Set initially selected page
-    wxNotebookEvent event;
-    event.SetSelection(nPageIn);
-    OnNotebookPageChanged(event);
-    m_notebook->ChangeSelection(nPageIn);
-
-    fDuringSend = fDuringSendIn;
-    if (!fDuringSend)
-        m_buttonCancel->Show(false);
-
-    // Set Icon
-    if (nScaleX == 1.0 && nScaleY == 1.0) // We don't have icons of the proper size otherwise
-    {
-        wxIcon iconAddressBook;
-        iconAddressBook.CopyFromBitmap(wxBitmap(addressbook16_xpm));
-        SetIcon(iconAddressBook);
-    }
-#ifdef __WXMSW__
-    else
-        SetIcon(wxICON(bitcoin));
-#endif
-
-    // Init column headers
-    m_listCtrlSending->InsertColumn(0, _("Name"), wxLIST_FORMAT_LEFT, 200);
-    m_listCtrlSending->InsertColumn(1, _("Address"), wxLIST_FORMAT_LEFT, 350);
-    m_listCtrlSending->SetFocus();
-    m_listCtrlReceiving->InsertColumn(0, _("Label"), wxLIST_FORMAT_LEFT, 200);
-    m_listCtrlReceiving->InsertColumn(1, _("Bitcoin Address"), wxLIST_FORMAT_LEFT, 350);
-    m_listCtrlReceiving->SetFocus();
-
-    // Fill listctrl with address book data
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        string strDefaultReceiving = (string)pframeMain->m_textCtrlAddress->GetValue();
-        BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook)
-        {
-            const CBitcoinAddress& address = item.first;
-            string strName = item.second;
-            bool fMine = pwalletMain->HaveKey(address);
-            wxListCtrl* plistCtrl = fMine ? m_listCtrlReceiving : m_listCtrlSending;
-            int nIndex = InsertLine(plistCtrl, strName, address.ToString());
-            if (address.ToString() == (fMine ? strDefaultReceiving : string(strInitSelected)))
-                plistCtrl->SetItemState(nIndex, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);
-        }
-    }
-}
-
-wxString CAddressBookDialog::GetSelectedAddress()
-{
-    int nIndex = GetSelection(m_listCtrl);
-    if (nIndex == -1)
-        return "";
-    return GetItemText(m_listCtrl, nIndex, 1);
-}
-
-wxString CAddressBookDialog::GetSelectedSendingAddress()
-{
-    int nIndex = GetSelection(m_listCtrlSending);
-    if (nIndex == -1)
-        return "";
-    return GetItemText(m_listCtrlSending, nIndex, 1);
-}
-
-wxString CAddressBookDialog::GetSelectedReceivingAddress()
-{
-    int nIndex = GetSelection(m_listCtrlReceiving);
-    if (nIndex == -1)
-        return "";
-    return GetItemText(m_listCtrlReceiving, nIndex, 1);
-}
-
-void CAddressBookDialog::OnNotebookPageChanged(wxNotebookEvent& event)
-{
-    event.Skip();
-    nPage = event.GetSelection();
-    if (nPage == SENDING)
-        m_listCtrl = m_listCtrlSending;
-    else if (nPage == RECEIVING)
-        m_listCtrl = m_listCtrlReceiving;
-    m_buttonDelete->Show(nPage == SENDING);
-    m_buttonCopy->Show(nPage == RECEIVING);
-    this->Layout();
-    m_listCtrl->SetFocus();
-}
-
-void CAddressBookDialog::OnListEndLabelEdit(wxListEvent& event)
-{
-    // Update address book with edited name
-    event.Skip();
-    if (event.IsEditCancelled())
-        return;
-    string strAddress = (string)GetItemText(m_listCtrl, event.GetIndex(), 1);
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-        pwalletMain->SetAddressBookName(strAddress, string(event.GetText()));
-    pframeMain->RefreshListCtrl();
-}
-
-void CAddressBookDialog::OnListItemSelected(wxListEvent& event)
-{
-    event.Skip();
-    if (nPage == RECEIVING)
-        SetDefaultReceivingAddress((string)GetSelectedReceivingAddress());
-}
-
-void CAddressBookDialog::OnListItemActivated(wxListEvent& event)
-{
-    event.Skip();
-    if (fDuringSend)
-    {
-        // Doubleclick returns selection
-        EndModal(GetSelectedAddress() != "" ? 2 : 0);
-        return;
-    }
-
-    // Doubleclick edits item
-    wxCommandEvent event2;
-    OnButtonEdit(event2);
-}
-
-void CAddressBookDialog::OnButtonDelete(wxCommandEvent& event)
-{
-    if (nPage != SENDING)
-        return;
-    for (int nIndex = m_listCtrl->GetItemCount()-1; nIndex >= 0; nIndex--)
-    {
-        if (m_listCtrl->GetItemState(nIndex, wxLIST_STATE_SELECTED))
-        {
-            string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);
-            CRITICAL_BLOCK(pwalletMain->cs_wallet)
-                pwalletMain->DelAddressBookName(strAddress);
-            m_listCtrl->DeleteItem(nIndex);
-        }
-    }
-    pframeMain->RefreshListCtrl();
-}
-
-void CAddressBookDialog::OnButtonCopy(wxCommandEvent& event)
-{
-    // Copy address box to clipboard
-    if (wxTheClipboard->Open())
-    {
-        wxTheClipboard->SetData(new wxTextDataObject(GetSelectedAddress()));
-        wxTheClipboard->Close();
-    }
-}
-
-bool CAddressBookDialog::CheckIfMine(const string& strAddress, const string& strTitle)
-{
-    CBitcoinAddress address(strAddress);
-    bool fMine = address.IsValid() && pwalletMain->HaveKey(address);
-    if (fMine)
-        wxMessageBox(_("This is one of your own addresses for receiving payments and cannot be entered in the address book.  "), strTitle);
-    return fMine;
-}
-
-void CAddressBookDialog::OnButtonEdit(wxCommandEvent& event)
-{
-    int nIndex = GetSelection(m_listCtrl);
-    if (nIndex == -1)
-        return;
-    string strName = (string)m_listCtrl->GetItemText(nIndex);
-    string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);
-    string strAddressOrg = strAddress;
-
-    if (nPage == SENDING)
-    {
-        // Ask name and address
-        do
-        {
-            CGetTextFromUserDialog dialog(this, _("Edit Address"), _("Name"), strName, _("Address"), strAddress);
-            if (!dialog.ShowModal())
-                return;
-            strName = dialog.GetValue1();
-            strAddress = dialog.GetValue2();
-        }
-        while (CheckIfMine(strAddress, _("Edit Address")));
-
-    }
-    else if (nPage == RECEIVING)
-    {
-        // Ask name
-        CGetTextFromUserDialog dialog(this, _("Edit Address Label"), _("Label"), strName);
-        if (!dialog.ShowModal())
-            return;
-        strName = dialog.GetValue();
-    }
-
-    // Write back
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-    {
-        if (strAddress != strAddressOrg)
-            pwalletMain->DelAddressBookName(strAddressOrg);
-        pwalletMain->SetAddressBookName(strAddress, strName);
-    }
-    m_listCtrl->SetItem(nIndex, 1, strAddress);
-    m_listCtrl->SetItemText(nIndex, strName);
-    pframeMain->RefreshListCtrl();
-}
-
-void CAddressBookDialog::OnButtonNew(wxCommandEvent& event)
-{
-    string strName;
-    string strAddress;
-
-    if (nPage == SENDING)
-    {
-        // Ask name and address
-        do
-        {
-            CGetTextFromUserDialog dialog(this, _("Add Address"), _("Name"), strName, _("Address"), strAddress);
-            if (!dialog.ShowModal())
-                return;
-            strName = dialog.GetValue1();
-            strAddress = dialog.GetValue2();
-        }
-        while (CheckIfMine(strAddress, _("Add Address")));
-    }
-    else if (nPage == RECEIVING)
-    {
-        // Ask name
-        CGetTextFromUserDialog dialog(this,
-            _("New Receiving Address"),
-            _("You should use a new address for each payment you receive.\n\nLabel"),
-            "");
-        if (!dialog.ShowModal())
-            return;
-        strName = dialog.GetValue();
-
-        bool fWasLocked = pwalletMain->IsLocked();
-        if (!GetWalletPassphrase())
-            return;
-
-        // Generate new key
-        std::vector<unsigned char> newKey;
-        pwalletMain->GetKeyFromPool(newKey, true);
-        strAddress = CBitcoinAddress(newKey).ToString();
-
-        if (fWasLocked)
-            pwalletMain->Lock();
-    }
-
-    // Add to list and select it
-    CRITICAL_BLOCK(pwalletMain->cs_wallet)
-        pwalletMain->SetAddressBookName(strAddress, strName);
-    int nIndex = InsertLine(m_listCtrl, strName, strAddress);
-    SetSelection(m_listCtrl, nIndex);
-    m_listCtrl->SetFocus();
-    if (nPage == SENDING)
-        pframeMain->RefreshListCtrl();
-}
-
-void CAddressBookDialog::OnButtonOK(wxCommandEvent& event)
-{
-    // OK
-    EndModal(GetSelectedAddress() != "" ? 1 : 0);
-}
-
-void CAddressBookDialog::OnButtonCancel(wxCommandEvent& event)
-{
-    // Cancel
-    EndModal(0);
-}
-
-void CAddressBookDialog::OnClose(wxCloseEvent& event)
-{
-    // Close
-    EndModal(0);
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CMyTaskBarIcon
-//
-
-enum
-{
-    ID_TASKBAR_RESTORE = 10001,
-    ID_TASKBAR_SEND,
-    ID_TASKBAR_OPTIONS,
-    ID_TASKBAR_GENERATE,
-    ID_TASKBAR_EXIT,
-};
-
-BEGIN_EVENT_TABLE(CMyTaskBarIcon, wxTaskBarIcon)
-    EVT_TASKBAR_LEFT_DCLICK(CMyTaskBarIcon::OnLeftButtonDClick)
-    EVT_MENU(ID_TASKBAR_RESTORE, CMyTaskBarIcon::OnMenuRestore)
-    EVT_MENU(ID_TASKBAR_SEND, CMyTaskBarIcon::OnMenuSend)
-    EVT_MENU(ID_TASKBAR_OPTIONS, CMyTaskBarIcon::OnMenuOptions)
-    EVT_UPDATE_UI(ID_TASKBAR_GENERATE, CMyTaskBarIcon::OnUpdateUIGenerate)
-    EVT_MENU(ID_TASKBAR_EXIT, CMyTaskBarIcon::OnMenuExit)
-END_EVENT_TABLE()
-
-void CMyTaskBarIcon::Show(bool fShow)
-{
-    static char pszPrevTip[200];
-    if (fShow)
-    {
-        string strTooltip = _("Bitcoin");
-        if (fGenerateBitcoins)
-            strTooltip = _("Bitcoin - Generating");
-        if (fGenerateBitcoins && vNodes.empty())
-            strTooltip = _("Bitcoin - (not connected)");
-
-        // Optimization, only update when changed, using char array to be reentrant
-        if (strncmp(pszPrevTip, strTooltip.c_str(), sizeof(pszPrevTip)-1) != 0)
-        {
-            strlcpy(pszPrevTip, strTooltip.c_str(), sizeof(pszPrevTip));
-#ifdef __WXMSW__
-            // somehow it'll choose the wrong size and scale it down if
-            // we use the main icon, so we hand it one with only 16x16
-            SetIcon(wxICON(favicon), strTooltip);
-#else
-            SetIcon(bitcoin80_xpm, strTooltip);
-#endif
-        }
-    }
-    else
-    {
-        strlcpy(pszPrevTip, "", sizeof(pszPrevTip));
-        RemoveIcon();
-    }
-}
-
-void CMyTaskBarIcon::Hide()
-{
-    Show(false);
-}
-
-void CMyTaskBarIcon::OnLeftButtonDClick(wxTaskBarIconEvent& event)
-{
-    Restore();
-}
-
-void CMyTaskBarIcon::OnMenuRestore(wxCommandEvent& event)
-{
-    Restore();
-}
-
-void CMyTaskBarIcon::OnMenuSend(wxCommandEvent& event)
-{
-    // Taskbar: Send
-    CSendDialog dialog(pframeMain);
-    dialog.ShowModal();
-}
-
-void CMyTaskBarIcon::OnMenuOptions(wxCommandEvent& event)
-{
-    // Since it's modal, get the main window to do it
-    wxCommandEvent event2(wxEVT_COMMAND_MENU_SELECTED, wxID_PREFERENCES);
-    pframeMain->GetEventHandler()->AddPendingEvent(event2);
-}
-
-void CMyTaskBarIcon::Restore()
-{
-    pframeMain->Show();
-    wxIconizeEvent event(0, false);
-    pframeMain->GetEventHandler()->AddPendingEvent(event);
-    pframeMain->Iconize(false);
-    pframeMain->Raise();
-}
-
-void CMyTaskBarIcon::OnUpdateUIGenerate(wxUpdateUIEvent& event)
-{
-    event.Check(fGenerateBitcoins);
-}
-
-void CMyTaskBarIcon::OnMenuExit(wxCommandEvent& event)
-{
-    pframeMain->Close(true);
-}
-
-void CMyTaskBarIcon::UpdateTooltip()
-{
-    if (IsIconInstalled())
-        Show(true);
-}
-
-wxMenu* CMyTaskBarIcon::CreatePopupMenu()
-{
-    wxMenu* pmenu = new wxMenu;
-    pmenu->Append(ID_TASKBAR_RESTORE, _("&Open Bitcoin"));
-    pmenu->Append(ID_TASKBAR_SEND, _("&Send Bitcoins"));
-    pmenu->Append(ID_TASKBAR_OPTIONS, _("O&ptions..."));
-#ifndef __WXMAC_OSX__ // Mac has built-in quit menu
-    pmenu->AppendSeparator();
-    pmenu->Append(ID_TASKBAR_EXIT, _("E&xit"));
-#endif
-    return pmenu;
-}
-
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CMyApp
-//
-
-void CreateMainWindow()
-{
-    pframeMain = new CMainFrame(NULL);
-    if (GetBoolArg("-min"))
-        pframeMain->Iconize(true);
-#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
-    if (!GetBoolArg("-minimizetotray"))
-        fMinimizeToTray = false;
-#endif
-    pframeMain->Show(true);  // have to show first to get taskbar button to hide
-    if (fMinimizeToTray && pframeMain->IsIconized())
-        fClosedToTray = true;
-    pframeMain->Show(!fClosedToTray);
-    ptaskbaricon->Show(fMinimizeToTray || fClosedToTray);
-    CreateThread(ThreadDelayedRepaint, NULL);
-}
-
-
-// Define a new application
-class CMyApp : public wxApp
-{
-public:
-    CMyApp(){};
-    ~CMyApp(){};
-    bool OnInit();
-    bool OnInit2();
-    int OnExit();
-
-    // Hook Initialize so we can start without GUI
-    virtual bool Initialize(int& argc, wxChar** argv);
-
-    // 2nd-level exception handling: we get all the exceptions occurring in any
-    // event handler here
-    virtual bool OnExceptionInMainLoop();
-
-    // 3rd, and final, level exception handling: whenever an unhandled
-    // exception is caught, this function is called
-    virtual void OnUnhandledException();
-
-    // and now for something different: this function is called in case of a
-    // crash (e.g. dereferencing null pointer, division by 0, ...)
-    virtual void OnFatalException();
-};
-
-IMPLEMENT_APP(CMyApp)
-
-bool CMyApp::Initialize(int& argc, wxChar** argv)
-{
-    for (int i = 1; i < argc; i++)
-        if (!IsSwitchChar(argv[i][0]))
-            fCommandLine = true;
-
-    if (!fCommandLine)
-    {
-        // wxApp::Initialize will remove environment-specific parameters,
-        // so it's too early to call ParseParameters yet
-        for (int i = 1; i < argc; i++)
-        {
-            wxString str = argv[i];
-            #ifdef __WXMSW__
-            if (str.size() >= 1 && str[0] == '/')
-                str[0] = '-';
-            char pszLower[MAX_PATH];
-            strlcpy(pszLower, str.c_str(), sizeof(pszLower));
-            strlwr(pszLower);
-            str = pszLower;
-            #endif
-            if (str == "-daemon")
-                fDaemon = true;
-        }
-    }
-
-#ifdef __WXGTK__
-    if (fDaemon || fCommandLine)
-    {
-        // Call the original Initialize while suppressing error messages
-        // and ignoring failure.  If unable to initialize GTK, it fails
-        // near the end so hopefully the last few things don't matter.
-        {
-            wxLogNull logNo;
-            wxApp::Initialize(argc, argv);
-        }
-
-        if (fDaemon)
-        {
-            // Daemonize
-            pid_t pid = fork();
-            if (pid < 0)
-            {
-                fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
-                return false;
-            }
-            if (pid > 0)
-                pthread_exit((void*)0);
-
-            pid_t sid = setsid();
-            if (sid < 0)
-                fprintf(stderr, "Error: setsid() returned %d errno %d\n", sid, errno);
-        }
-
-        return true;
-    }
-#endif
-
-    return wxApp::Initialize(argc, argv);
-}
-
-bool CMyApp::OnInit()
-{
-#if defined(__WXMSW__) && defined(__WXDEBUG__) && defined(GUI)
-    // Disable malfunctioning wxWidgets debug assertion
-    extern int g_isPainting;
-    g_isPainting = 10000;
-#endif
-#if defined(__WXMSW__ ) || defined(__WXMAC_OSX__)
-    SetAppName("Bitcoin");
-#else
-    SetAppName("bitcoin");
-#endif
-#ifdef __WXMSW__
-#if wxUSE_UNICODE
-    // Hack to set wxConvLibc codepage to UTF-8 on Windows,
-    // may break if wxMBConv_win32 implementation in strconv.cpp changes.
-    class wxMBConv_win32 : public wxMBConv
-    {
-    public:
-        long m_CodePage;
-        size_t m_minMBCharWidth;
-    };
-    if (((wxMBConv_win32*)&wxConvLibc)->m_CodePage == CP_ACP)
-        ((wxMBConv_win32*)&wxConvLibc)->m_CodePage = CP_UTF8;
-#endif
-#endif
-
-    // Load locale/<lang>/LC_MESSAGES/bitcoin.mo language file
-    g_locale.Init(wxLANGUAGE_DEFAULT, 0);
-    g_locale.AddCatalogLookupPathPrefix("locale");
-#ifndef __WXMSW__
-    g_locale.AddCatalogLookupPathPrefix("/usr/share/locale");
-    g_locale.AddCatalogLookupPathPrefix("/usr/local/share/locale");
-#endif
-    g_locale.AddCatalog("wxstd"); // wxWidgets standard translations, if any
-    g_locale.AddCatalog("bitcoin");
-
-#ifdef __WXMSW__
-    HDC hdc = GetDC(NULL);
-    if (hdc)
-    {
-        nScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
-        nScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;
-        ReleaseDC(NULL, hdc);
-    }
-#endif
-
-    return AppInit(argc, argv);
-}
-
-int CMyApp::OnExit()
-{
-    Shutdown(NULL);
-    return wxApp::OnExit();
-}
-
-bool CMyApp::OnExceptionInMainLoop()
-{
-    try
-    {
-        throw;
-    }
-    catch (std::exception& e)
-    {
-        PrintException(&e, "CMyApp::OnExceptionInMainLoop()");
-        wxLogWarning("Exception %s %s", typeid(e).name(), e.what());
-        Sleep(1000);
-        throw;
-    }
-    catch (...)
-    {
-        PrintException(NULL, "CMyApp::OnExceptionInMainLoop()");
-        wxLogWarning("Unknown exception");
-        Sleep(1000);
-        throw;
-    }
-    return true;
-}
-
-void CMyApp::OnUnhandledException()
-{
-    // this shows how we may let some exception propagate uncaught
-    try
-    {
-        throw;
-    }
-    catch (std::exception& e)
-    {
-        PrintException(&e, "CMyApp::OnUnhandledException()");
-        wxLogWarning("Exception %s %s", typeid(e).name(), e.what());
-        Sleep(1000);
-        throw;
-    }
-    catch (...)
-    {
-        PrintException(NULL, "CMyApp::OnUnhandledException()");
-        wxLogWarning("Unknown exception");
-        Sleep(1000);
-        throw;
-    }
-}
-
-void CMyApp::OnFatalException()
-{
-    wxMessageBox(_("Program has crashed and will terminate.  "), "Bitcoin", wxOK | wxICON_ERROR);
-}
diff --git a/src/ui.h b/src/ui.h
deleted file mode 100644 (file)
index 9ee55b7..0000000
--- a/src/ui.h
+++ /dev/null
@@ -1,353 +0,0 @@
-// Copyright (c) 2009-2010 Satoshi Nakamoto
-// Copyright (c) 2011 The Bitcoin developers
-// Distributed under the MIT/X11 software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-#ifndef BITCOIN_UI_H
-#define BITCOIN_UI_H
-
-#include <boost/function.hpp>
-#include "wallet.h"
-
-DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL, -1)
-
-
-
-extern wxLocale g_locale;
-
-
-
-void HandleCtrlA(wxKeyEvent& event);
-void UIThreadCall(boost::function0<void>);
-int ThreadSafeMessageBox(const std::string& message, const std::string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);
-bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindow* parent);
-void CalledSetStatusBar(const std::string& strText, int nField);
-void MainFrameRepaint();
-void CreateMainWindow();
-void SetStartOnSystemStartup(bool fAutoStart);
-
-
-
-
-inline int MyMessageBox(const wxString& message, const wxString& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1)
-{
-#ifdef GUI
-    if (!fDaemon)
-        return wxMessageBox(message, caption, style, parent, x, y);
-#endif
-    printf("wxMessageBox %s: %s\n", std::string(caption).c_str(), std::string(message).c_str());
-    fprintf(stderr, "%s: %s\n", std::string(caption).c_str(), std::string(message).c_str());
-    return wxOK;
-}
-#define wxMessageBox  MyMessageBox
-
-
-
-
-
-
-class CMainFrame : public CMainFrameBase
-{
-protected:
-    // Event handlers
-    void OnNotebookPageChanged(wxNotebookEvent& event);
-    void OnClose(wxCloseEvent& event);
-    void OnIconize(wxIconizeEvent& event);
-    void OnMouseEvents(wxMouseEvent& event);
-    void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }
-    void OnIdle(wxIdleEvent& event);
-    void OnPaint(wxPaintEvent& event);
-    void OnPaintListCtrl(wxPaintEvent& event);
-    void OnMenuFileExit(wxCommandEvent& event);
-    void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);
-    void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);
-    void OnMenuOptionsEncryptWallet(wxCommandEvent& event);
-    void OnMenuOptionsChangeWalletPassphrase(wxCommandEvent& event);
-    void OnMenuOptionsOptions(wxCommandEvent& event);
-    void OnMenuHelpAbout(wxCommandEvent& event);
-    void OnButtonSend(wxCommandEvent& event);
-    void OnButtonAddressBook(wxCommandEvent& event);
-    void OnSetFocusAddress(wxFocusEvent& event);
-    void OnMouseEventsAddress(wxMouseEvent& event);
-    void OnButtonNew(wxCommandEvent& event);
-    void OnButtonCopy(wxCommandEvent& event);
-    void OnListColBeginDrag(wxListEvent& event);
-    void OnListItemActivated(wxListEvent& event);
-    void OnListItemActivatedProductsSent(wxListEvent& event);
-    void OnListItemActivatedOrdersSent(wxListEvent& event);
-    void OnListItemActivatedOrdersReceived(wxListEvent& event);
-       
-public:
-    /** Constructor */
-    CMainFrame(wxWindow* parent);
-    ~CMainFrame();
-
-    // Custom
-    enum
-    {
-        ALL = 0,
-        SENTRECEIVED = 1,
-        SENT = 2,
-        RECEIVED = 3,
-    };
-    int nPage;
-    wxListCtrl* m_listCtrl;
-    bool fShowGenerated;
-    bool fShowSent;
-    bool fShowReceived;
-    bool fRefreshListCtrl;
-    bool fRefreshListCtrlRunning;
-    bool fOnSetFocusAddress;
-    unsigned int nListViewUpdated;
-    bool fRefresh;
-
-    void OnUIThreadCall(wxCommandEvent& event);
-    int GetSortIndex(const std::string& strSort);
-    void InsertLine(bool fNew, int nIndex, uint256 hashKey, std::string strSort, const wxColour& colour, const wxString& str1, const wxString& str2, const wxString& str3, const wxString& str4, const wxString& str5);
-    bool DeleteLine(uint256 hashKey);
-    bool InsertTransaction(const CWalletTx& wtx, bool fNew, int nIndex=-1);
-    void RefreshListCtrl();
-    void RefreshStatusColumn();
-};
-
-
-
-
-class CTxDetailsDialog : public CTxDetailsDialogBase
-{
-protected:
-    // Event handlers
-    void OnButtonOK(wxCommandEvent& event);
-
-public:
-    /** Constructor */
-    CTxDetailsDialog(wxWindow* parent, CWalletTx wtx);
-
-    // State
-    CWalletTx wtx;
-};
-
-
-
-class COptionsDialog : public COptionsDialogBase
-{
-protected:
-    // Event handlers
-    void OnListBox(wxCommandEvent& event);
-    void OnKillFocusTransactionFee(wxFocusEvent& event);
-    void OnCheckBoxUseProxy(wxCommandEvent& event);
-    void OnKillFocusProxy(wxFocusEvent& event);
-
-    void OnButtonOK(wxCommandEvent& event);
-    void OnButtonCancel(wxCommandEvent& event);
-    void OnButtonApply(wxCommandEvent& event);
-
-public:
-    /** Constructor */
-    COptionsDialog(wxWindow* parent);
-
-    // Custom
-    bool fTmpStartOnSystemStartup;
-    bool fTmpMinimizeOnClose;
-    void SelectPage(int nPage);
-    CAddress GetProxyAddr();
-};
-
-
-
-class CAboutDialog : public CAboutDialogBase
-{
-protected:
-    // Event handlers
-    void OnButtonOK(wxCommandEvent& event);
-
-public:
-    /** Constructor */
-    CAboutDialog(wxWindow* parent);
-};
-
-
-
-class CSendDialog : public CSendDialogBase
-{
-protected:
-    // Event handlers
-    void OnKeyDown(wxKeyEvent& event) { HandleCtrlA(event); }
-    void OnKillFocusAmount(wxFocusEvent& event);
-    void OnButtonAddressBook(wxCommandEvent& event);
-    void OnButtonPaste(wxCommandEvent& event);
-    void OnButtonSend(wxCommandEvent& event);
-    void OnButtonCancel(wxCommandEvent& event);
-       
-public:
-    /** Constructor */
-    CSendDialog(wxWindow* parent, const wxString& strAddress="");
-
-    // Custom
-    bool fEnabledPrev;
-    std::string strFromSave;
-    std::string strMessageSave;
-};
-
-
-
-class CSendingDialog : public CSendingDialogBase
-{
-public:
-    // Event handlers
-    void OnClose(wxCloseEvent& event);
-    void OnButtonOK(wxCommandEvent& event);
-    void OnButtonCancel(wxCommandEvent& event);
-    void OnPaint(wxPaintEvent& event);
-       
-public:
-    /** Constructor */
-    CSendingDialog(wxWindow* parent, const CAddress& addrIn, int64 nPriceIn, const CWalletTx& wtxIn);
-    ~CSendingDialog();
-
-    // State
-    CAddress addr;
-    int64 nPrice;
-    CWalletTx wtx;
-    wxDateTime start;
-    char pszStatus[10000];
-    bool fCanCancel;
-    bool fAbort;
-    bool fSuccess;
-    bool fUIDone;
-    bool fWorkDone;
-
-    void Close();
-    void Repaint();
-    bool Status();
-    bool Status(const std::string& str);
-    bool Error(const std::string& str);
-    void StartTransfer();
-    void OnReply2(CDataStream& vRecv);
-    void OnReply3(CDataStream& vRecv);
-};
-
-void SendingDialogStartTransfer(void* parg);
-void SendingDialogOnReply2(void* parg, CDataStream& vRecv);
-void SendingDialogOnReply3(void* parg, CDataStream& vRecv);
-
-
-
-class CAddressBookDialog : public CAddressBookDialogBase
-{
-protected:
-    // Event handlers
-    void OnNotebookPageChanged(wxNotebookEvent& event);
-    void OnListEndLabelEdit(wxListEvent& event);
-    void OnListItemSelected(wxListEvent& event);
-    void OnListItemActivated(wxListEvent& event);
-    void OnButtonDelete(wxCommandEvent& event);
-    void OnButtonCopy(wxCommandEvent& event);
-    void OnButtonEdit(wxCommandEvent& event);
-    void OnButtonNew(wxCommandEvent& event);
-    void OnButtonOK(wxCommandEvent& event);
-    void OnButtonCancel(wxCommandEvent& event);
-    void OnClose(wxCloseEvent& event);
-
-public:
-    /** Constructor */
-    CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn);
-
-    // Custom
-    enum
-    {
-        SENDING = 0,
-        RECEIVING = 1,
-    };
-    int nPage;
-    wxListCtrl* m_listCtrl;
-    bool fDuringSend;
-    wxString GetAddress();
-    wxString GetSelectedAddress();
-    wxString GetSelectedSendingAddress();
-    wxString GetSelectedReceivingAddress();
-    bool CheckIfMine(const std::string& strAddress, const std::string& strTitle);
-};
-
-
-
-class CGetTextFromUserDialog : public CGetTextFromUserDialogBase
-{
-protected:
-    // Event handlers
-    void OnButtonOK(wxCommandEvent& event)     { EndModal(true); }
-    void OnButtonCancel(wxCommandEvent& event) { EndModal(false); }
-    void OnClose(wxCloseEvent& event)          { EndModal(false); }
-
-    void OnKeyDown(wxKeyEvent& event)
-    {
-        if (event.GetKeyCode() == '\r' || event.GetKeyCode() == WXK_NUMPAD_ENTER)
-            EndModal(true);
-        else
-            HandleCtrlA(event);
-    }
-
-public:
-    /** Constructor */
-    CGetTextFromUserDialog(wxWindow* parent,
-                           const std::string& strCaption,
-                           const std::string& strMessage1,
-                           const std::string& strValue1="",
-                           const std::string& strMessage2="",
-                           const std::string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)
-    {
-        int x = GetSize().GetWidth();
-        int y = GetSize().GetHeight();
-        m_staticTextMessage1->SetLabel(strMessage1);
-        m_textCtrl1->SetValue(strValue1);
-        y += wxString(strMessage1).Freq('\n') * 14;
-        if (!strMessage2.empty())
-        {
-            m_staticTextMessage2->Show(true);
-            m_staticTextMessage2->SetLabel(strMessage2);
-            m_textCtrl2->Show(true);
-            m_textCtrl2->SetValue(strValue2);
-            y += 46 + wxString(strMessage2).Freq('\n') * 14;
-        }
-#ifndef __WXMSW__
-        x = x * 114 / 100;
-        y = y * 114 / 100;
-#endif
-        SetSize(x, y);
-    }
-
-    // Custom
-    std::string GetValue()  { return (std::string)m_textCtrl1->GetValue(); }
-    std::string GetValue1() { return (std::string)m_textCtrl1->GetValue(); }
-    std::string GetValue2() { return (std::string)m_textCtrl2->GetValue(); }
-};
-
-
-
-class CMyTaskBarIcon : public wxTaskBarIcon
-{
-protected:
-    // Event handlers
-    void OnLeftButtonDClick(wxTaskBarIconEvent& event);
-    void OnMenuRestore(wxCommandEvent& event);
-    void OnMenuSend(wxCommandEvent& event);
-    void OnMenuOptions(wxCommandEvent& event);
-    void OnUpdateUIGenerate(wxUpdateUIEvent& event);
-    void OnMenuGenerate(wxCommandEvent& event);
-    void OnMenuExit(wxCommandEvent& event);
-
-public:
-    CMyTaskBarIcon() : wxTaskBarIcon()
-    {
-        Show(true);
-    }
-
-    void Show(bool fShow=true);
-    void Hide();
-    void Restore();
-    void UpdateTooltip();
-    virtual wxMenu* CreatePopupMenu();
-
-DECLARE_EVENT_TABLE()
-};
-
-#endif
diff --git a/src/uibase.cpp b/src/uibase.cpp
deleted file mode 100644 (file)
index 4d9a2cb..0000000
+++ /dev/null
@@ -1,1018 +0,0 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 21 2009)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "uibase.h"
-
-#include "xpm/about.xpm"
-#include "xpm/addressbook20.xpm"
-#include "xpm/check.xpm"
-#include "xpm/send20.xpm"
-
-///////////////////////////////////////////////////////////////////////////
-
-CMainFrameBase::CMainFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-       
-       m_menubar = new wxMenuBar( 0 );
-       m_menuFile = new wxMenu();
-       wxMenuItem* m_menuFileExit;
-       m_menuFileExit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuFile->Append( m_menuFileExit );
-       
-       m_menubar->Append( m_menuFile, _("&File") );
-       
-       m_menuOptions = new wxMenu();
-       wxMenuItem* m_menuOptionsChangeYourAddress;
-       m_menuOptionsChangeYourAddress = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Your Receiving Addresses...") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuOptions->Append( m_menuOptionsChangeYourAddress );
-       
-       m_menuOptionsEncryptWallet = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Encrypt Wallet...") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuOptions->Append( m_menuOptionsEncryptWallet );
-       
-       m_menuOptionsChangeWalletPassphrase = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Change Wallet Encryption Passphrase...") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuOptions->Append( m_menuOptionsChangeWalletPassphrase );
-       
-       wxMenuItem* m_menuOptionsOptions;
-       m_menuOptionsOptions = new wxMenuItem( m_menuOptions, wxID_PREFERENCES, wxString( _("&Options...") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuOptions->Append( m_menuOptionsOptions );
-       
-       m_menubar->Append( m_menuOptions, _("&Settings") );
-       
-       m_menuHelp = new wxMenu();
-       wxMenuItem* m_menuHelpAbout;
-       m_menuHelpAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About...") ) , wxEmptyString, wxITEM_NORMAL );
-       m_menuHelp->Append( m_menuHelpAbout );
-       
-       m_menubar->Append( m_menuHelp, _("&Help") );
-       
-       this->SetMenuBar( m_menubar );
-       
-       m_toolBar = this->CreateToolBar( wxTB_FLAT|wxTB_HORZ_TEXT, wxID_ANY );
-       m_toolBar->SetToolBitmapSize( wxSize( 20,20 ) );
-       m_toolBar->SetToolSeparation( 1 );
-       m_toolBar->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
-       
-       m_toolBar->AddTool( wxID_BUTTONSEND, _("Send Coins"), wxBitmap( send20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );
-       m_toolBar->AddTool( wxID_BUTTONRECEIVE, _("Address Book"), wxBitmap( addressbook20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );
-       m_toolBar->Realize();
-       
-       m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
-       wxBoxSizer* bSizer2;
-       bSizer2 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer2->Add( 0, 2, 0, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer85;
-       bSizer85 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_staticText32 = new wxStaticText( this, wxID_ANY, _("Your Bitcoin Address:"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText32->Wrap( -1 );
-       bSizer85->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-       
-       m_textCtrlAddress = new wxTextCtrl( this, wxID_TEXTCTRLADDRESS, wxEmptyString, wxDefaultPosition, wxSize( 340,-1 ), wxTE_READONLY );
-       bSizer85->Add( m_textCtrlAddress, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-       
-       m_buttonNew = new wxButton( this, wxID_BUTTONNEW, _(" &New... "), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT );
-       bSizer85->Add( m_buttonNew, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       m_buttonCopy = new wxButton( this, wxID_BUTTONCOPY, _(" &Copy to Clipboard "), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
-       bSizer85->Add( m_buttonCopy, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-       
-       
-       bSizer85->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       bSizer2->Add( bSizer85, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer3;
-       bSizer3 = new wxBoxSizer( wxHORIZONTAL );
-       
-       wxBoxSizer* bSizer66;
-       bSizer66 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_staticText41 = new wxStaticText( this, wxID_ANY, _("Balance:"), wxDefaultPosition, wxSize( -1,15 ), 0 );
-       m_staticText41->Wrap( -1 );
-       bSizer66->Add( m_staticText41, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-       
-       m_staticTextBalance = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 120,15 ), wxALIGN_RIGHT|wxST_NO_AUTORESIZE );
-       m_staticTextBalance->Wrap( -1 );
-       m_staticTextBalance->SetFont( wxFont( 8, 70, 90, 90, false, wxEmptyString ) );
-       m_staticTextBalance->SetBackgroundColour( wxColour( 255, 255, 255 ) );
-       
-       bSizer66->Add( m_staticTextBalance, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       bSizer3->Add( bSizer66, 1, wxEXPAND|wxALL, 5 );
-       
-       
-       bSizer3->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       wxString m_choiceFilterChoices[] = { _(" All"), _(" Sent"), _(" Received"), _(" In Progress") };
-       int m_choiceFilterNChoices = sizeof( m_choiceFilterChoices ) / sizeof( wxString );
-       m_choiceFilter = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxSize( 110,-1 ), m_choiceFilterNChoices, m_choiceFilterChoices, 0 );
-       m_choiceFilter->SetSelection( 0 );
-       m_choiceFilter->Hide();
-       
-       bSizer3->Add( m_choiceFilter, 0, wxALIGN_BOTTOM|wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       bSizer2->Add( bSizer3, 0, wxEXPAND, 5 );
-       
-       m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-       m_panel9 = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer11;
-       bSizer11 = new wxBoxSizer( wxVERTICAL );
-       
-       m_listCtrlAll = new wxListCtrl( m_panel9, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING );
-       bSizer11->Add( m_listCtrlAll, 1, wxEXPAND, 5 );
-       
-       m_panel9->SetSizer( bSizer11 );
-       m_panel9->Layout();
-       bSizer11->Fit( m_panel9 );
-       m_notebook->AddPage( m_panel9, _("All Transactions"), true );
-       m_panel91 = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer111;
-       bSizer111 = new wxBoxSizer( wxVERTICAL );
-       
-       m_listCtrlSentReceived = new wxListCtrl( m_panel91, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING );
-       bSizer111->Add( m_listCtrlSentReceived, 1, wxEXPAND, 5 );
-       
-       m_panel91->SetSizer( bSizer111 );
-       m_panel91->Layout();
-       bSizer111->Fit( m_panel91 );
-       m_notebook->AddPage( m_panel91, _("Sent/Received"), false );
-       m_panel92 = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer112;
-       bSizer112 = new wxBoxSizer( wxVERTICAL );
-       
-       m_listCtrlSent = new wxListCtrl( m_panel92, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING );
-       bSizer112->Add( m_listCtrlSent, 1, wxEXPAND, 5 );
-       
-       m_panel92->SetSizer( bSizer112 );
-       m_panel92->Layout();
-       bSizer112->Fit( m_panel92 );
-       m_notebook->AddPage( m_panel92, _("Sent"), false );
-       m_panel93 = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer113;
-       bSizer113 = new wxBoxSizer( wxVERTICAL );
-       
-       m_listCtrlReceived = new wxListCtrl( m_panel93, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_DESCENDING );
-       bSizer113->Add( m_listCtrlReceived, 1, wxEXPAND, 5 );
-       
-       m_panel93->SetSizer( bSizer113 );
-       m_panel93->Layout();
-       bSizer113->Fit( m_panel93 );
-       m_notebook->AddPage( m_panel93, _("Received"), false );
-       
-       bSizer2->Add( m_notebook, 1, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer2 );
-       this->Layout();
-       
-       // Connect Events
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CMainFrameBase::OnClose ) );
-       this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( CMainFrameBase::OnIconize ) );
-       this->Connect( wxEVT_IDLE, wxIdleEventHandler( CMainFrameBase::OnIdle ) );
-       this->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_MOTION, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
-       this->Connect( m_menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
-       this->Connect( m_menuOptionsChangeYourAddress->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
-       this->Connect( m_menuOptionsEncryptWallet->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsEncryptWallet ) );
-       this->Connect( m_menuOptionsChangeWalletPassphrase->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeWalletPassphrase ) );
-       this->Connect( m_menuOptionsOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
-       this->Connect( m_menuHelpAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
-       this->Connect( wxID_BUTTONSEND, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonSend ) );
-       this->Connect( wxID_BUTTONRECEIVE, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonAddressBook ) );
-       m_textCtrlAddress->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( CMainFrameBase::OnKeyDown ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_MOTION, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( CMainFrameBase::OnSetFocusAddress ), NULL, this );
-       m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonNew ), NULL, this );
-       m_buttonCopy->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonCopy ), NULL, this );
-       m_notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CMainFrameBase::OnNotebookPageChanged ), NULL, this );
-       m_listCtrlAll->Connect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlAll->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlAll->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlSentReceived->Connect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlSentReceived->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSentReceived->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlSent->Connect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlSent->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSent->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlReceived->Connect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlReceived->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlReceived->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-}
-
-CMainFrameBase::~CMainFrameBase()
-{
-       // Disconnect Events
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CMainFrameBase::OnClose ) );
-       this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( CMainFrameBase::OnIconize ) );
-       this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( CMainFrameBase::OnIdle ) );
-       this->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_RIGHT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_MOTION, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
-       this->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsEncryptWallet ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeWalletPassphrase ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
-       this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
-       this->Disconnect( wxID_BUTTONSEND, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonSend ) );
-       this->Disconnect( wxID_BUTTONRECEIVE, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonAddressBook ) );
-       m_textCtrlAddress->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( CMainFrameBase::OnKeyDown ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_MIDDLE_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_RIGHT_UP, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_MOTION, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_MIDDLE_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_RIGHT_DCLICK, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( CMainFrameBase::OnSetFocusAddress ), NULL, this );
-       m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonNew ), NULL, this );
-       m_buttonCopy->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonCopy ), NULL, this );
-       m_notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CMainFrameBase::OnNotebookPageChanged ), NULL, this );
-       m_listCtrlAll->Disconnect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlAll->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlAll->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlSentReceived->Disconnect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlSentReceived->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSentReceived->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlSent->Disconnect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlSent->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSent->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-       m_listCtrlReceived->Disconnect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );
-       m_listCtrlReceived->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );
-       m_listCtrlReceived->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaintListCtrl ), NULL, this );
-}
-
-CTxDetailsDialogBase::CTxDetailsDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer64;
-       bSizer64 = new wxBoxSizer( wxVERTICAL );
-       
-       wxBoxSizer* bSizer66;
-       bSizer66 = new wxBoxSizer( wxVERTICAL );
-       
-       m_htmlWin = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
-       bSizer66->Add( m_htmlWin, 1, wxALL|wxEXPAND, 5 );
-       
-       bSizer64->Add( bSizer66, 1, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer65;
-       bSizer65 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer65->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer64->Add( bSizer65, 0, wxALIGN_RIGHT, 5 );
-       
-       this->SetSizer( bSizer64 );
-       this->Layout();
-       
-       // Connect Events
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CTxDetailsDialogBase::OnButtonOK ), NULL, this );
-}
-
-CTxDetailsDialogBase::~CTxDetailsDialogBase()
-{
-       // Disconnect Events
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CTxDetailsDialogBase::OnButtonOK ), NULL, this );
-}
-
-COptionsDialogBase::COptionsDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer55;
-       bSizer55 = new wxBoxSizer( wxVERTICAL );
-       
-       wxBoxSizer* bSizer66;
-       bSizer66 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_listBox = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxSize( 110,-1 ), 0, NULL, wxLB_NEEDED_SB|wxLB_SINGLE ); 
-       bSizer66->Add( m_listBox, 0, wxEXPAND|wxRIGHT, 5 );
-       
-       m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-       m_scrolledWindow->SetScrollRate( 5, 5 );
-       wxBoxSizer* bSizer63;
-       bSizer63 = new wxBoxSizer( wxVERTICAL );
-       
-       m_panelMain = new wxPanel( m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer69;
-       bSizer69 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer69->Add( 0, 16, 0, wxEXPAND, 5 );
-       
-       m_checkBoxStartOnSystemStartup = new wxCheckBox( m_panelMain, wxID_ANY, _("&Start Bitcoin on system startup"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_checkBoxStartOnSystemStartup, 0, wxALL, 5 );
-       
-       m_checkBoxMinimizeToTray = new wxCheckBox( m_panelMain, wxID_ANY, _("&Minimize to the tray instead of the taskbar"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_checkBoxMinimizeToTray, 0, wxALL, 5 );
-       
-       m_checkBoxUseUPnP = new wxCheckBox( m_panelMain, wxID_ANY, _("Map port using &UPnP"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_checkBoxUseUPnP, 0, wxALL, 5 );
-       
-       m_checkBoxMinimizeOnClose = new wxCheckBox( m_panelMain, wxID_ANY, _("M&inimize to the tray on close"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_checkBoxMinimizeOnClose, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       wxBoxSizer* bSizer102;
-       bSizer102 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_checkBoxUseProxy = new wxCheckBox( m_panelMain, wxID_ANY, _("&Connect through socks4 proxy (requires restart to apply): "), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer102->Add( m_checkBoxUseProxy, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       bSizer69->Add( bSizer102, 1, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer103;
-       bSizer103 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer103->Add( 18, 0, 0, 0, 5 );
-       
-       m_staticTextProxyIP = new wxStaticText( m_panelMain, wxID_ANY, _("Proxy &IP:"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextProxyIP->Wrap( -1 );
-       bSizer103->Add( m_staticTextProxyIP, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       m_textCtrlProxyIP = new wxTextCtrl( m_panelMain, wxID_PROXYIP, wxEmptyString, wxDefaultPosition, wxSize( 140,-1 ), 0 );
-       m_textCtrlProxyIP->SetMaxLength( 15 ); 
-       bSizer103->Add( m_textCtrlProxyIP, 0, wxALIGN_CENTER_VERTICAL, 5 );
-       
-       m_staticTextProxyPort = new wxStaticText( m_panelMain, wxID_ANY, _(" &Port:"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextProxyPort->Wrap( -1 );
-       bSizer103->Add( m_staticTextProxyPort, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       m_textCtrlProxyPort = new wxTextCtrl( m_panelMain, wxID_PROXYPORT, wxEmptyString, wxDefaultPosition, wxSize( 55,-1 ), 0 );
-       m_textCtrlProxyPort->SetMaxLength( 5 ); 
-       bSizer103->Add( m_textCtrlProxyPort, 0, wxALIGN_CENTER_VERTICAL, 5 );
-       
-       bSizer69->Add( bSizer103, 1, wxEXPAND, 5 );
-       
-       
-       bSizer69->Add( 0, 1, 0, 0, 5 );
-       
-       m_staticText32 = new wxStaticText( m_panelMain, wxID_ANY, _("Optional transaction fee per KB that helps make sure your transactions are processed quickly.  Most transactions are 1KB.  Fee 0.01 recommended."), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText32->Wrap( 365 );
-       bSizer69->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer56;
-       bSizer56 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_staticText31 = new wxStaticText( m_panelMain, wxID_ANY, _("Pay transaction fee:"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText31->Wrap( -1 );
-       bSizer56->Add( m_staticText31, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-       
-       m_textCtrlTransactionFee = new wxTextCtrl( m_panelMain, wxID_TRANSACTIONFEE, wxEmptyString, wxDefaultPosition, wxSize( 70,-1 ), 0 );
-       bSizer56->Add( m_textCtrlTransactionFee, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       bSizer69->Add( bSizer56, 0, wxEXPAND, 5 );
-       
-       m_panelMain->SetSizer( bSizer69 );
-       m_panelMain->Layout();
-       bSizer69->Fit( m_panelMain );
-       bSizer63->Add( m_panelMain, 0, wxEXPAND, 5 );
-       
-       m_panelTest2 = new wxPanel( m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer64;
-       bSizer64 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer64->Add( 0, 16, 0, wxEXPAND, 5 );
-       
-       m_staticText321 = new wxStaticText( m_panelTest2, wxID_ANY, _("// [don't translate] Test panel 2 for future expansion"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText321->Wrap( -1 );
-       bSizer64->Add( m_staticText321, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       m_staticText69 = new wxStaticText( m_panelTest2, wxID_ANY, _("// [don't translate] Let's not start multiple pages until the first page is filled up"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText69->Wrap( -1 );
-       bSizer64->Add( m_staticText69, 0, wxALL, 5 );
-       
-       m_panelTest2->SetSizer( bSizer64 );
-       m_panelTest2->Layout();
-       bSizer64->Fit( m_panelTest2 );
-       bSizer63->Add( m_panelTest2, 0, wxEXPAND, 5 );
-       
-       m_scrolledWindow->SetSizer( bSizer63 );
-       m_scrolledWindow->Layout();
-       bSizer63->Fit( m_scrolledWindow );
-       bSizer66->Add( m_scrolledWindow, 1, wxEXPAND|wxLEFT, 5 );
-       
-       bSizer55->Add( bSizer66, 1, wxEXPAND|wxALL, 9 );
-       
-       wxBoxSizer* bSizer58;
-       bSizer58 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer58->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer58->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonApply = new wxButton( this, wxID_APPLY, _("&Apply"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer58->Add( m_buttonApply, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer55->Add( bSizer58, 0, wxALIGN_RIGHT, 5 );
-       
-       this->SetSizer( bSizer55 );
-       this->Layout();
-       
-       // Connect Events
-       m_listBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
-       m_checkBoxMinimizeToTray->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
-       m_checkBoxUseProxy->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
-       m_textCtrlProxyIP->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
-       m_textCtrlProxyPort->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
-       m_textCtrlTransactionFee->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusTransactionFee ), NULL, this );
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonCancel ), NULL, this );
-       m_buttonApply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonApply ), NULL, this );
-}
-
-COptionsDialogBase::~COptionsDialogBase()
-{
-       // Disconnect Events
-       m_listBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
-       m_checkBoxMinimizeToTray->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
-       m_checkBoxUseProxy->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
-       m_textCtrlProxyIP->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
-       m_textCtrlProxyPort->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
-       m_textCtrlTransactionFee->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusTransactionFee ), NULL, this );
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonCancel ), NULL, this );
-       m_buttonApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnButtonApply ), NULL, this );
-}
-
-CAboutDialogBase::CAboutDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer63;
-       bSizer63 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_bitmap = new wxStaticBitmap( this, wxID_ANY, wxBitmap( about_xpm ), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer63->Add( m_bitmap, 0, 0, 5 );
-       
-       wxBoxSizer* bSizer60;
-       bSizer60 = new wxBoxSizer( wxVERTICAL );
-       
-       wxBoxSizer* bSizer62;
-       bSizer62 = new wxBoxSizer( wxHORIZONTAL );
-       
-       wxBoxSizer* bSizer631;
-       bSizer631 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer631->Add( 0, 65, 0, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer64;
-       bSizer64 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_staticText40 = new wxStaticText( this, wxID_ANY, _("Bitcoin "), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText40->Wrap( -1 );
-       m_staticText40->SetFont( wxFont( 10, 74, 90, 92, false, wxT("Tahoma") ) );
-       
-       bSizer64->Add( m_staticText40, 0, wxALIGN_BOTTOM|wxTOP|wxBOTTOM|wxLEFT, 5 );
-       
-       m_staticTextVersion = new wxStaticText( this, wxID_ANY, _("version"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextVersion->Wrap( -1 );
-       m_staticTextVersion->SetFont( wxFont( 10, 74, 90, 90, false, wxT("Tahoma") ) );
-       
-       bSizer64->Add( m_staticTextVersion, 0, wxALIGN_BOTTOM|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-       
-       bSizer631->Add( bSizer64, 0, wxEXPAND, 5 );
-       
-       
-       bSizer631->Add( 0, 4, 0, wxEXPAND, 5 );
-       
-       m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2011 Bitcoin Developers\n\nThis is experimental software.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nCOPYING or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard."), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextMain->Wrap( -1 );
-       bSizer631->Add( m_staticTextMain, 0, wxALL, 5 );
-       
-       
-       bSizer631->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       bSizer62->Add( bSizer631, 1, wxEXPAND, 5 );
-       
-       bSizer60->Add( bSizer62, 1, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer61;
-       bSizer61 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer61->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer61->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 6 );
-       
-       bSizer60->Add( bSizer61, 0, wxALIGN_RIGHT|wxEXPAND|wxRIGHT, 2 );
-       
-       bSizer63->Add( bSizer60, 1, wxEXPAND|wxLEFT, 5 );
-       
-       this->SetSizer( bSizer63 );
-       this->Layout();
-       
-       // Connect Events
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAboutDialogBase::OnButtonOK ), NULL, this );
-}
-
-CAboutDialogBase::~CAboutDialogBase()
-{
-       // Disconnect Events
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAboutDialogBase::OnButtonOK ), NULL, this );
-}
-
-CSendDialogBase::CSendDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer21;
-       bSizer21 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer21->Add( 0, 5, 0, wxEXPAND, 5 );
-       
-       wxFlexGridSizer* fgSizer1;
-       fgSizer1 = new wxFlexGridSizer( 0, 2, 0, 0 );
-       fgSizer1->AddGrowableCol( 1 );
-       fgSizer1->SetFlexibleDirection( wxBOTH );
-       fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-       
-       
-       fgSizer1->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       m_staticTextInstructions = new wxStaticText( this, wxID_ANY, _("Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextInstructions->Wrap( -1 );
-       fgSizer1->Add( m_staticTextInstructions, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer47;
-       bSizer47 = new wxBoxSizer( wxHORIZONTAL );
-       
-       bSizer47->SetMinSize( wxSize( 70,-1 ) ); 
-       
-       bSizer47->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_bitmapCheckMark = new wxStaticBitmap( this, wxID_ANY, wxBitmap( check_xpm ), wxDefaultPosition, wxSize( 16,16 ), 0 );
-       bSizer47->Add( m_bitmapCheckMark, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-       
-       m_staticText36 = new wxStaticText( this, wxID_ANY, _("Pay &To:"), wxDefaultPosition, wxSize( -1,-1 ), wxALIGN_RIGHT );
-       m_staticText36->Wrap( -1 );
-       bSizer47->Add( m_staticText36, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-       
-       fgSizer1->Add( bSizer47, 1, wxEXPAND|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer19;
-       bSizer19 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_textCtrlAddress = new wxTextCtrl( this, wxID_TEXTCTRLPAYTO, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer19->Add( m_textCtrlAddress, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       wxBoxSizer* bSizer66;
-       bSizer66 = new wxBoxSizer( wxHORIZONTAL );
-       
-       m_buttonPaste = new wxButton( this, wxID_BUTTONPASTE, _("&Paste"), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT );
-       bSizer66->Add( m_buttonPaste, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 );
-       
-       m_buttonAddress = new wxButton( this, wxID_BUTTONADDRESSBOOK, _(" Address &Book..."), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer66->Add( m_buttonAddress, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 );
-       
-       bSizer19->Add( bSizer66, 0, wxALIGN_CENTER_VERTICAL, 5 );
-       
-       fgSizer1->Add( bSizer19, 1, wxEXPAND|wxRIGHT, 5 );
-       
-       m_staticText19 = new wxStaticText( this, wxID_ANY, _("&Amount:"), wxDefaultPosition, wxSize( -1,-1 ), wxALIGN_RIGHT );
-       m_staticText19->Wrap( -1 );
-       fgSizer1->Add( m_staticText19, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT|wxALIGN_RIGHT, 5 );
-       
-       m_textCtrlAmount = new wxTextCtrl( this, wxID_TEXTCTRLAMOUNT, wxEmptyString, wxDefaultPosition, wxSize( 145,-1 ), 0 );
-       m_textCtrlAmount->SetMaxLength( 20 ); 
-       m_textCtrlAmount->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
-       
-       fgSizer1->Add( m_textCtrlAmount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       m_staticText20 = new wxStaticText( this, wxID_ANY, _("T&ransfer:"), wxDefaultPosition, wxSize( -1,-1 ), wxALIGN_RIGHT );
-       m_staticText20->Wrap( -1 );
-       m_staticText20->Hide();
-       
-       fgSizer1->Add( m_staticText20, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT, 5 );
-       
-       wxString m_choiceTransferTypeChoices[] = { _(" Standard") };
-       int m_choiceTransferTypeNChoices = sizeof( m_choiceTransferTypeChoices ) / sizeof( wxString );
-       m_choiceTransferType = new wxChoice( this, wxID_CHOICETRANSFERTYPE, wxDefaultPosition, wxDefaultSize, m_choiceTransferTypeNChoices, m_choiceTransferTypeChoices, 0 );
-       m_choiceTransferType->SetSelection( 0 );
-       m_choiceTransferType->Hide();
-       
-       fgSizer1->Add( m_choiceTransferType, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-       
-       
-       fgSizer1->Add( 0, 3, 0, wxEXPAND, 5 );
-       
-       
-       fgSizer1->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       bSizer21->Add( fgSizer1, 0, wxEXPAND|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer672;
-       bSizer672 = new wxBoxSizer( wxHORIZONTAL );
-       
-       bSizer21->Add( bSizer672, 0, wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer23;
-       bSizer23 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer23->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonSend = new wxButton( this, wxID_BUTTONSEND, _("&Send"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       m_buttonSend->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
-       
-       bSizer23->Add( m_buttonSend, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer23->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer21->Add( bSizer23, 0, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer21 );
-       this->Layout();
-       
-       // Connect Events
-       m_textCtrlAddress->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( CSendDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrlAddress->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( CSendDialogBase::OnTextAddress ), NULL, this );
-       m_buttonPaste->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonPaste ), NULL, this );
-       m_buttonAddress->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonAddressBook ), NULL, this );
-       m_textCtrlAmount->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( CSendDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrlAmount->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( CSendDialogBase::OnKillFocusAmount ), NULL, this );
-       m_buttonSend->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonSend ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CSendDialogBase::~CSendDialogBase()
-{
-       // Disconnect Events
-       m_textCtrlAddress->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( CSendDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrlAddress->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( CSendDialogBase::OnTextAddress ), NULL, this );
-       m_buttonPaste->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonPaste ), NULL, this );
-       m_buttonAddress->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonAddressBook ), NULL, this );
-       m_textCtrlAmount->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( CSendDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrlAmount->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( CSendDialogBase::OnKillFocusAmount ), NULL, this );
-       m_buttonSend->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonSend ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CSendingDialogBase::CSendingDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer68;
-       bSizer68 = new wxBoxSizer( wxVERTICAL );
-       
-       m_staticTextSending = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,14 ), 0 );
-       m_staticTextSending->Wrap( -1 );
-       bSizer68->Add( m_staticTextSending, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 );
-       
-       m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("\n\nConnecting..."), wxDefaultPosition, wxDefaultSize, wxTE_CENTRE|wxTE_MULTILINE|wxTE_NO_VSCROLL|wxTE_READONLY|wxNO_BORDER );
-       m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-       
-       bSizer68->Add( m_textCtrlStatus, 1, wxEXPAND|wxRIGHT|wxLEFT, 10 );
-       
-       wxBoxSizer* bSizer69;
-       bSizer69 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer69->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonOK = new wxButton( this, wxID_ANY, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_buttonOK->Enable( false );
-       
-       bSizer69->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer68->Add( bSizer69, 0, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer68 );
-       this->Layout();
-       
-       // Connect Events
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CSendingDialogBase::OnClose ) );
-       this->Connect( wxEVT_PAINT, wxPaintEventHandler( CSendingDialogBase::OnPaint ) );
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendingDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendingDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CSendingDialogBase::~CSendingDialogBase()
-{
-       // Disconnect Events
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CSendingDialogBase::OnClose ) );
-       this->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CSendingDialogBase::OnPaint ) );
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendingDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CSendingDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CYourAddressDialogBase::CYourAddressDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer68;
-       bSizer68 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer68->Add( 0, 5, 0, wxEXPAND, 5 );
-       
-       m_staticText45 = new wxStaticText( this, wxID_ANY, _("These are your Bitcoin addresses for receiving payments.  You may want to give a different one to each sender so you can keep track of who is paying you.  The highlighted address is displayed in the main window."), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText45->Wrap( 590 );
-       bSizer68->Add( m_staticText45, 0, wxALL, 5 );
-       
-       m_listCtrl = new wxListCtrl( this, wxID_LISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );
-       bSizer68->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 );
-       
-       wxBoxSizer* bSizer69;
-       bSizer69 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer69->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonRename = new wxButton( this, wxID_BUTTONRENAME, _("&Edit..."), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_buttonRename, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonNew = new wxButton( this, wxID_BUTTONNEW, _(" &New Address... "), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonNew, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCopy = new wxButton( this, wxID_BUTTONCOPY, _(" &Copy to Clipboard "), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonCopy, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       m_buttonCancel->Hide();
-       
-       bSizer69->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer68->Add( bSizer69, 0, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer68 );
-       this->Layout();
-       
-       // Connect Events
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CYourAddressDialogBase::OnClose ) );
-       m_listCtrl->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CYourAddressDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrl->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CYourAddressDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrl->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CYourAddressDialogBase::OnListItemSelected ), NULL, this );
-       m_buttonRename->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonRename ), NULL, this );
-       m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonNew ), NULL, this );
-       m_buttonCopy->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonCopy ), NULL, this );
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CYourAddressDialogBase::~CYourAddressDialogBase()
-{
-       // Disconnect Events
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CYourAddressDialogBase::OnClose ) );
-       m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CYourAddressDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CYourAddressDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CYourAddressDialogBase::OnListItemSelected ), NULL, this );
-       m_buttonRename->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonRename ), NULL, this );
-       m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonNew ), NULL, this );
-       m_buttonCopy->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonCopy ), NULL, this );
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CYourAddressDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CAddressBookDialogBase::CAddressBookDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer58;
-       bSizer58 = new wxBoxSizer( wxVERTICAL );
-       
-       m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-       m_panelSending = new wxPanel( m_notebook, wxID_PANELSENDING, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer68;
-       bSizer68 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer68->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       m_staticText55 = new wxStaticText( m_panelSending, wxID_ANY, _("Bitcoin Address"), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText55->Wrap( -1 );
-       m_staticText55->Hide();
-       
-       bSizer68->Add( m_staticText55, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       m_listCtrlSending = new wxListCtrl( m_panelSending, wxID_LISTCTRLSENDING, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );
-       bSizer68->Add( m_listCtrlSending, 1, wxALL|wxEXPAND, 5 );
-       
-       m_panelSending->SetSizer( bSizer68 );
-       m_panelSending->Layout();
-       bSizer68->Fit( m_panelSending );
-       m_notebook->AddPage( m_panelSending, _("Sending"), false );
-       m_panelReceiving = new wxPanel( m_notebook, wxID_PANELRECEIVING, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
-       wxBoxSizer* bSizer681;
-       bSizer681 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer681->Add( 0, 0, 0, wxEXPAND, 5 );
-       
-       m_staticText45 = new wxStaticText( m_panelReceiving, wxID_ANY, _("These are your Bitcoin addresses for receiving payments.  You can give a different one to each sender to keep track of who is paying you.  The highlighted address will be displayed in the main window."), wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticText45->Wrap( 570 );
-       bSizer681->Add( m_staticText45, 0, wxTOP|wxRIGHT|wxLEFT, 6 );
-       
-       
-       bSizer681->Add( 0, 2, 0, wxEXPAND, 5 );
-       
-       m_listCtrlReceiving = new wxListCtrl( m_panelReceiving, wxID_LISTCTRLRECEIVING, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );
-       bSizer681->Add( m_listCtrlReceiving, 1, wxALL|wxEXPAND, 5 );
-       
-       m_panelReceiving->SetSizer( bSizer681 );
-       m_panelReceiving->Layout();
-       bSizer681->Fit( m_panelReceiving );
-       m_notebook->AddPage( m_panelReceiving, _("Receiving"), true );
-       
-       bSizer58->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       wxBoxSizer* bSizer69;
-       bSizer69 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer69->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonDelete = new wxButton( this, wxID_BUTTONDELETE, _("&Delete"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_buttonDelete, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCopy = new wxButton( this, wxID_BUTTONCOPY, _(" &Copy to Clipboard "), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonCopy, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonEdit = new wxButton( this, wxID_BUTTONEDIT, _("&Edit..."), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_buttonEdit, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonNew = new wxButton( this, wxID_BUTTONNEW, _(" &New Address... "), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer69->Add( m_buttonNew, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer69->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer58->Add( bSizer69, 0, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer58 );
-       this->Layout();
-       
-       // Connect Events
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CAddressBookDialogBase::OnClose ) );
-       m_notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CAddressBookDialogBase::OnNotebookPageChanged ), NULL, this );
-       m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );
-       m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );
-       m_buttonDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );
-       m_buttonCopy->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCopy ), NULL, this );
-       m_buttonEdit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonEdit ), NULL, this );
-       m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonNew ), NULL, this );
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CAddressBookDialogBase::~CAddressBookDialogBase()
-{
-       // Disconnect Events
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CAddressBookDialogBase::OnClose ) );
-       m_notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CAddressBookDialogBase::OnNotebookPageChanged ), NULL, this );
-       m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );
-       m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );
-       m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );
-       m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );
-       m_buttonDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );
-       m_buttonCopy->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCopy ), NULL, this );
-       m_buttonEdit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonEdit ), NULL, this );
-       m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonNew ), NULL, this );
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CGetTextFromUserDialogBase::CGetTextFromUserDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
-       this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-       
-       wxBoxSizer* bSizer79;
-       bSizer79 = new wxBoxSizer( wxVERTICAL );
-       
-       wxBoxSizer* bSizer81;
-       bSizer81 = new wxBoxSizer( wxVERTICAL );
-       
-       
-       bSizer81->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_staticTextMessage1 = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextMessage1->Wrap( -1 );
-       bSizer81->Add( m_staticTextMessage1, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       m_textCtrl1 = new wxTextCtrl( this, wxID_TEXTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
-       bSizer81->Add( m_textCtrl1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-       
-       m_staticTextMessage2 = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
-       m_staticTextMessage2->Wrap( -1 );
-       m_staticTextMessage2->Hide();
-       
-       bSizer81->Add( m_staticTextMessage2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-       
-       m_textCtrl2 = new wxTextCtrl( this, wxID_TEXTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
-       m_textCtrl2->Hide();
-       
-       bSizer81->Add( m_textCtrl2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-       
-       
-       bSizer81->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       bSizer79->Add( bSizer81, 1, wxEXPAND|wxALL, 10 );
-       
-       wxBoxSizer* bSizer80;
-       bSizer80 = new wxBoxSizer( wxHORIZONTAL );
-       
-       
-       bSizer80->Add( 0, 0, 1, wxEXPAND, 5 );
-       
-       m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
-       bSizer80->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
-       bSizer80->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-       
-       bSizer79->Add( bSizer80, 0, wxEXPAND, 5 );
-       
-       this->SetSizer( bSizer79 );
-       this->Layout();
-       
-       // Connect Events
-       this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CGetTextFromUserDialogBase::OnClose ) );
-       m_textCtrl1->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( CGetTextFromUserDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrl2->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( CGetTextFromUserDialogBase::OnKeyDown ), NULL, this );
-       m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CGetTextFromUserDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CGetTextFromUserDialogBase::OnButtonCancel ), NULL, this );
-}
-
-CGetTextFromUserDialogBase::~CGetTextFromUserDialogBase()
-{
-       // Disconnect Events
-       this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CGetTextFromUserDialogBase::OnClose ) );
-       m_textCtrl1->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( CGetTextFromUserDialogBase::OnKeyDown ), NULL, this );
-       m_textCtrl2->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( CGetTextFromUserDialogBase::OnKeyDown ), NULL, this );
-       m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CGetTextFromUserDialogBase::OnButtonOK ), NULL, this );
-       m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CGetTextFromUserDialogBase::OnButtonCancel ), NULL, this );
-}
diff --git a/src/uibase.h b/src/uibase.h
deleted file mode 100644 (file)
index ca0730b..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 21 2009)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#ifndef __uibase__
-#define __uibase__
-
-#include <wx/intl.h>
-
-#include <wx/string.h>
-#include <wx/bitmap.h>
-#include <wx/image.h>
-#include <wx/icon.h>
-#include <wx/menu.h>
-#include <wx/gdicmn.h>
-#include <wx/font.h>
-#include <wx/colour.h>
-#include <wx/settings.h>
-#include <wx/toolbar.h>
-#include <wx/statusbr.h>
-#include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/button.h>
-#include <wx/sizer.h>
-#include <wx/choice.h>
-#include <wx/listctrl.h>
-#include <wx/panel.h>
-#include <wx/notebook.h>
-#include <wx/frame.h>
-#include <wx/html/htmlwin.h>
-#include <wx/dialog.h>
-#include <wx/listbox.h>
-#include <wx/checkbox.h>
-#include <wx/scrolwin.h>
-#include <wx/statbmp.h>
-
-///////////////////////////////////////////////////////////////////////////
-
-#define wxID_MAINFRAME 1000
-#define wxID_BUTTONSEND 1001
-#define wxID_BUTTONRECEIVE 1002
-#define wxID_TEXTCTRLADDRESS 1003
-#define wxID_BUTTONNEW 1004
-#define wxID_BUTTONCOPY 1005
-#define wxID_PROXYIP 1006
-#define wxID_PROXYPORT 1007
-#define wxID_TRANSACTIONFEE 1008
-#define wxID_TEXTCTRLPAYTO 1009
-#define wxID_BUTTONPASTE 1010
-#define wxID_BUTTONADDRESSBOOK 1011
-#define wxID_TEXTCTRLAMOUNT 1012
-#define wxID_CHOICETRANSFERTYPE 1013
-#define wxID_LISTCTRL 1014
-#define wxID_BUTTONRENAME 1015
-#define wxID_PANELSENDING 1016
-#define wxID_LISTCTRLSENDING 1017
-#define wxID_PANELRECEIVING 1018
-#define wxID_LISTCTRLRECEIVING 1019
-#define wxID_BUTTONDELETE 1020
-#define wxID_BUTTONEDIT 1021
-#define wxID_TEXTCTRL 1022
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CMainFrameBase
-///////////////////////////////////////////////////////////////////////////////
-class CMainFrameBase : public wxFrame 
-{
-       private:
-       
-       protected:
-               wxMenuBar* m_menubar;
-               wxMenu* m_menuFile;
-               wxMenu* m_menuHelp;
-               wxToolBar* m_toolBar;
-               
-               wxStaticText* m_staticText32;
-               wxButton* m_buttonNew;
-               wxButton* m_buttonCopy;
-               
-               wxStaticText* m_staticText41;
-               wxStaticText* m_staticTextBalance;
-               
-               wxChoice* m_choiceFilter;
-               wxNotebook* m_notebook;
-               wxPanel* m_panel9;
-               wxPanel* m_panel91;
-               wxPanel* m_panel92;
-               wxPanel* m_panel93;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
-               virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); }
-               virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); }
-               virtual void OnMouseEvents( wxMouseEvent& event ) { event.Skip(); }
-               virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
-               virtual void OnMenuFileExit( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnMenuOptionsChangeYourAddress( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnMenuOptionsEncryptWallet( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnMenuOptionsChangeWalletPassphrase( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnMenuOptionsOptions( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnMenuHelpAbout( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonSend( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonAddressBook( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnKeyDown( wxKeyEvent& event ) { event.Skip(); }
-               virtual void OnMouseEventsAddress( wxMouseEvent& event ) { event.Skip(); }
-               virtual void OnSetFocusAddress( wxFocusEvent& event ) { event.Skip(); }
-               virtual void OnButtonNew( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCopy( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnNotebookPageChanged( wxNotebookEvent& event ) { event.Skip(); }
-               virtual void OnListColBeginDrag( wxListEvent& event ) { event.Skip(); }
-               virtual void OnListItemActivated( wxListEvent& event ) { event.Skip(); }
-               virtual void OnPaintListCtrl( wxPaintEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               wxMenu* m_menuOptions;
-               wxMenuItem* m_menuOptionsEncryptWallet;
-               wxMenuItem* m_menuOptionsChangeWalletPassphrase;
-               wxStatusBar* m_statusBar;
-               wxTextCtrl* m_textCtrlAddress;
-               wxListCtrl* m_listCtrlAll;
-               wxListCtrl* m_listCtrlSentReceived;
-               wxListCtrl* m_listCtrlSent;
-               wxListCtrl* m_listCtrlReceived;
-               
-               CMainFrameBase( wxWindow* parent, wxWindowID id = wxID_MAINFRAME, const wxString& title = _("Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 723,484 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );
-               ~CMainFrameBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CTxDetailsDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CTxDetailsDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               wxHtmlWindow* m_htmlWin;
-               wxButton* m_buttonOK;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               CTxDetailsDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Transaction Details"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 620,450 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
-               ~CTxDetailsDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class COptionsDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class COptionsDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               wxListBox* m_listBox;
-               wxScrolledWindow* m_scrolledWindow;
-               wxPanel* m_panelMain;
-               
-               wxCheckBox* m_checkBoxStartOnSystemStartup;
-               wxCheckBox* m_checkBoxMinimizeToTray;
-               wxCheckBox* m_checkBoxUseUPnP;
-               wxCheckBox* m_checkBoxMinimizeOnClose;
-               wxCheckBox* m_checkBoxUseProxy;
-               
-               wxStaticText* m_staticTextProxyIP;
-               wxTextCtrl* m_textCtrlProxyIP;
-               wxStaticText* m_staticTextProxyPort;
-               wxTextCtrl* m_textCtrlProxyPort;
-               
-               wxStaticText* m_staticText32;
-               wxStaticText* m_staticText31;
-               wxTextCtrl* m_textCtrlTransactionFee;
-               wxPanel* m_panelTest2;
-               
-               wxStaticText* m_staticText321;
-               wxStaticText* m_staticText69;
-               wxButton* m_buttonOK;
-               wxButton* m_buttonCancel;
-               wxButton* m_buttonApply;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnListBox( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnCheckBoxMinimizeToTray( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnCheckBoxUseProxy( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnKillFocusProxy( wxFocusEvent& event ) { event.Skip(); }
-               virtual void OnKillFocusTransactionFee( wxFocusEvent& event ) { event.Skip(); }
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonApply( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               COptionsDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 540,360 ), long style = wxDEFAULT_DIALOG_STYLE );
-               ~COptionsDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CAboutDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CAboutDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               wxStaticBitmap* m_bitmap;
-               
-               wxStaticText* m_staticText40;
-               
-               wxStaticText* m_staticTextMain;
-               
-               
-               wxButton* m_buttonOK;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               wxStaticText* m_staticTextVersion;
-               
-               CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,333 ), long style = wxDEFAULT_DIALOG_STYLE );
-               ~CAboutDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CSendDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CSendDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               
-               
-               wxStaticText* m_staticTextInstructions;
-               
-               wxStaticBitmap* m_bitmapCheckMark;
-               wxStaticText* m_staticText36;
-               wxTextCtrl* m_textCtrlAddress;
-               wxButton* m_buttonPaste;
-               wxButton* m_buttonAddress;
-               wxStaticText* m_staticText19;
-               wxTextCtrl* m_textCtrlAmount;
-               wxStaticText* m_staticText20;
-               wxChoice* m_choiceTransferType;
-               
-               
-               
-               wxButton* m_buttonSend;
-               wxButton* m_buttonCancel;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnKeyDown( wxKeyEvent& event ) { event.Skip(); }
-               virtual void OnTextAddress( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonPaste( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonAddressBook( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnKillFocusAmount( wxFocusEvent& event ) { event.Skip(); }
-               virtual void OnButtonSend( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               CSendDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Send Coins"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 498,157 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
-               ~CSendDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CSendingDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CSendingDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               wxStaticText* m_staticTextSending;
-               wxTextCtrl* m_textCtrlStatus;
-               
-               wxButton* m_buttonOK;
-               wxButton* m_buttonCancel;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
-               virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               CSendingDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Sending..."), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 442,151 ), long style = wxDEFAULT_DIALOG_STYLE );
-               ~CSendingDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CYourAddressDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CYourAddressDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               
-               wxStaticText* m_staticText45;
-               wxListCtrl* m_listCtrl;
-               
-               wxButton* m_buttonRename;
-               wxButton* m_buttonNew;
-               wxButton* m_buttonCopy;
-               wxButton* m_buttonOK;
-               wxButton* m_buttonCancel;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
-               virtual void OnListEndLabelEdit( wxListEvent& event ) { event.Skip(); }
-               virtual void OnListItemActivated( wxListEvent& event ) { event.Skip(); }
-               virtual void OnListItemSelected( wxListEvent& event ) { event.Skip(); }
-               virtual void OnButtonRename( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonNew( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCopy( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               CYourAddressDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Your Bitcoin Addresses"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 610,390 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
-               ~CYourAddressDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CAddressBookDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CAddressBookDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               wxNotebook* m_notebook;
-               wxPanel* m_panelSending;
-               
-               wxStaticText* m_staticText55;
-               wxListCtrl* m_listCtrlSending;
-               wxPanel* m_panelReceiving;
-               
-               wxStaticText* m_staticText45;
-               
-               wxListCtrl* m_listCtrlReceiving;
-               
-               wxButton* m_buttonDelete;
-               wxButton* m_buttonCopy;
-               wxButton* m_buttonEdit;
-               wxButton* m_buttonNew;
-               wxButton* m_buttonOK;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
-               virtual void OnNotebookPageChanged( wxNotebookEvent& event ) { event.Skip(); }
-               virtual void OnListEndLabelEdit( wxListEvent& event ) { event.Skip(); }
-               virtual void OnListItemActivated( wxListEvent& event ) { event.Skip(); }
-               virtual void OnListItemSelected( wxListEvent& event ) { event.Skip(); }
-               virtual void OnButtonDelete( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCopy( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonEdit( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonNew( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               wxButton* m_buttonCancel;
-               
-               CAddressBookDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Address Book"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 610,390 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
-               ~CAddressBookDialogBase();
-       
-};
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class CGetTextFromUserDialogBase
-///////////////////////////////////////////////////////////////////////////////
-class CGetTextFromUserDialogBase : public wxDialog 
-{
-       private:
-       
-       protected:
-               
-               wxStaticText* m_staticTextMessage1;
-               wxTextCtrl* m_textCtrl1;
-               wxStaticText* m_staticTextMessage2;
-               wxTextCtrl* m_textCtrl2;
-               
-               
-               wxButton* m_buttonOK;
-               wxButton* m_buttonCancel;
-               
-               // Virtual event handlers, overide them in your derived class
-               virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
-               virtual void OnKeyDown( wxKeyEvent& event ) { event.Skip(); }
-               virtual void OnButtonOK( wxCommandEvent& event ) { event.Skip(); }
-               virtual void OnButtonCancel( wxCommandEvent& event ) { event.Skip(); }
-               
-       
-       public:
-               
-               CGetTextFromUserDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 440,138 ), long style = wxDEFAULT_DIALOG_STYLE );
-               ~CGetTextFromUserDialogBase();
-       
-};
-
-#endif //__uibase__
index ccd39aa..6314b53 100644 (file)
@@ -76,7 +76,7 @@ public:
             ppmutexOpenSSL[i] = new boost::interprocess::interprocess_mutex();
         CRYPTO_set_locking_callback(locking_callback);
 
-#ifdef __WXMSW__
+#ifdef WIN32
         // Seed random number generator with screen scrape and other hardware sources
         RAND_screen();
 #endif
@@ -120,7 +120,7 @@ void RandAddSeedPerfmon()
         return;
     nLastPerfmon = GetTime();
 
-#ifdef __WXMSW__
+#ifdef WIN32
     // Don't need this on Linux, OpenSSL automatically uses /dev/urandom
     // Seed with the entire set of perfmon data
     unsigned char pdata[250000];
@@ -212,7 +212,7 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
         }
     }
 
-#ifdef __WXMSW__
+#ifdef WIN32
     if (fPrintToDebugger)
     {
         static CCriticalSection cs_OutputDebugStringF;
@@ -278,8 +278,7 @@ int my_snprintf(char* buffer, size_t limit, const char* format, ...)
     return ret;
 }
 
-
-string strprintf(const char* format, ...)
+string strprintf(const std::string &format, ...)
 {
     char buffer[50000];
     char* p = buffer;
@@ -289,7 +288,7 @@ string strprintf(const char* format, ...)
     {
         va_list arg_ptr;
         va_start(arg_ptr, format);
-        ret = _vsnprintf(p, limit, format, arg_ptr);
+        ret = _vsnprintf(p, limit, format.c_str(), arg_ptr);
         va_end(arg_ptr);
         if (ret >= 0 && ret < limit)
             break;
@@ -306,14 +305,13 @@ string strprintf(const char* format, ...)
     return str;
 }
 
-
-bool error(const char* format, ...)
+bool error(const std::string &format, ...)
 {
     char buffer[50000];
     int limit = sizeof(buffer);
     va_list arg_ptr;
     va_start(arg_ptr, format);
-    int ret = _vsnprintf(buffer, limit, format, arg_ptr);
+    int ret = _vsnprintf(buffer, limit, format.c_str(), arg_ptr);
     va_end(arg_ptr);
     if (ret < 0 || ret >= limit)
     {
@@ -459,7 +457,6 @@ vector<unsigned char> ParseHex(const string& str)
     return ParseHex(str.c_str());
 }
 
-
 void ParseParameters(int argc, char* argv[])
 {
     mapArgs.clear();
@@ -474,7 +471,7 @@ void ParseParameters(int argc, char* argv[])
             pszValue = strchr(psz, '=');
             *pszValue++ = '\0';
         }
-        #ifdef __WXMSW__
+        #ifdef WIN32
         _strlwr(psz);
         if (psz[0] == '/')
             psz[0] = '-';
@@ -503,39 +500,144 @@ bool SoftSetArg(const std::string& strArg, bool fValue)
 }
 
 
+string EncodeBase64(const unsigned char* pch, size_t len)
+{
+    static const char *pbase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+    string strRet="";
+    strRet.reserve((len+2)/3*4);
+
+    int mode=0, left=0;
+    const unsigned char *pchEnd = pch+len;
 
-const char* wxGetTranslation(const char* pszEnglish)
+    while (pch<pchEnd)
+    {
+        int enc = *(pch++);
+        switch (mode)
+        {
+            case 0: // we have no bits
+                strRet += pbase64[enc >> 2];
+                left = (enc & 3) << 4;
+                mode = 1;
+                break;
+
+            case 1: // we have two bits
+                strRet += pbase64[left | (enc >> 4)];
+                left = (enc & 15) << 2;
+                mode = 2;
+                break;
+
+            case 2: // we have four bits
+                strRet += pbase64[left | (enc >> 6)];
+                strRet += pbase64[enc & 63];
+                mode = 0;
+                break;
+        }
+    }
+
+    if (mode)
+    {
+        strRet += pbase64[left];
+        strRet += '=';
+        if (mode == 1)
+            strRet += '=';
+    }
+
+    return strRet;
+}
+
+string EncodeBase64(const string& str)
 {
-#ifdef GUI
-    // Wrapper of wxGetTranslation returning the same const char* type as was passed in
-    static CCriticalSection cs;
-    CRITICAL_BLOCK(cs)
+    return EncodeBase64((const unsigned char*)str.c_str(), str.size());
+}
+
+vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid)
+{
+    static const int decode64_table[256] =
+    {
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1,
+        -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28,
+        29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+        49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+    };
+
+    if (pfInvalid)
+        *pfInvalid = false;
+
+    vector<unsigned char> vchRet;
+    vchRet.reserve(strlen(p)*3/4);
+
+    int mode = 0;
+    int left = 0;
+
+    while (1)
     {
-        // Look in cache
-        static map<string, char*> mapCache;
-        map<string, char*>::iterator mi = mapCache.find(pszEnglish);
-        if (mi != mapCache.end())
-            return (*mi).second;
-
-        // wxWidgets translation
-        wxString strTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8));
-
-        // We don't cache unknown strings because caller might be passing in a
-        // dynamic string and we would keep allocating memory for each variation.
-        if (strcmp(pszEnglish, strTranslated.utf8_str()) == 0)
-            return pszEnglish;
-
-        // Add to cache, memory doesn't need to be freed.  We only cache because
-        // we must pass back a pointer to permanently allocated memory.
-        char* pszCached = new char[strlen(strTranslated.utf8_str())+1];
-        strcpy(pszCached, strTranslated.utf8_str());
-        mapCache[pszEnglish] = pszCached;
-        return pszCached;
+         int dec = decode64_table[(unsigned char)*p];
+         if (dec == -1) break;
+         p++;
+         switch (mode)
+         {
+             case 0: // we have no bits and get 6
+                 left = dec;
+                 mode = 1;
+                 break;
+
+              case 1: // we have 6 bits and keep 4
+                  vchRet.push_back((left<<2) | (dec>>4));
+                  left = dec & 15;
+                  mode = 2;
+                  break;
+
+             case 2: // we have 4 bits and get 6, we keep 2
+                 vchRet.push_back((left<<4) | (dec>>2));
+                 left = dec & 3;
+                 mode = 3;
+                 break;
+
+             case 3: // we have 2 bits and get 6
+                 vchRet.push_back((left<<6) | dec);
+                 mode = 0;
+                 break;
+         }
     }
-    return NULL;
-#else
-    return pszEnglish;
-#endif
+
+    if (pfInvalid)
+        switch (mode)
+        {
+            case 0: // 4n base64 characters processed: ok
+                break;
+
+            case 1: // 4n+1 base64 character processed: impossible
+                *pfInvalid = true;
+                break;
+
+            case 2: // 4n+2 base64 characters processed: require '=='
+                if (left || p[0] != '=' || p[1] != '=' || decode64_table[(unsigned char)p[2]] != -1)
+                    *pfInvalid = true;
+                break;
+
+            case 3: // 4n+3 base64 characters processed: require '='
+                if (left || p[0] != '=' || decode64_table[(unsigned char)p[1]] != -1)
+                    *pfInvalid = true;
+                break;
+        }
+
+    return vchRet;
+}
+
+string DecodeBase64(const string& str)
+{
+    vector<unsigned char> vchRet = DecodeBase64(str.c_str());
+    return string((const char*)&vchRet[0], vchRet.size());
 }
 
 
@@ -577,7 +679,7 @@ bool WildcardMatch(const string& str, const string& mask)
 
 void FormatException(char* pszMessage, std::exception* pex, const char* pszThread)
 {
-#ifdef __WXMSW__
+#ifdef WIN32
     char pszModule[MAX_PATH];
     pszModule[0] = '\0';
     GetModuleFileNameA(NULL, pszModule, sizeof(pszModule));
@@ -606,10 +708,6 @@ void PrintException(std::exception* pex, const char* pszThread)
     printf("\n\n************************\n%s\n", pszMessage);
     fprintf(stderr, "\n\n************************\n%s\n", pszMessage);
     strMiscWarning = pszMessage;
-#ifdef GUI
-    if (wxTheApp && !fDaemon)
-        MyMessageBox(pszMessage, "Bitcoin", wxOK | wxICON_ERROR);
-#endif
     throw;
 }
 
@@ -631,10 +729,6 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread)
     printf("\n\n************************\n%s\n", pszMessage);
     fprintf(stderr, "\n\n************************\n%s\n", pszMessage);
     strMiscWarning = pszMessage;
-#ifdef GUI
-    if (wxTheApp && !fDaemon)
-        boost::thread(boost::bind(ThreadOneMessageBox, string(pszMessage)));
-#endif
 }
 
 
@@ -644,7 +738,7 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread)
 
 
 
-#ifdef __WXMSW__
+#ifdef WIN32
 typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
 
 string MyGetSpecialFolderPath(int nFolder, bool fCreate)
@@ -694,7 +788,7 @@ string GetDefaultDataDir()
     // Windows: C:\Documents and Settings\username\Application Data\Bitcoin
     // Mac: ~/Library/Application Support/Bitcoin
     // Unix: ~/.bitcoin
-#ifdef __WXMSW__
+#ifdef WIN32
     // Windows
     return MyGetSpecialFolderPath(CSIDL_APPDATA, true) + "\\Bitcoin";
 #else
@@ -704,7 +798,7 @@ string GetDefaultDataDir()
     string strHome = pszHome;
     if (strHome[strHome.size()-1] != '/')
         strHome += '/';
-#ifdef __WXMAC_OSX__
+#ifdef MAC_OSX
     // Mac
     strHome += "Library/Application Support/";
     filesystem::create_directory(strHome.c_str());
@@ -855,11 +949,20 @@ void ShrinkDebugFile()
 //  - Median of other nodes's clocks
 //  - The user (asking the user to fix the system clock if the first two disagree)
 //
+static int64 nMockTime = 0;  // For unit testing
+
 int64 GetTime()
 {
+    if (nMockTime) return nMockTime;
+
     return time(NULL);
 }
 
+void SetMockTime(int64 nMockTimeIn)
+{
+    nMockTime = nMockTimeIn;
+}
+
 static int64 nTimeOffset = 0;
 
 int64 GetAdjustedTime()
index 88cc1e7..da8e763 100644 (file)
@@ -7,7 +7,7 @@
 
 #include "uint256.h"
 
-#ifndef __WXMSW__
+#ifndef WIN32
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/resource.h>
@@ -65,7 +65,7 @@ typedef unsigned long long  uint64;
 #endif
 
 // This is needed because the foreach macro can't get over the comma in pair<t1, t2>
-#define PAIRTYPE(t1, t2)    pair<t1, t2>
+#define PAIRTYPE(t1, t2)    std::pair<t1, t2>
 
 // Align by increasing pointer, must have extra space at end of buffer
 template <size_t nBytes, typename T>
@@ -81,7 +81,7 @@ T* alignup(T* p)
     return u.ptr;
 }
 
-#ifdef __WXMSW__
+#ifdef WIN32
 #define MSG_NOSIGNAL        0
 #define MSG_DONTWAIT        0
 #ifndef UINT64_MAX
@@ -125,7 +125,7 @@ inline int myclosesocket(SOCKET& hSocket)
 {
     if (hSocket == INVALID_SOCKET)
         return WSAENOTSOCK;
-#ifdef __WXMSW__
+#ifdef WIN32
     int ret = closesocket(hSocket);
 #else
     int ret = close(hSocket);
@@ -134,8 +134,7 @@ inline int myclosesocket(SOCKET& hSocket)
     return ret;
 }
 #define closesocket(s)      myclosesocket(s)
-
-#ifndef GUI
+#if !defined(QT_GUI)
 inline const char* _(const char* psz)
 {
     return psz;
@@ -150,7 +149,6 @@ inline const char* _(const char* psz)
 
 
 
-
 extern std::map<std::string, std::string> mapArgs;
 extern std::map<std::string, std::vector<std::string> > mapMultiArgs;
 extern bool fDebug;
@@ -171,8 +169,8 @@ void RandAddSeed();
 void RandAddSeedPerfmon();
 int OutputDebugStringF(const char* pszFormat, ...);
 int my_snprintf(char* buffer, size_t limit, const char* format, ...);
-std::string strprintf(const char* format, ...);
-bool error(const char* format, ...);
+std::string strprintf(const std::string &format, ...);
+bool error(const std::string &format, ...);
 void LogException(std::exception* pex, const char* pszThread);
 void PrintException(std::exception* pex, const char* pszThread);
 void PrintExceptionContinue(std::exception* pex, const char* pszThread);
@@ -182,6 +180,10 @@ bool ParseMoney(const std::string& str, int64& nRet);
 bool ParseMoney(const char* pszIn, int64& nRet);
 std::vector<unsigned char> ParseHex(const char* psz);
 std::vector<unsigned char> ParseHex(const std::string& str);
+std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = NULL);
+std::string DecodeBase64(const std::string& str);
+std::string EncodeBase64(const unsigned char* pch, size_t len);
+std::string EncodeBase64(const std::string& str);
 void ParseParameters(int argc, char* argv[]);
 const char* wxGetTranslation(const char* psz);
 bool WildcardMatch(const char* psz, const char* mask);
@@ -192,7 +194,7 @@ std::string GetConfigFile();
 std::string GetPidFile();
 void CreatePidFile(std::string pidFile, pid_t pid);
 void ReadConfigFile(std::map<std::string, std::string>& mapSettingsRet, std::map<std::string, std::vector<std::string> >& mapMultiSettingsRet);
-#ifdef __WXMSW__
+#ifdef WIN32
 std::string MyGetSpecialFolderPath(int nFolder, bool fCreate);
 #endif
 std::string GetDefaultDataDir();
@@ -201,6 +203,7 @@ void ShrinkDebugFile();
 int GetRandInt(int nMax);
 uint64 GetRand(uint64 nMax);
 int64 GetTime();
+void SetMockTime(int64 nMockTimeIn);
 int64 GetAdjustedTime();
 void AddTimeData(unsigned int ip, int64 nTime);
 std::string FormatFullVersion();
@@ -242,19 +245,20 @@ public:
         pcs = &csIn;
         pcs->Enter(pszName, pszFile, nLine);
     }
+
+    operator bool() const
+    {
+        return true;
+    }
+
     ~CCriticalBlock()
     {
         pcs->Leave();
     }
 };
 
-// WARNING: This will catch continue and break!
-// break is caught with an assertion, but there's no way to detect continue.
-// I'd rather be careful than suffer the other more error prone syntax.
-// The compiler will optimise away all this loop junk.
 #define CRITICAL_BLOCK(cs)     \
-    for (bool fcriticalblockonce=true; fcriticalblockonce; assert(("break caught by CRITICAL_BLOCK!" && !fcriticalblockonce)), fcriticalblockonce=false) \
-        for (CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__); fcriticalblockonce; fcriticalblockonce=false)
+    if (CCriticalBlock criticalblock = CCriticalBlock(cs, #cs, __FILE__, __LINE__))
 
 #define ENTER_CRITICAL_SECTION(cs) \
     (cs).Enter(#cs, __FILE__, __LINE__)
@@ -272,6 +276,12 @@ public:
     {
         pcs = (csIn.TryEnter(pszName, pszFile, nLine) ? &csIn : NULL);
     }
+
+    operator bool() const
+    {
+        return Entered();
+    }
+
     ~CTryCriticalBlock()
     {
         if (pcs)
@@ -279,17 +289,24 @@ public:
             pcs->Leave();
         }
     }
-    bool Entered() { return pcs != NULL; }
+    bool Entered() const { return pcs != NULL; }
 };
 
 #define TRY_CRITICAL_BLOCK(cs)     \
-    for (bool fcriticalblockonce=true; fcriticalblockonce; assert(("break caught by TRY_CRITICAL_BLOCK!" && !fcriticalblockonce)), fcriticalblockonce=false) \
-        for (CTryCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__); fcriticalblockonce && (fcriticalblockonce = criticalblock.Entered()); fcriticalblockonce=false)
+    if (CTryCriticalBlock criticalblock = CTryCriticalBlock(cs, #cs, __FILE__, __LINE__))
+
+
 
 
 
 
+// This is exactly like std::string, but with a custom allocator.
+// (secure_allocator<> is defined in serialize.h)
+typedef std::basic_string<char, std::char_traits<char>, secure_allocator<char> > SecureString;
 
+// This is exactly like std::string, but with a custom allocator.
+// (secure_allocator<> is defined in serialize.h)
+typedef std::basic_string<char, std::char_traits<char>, secure_allocator<char> > SecureString;
 
 
 
@@ -395,7 +412,7 @@ inline void PrintHex(const std::vector<unsigned char>& vch, const char* pszForma
 inline int64 GetPerformanceCounter()
 {
     int64 nCounter = 0;
-#ifdef __WXMSW__
+#ifdef WIN32
     QueryPerformanceCounter((LARGE_INTEGER*)&nCounter);
 #else
     timeval t;
@@ -429,7 +446,7 @@ void skipspaces(T& it)
 
 inline bool IsSwitchChar(char c)
 {
-#ifdef __WXMSW__
+#ifdef WIN32
     return c == '-' || c == '/';
 #else
     return c == '-';
@@ -489,7 +506,7 @@ bool SoftSetArg(const std::string& strArg, bool fValue);
 
 inline void heapchk()
 {
-#ifdef __WXMSW__
+#ifdef WIN32
     /// for debugging
     //if (_heapchk() != _HEAPOK)
     //    DebugBreak();
@@ -592,6 +609,51 @@ inline uint160 Hash160(const std::vector<unsigned char>& vch)
 }
 
 
+// Median filter over a stream of values
+// Returns the median of the last N numbers
+template <typename T> class CMedianFilter
+{
+private:
+    std::vector<T> vValues;
+    std::vector<T> vSorted;
+    int nSize;
+public:
+    CMedianFilter(int size, T initial_value):
+        nSize(size)
+    {
+        vValues.reserve(size);
+        vValues.push_back(initial_value);
+        vSorted = vValues;
+    }
+    
+    void input(T value)
+    {
+        if(vValues.size() == nSize)
+        {
+            vValues.erase(vValues.begin());
+        }
+        vValues.push_back(value);
+
+        vSorted.resize(vValues.size());
+        std::copy(vValues.begin(), vValues.end(), vSorted.begin());
+        std::sort(vSorted.begin(), vSorted.end());
+    }
+
+    T median() const
+    {
+        int size = vSorted.size();
+        assert(size>0);
+        if(size & 1) // Odd number of elements
+        {
+            return vSorted[size/2];
+        }
+        else // Even number of elements
+        {
+            return (vSorted[size/2-1] + vSorted[size/2]) / 2;
+        }
+    }
+};
+
 
 
 
@@ -603,7 +665,7 @@ inline uint160 Hash160(const std::vector<unsigned char>& vch)
 
 // Note: It turns out we might have been able to use boost::thread
 // by using TerminateThread(boost::thread.native_handle(), 0);
-#ifdef __WXMSW__
+#ifdef WIN32
 typedef HANDLE pthread_t;
 
 inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=false)
@@ -685,7 +747,7 @@ inline void ExitThread(size_t nExitCode)
 
 inline bool AffinityBugWorkaround(void(*pfn)(void*))
 {
-#ifdef __WXMSW__
+#ifdef WIN32
     // Sometimes after a few hours affinity gets stuck on one processor
     DWORD_PTR dwProcessAffinityMask = -1;
     DWORD_PTR dwSystemAffinityMask = -1;
@@ -703,4 +765,10 @@ inline bool AffinityBugWorkaround(void(*pfn)(void*))
     return false;
 }
 
+inline uint32_t ByteReverse(uint32_t value)
+{
+    value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8);
+    return (value<<16) | (value>>16);
+}
+
 #endif
index 973727b..3ffad27 100644 (file)
@@ -5,7 +5,6 @@
 
 #include "headers.h"
 #include "db.h"
-#include "cryptopp/sha.h"
 #include "crypter.h"
 
 using namespace std;
@@ -43,7 +42,7 @@ bool CWallet::AddCryptedKey(const vector<unsigned char> &vchPubKey, const vector
     return false;
 }
 
-bool CWallet::Unlock(const string& strWalletPassphrase)
+bool CWallet::Unlock(const SecureString& strWalletPassphrase)
 {
     if (!IsLocked())
         return false;
@@ -64,7 +63,7 @@ bool CWallet::Unlock(const string& strWalletPassphrase)
     return false;
 }
 
-bool CWallet::ChangeWalletPassphrase(const string& strOldWalletPassphrase, const string& strNewWalletPassphrase)
+bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase)
 {
     bool fWasLocked = IsLocked();
 
@@ -123,7 +122,7 @@ public:
     )
 };
 
-bool CWallet::EncryptWallet(const string& strWalletPassphrase)
+bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
 {
     if (IsCrypted())
         return false;
@@ -269,7 +268,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
         if (fInsertedNew || fUpdated)
             if (!wtx.WriteToDisk())
                 return false;
-
+#ifndef QT_GUI
         // If default receiving address gets used, replace it with a new one
         CScript scriptDefaultKey;
         scriptDefaultKey.SetBitcoinAddress(vchDefaultKey);
@@ -285,7 +284,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
                 }
             }
         }
-
+#endif
         // Notify UI
         vWalletUpdated.push_back(hash);
 
@@ -298,6 +297,9 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
     return true;
 }
 
+// Add a transaction to the wallet, or update it.
+// pblock is optional, but should be provided if the transaction is known to be in a block.
+// If fUpdate is true, existing transactions will be updated.
 bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate)
 {
     uint256 hash = tx.GetHash();
@@ -562,6 +564,9 @@ bool CWalletTx::WriteToDisk()
     return CWalletDB(pwallet->strWalletFile).WriteTx(GetHash(), *this);
 }
 
+// Scan the block chain (starting in pindexStart) for transactions
+// from or to us. If fUpdate is true, found transactions that already
+// exist in the wallet will be updated.
 int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate)
 {
     int ret = 0;
@@ -739,6 +744,21 @@ int64 CWallet::GetBalance() const
     return nTotal;
 }
 
+int64 CWallet::GetUnconfirmedBalance() const
+{
+    int64 nTotal = 0;
+    CRITICAL_BLOCK(cs_wallet)
+    {
+        for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
+        {
+            const CWalletTx* pcoin = &(*it).second;
+            if (pcoin->IsFinal() && pcoin->IsConfirmed())
+                continue;
+            nTotal += pcoin->GetAvailableCredit();
+        }
+    }
+    return nTotal;
+}
 
 bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64& nValueRet) const
 {
index e23f487..7fb1a19 100644 (file)
@@ -13,6 +13,9 @@ class CWalletTx;
 class CReserveKey;
 class CWalletDB;
 
+// A CWallet is an extension of a keystore, which also maintains a set of
+// transactions and balances, and provides the ability to create new
+// transactions
 class CWallet : public CCryptoKeyStore
 {
 private:
@@ -57,14 +60,19 @@ public:
     std::vector<unsigned char> vchDefaultKey;
 
     // keystore implementation
+    // Adds a key to the store, and saves it to disk.
     bool AddKey(const CKey& key);
+    // Adds a key to the store, without saving it to disk (used by LoadWallet)
     bool LoadKey(const CKey& key) { return CCryptoKeyStore::AddKey(key); }
+
+    // Adds an encrypted key to the store, and saves it to disk.
     bool AddCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret);
+    // Adds an encrypted key to the store, without saving it to disk (used by LoadWallet)
     bool LoadCryptedKey(const std::vector<unsigned char> &vchPubKey, const std::vector<unsigned char> &vchCryptedSecret) { return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); }
 
-    bool Unlock(const std::string& strWalletPassphrase);
-    bool ChangeWalletPassphrase(const std::string& strOldWalletPassphrase, const std::string& strNewWalletPassphrase);
-    bool EncryptWallet(const std::string& strWalletPassphrase);
+    bool Unlock(const SecureString& strWalletPassphrase);
+    bool ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase);
+    bool EncryptWallet(const SecureString& strWalletPassphrase);
 
     bool AddToWallet(const CWalletTx& wtxIn);
     bool AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pblock, bool fUpdate = false);
@@ -74,6 +82,7 @@ public:
     void ReacceptWalletTransactions();
     void ResendWalletTransactions();
     int64 GetBalance() const;
+    int64 GetUnconfirmedBalance() const;
     bool CreateTransaction(const std::vector<std::pair<CScript, int64> >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
     bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet);
     bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey);
@@ -242,7 +251,7 @@ public:
     unsigned int nTimeReceived;  // time received by this node
     char fFromMe;
     std::string strFromAccount;
-    std::vector<char> vfSpent;
+    std::vector<char> vfSpent; // which outputs are already spent
 
     // memory only
     mutable char fDebitCached;
@@ -369,6 +378,7 @@ public:
         return fReturn;
     }
 
+    // make sure balances are recalculated
     void MarkDirty()
     {
         fCreditCached = false;
diff --git a/src/xpm/about.xpm b/src/xpm/about.xpm
deleted file mode 100644 (file)
index fea1fb0..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-// Copyright (c) 2009-2010 Satoshi Nakamoto
-// Distributed under the MIT/X11 software license, see the accompanying
-// file COPYING or http://www.opensource.org/licenses/mit-license.php.
-/* XPM */
-static const char * about_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"96 564 92 1",
-"  c #001269",
-". c #000C72",
-"X c #00057F",
-"o c #001175",
-"O c #000B6A",
-"+ c #000E84",
-"@ c #000489",
-"# c #001583",
-"$ c #001B89",
-"% c #001B99",
-"& c #000B92",
-"* c #00208B",
-"= c #002B97",
-"- c #0004A6",
-"; c #001DA7",
-": c #0014BC",
-"> c #0019BB",
-", c #0017B4",
-"< c #0023A3",
-"1 c #002CAA",
-"2 c #0030A4",
-"3 c #003BA3",
-"4 c #0033AB",
-"5 c #003FA8",
-"6 c #0027B8",
-"7 c #0035BB",
-"8 c #003CBA",
-"9 c #004ABD",
-"0 c #001DC4",
-"q c #0017CC",
-"w c #000CD0",
-"e c #0026C7",
-"r c #0035C4",
-"t c #003DC5",
-"y c #0032CB",
-"u c #003BCC",
-"i c #002BD3",
-"p c #0021DC",
-"a c #0025D5",
-"s c #0034D5",
-"d c #003ADB",
-"f c #0016F6",
-"g c #0008F9",
-"h c #0027E3",
-"j c #003CE9",
-"k c #002BF5",
-"l c #0024F9",
-"z c #0033F4",
-"x c #0035F8",
-"c c #0048CA",
-"v c #0055C5",
-"b c #0059C3",
-"n c #0053CB",
-"m c #005ACC",
-"M c #004FD4",
-"N c #004CDC",
-"B c #0047D0",
-"V c #005BD6",
-"C c #0049E5",
-"Z c #0042EA",
-"A c #0052E4",
-"S c #005CE4",
-"D c #0054EC",
-"F c #005EEB",
-"G c #004AF5",
-"H c #0051F2",
-"J c #005CFA",
-"K c #0058F9",
-"L c #0066E4",
-"P c #006BE3",
-"I c #0064EC",
-"U c #006DEF",
-"Y c #0074EB",
-"T c #0078EC",
-"R c #0073E7",
-"E c #0065F4",
-"W c #006BF5",
-"Q c #006BFB",
-"! c #0066FD",
-"~ c #0073F5",
-"^ c #007CF3",
-"/ c #0075FB",
-"( c #007DFC",
-") c #0084FF",
-"_ c #008AFF",
-"` c #0092FF",
-"' c #339CFF",
-"] c #33A3FF",
-"[ c #33AAFF",
-"{ c #66B5FF",
-"} c #66BBFF",
-"| c #66C0FF",
-/* pixels */
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"kkkkkkkkkkkk<<<<<<<<<<<<DDDDDDDDDDDDvvvvvvvvvvvv////////////))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"XXXXXXXXXXXXrrrrrrrrrrrr777777777777MMMMMMMMMMMM(((((((((((())))))))))))[[[[[[[[[[[[}}}}}}}}}}}}",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"llllllllllll;;;;;;;;;;;;NNNNNNNNNNNNSSSSSSSSSSSS~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############666666666666uuuuuuuuuuuuJJJJJJJJJJJJ^^^^^^^^^^^^____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"............yyyyyyyyyyyy333333333333AAAAAAAAAAAAWWWWWWWWWWWW____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff============yyyyyyyyyyyyJJJJJJJJJJJJRRRRRRRRRRRR))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"gggggggggggg$$$$$$$$$$$$uuuuuuuuuuuuNNNNNNNNNNNN~~~~~~~~~~~~))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::hhhhhhhhhhhhddddddddddddAAAAAAAAAAAAUUUUUUUUUUUU))))))))))))''''''''''''}}}}}}}}}}}}",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"zzzzzzzzzzzzGGGGGGGGGGGGBBBBBBBBBBBBDDDDDDDDDDDDPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"ffffffffffffssssssssssssjjjjjjjjjjjjnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"wwwwwwwwwwww<<<<<<<<<<<<888888888888VVVVVVVVVVVV~~~~~~~~~~~~((((((((((((]]]]]]]]]]]]}}}}}}}}}}}}",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"hhhhhhhhhhhh>>>>>>>>>>>>rrrrrrrrrrrrVVVVVVVVVVVVLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::;;;;;;;;;;;;HHHHHHHHHHHHccccccccccccQQQQQQQQQQQQ))))))))))))''''''''''''}}}}}}}}}}}}",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"qqqqqqqqqqqqkkkkkkkkkkkk333333333333AAAAAAAAAAAARRRRRRRRRRRR))))))))))))''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"############ppppppppppppssssssssssssIIIIIIIIIIII^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"++++++++++++rrrrrrrrrrrr777777777777MMMMMMMMMMMMIIIIIIIIIIII````````````''''''''''''{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"------------$$$$$$$$$$$$999999999999JJJJJJJJJJJJTTTTTTTTTTTT____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@666666666666ttttttttttttWWWWWWWWWWWWPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaazzzzzzzzzzzzBBBBBBBBBBBBbbbbbbbbbbbbPPPPPPPPPPPP____________''''''''''''{{{{{{{{{{{{",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"------------%%%%%%%%%%%%ttttttttttttNNNNNNNNNNNN^^^^^^^^^^^^))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"            000000000000888888888888FFFFFFFFFFFF~~~~~~~~~~~~))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"++++++++++++222222222222xxxxxxxxxxxxNNNNNNNNNNNNEEEEEEEEEEEE))))))))))))''''''''''''}}}}}}}}}}}}",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"$$$$$$$$$$$$000000000000GGGGGGGGGGGGnnnnnnnnnnnnLLLLLLLLLLLL))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"ooooooooooooffffffffffffccccccccccccbbbbbbbbbbbbRRRRRRRRRRRR____________''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"@@@@@@@@@@@@111111111111777777777777JJJJJJJJJJJJPPPPPPPPPPPP((((((((((((''''''''''''{{{{{{{{{{{{",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"            iiiiiiiiiiiiGGGGGGGGGGGGVVVVVVVVVVVV~~~~~~~~~~~~____________''''''''''''}}}}}}}}}}}}",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"------------222222222222KKKKKKKKKKKKIIIIIIIIIIIIQQQQQQQQQQQQ____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"&&&&&&&&&&&&222222222222333333333333WWWWWWWWWWWW~~~~~~~~~~~~____________''''''''''''{{{{{{{{{{{{",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"wwwwwwwwwwww============555555555555EEEEEEEEEEEEEEEEEEEEEEEE____________''''''''''''||||||||||||",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"ffffffffffff>>>>>>>>>>>>rrrrrrrrrrrrnnnnnnnnnnnn~~~~~~~~~~~~____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-"############$$$$$$$$$$$$CCCCCCCCCCCCEEEEEEEEEEEE(((((((((((())))))))))))''''''''''''}}}}}}}}}}}}",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-",,,,,,,,,,,,666666666666ddddddddddddHHHHHHHHHHHHEEEEEEEEEEEE____________]]]]]]]]]]]]{{{{{{{{{{{{",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"xxxxxxxxxxxxjjjjjjjjjjjjccccccccccccSSSSSSSSSSSSPPPPPPPPPPPP))))))))))))]]]]]]]]]]]]}}}}}}}}}}}}",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-"000000000000%%%%%%%%%%%%ttttttttttttmmmmmmmmmmmm////////////````````````''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-">>>>>>>>>>>>uuuuuuuuuuuuZZZZZZZZZZZZmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"OOOOOOOOOOOO444444444444888888888888KKKKKKKKKKKKTTTTTTTTTTTT))))))))))))''''''''''''{{{{{{{{{{{{",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"++++++++++++666666666666CCCCCCCCCCCCQQQQQQQQQQQQYYYYYYYYYYYY____________''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"oooooooooooo,,,,,,,,,,,,DDDDDDDDDDDDmmmmmmmmmmmmLLLLLLLLLLLL))))))))))))''''''''''''}}}}}}}}}}}}",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"::::::::::::eeeeeeeeeeee444444444444mmmmmmmmmmmm^^^^^^^^^^^^____________''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"............666666666666ZZZZZZZZZZZZbbbbbbbbbbbbPPPPPPPPPPPP````````````''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"aaaaaaaaaaaaiiiiiiiiiiiizzzzzzzzzzzzJJJJJJJJJJJJPPPPPPPPPPPP))))))))))))''''''''''''{{{{{{{{{{{{",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"............eeeeeeeeeeee444444444444IIIIIIIIIIIIWWWWWWWWWWWW))))))))))))''''''''''''}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"llllllllllll444444444444HHHHHHHHHHHHvvvvvvvvvvvv((((((((((((____________]]]]]]]]]]]]}}}}}}}}}}}}",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"qqqqqqqqqqqq111111111111ssssssssssssGGGGGGGGGGGGQQQQQQQQQQQQ____________[[[[[[[[[[[[{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppkkkkkkkkkkkkttttttttttttSSSSSSSSSSSS!!!!!!!!!!!!))))))))))))]]]]]]]]]]]]{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"ppppppppppppzzzzzzzzzzzzddddddddddddFFFFFFFFFFFFLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{",
-"666666666666************777777777777MMMMMMMMMMMMLLLLLLLLLLLL````````````''''''''''''{{{{{{{{{{{{"
-};
diff --git a/src/xpm/addressbook16.xpm b/src/xpm/addressbook16.xpm
deleted file mode 100644 (file)
index e00944e..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/* XPM */\r
-static const char * addressbook16_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"16 16 256 2",\r
-"   c #FFFFFF",\r
-".  c #F7FFFF",\r
-"X  c #F7F7FF",\r
-"o  c #EFF7FF",\r
-"O  c #E6EFF7",\r
-"+  c #E6E6F7",\r
-"@  c #CEE6F7",\r
-"#  c #DEDEEF",\r
-"$  c #D6DEEF",\r
-"%  c #D6DEE6",\r
-"&  c #CEDEF7",\r
-"*  c #CEDEEF",\r
-"=  c #EFF708",\r
-"-  c #C5DEF7",\r
-";  c #CED6EF",\r
-":  c None",\r
-">  c #C5D6E6",\r
-",  c #BDD6F7",\r
-"<  c #BDD6EF",\r
-"1  c #D6CECE",\r
-"2  c #BDCEE6",\r
-"3  c #BDC5E6",\r
-"4  c #B5C5DE",\r
-"5  c #BDD631",\r
-"6  c #ADBDDE",\r
-"7  c #B5B5BD",\r
-"8  c #A5B5D6",\r
-"9  c #00FFFF",\r
-"0  c #9CB5CE",\r
-"q  c #9CADD6",\r
-"w  c #94A5D6",\r
-"e  c #8CA5D6",\r
-"r  c #8CA5CE",\r
-"t  c #8CA5C5",\r
-"y  c #849CC5",\r
-"u  c #7B9CD6",\r
-"i  c #7B9CCE",\r
-"p  c #31BDCE",\r
-"a  c #6B9CD6",\r
-"s  c #00F708",\r
-"d  c #8494AD",\r
-"f  c #7B94B5",\r
-"g  c #6B94D6",\r
-"h  c #6B9C84",\r
-"j  c #7B8CAD",\r
-"k  c #738CAD",\r
-"l  c #638CC5",\r
-"z  c #10CE42",\r
-"x  c #638CBD",\r
-"c  c #7B849C",\r
-"v  c #73849C",\r
-"b  c #6B84A5",\r
-"n  c #7B7BA5",\r
-"m  c #6B849C",\r
-"M  c #7B8C42",\r
-"N  c #5A84C5",\r
-"B  c #29AD6B",\r
-"V  c #F74A4A",\r
-"C  c #6384A5",\r
-"Z  c #5284C5",\r
-"A  c #637BA5",\r
-"S  c #637B9C",\r
-"D  c #9C637B",\r
-"F  c #6B7B5A",\r
-"G  c #637394",\r
-"H  c #52739C",\r
-"J  c #5A7384",\r
-"K  c #526B94",\r
-"L  c #426B94",\r
-"P  c #52638C",\r
-"I  c #426B7B",\r
-"U  c #5A5A8C",\r
-"Y  c #524A7B",\r
-"T  c #425273",\r
-"R  c #21636B",\r
-"E  c #106394",\r
-"W  c #106B52",\r
-"Q  c #3A4273",\r
-"!  c #31426B",\r
-"~  c #523163",\r
-"^  c #29426B",\r
-"/  c #293A63",\r
-"(  c #213A63",\r
-")  c #193A63",\r
-"_  c #193163",\r
-"`  c #19315A",\r
-"'  c #212963",\r
-"]  c #10315A",\r
-"[  c #082952",\r
-"{  c #FFCC33",\r
-"}  c #33FF33",\r
-"|  c #66FF33",\r
-" . c #99FF33",\r
-".. c #CCFF33",\r
-"X. c #FFFF33",\r
-"o. c #000066",\r
-"O. c #330066",\r
-"+. c #660066",\r
-"@. c #990066",\r
-"#. c #CC0066",\r
-"$. c #FF0066",\r
-"%. c #003366",\r
-"&. c #333366",\r
-"*. c #663366",\r
-"=. c #993366",\r
-"-. c #CC3366",\r
-";. c #FF3366",\r
-":. c #006666",\r
-">. c #336666",\r
-",. c #666666",\r
-"<. c #996666",\r
-"1. c #CC6666",\r
-"2. c #009966",\r
-"3. c #339966",\r
-"4. c #669966",\r
-"5. c #999966",\r
-"6. c #CC9966",\r
-"7. c #FF9966",\r
-"8. c #00CC66",\r
-"9. c #33CC66",\r
-"0. c #99CC66",\r
-"q. c #CCCC66",\r
-"w. c #FFCC66",\r
-"e. c #00FF66",\r
-"r. c #33FF66",\r
-"t. c #99FF66",\r
-"y. c #CCFF66",\r
-"u. c #FF00CC",\r
-"i. c #CC00FF",\r
-"p. c #009999",\r
-"a. c #993399",\r
-"s. c #990099",\r
-"d. c #CC0099",\r
-"f. c #000099",\r
-"g. c #333399",\r
-"h. c #660099",\r
-"j. c #CC3399",\r
-"k. c #FF0099",\r
-"l. c #006699",\r
-"z. c #336699",\r
-"x. c #663399",\r
-"c. c #996699",\r
-"v. c #CC6699",\r
-"b. c #FF3399",\r
-"n. c #339999",\r
-"m. c #669999",\r
-"M. c #999999",\r
-"N. c #CC9999",\r
-"B. c #FF9999",\r
-"V. c #00CC99",\r
-"C. c #33CC99",\r
-"Z. c #66CC66",\r
-"A. c #99CC99",\r
-"S. c #CCCC99",\r
-"D. c #FFCC99",\r
-"F. c #00FF99",\r
-"G. c #33FF99",\r
-"H. c #66CC99",\r
-"J. c #99FF99",\r
-"K. c #CCFF99",\r
-"L. c #FFFF99",\r
-"P. c #0000CC",\r
-"I. c #330099",\r
-"U. c #6600CC",\r
-"Y. c #9900CC",\r
-"T. c #CC00CC",\r
-"R. c #003399",\r
-"E. c #3333CC",\r
-"W. c #6633CC",\r
-"Q. c #9933CC",\r
-"!. c #CC33CC",\r
-"~. c #FF33CC",\r
-"^. c #0066CC",\r
-"/. c #3366CC",\r
-"(. c #666699",\r
-"). c #9966CC",\r
-"_. c #CC66CC",\r
-"`. c #FF6699",\r
-"'. c #0099CC",\r
-"]. c #3399CC",\r
-"[. c #6699CC",\r
-"{. c #9999CC",\r
-"}. c #CC99CC",\r
-"|. c #FF99CC",\r
-" X c #00CCCC",\r
-".X c #33CCCC",\r
-"XX c #66CCCC",\r
-"oX c #99CCCC",\r
-"OX c #CCCCCC",\r
-"+X c #FFCCCC",\r
-"@X c #00FFCC",\r
-"#X c #33FFCC",\r
-"$X c #66FF99",\r
-"%X c #99FFCC",\r
-"&X c #CCFFCC",\r
-"*X c #FFFFCC",\r
-"=X c #3300CC",\r
-"-X c #6600FF",\r
-";X c #9900FF",\r
-":X c #0033CC",\r
-">X c #3333FF",\r
-",X c #6633FF",\r
-"<X c #9933FF",\r
-"1X c #CC33FF",\r
-"2X c #FF33FF",\r
-"3X c #0066FF",\r
-"4X c #3366FF",\r
-"5X c #6666CC",\r
-"6X c #9966FF",\r
-"7X c #CC66FF",\r
-"8X c #FF66CC",\r
-"9X c #0099FF",\r
-"0X c #3399FF",\r
-"qX c #6699FF",\r
-"wX c #9999FF",\r
-"eX c #CC99FF",\r
-"rX c #FF99FF",\r
-"tX c #00CCFF",\r
-"yX c #33CCFF",\r
-"uX c #66CCFF",\r
-"iX c #99CCFF",\r
-"pX c #CCCCFF",\r
-"aX c #FFCCFF",\r
-"sX c #33FFFF",\r
-"dX c #66FFCC",\r
-"fX c #99FFFF",\r
-"gX c #CCFFFF",\r
-"hX c #FF6666",\r
-"jX c #66FF66",\r
-"kX c #FFFF66",\r
-"lX c #6666FF",\r
-"zX c #FF66FF",\r
-"xX c #66FFFF",\r
-"cX c #A50021",\r
-"vX c #5F5F5F",\r
-"bX c #777777",\r
-"nX c #868686",\r
-"mX c #969696",\r
-"MX c #CBCBCB",\r
-"NX c #B2B2B2",\r
-"BX c #D7D7D7",\r
-"VX c #DDDDDD",\r
-"CX c #E3E3E3",\r
-"ZX c #EAEAEA",\r
-"AX c #F1F1F1",\r
-"SX c #F8F8F8",\r
-"DX c #FFFBF0",\r
-"FX c #A0A0A4",\r
-"GX c #808080",\r
-"HX c #FF0000",\r
-"JX c #00FF00",\r
-"KX c #FFFF00",\r
-"LX c #0000FF",\r
-"PX c #FF00FF",\r
-"IX c #00FFFF",\r
-"UX c #FFFFFF",\r
-/* pixels */\r
-": : : : : : : : : : : : : : : : ",\r
-": : H H H A d : 7 G K H H : : : ",\r
-"n n c     X 4 k j X     b n n : ",\r
-"n 2 c $ 8 6 4 x < + 4 4 C V ~ : ",\r
-"n * c X o $ y N u 6 $ + b D Y : ",\r
-"n * c     X > g ,       S z R : ",\r
-"n * c * r r y g , 6 r q S s W : ",\r
-"n * c     X 4 N u +     m B I : ",\r
-"n * c     X ; a -       S 5 F : ",\r
-"n * c * r r r g -       S = M : ",\r
-"n * c     X 4 N -       m h J : ",\r
-"n * c     X ; a -       A 9 E : ",\r
-"n * ( ] ` ^ P l y T / / ( p L : ",\r
-"n O     > 0 f ) ! t 8     % n : ",\r
-"U U U U U U U ' Q U U U U U U : ",\r
-": : : : : : : : : : : : : : : : "\r
-};\r
diff --git a/src/xpm/addressbook20.xpm b/src/xpm/addressbook20.xpm
deleted file mode 100644 (file)
index 7ebd73f..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-/* XPM */\r
-static const char * addressbook20_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"20 20 256 2",\r
-"   c #FFFFFF",\r
-".  c #F7FFFF",\r
-"X  c #F7F7FF",\r
-"o  c #EFF7FF",\r
-"O  c #EFF7F7",\r
-"+  c #E6EFFF",\r
-"@  c #E6EFF7",\r
-"#  c #DEEFFF",\r
-"$  c #DEE6F7",\r
-"%  c #DEE6EF",\r
-"&  c #D6E6F7",\r
-"*  c #FFFF00",\r
-"=  c #DEDEE6",\r
-"-  c #D6DEE6",\r
-";  c #D6D6DE",\r
-":  c #CED6E6",\r
-">  c None",\r
-",  c #C5D6E6",\r
-"<  c #C5CEE6",\r
-"1  c #B5CEEF",\r
-"2  c #C5C5C5",\r
-"3  c #C5DE31",\r
-"4  c #B5C5DE",\r
-"5  c #BDC5C5",\r
-"6  c #ADC5EF",\r
-"7  c #B5C5CE",\r
-"8  c #BDBDBD",\r
-"9  c #B5BDCE",\r
-"0  c #ADBDDE",\r
-"q  c #ADBDD6",\r
-"w  c #B5CE52",\r
-"e  c #ADB5C5",\r
-"r  c #00FFFF",\r
-"t  c #A5B5C5",\r
-"y  c #9CB5CE",\r
-"u  c #94B5DE",\r
-"i  c #9CADD6",\r
-"p  c #A5ADB5",\r
-"a  c #94ADDE",\r
-"s  c #94ADD6",\r
-"d  c #9CADBD",\r
-"f  c #8CADDE",\r
-"g  c #BD9CA5",\r
-"h  c #9CA5BD",\r
-"j  c #9CA5B5",\r
-"k  c #29D6E6",\r
-"l  c #8CA5CE",\r
-"z  c #849CCE",\r
-"x  c #6BA5C5",\r
-"c  c #739CDE",\r
-"v  c #00FF00",\r
-"b  c #739CD6",\r
-"n  c #7B94CE",\r
-"m  c #8494AD",\r
-"M  c #7394CE",\r
-"N  c #7B94B5",\r
-"B  c #4AB584",\r
-"V  c #848CB5",\r
-"C  c #6B94CE",\r
-"Z  c #6394D6",\r
-"A  c #6394CE",\r
-"S  c #7B8CAD",\r
-"D  c #6B8CC5",\r
-"F  c #738CAD",\r
-"G  c #5294B5",\r
-"H  c #6B84C5",\r
-"J  c #7384A5",\r
-"K  c #73849C",\r
-"L  c #738494",\r
-"P  c #FF4A4A",\r
-"I  c #FF4A42",\r
-"U  c #737B8C",\r
-"Y  c #637BAD",\r
-"T  c #527BBD",\r
-"R  c #637394",\r
-"E  c #637352",\r
-"W  c #5A6B8C",\r
-"Q  c #526B9C",\r
-"!  c #63638C",\r
-"~  c #5A734A",\r
-"^  c #4A6B9C",\r
-"/  c #526B63",\r
-"(  c #0884A5",\r
-")  c #526384",\r
-"_  c #52637B",\r
-"`  c #4A6B5A",\r
-"'  c #52636B",\r
-"]  c #525A8C",\r
-"[  c #525A7B",\r
-"{  c #426363",\r
-"}  c #4A5A7B",\r
-"|  c #425A8C",\r
-" . c #196B94",\r
-".. c #3A5A8C",\r
-"X. c #3A5A84",\r
-"o. c #087B4A",\r
-"O. c #21636B",\r
-"+. c #634263",\r
-"@. c #3A527B",\r
-"#. c #424A84",\r
-"$. c #315284",\r
-"%. c #295284",\r
-"&. c #3A4A6B",\r
-"*. c #42427B",\r
-"=. c #424273",\r
-"-. c #294A84",\r
-";. c #3A3A73",\r
-":. c #194284",\r
-">. c #104A63",\r
-",. c #213A6B",\r
-"<. c #31316B",\r
-"1. c #21315A",\r
-"2. c #212163",\r
-"3. c #08295A",\r
-"4. c #082152",\r
-"5. c #101952",\r
-"6. c #CC9966",\r
-"7. c #FF9966",\r
-"8. c #00CC66",\r
-"9. c #33CC66",\r
-"0. c #99CC66",\r
-"q. c #CCCC66",\r
-"w. c #FFCC66",\r
-"e. c #00FF66",\r
-"r. c #33FF66",\r
-"t. c #99FF66",\r
-"y. c #CCFF66",\r
-"u. c #FF00CC",\r
-"i. c #CC00FF",\r
-"p. c #009999",\r
-"a. c #993399",\r
-"s. c #990099",\r
-"d. c #CC0099",\r
-"f. c #000099",\r
-"g. c #333399",\r
-"h. c #660099",\r
-"j. c #CC3399",\r
-"k. c #FF0099",\r
-"l. c #006699",\r
-"z. c #336699",\r
-"x. c #663399",\r
-"c. c #996699",\r
-"v. c #CC6699",\r
-"b. c #FF3399",\r
-"n. c #339999",\r
-"m. c #669999",\r
-"M. c #999999",\r
-"N. c #CC9999",\r
-"B. c #FF9999",\r
-"V. c #00CC99",\r
-"C. c #33CC99",\r
-"Z. c #66CC66",\r
-"A. c #99CC99",\r
-"S. c #CCCC99",\r
-"D. c #FFCC99",\r
-"F. c #00FF99",\r
-"G. c #33FF99",\r
-"H. c #66CC99",\r
-"J. c #99FF99",\r
-"K. c #CCFF99",\r
-"L. c #FFFF99",\r
-"P. c #0000CC",\r
-"I. c #330099",\r
-"U. c #6600CC",\r
-"Y. c #9900CC",\r
-"T. c #CC00CC",\r
-"R. c #003399",\r
-"E. c #3333CC",\r
-"W. c #6633CC",\r
-"Q. c #9933CC",\r
-"!. c #CC33CC",\r
-"~. c #FF33CC",\r
-"^. c #0066CC",\r
-"/. c #3366CC",\r
-"(. c #666699",\r
-"). c #9966CC",\r
-"_. c #CC66CC",\r
-"`. c #FF6699",\r
-"'. c #0099CC",\r
-"]. c #3399CC",\r
-"[. c #6699CC",\r
-"{. c #9999CC",\r
-"}. c #CC99CC",\r
-"|. c #FF99CC",\r
-" X c #00CCCC",\r
-".X c #33CCCC",\r
-"XX c #66CCCC",\r
-"oX c #99CCCC",\r
-"OX c #CCCCCC",\r
-"+X c #FFCCCC",\r
-"@X c #00FFCC",\r
-"#X c #33FFCC",\r
-"$X c #66FF99",\r
-"%X c #99FFCC",\r
-"&X c #CCFFCC",\r
-"*X c #FFFFCC",\r
-"=X c #3300CC",\r
-"-X c #6600FF",\r
-";X c #9900FF",\r
-":X c #0033CC",\r
-">X c #3333FF",\r
-",X c #6633FF",\r
-"<X c #9933FF",\r
-"1X c #CC33FF",\r
-"2X c #FF33FF",\r
-"3X c #0066FF",\r
-"4X c #3366FF",\r
-"5X c #6666CC",\r
-"6X c #9966FF",\r
-"7X c #CC66FF",\r
-"8X c #FF66CC",\r
-"9X c #0099FF",\r
-"0X c #3399FF",\r
-"qX c #6699FF",\r
-"wX c #9999FF",\r
-"eX c #CC99FF",\r
-"rX c #FF99FF",\r
-"tX c #00CCFF",\r
-"yX c #33CCFF",\r
-"uX c #66CCFF",\r
-"iX c #99CCFF",\r
-"pX c #CCCCFF",\r
-"aX c #FFCCFF",\r
-"sX c #33FFFF",\r
-"dX c #66FFCC",\r
-"fX c #99FFFF",\r
-"gX c #CCFFFF",\r
-"hX c #FF6666",\r
-"jX c #66FF66",\r
-"kX c #FFFF66",\r
-"lX c #6666FF",\r
-"zX c #FF66FF",\r
-"xX c #66FFFF",\r
-"cX c #A50021",\r
-"vX c #5F5F5F",\r
-"bX c #777777",\r
-"nX c #868686",\r
-"mX c #969696",\r
-"MX c #CBCBCB",\r
-"NX c #B2B2B2",\r
-"BX c #D7D7D7",\r
-"VX c #DDDDDD",\r
-"CX c #E3E3E3",\r
-"ZX c #EAEAEA",\r
-"AX c #F1F1F1",\r
-"SX c #F8F8F8",\r
-"DX c #FFFBF0",\r
-"FX c #A0A0A4",\r
-"GX c #808080",\r
-"HX c #FF0000",\r
-"JX c #00FF00",\r
-"KX c #FFFF00",\r
-"LX c #0000FF",\r
-"PX c #FF00FF",\r
-"IX c #00FFFF",\r
-"UX c #FFFFFF",\r
-/* pixels */\r
-"> > > > > > > > > > > > > > > > > > > > ",\r
-"> > > > > > > > > > > > > > > > > > > > ",\r
-"> > U $.| | ^ S 2 > p W | | @.L > > > > ",\r
-"8 5 R -       < Y j S O     - ) g e > > ",\r
-"! V K -       % a Q #       - +.P <.> > ",\r
-"! & K - 0 z n D C b f n n z q +.P <.> > ",\r
-"! & K -       % M A 1       - %.G #.> > ",\r
-"! & K -       % u b #       - o.v >.> > ",\r
-"! & K - 0 z n H M b 6 z n z q o.v >.> > ",\r
-"! & K -     X - M A a       - O.B @.> > ",\r
-"! & K -     X % u b #       - ` 3 / > > ",\r
-"! & K - 0 l i 4 u b #       - ~ * E > > ",\r
-"! & K - X o $ s T b #       - { w ' > > ",\r
-"! & K -       % f b #       -  .k -.> > ",\r
-"! & K m d t 7 , u b # ; 9 9 h ( r :.> > ",\r
-"! & h _ _ [ &.4.$.A ,.1.} _ _ F x ] > > ",\r
-"! @       , y N _ 3._ N y ,     @ ! > > ",\r
-"*.*.*.*.*.*.*.*.;.5.*.*.*.*.*.*.*.2.> > ",\r
-"> > > > > > > > > > > > > > > > > > > > ",\r
-"> > > > > > > > > > > > > > > > > > > > "\r
-};\r
diff --git a/src/xpm/bitcoin16.xpm b/src/xpm/bitcoin16.xpm
deleted file mode 100644 (file)
index f70fef0..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* XPM */
-static const char * bitcoin16_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"16 16 197 2",
-"   c #755507",
-".  c #775606",
-"X  c #795707",
-"o  c #7D5A07",
-"O  c #765608",
-"+  c #74550A",
-"@  c #75550A",
-"#  c #75560A",
-"$  c #785708",
-"%  c #78580B",
-"&  c #7D5C0B",
-"*  c #78590E",
-"=  c #7E5F14",
-"-  c #8A6711",
-";  c #8D6B15",
-":  c #8A691A",
-">  c #93711C",
-",  c #9D7A23",
-"<  c #9F7B22",
-"1  c #9C7B2A",
-"2  c #9E7C28",
-"3  c #A37F26",
-"4  c #B4831B",
-"5  c #A68126",
-"6  c #A5852E",
-"7  c #A9872E",
-"8  c #AC862D",
-"9  c #AC872F",
-"0  c #AF8B30",
-"q  c #AC8932",
-"w  c #AF8A34",
-"e  c #B08E36",
-"r  c #B98F33",
-"t  c #B18E3A",
-"y  c #B39036",
-"u  c #B69237",
-"i  c #B3913B",
-"p  c #B6923C",
-"a  c #BD9338",
-"s  c #B9993F",
-"d  c #BA993F",
-"f  c #C2932D",
-"g  c #C09437",
-"h  c #C59832",
-"j  c #C39836",
-"k  c #C89835",
-"l  c #C59C3D",
-"z  c #CF9E3E",
-"x  c #CFA23F",
-"c  c #D0A13A",
-"v  c #D3A23A",
-"b  c #D4A338",
-"n  c #D6A33F",
-"m  c #B19345",
-"M  c #BF9940",
-"N  c #BF9D43",
-"B  c #B3954B",
-"V  c #BD9A48",
-"C  c #BC9C4B",
-"Z  c #BD9F51",
-"A  c #CAA244",
-"S  c #C2A14B",
-"D  c #C4A44B",
-"F  c #C1A24C",
-"G  c #C7A64C",
-"H  c #C5A64E",
-"J  c #C9A94F",
-"K  c #D1A343",
-"L  c #D7A644",
-"P  c #D5A547",
-"I  c #D6A547",
-"U  c #DCAD42",
-"Y  c #DDAB45",
-"T  c #C3A151",
-"R  c #C9A551",
-"E  c #CAAA50",
-"W  c #CBAD53",
-"Q  c #CDAC52",
-"!  c #CEA855",
-"~  c #CEB15A",
-"^  c #DEB154",
-"/  c #D1B35A",
-"(  c #D7B35A",
-")  c #D8B45D",
-"_  c #E3B34A",
-"`  c #E2B34E",
-"'  c #E6B54F",
-"]  c #E2B350",
-"[  c #E3B352",
-"{  c #E4B451",
-"}  c #E2B355",
-"|  c #E7B853",
-" . c #E9BC51",
-".. c #ECBC53",
-"X. c #E7BE5A",
-"o. c #E2BA5C",
-"O. c #E2BC5C",
-"+. c #E9BB59",
-"@. c #EBBE59",
-"#. c #EABD5B",
-"$. c #E8BF5C",
-"%. c #E9BE5E",
-"&. c #C8AC63",
-"*. c #D0B162",
-"=. c #D5B567",
-"-. c #DABC62",
-";. c #D2B66B",
-":. c #D0B56D",
-">. c #DCBC6E",
-",. c #D2B972",
-"<. c #D7BE78",
-"1. c #E9BE62",
-"2. c #EEC05A",
-"3. c #F0C25F",
-"4. c #DEC26B",
-"5. c #DDC27A",
-"6. c #E0C167",
-"7. c #E5C067",
-"8. c #EBC463",
-"9. c #EEC460",
-"0. c #ECC364",
-"q. c #E4C16B",
-"w. c #E7C46B",
-"e. c #E9C56C",
-"r. c #E0C172",
-"t. c #E5C575",
-"y. c #E4C870",
-"u. c #E6CA72",
-"i. c #E6CA74",
-"p. c #E8CB73",
-"a. c #E9CE76",
-"s. c #EBD07B",
-"d. c #EED179",
-"f. c #F5D478",
-"g. c #F5D57C",
-"h. c #F4D67C",
-"j. c #F4D77E",
-"k. c #DEC781",
-"l. c #E0C883",
-"z. c #E3CA89",
-"x. c #E4CB8B",
-"c. c #E3CD8A",
-"v. c #E5CE8B",
-"b. c #E3CC8E",
-"n. c #E8D18D",
-"m. c #F6D980",
-"M. c #F7DB83",
-"N. c #F3DA86",
-"B. c #F7DA84",
-"V. c #F6DB84",
-"C. c #F7DB84",
-"Z. c #F7DA86",
-"A. c #F6DC85",
-"S. c #F7DC85",
-"D. c #F8DB85",
-"F. c #FADD85",
-"G. c #FBDE86",
-"H. c #F5DE8B",
-"J. c #FADD88",
-"K. c #F9DF8B",
-"L. c #E4CF93",
-"P. c #E6CF92",
-"I. c #E6D094",
-"U. c #EAD597",
-"Y. c #EBD698",
-"T. c #EFDA99",
-"R. c #F0DC9C",
-"E. c #FCE089",
-"W. c #FCE28B",
-"Q. c #FDE28B",
-"!. c #FCE38C",
-"~. c #FCE28D",
-"^. c #FCE38D",
-"/. c #FDE38D",
-"(. c #FEE38D",
-"). c #FDE38E",
-"_. c #FEE48D",
-"`. c #FEE58F",
-"'. c #FCE490",
-"]. c #FDE490",
-"[. c #FFE590",
-"{. c #FFE690",
-"}. c #FFE691",
-"|. c #FEE791",
-" X c #FFE692",
-".X c #FFE792",
-"XX c #FEE693",
-"oX c #FFE693",
-"OX c #FFE793",
-"+X c #FEE897",
-"@X c #F6E2A2",
-"#X c #F7E3A2",
-"$X c #FAE6A8",
-"%X c #FBE7A9",
-"&X c #FCE9AB",
-"*X c #FDEAAC",
-"=X c None",
-/* pixels */
-"=X=X=X=X=X0 S G D i =X=X=X=X=X=X",
-"=X=X=X9 6.).).).).).d.e =X=X=X=X",
-"=X=Xu C.J.O.( h ( o.D.).J & =X=X",
-"=X0 S.j.f 4 b.e P.K @.j.'.d % =X",
-"=X4.).k a T Y.&.Y.R 2.2.F.S.- =X",
-"e '.e.z ! v.&X,.k.*X:. .%.`.d # ",
-"H +X^ I P =.*X9 j T.k.U ' F.-.% ",
-"W '.` { } >.*X<.n.*XC b Y g.u.X ",
-"W |.` { 3.t.&Xm C c.%Xa n m.u.. ",
-"N '.9...@.r.&Xi A 5.*XM L W.~ . ",
-"5 m.f._ *.#X&XR.#X%X:.v 0.'.7 # ",
-"=XQ `.@.l t P.B I.u v { G.a.o =X",
-"=X3 u.W.0.A z.V b.+.1.J.E., # =X",
-"=X=X3 u.oXF.e.7.q.C.+XH.6 # =X=X",
-"=X=X=X=XS s.'.'.'.C.~ ; * =X=X=X",
-"=X=X=X=X=X=X1 1 > : = =X=X=X=X=X"
-};
diff --git a/src/xpm/bitcoin20.xpm b/src/xpm/bitcoin20.xpm
deleted file mode 100644 (file)
index 3cc29ac..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/* XPM */
-static const char * bitcoin20_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"20 20 134 2",
-"   c #735305",
-".  c #785706",
-"X  c #7E5C07",
-"o  c #755509",
-"O  c #76580D",
-"+  c #7F6015",
-"@  c #85620D",
-"#  c #89650D",
-"$  c #836215",
-"%  c #886510",
-"&  c #8E6B11",
-"*  c #81641F",
-"=  c #906D19",
-"-  c #977116",
-";  c #96741E",
-":  c #9B761E",
-">  c #947424",
-",  c #9B7722",
-"<  c #9D7824",
-"1  c #A47F23",
-"2  c #A17D2A",
-"3  c #A58125",
-"4  c #AA8327",
-"5  c #A4832F",
-"6  c #AD862B",
-"7  c #B28B2E",
-"8  c #A58433",
-"9  c #A88637",
-"0  c #AD8932",
-"q  c #A78639",
-"w  c #A8893C",
-"e  c #B28C34",
-"r  c #B88E33",
-"t  c #B28E3A",
-"y  c #B79136",
-"u  c #BB9235",
-"i  c #BB9639",
-"p  c #C19836",
-"a  c #C29539",
-"s  c #C59C3C",
-"d  c #A88B41",
-"f  c #AF9045",
-"g  c #B49342",
-"h  c #BE9641",
-"j  c #BD9B44",
-"k  c #B29448",
-"l  c #B7994B",
-"z  c #B8994C",
-"x  c #C09946",
-"c  c #CB9E46",
-"v  c #C59D4C",
-"b  c #CFA246",
-"n  c #CBAB47",
-"m  c #CEA74A",
-"M  c #D4A749",
-"N  c #D6A94D",
-"B  c #C7A754",
-"V  c #CEA453",
-"C  c #C6AA56",
-"Z  c #CDA955",
-"A  c #CBAB5B",
-"S  c #D2AB54",
-"D  c #D2AE5E",
-"F  c #D9AE5A",
-"G  c #D7B356",
-"H  c #DDB35F",
-"J  c #DFB95A",
-"K  c #E1B554",
-"L  c #E4BA56",
-"P  c #E6BC5A",
-"I  c #E9BE5E",
-"U  c #C7AC64",
-"Y  c #CBAF64",
-"T  c #CDB166",
-"R  c #D4B364",
-"E  c #DBB463",
-"W  c #DFB867",
-"Q  c #D5B76B",
-"!  c #DFBA6F",
-"~  c #D5BB76",
-"^  c #D7BE79",
-"/  c #E3BC64",
-"(  c #E8BF64",
-")  c #E0BB68",
-"_  c #DECA7A",
-"`  c #EBC265",
-"'  c #EBC36B",
-"]  c #EFC96B",
-"[  c #F1C564",
-"{  c #F3CB6A",
-"}  c #F9CD6C",
-"|  c #FAD16C",
-" . c #E5C770",
-".. c #EEC774",
-"X. c #E6CE7E",
-"o. c #EFCE7A",
-"O. c #F1CB73",
-"+. c #F4CE7A",
-"@. c #F3D273",
-"#. c #FCD574",
-"$. c #FEDA76",
-"%. c #F5D47D",
-"&. c #FAD47B",
-"*. c #F2D97D",
-"=. c #FCDA7A",
-"-. c #DDC784",
-";. c #E1CA86",
-":. c #E4CE8B",
-">. c #ECD985",
-",. c #E7D18E",
-"<. c #F4DC84",
-"1. c #FCDC81",
-"2. c #F4DB8B",
-"3. c #FBDF8B",
-"4. c #EBD592",
-"5. c #EFDA99",
-"6. c #F1DD9C",
-"7. c #F6E081",
-"8. c #FDE484",
-"9. c #FFEA87",
-"0. c #F9E488",
-"q. c #FEE88D",
-"w. c #F9E394",
-"e. c #FFEB93",
-"r. c #FEE698",
-"t. c #FEEA9B",
-"y. c #FFF49A",
-"u. c #F7E4A4",
-"i. c #F9E5A5",
-"p. c #FCE9AA",
-"a. c #F7F0AA",
-"s. c #FEF1AE",
-"d. c #FEF6B3",
-"f. c None",
-/* pixels */
-"f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.",
-"f.f.f.f.f.f.f.0 y i i 0 , f.f.f.f.f.f.f.",
-"f.f.f.f.3 p P | $.| } { I p ; f.f.f.f.f.",
-"f.f.f.4 L | $.{ L K L ` =.#.` 3 $ f.f.f.",
-"f.f.6 [ $.{ M a Q 0 Q S ' %.q.*.6 o f.f.",
-"f.3 ' $.P i u r ,.< :.S +.%.0.y.*.& f.f.",
-"f.C e.%.c x T Y 6.U 5.T R @.#.0.9.n . f.",
-"f.>.t.W F A ^ p.u.~ -.p.i.C { { =.@.# f.",
-"e e.3.E H / j p.6.0 V ~ p.Y ( ` #.$.3 o ",
-"j p.2.( ( ! Z p.6.l R 6.6.t I I { #.y o ",
-"j e.1.( ! +.H i.i.-.:.i.u.R N K ` #.u   ",
-"i 9.&.( ..1.) p.6.8 j w p.p.h N ' #.7   ",
-"4 =.7.` ....Z p.6.g D T p.i.t M [ } - o ",
-"f.J =.{ ` E i.p.p.i.p.p.6.k u M } K @ o ",
-"f.7 @.@./ S z f 4.d ,.q 2 r a ( { 6   f.",
-"f.f.m @.O.( / V 4.q :.v V V O.&.G X O f.",
-"f.f.: G 1.0.+.W R D R ! 4.d.d._ #   f.f.",
-"f.f.f.2 C a.i.r.w.w.i.s.d.p.Y @   f.f.f.",
-"f.f.f.f.f.5 Z  .<.3.2.X.A > .   f.f.f.f.",
-"f.f.f.f.f.f.f.> > = # $ + f.f.f.f.f.f.f."
-};
diff --git a/src/xpm/bitcoin48.xpm b/src/xpm/bitcoin48.xpm
deleted file mode 100644 (file)
index 85a7711..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* XPM */
-static const char * bitcoin48_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"48 48 223 2",
-"   c #765404",
-".  c #795704",
-"X  c #7C5904",
-"o  c #7C5A0A",
-"O  c #825E05",
-"+  c #815F0E",
-"@  c #815F11",
-"#  c #866107",
-"$  c #866208",
-"%  c #8A650A",
-"&  c #8E680D",
-"*  c #916B0E",
-"=  c #866414",
-"-  c #8C6715",
-";  c #8F6A10",
-":  c #8A691B",
-">  c #956E12",
-",  c #906D1D",
-"<  c #967013",
-"1  c #997215",
-"2  c #94711F",
-"3  c #9C751A",
-"4  c #9E781C",
-"5  c #A27B1D",
-"6  c #947324",
-"7  c #997625",
-"8  c #9D7926",
-"9  c #97792B",
-"0  c #9D7B28",
-"q  c #9C7F34",
-"w  c #A47E22",
-"e  c #A87F21",
-"r  c #A37E2A",
-"t  c #A8801F",
-"y  c #A58025",
-"u  c #AB8425",
-"i  c #A5812C",
-"p  c #AB842A",
-"a  c #AB892D",
-"s  c #B0862C",
-"d  c #B48C2D",
-"f  c #B88F2F",
-"g  c #B9912E",
-"h  c #A68432",
-"j  c #AB8531",
-"k  c #AD8A33",
-"l  c #A68638",
-"z  c #AD8B3B",
-"x  c #B38C32",
-"c  c #BA8E35",
-"v  c #B28D3B",
-"b  c #B59234",
-"n  c #BD9235",
-"m  c #B5903E",
-"M  c #BC943B",
-"N  c #BA9A3B",
-"B  c #C29536",
-"V  c #C59937",
-"C  c #C2953B",
-"Z  c #C49C3C",
-"A  c #CA9E3D",
-"S  c #AC8E43",
-"D  c #AD9045",
-"F  c #AE9248",
-"G  c #B49444",
-"H  c #B99542",
-"J  c #B49842",
-"K  c #BD9C44",
-"L  c #B3954A",
-"P  c #B7994D",
-"I  c #BD9A4A",
-"U  c #B69A52",
-"Y  c #BB9E54",
-"T  c #BEA04A",
-"R  c #BFA354",
-"E  c #BEA35A",
-"W  c #C19742",
-"Q  c #C49B43",
-"!  c #CA9D41",
-"~  c #C39C4B",
-"^  c #C99E4A",
-"/  c #C7A444",
-"(  c #CDA244",
-")  c #CAA945",
-"_  c #C5A44C",
-"`  c #CCA44B",
-"'  c #C6A94C",
-"]  c #CFAC4D",
-"[  c #D2A647",
-"{  c #D2A54B",
-"}  c #D4AA4C",
-"|  c #D9AC4D",
-" . c #D4B04E",
-".. c #DCB14D",
-"X. c #C4A151",
-"o. c #CAA454",
-"O. c #C6AB56",
-"+. c #CCA955",
-"@. c #C1A45A",
-"#. c #C6AA5A",
-"$. c #CDAB5D",
-"%. c #D1A652",
-"&. c #D4AB53",
-"*. c #DDAF52",
-"=. c #D3AC5B",
-"-. c #D9AF5C",
-";. c #D5B154",
-":. c #DDB253",
-">. c #D5B25B",
-",. c #DCB45D",
-"<. c #DDBB5E",
-"1. c #E1B354",
-"2. c #E4B955",
-"3. c #E3B65B",
-"4. c #E5BA5C",
-"5. c #EABE5E",
-"6. c #C6AB63",
-"7. c #CCAD63",
-"8. c #C6AE68",
-"9. c #C9AF69",
-"0. c #D4AC60",
-"q. c #CDB067",
-"w. c #CDB36C",
-"e. c #D6B162",
-"r. c #DDB463",
-"t. c #D7B964",
-"y. c #DBB965",
-"u. c #D1B66F",
-"i. c #DDB66A",
-"p. c #D0BC6C",
-"a. c #DFBE6B",
-"s. c #CEB772",
-"d. c #D1B771",
-"f. c #D4BC74",
-"g. c #DBBD75",
-"h. c #DABF78",
-"j. c #E2B764",
-"k. c #E4BA64",
-"l. c #E9BD62",
-"z. c #E2BB6A",
-"x. c #E8BF69",
-"c. c #EBC15F",
-"v. c #F1C25E",
-"b. c #DFC266",
-"n. c #DBC26C",
-"m. c #DCC676",
-"M. c #DEC973",
-"N. c #D7C07A",
-"B. c #D9C27E",
-"V. c #E4C162",
-"C. c #EDC363",
-"Z. c #E3C36F",
-"A. c #EBC26C",
-"S. c #E5CA6B",
-"D. c #EECA6D",
-"F. c #F1C565",
-"G. c #F5CB66",
-"H. c #F9CA66",
-"J. c #F2C76A",
-"K. c #F5CC6A",
-"L. c #F9CD6C",
-"P. c #EDD26C",
-"I. c #FBD26E",
-"U. c #E5C374",
-"Y. c #EDC573",
-"T. c #E6CB74",
-"R. c #EECC73",
-"E. c #EBCA78",
-"W. c #F5CD74",
-"Q. c #F9CE72",
-"!. c #EED77F",
-"~. c #F4D274",
-"^. c #FDD473",
-"/. c #F2D870",
-"(. c #FED975",
-"). c #F5D37C",
-"_. c #FCD57A",
-"`. c #F7D87A",
-"'. c #FEDC7C",
-"]. c #FFE37D",
-"[. c #DCC682",
-"{. c #E1C984",
-"}. c #E4CD8A",
-"|. c #EFD182",
-" X c #E5D48D",
-".X c #EAD28D",
-"XX c #E8DB8D",
-"oX c #F1D581",
-"OX c #FDD581",
-"+X c #F5DB84",
-"@X c #FDDC84",
-"#X c #FEDE89",
-"$X c #EAD594",
-"%X c #E1D894",
-"&X c #ECDA94",
-"*X c #EFDA99",
-"=X c #F2DD9C",
-"-X c #F6E284",
-";X c #FEE385",
-":X c #FFE883",
-">X c #FEE38C",
-",X c #FEEA8C",
-"<X c #F6E196",
-"1X c #FEE594",
-"2X c #FEEC93",
-"3X c #F6E39C",
-"4X c #FEE599",
-"5X c #FFEB9B",
-"6X c #FFF195",
-"7X c #FEF39B",
-"8X c #FEF99C",
-"9X c #F5E2A2",
-"0X c #F9E5A5",
-"qX c #F6EAA6",
-"wX c #FFECA3",
-"eX c #FDEAAB",
-"rX c #FFF5A0",
-"tX c #FFF2AB",
-"yX c #FEF5B3",
-"uX c #FFF9B3",
-"iX c #FFFBBB",
-"pX c #FFFDC1",
-"aX c None",
-/* pixels */
-"aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaX* < * < < < < * * & aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaXaXaXaX* 1 3 5 u u d g Z Z N d u 5 3 * % aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaXaX< 3 t u A ..c.K.I.I.(.(.'.(.G.2.( d 5 1 & aXaXaXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaX< 5 t g 1.G.H.H.I.(.'.(.I.I.I.K.K.G.I.K.2.V u 1 % aXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaX4 t g c.G.H.I.I.I.].(.(.(.I.G.H.K.G.K.I.G.K.Q.C.C 5 & % aXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaX4 u } v.G.G.I.(.].(.(.(.I.G.G.G.G.G.L.G.K.I.^.^.L.L.:.u < # aXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXt d c.G.I.I.I.I.].(.I.G.c.........:.4.C.W.~.`.'._.^.K.K.J.N 4 # aXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaX5 g v.H.I.I.(.(.(.H.c.[ V V V V A A A ! ( } l.).>X@X_.`._.'.'./ 4 O aXaXaXaXaXaXaX",
-"aXaXaXaXaXaXt g C.I.(.(.^.(.^.1.( ! C d p u s d d d x M &.3.3.A.).+XOX>X;X;X;X) 3 O aXaXaXaXaXaX",
-"aXaXaXaXaX5 d G.I.'.].(.^.l.( C A C s H =X=XI 7 N.*X$Xk o.j.z.J.l.W.1X7X6X,X,X,XK 1 X aXaXaXaXaX",
-"aXaXaXaX3 p C.(.(.'.'.^.*.C C C C B r G eXeXL - [.eX3Xr ~ r.W._.W.J.D.6X8X6X6X6X-Xd & X aXaXaXaX",
-"aXaXaXaXu ;.'.'.(.^.^.| C c B B B c w z eXeXF = [.eX*X8 K r.@X#X;X`.~.D.7X8X8X6X,XS.y O aXaXaXaX",
-"aXaXaXw N #X#X'.'.^.*.C c c s r e r 2 r eXeXD $ B.eX=X: z z.oX>X,X,X;X~.D.8X8X6X,X:X) < X aXaXaX",
-"aXaX3 a T.1X1X>X#XA.! C B s $.6.6.@.@.w.eXeXd.U $XeX9XF z G O.n.!.-X;X'.D./.8X6X,X:X/.u # aXaXaX",
-"aXaXy K 5X5X5X2X>X-.} ^ C r 0XeXeXeXeXeXeXeXeXeXeXeXeXeXeX9XN.L O.T.`.]./.F.-X6X:X].].) < . aXaX",
-"aXaXa M.7X5X5X5XU.&.-.&.^ j 0XeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeX9XL X.~.'.'.K.c.6X:X].].P.t O aXaX",
-"aX5 k 2X5X5X5X<X-.-.-.-.=.W q.6.9.=XeXeXeXeXs.9.d.B.*XeXeXeXeXeX&Xh <.(.(.Q.F.~.;X].].].b & . aX",
-"aXy O.5X5X5X5XE.-.-.-.-.-.%.Q z 6 6.eXeXeXeX: , w r 7 R eXeXeXeX0XG ' ~.^.^.F.l.;X].].]. .1 . aX",
-"aXp n.2X5X5X5Xj.-.-.-.r.r.r.-.=.G 9.eXeXeXeX6 j ( &.} i [.eXeXeXeXY Q J.I.I.L.5.(.;X].(.c.5 X aX",
-"3 a !.7X5X7X<X-.r.r.r.r.j.r.r.r.W w.eXeXeXeX6 v ,.Q.k.m s.eXeXeXeXL K C.L.L.L.F.D.'.'.(.I.u #   ",
-"5 a ,X5XrXwX+X3.j.j.j.z.z.z.z.r.~ w.eXeXeXeX6 l ;.<._ 0 *XeXeXeX0X0 ( G.L.Q.L.5.C.].'.^.^.g $   ",
-"4 b 2X7X7XrX!.l.x.x.x.x.U.x.z.z.~ w.eXeXeXeX: , k z Y  XeXeXeXeXY r } C.5.5.5.3.4.'.(.^.^.V % . ",
-"4 N 6X7X7XrXOXx.x.x.W.x.Y.Y.Y.Y.o.d.eXeXeXeX=X=X9XeXeXeXeXeXeX8.+ r [ 3.5.5.3.3.1.'._.(.^.A & . ",
-"5 N 2X6X5X5XW.x.x.x.x.W.Y.Y.Y.Y.o.d.eXeXeXeXeXeXeXeXeXeXeXeXeXeX[.r C | 1.3.3.3.:._._.^.I./ %   ",
-"5 N ,X2X2X6XD.l.l.x.x.x.Y.Y.Y.R.=.f.eXeXeXeX[.[.[.[.*XeXeXeXeXeXeX*Xj ! *.1.1.1.1._._.^.^./ %   ",
-"5 b ;X,X,X2XU.3.j.x.Y.W.).OX#X@Xt.f.eXeXeXeX: : 7 7 : 6 6.eXeXeXeXeXd.k { *.*.*.1.OX_.(.^.V %   ",
-"4 a ].;X;X>X`.C.L.^._._.OX@X#X#Xt.f.eXeXeXeX6 z #.o.I z 6 w.eXeXeXeX*Xr ! { %.%.,.OX_.(.^.n %   ",
-"4 u /.;X;X;X@XF.Q.Q._._._.@X#X#Xa.f.eXeXeXeX9 I a.Z.y.+.k F eXeXeXeX0Xr Q { { { 4.'.(.^.^.u O   ",
-"aXu V.;X;X;X>XF.K.Q.Q._._.OX#X@Xt.f.eXeXeXeX9 I Z.U.z.=.z 8.eXeXeXeX=X7 Q { { ( A._.^.^.F.5 O   ",
-"aXu ] '.'.;X>XK.J.Q.Q.^._._.~.Z.R w.eXeXeXeX6 S =.>.+.G S 9XeXeXeXeXh.r ! ( ( [ L.L.L.L.:.1 . aX",
-"aX5 b '.'.'.@X`.F.K.Q.Q.~.A.e.$.P }.eXeXeXeXF L E #.9.[.eXeXeXeXeXeXS k ! ( ! *.H.K.H.L.Z %   aX",
-"aX1 u J.(.'.'.;XC.F.W.Q.K.&.h.eXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeX@.2 c ! ! ! F.H.L.H.F.w O   aX",
-"aXaXw ( (.(.`.`.`.C.F.K.A.~ [.eXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeX*XF 7 r C B A | H.H.H.H.| 1 X aXaX",
-"aXaX3 u D.~.~.~.`.D.C.J.V.` .X=X=X3X9X9XeXeX9X=XeXeXeX$X{.9.S 2 r r B B B V 5.H.H.H.H.s + . aXaX",
-"aXaXaXt / ~.W.~.`.`.5.V.C.>.M i 6 - = q eXeXS o B.eX*Xo 7 r r r B C B r B 1.H.H.L.L.*.5 X . aXaX",
-"aXaXaX1 u 4.~.~.~.~.~.c.V.l.4.,.~ H i S eXeXF : [.eX=X, r W ^ W W C C W *.Q.Q.Q.Q.J.e %   aXaXaX",
-"aXaXaXaX5 b K.~.~.R.~.`.l.C.J.A.,.=.H P eXeXU , [.eX=X7 v ^ %.^ W ^ ^ -.^.^.W._.W.Z > .   aXaXaX",
-"aXaXaXaX1 5 / ~.~.~.~.~.`.F.F.<.r.,.~ R eXeXY 7 [.eX=Xq ~ 0.r.0.%.o.g.#XOXOXOXOX,.4 O   aXaXaXaX",
-"aXaXaXaXaX1 y } ~.`.`.`.'.#XR.,.r.,.+.X.9.7.I G 9.7.7.X.0.i.i.j.i.9XeX0X=X4X1XT.r #   aXaXaXaXaX",
-"aXaXaXaXaXaX1 u :.'.'.OX#X#X1X+XA.3.r.-.=.=.>.e.i.$.0.0.i.j.g.0XpXpXpXyXuXyXXXk %   aXaXaXaXaXaX",
-"aXaXaXaXaXaXaX1 p >.>X#X>X1X1X1X1X1X|.U.z.3.j.z.y.i.i.U..XqXpXiXpXpXpXiXiX Xh % . . aXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaX< y _ 3XtXuXtXwX=X4X4X4X5X<X>X=X3X0XeXtXyXuXiXiXiXiXiXuXp.y # . . aXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaX* y J %XpXiXwX4X4X4X5X4X5X5XwXwXwXeXtXeXtXtXyXyXyX&XJ 3 #   aXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaX* 3 k R  XwX4X1X1X1X1X5X4X5X5XwX5XwXwXtXtXtX&X@.y & X   aXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaX& 3 a J t.|.>X,X>X>X2X1X1X1X5X4X0X<Xm.T i > O   o aXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaXaXaX% > w p b _ >.b.S.T.T.U.t.O.N p 4 & O . o aXaXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaX$ $ ; 1 4 5 5 w w 5 3 > % O . . o aXaXaXaXaXaXaXaXaXaXaXaXaXaXaX",
-"aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXO X X X o X X X o aXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaX"
-};
diff --git a/src/xpm/check.xpm b/src/xpm/check.xpm
deleted file mode 100644 (file)
index e62b656..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* XPM */\r
-static const char * check_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"32 32 3 1",\r
-"  c #008000",\r
-". c #00FF00",\r
-"X c None",\r
-/* pixels */\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXX   XXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXX .  XXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXX .. XXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXX .  XXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXX .. XXXXXXXXXXXXX",\r
-"XXXXXXXXXXX  XX .  XXXXXXXXXXXXX",\r
-"XXXXXXXXXXX .  .. XXXXXXXXXXXXXX",\r
-"XXXXXXXXXXX .. .  XXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXX ... XXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXX .  XXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXX  XXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",\r
-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\r
-};\r
diff --git a/src/xpm/send16.xpm b/src/xpm/send16.xpm
deleted file mode 100644 (file)
index 7da44d9..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/* XPM */\r
-static const char * send16_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"16 16 256 2",\r
-"   c #ADF7AD",\r
-".  c #9CFF9C",\r
-"X  c None",\r
-"o  c #ADEFAD",\r
-"O  c #94FF94",\r
-"+  c #D6CECE",\r
-"@  c #8CFF8C",\r
-"#  c #CECECE",\r
-"$  c #CECEC5",\r
-"%  c #84FF84",\r
-"&  c #CEC5C5",\r
-"*  c #73FF73",\r
-"=  c #C5C5C5",\r
-"-  c #6BFF6B",\r
-";  c #73F773",\r
-":  c #C5BDBD",\r
-">  c #6BF76B",\r
-",  c #BDBDBD",\r
-"<  c #63F763",\r
-"1  c #B5B5B5",\r
-"2  c #52F752",\r
-"3  c #42FF42",\r
-"4  c #3AFF3A",\r
-"5  c #ADADAD",\r
-"6  c #ADADA5",\r
-"7  c #4AEF4A",\r
-"8  c #29FF29",\r
-"9  c #A5A5A5",\r
-"0  c #42E642",\r
-"q  c #9CA59C",\r
-"w  c #3AE63A",\r
-"e  c #10FF10",\r
-"r  c #08FF08",\r
-"t  c #949C94",\r
-"y  c #00FF00",\r
-"u  c #00F700",\r
-"i  c #8C948C",\r
-"p  c #00EF00",\r
-"a  c #08E608",\r
-"s  c #10DE10",\r
-"d  c #00E600",\r
-"f  c #00DE00",\r
-"g  c #19C519",\r
-"h  c #00CE00",\r
-"j  c #00C500",\r
-"k  c #008C00",\r
-"l  c #008400",\r
-"z  c #669900",\r
-"x  c #999900",\r
-"c  c #CC9900",\r
-"v  c #FF9900",\r
-"b  c #00CC00",\r
-"n  c #33CC00",\r
-"m  c #66CC00",\r
-"M  c #99CC00",\r
-"N  c #CCCC00",\r
-"B  c #FFCC00",\r
-"V  c #66FF00",\r
-"C  c #99FF00",\r
-"Z  c #CCFF00",\r
-"A  c #000033",\r
-"S  c #330033",\r
-"D  c #660033",\r
-"F  c #990033",\r
-"G  c #CC0033",\r
-"H  c #FF0033",\r
-"J  c #003333",\r
-"K  c #333333",\r
-"L  c #663333",\r
-"P  c #993333",\r
-"I  c #CC3333",\r
-"U  c #FF3333",\r
-"Y  c #006633",\r
-"T  c #336633",\r
-"R  c #666633",\r
-"E  c #996633",\r
-"W  c #CC6633",\r
-"Q  c #FF6633",\r
-"!  c #009933",\r
-"~  c #339933",\r
-"^  c #669933",\r
-"/  c #999933",\r
-"(  c #CC9933",\r
-")  c #FF9933",\r
-"_  c #00CC33",\r
-"`  c #33CC33",\r
-"'  c #66CC33",\r
-"]  c #99CC33",\r
-"[  c #CCCC33",\r
-"{  c #FFCC33",\r
-"}  c #33FF33",\r
-"|  c #66FF33",\r
-" . c #99FF33",\r
-".. c #CCFF33",\r
-"X. c #FFFF33",\r
-"o. c #000066",\r
-"O. c #330066",\r
-"+. c #660066",\r
-"@. c #990066",\r
-"#. c #CC0066",\r
-"$. c #FF0066",\r
-"%. c #003366",\r
-"&. c #333366",\r
-"*. c #663366",\r
-"=. c #993366",\r
-"-. c #CC3366",\r
-";. c #FF3366",\r
-":. c #006666",\r
-">. c #336666",\r
-",. c #666666",\r
-"<. c #996666",\r
-"1. c #CC6666",\r
-"2. c #009966",\r
-"3. c #339966",\r
-"4. c #669966",\r
-"5. c #999966",\r
-"6. c #CC9966",\r
-"7. c #FF9966",\r
-"8. c #00CC66",\r
-"9. c #33CC66",\r
-"0. c #99CC66",\r
-"q. c #CCCC66",\r
-"w. c #FFCC66",\r
-"e. c #00FF66",\r
-"r. c #33FF66",\r
-"t. c #99FF66",\r
-"y. c #CCFF66",\r
-"u. c #FF00CC",\r
-"i. c #CC00FF",\r
-"p. c #009999",\r
-"a. c #993399",\r
-"s. c #990099",\r
-"d. c #CC0099",\r
-"f. c #000099",\r
-"g. c #333399",\r
-"h. c #660099",\r
-"j. c #CC3399",\r
-"k. c #FF0099",\r
-"l. c #006699",\r
-"z. c #336699",\r
-"x. c #663399",\r
-"c. c #996699",\r
-"v. c #CC6699",\r
-"b. c #FF3399",\r
-"n. c #339999",\r
-"m. c #669999",\r
-"M. c #999999",\r
-"N. c #CC9999",\r
-"B. c #FF9999",\r
-"V. c #00CC99",\r
-"C. c #33CC99",\r
-"Z. c #66CC66",\r
-"A. c #99CC99",\r
-"S. c #CCCC99",\r
-"D. c #FFCC99",\r
-"F. c #00FF99",\r
-"G. c #33FF99",\r
-"H. c #66CC99",\r
-"J. c #99FF99",\r
-"K. c #CCFF99",\r
-"L. c #FFFF99",\r
-"P. c #0000CC",\r
-"I. c #330099",\r
-"U. c #6600CC",\r
-"Y. c #9900CC",\r
-"T. c #CC00CC",\r
-"R. c #003399",\r
-"E. c #3333CC",\r
-"W. c #6633CC",\r
-"Q. c #9933CC",\r
-"!. c #CC33CC",\r
-"~. c #FF33CC",\r
-"^. c #0066CC",\r
-"/. c #3366CC",\r
-"(. c #666699",\r
-"). c #9966CC",\r
-"_. c #CC66CC",\r
-"`. c #FF6699",\r
-"'. c #0099CC",\r
-"]. c #3399CC",\r
-"[. c #6699CC",\r
-"{. c #9999CC",\r
-"}. c #CC99CC",\r
-"|. c #FF99CC",\r
-" X c #00CCCC",\r
-".X c #33CCCC",\r
-"XX c #66CCCC",\r
-"oX c #99CCCC",\r
-"OX c #CCCCCC",\r
-"+X c #FFCCCC",\r
-"@X c #00FFCC",\r
-"#X c #33FFCC",\r
-"$X c #66FF99",\r
-"%X c #99FFCC",\r
-"&X c #CCFFCC",\r
-"*X c #FFFFCC",\r
-"=X c #3300CC",\r
-"-X c #6600FF",\r
-";X c #9900FF",\r
-":X c #0033CC",\r
-">X c #3333FF",\r
-",X c #6633FF",\r
-"<X c #9933FF",\r
-"1X c #CC33FF",\r
-"2X c #FF33FF",\r
-"3X c #0066FF",\r
-"4X c #3366FF",\r
-"5X c #6666CC",\r
-"6X c #9966FF",\r
-"7X c #CC66FF",\r
-"8X c #FF66CC",\r
-"9X c #0099FF",\r
-"0X c #3399FF",\r
-"qX c #6699FF",\r
-"wX c #9999FF",\r
-"eX c #CC99FF",\r
-"rX c #FF99FF",\r
-"tX c #00CCFF",\r
-"yX c #33CCFF",\r
-"uX c #66CCFF",\r
-"iX c #99CCFF",\r
-"pX c #CCCCFF",\r
-"aX c #FFCCFF",\r
-"sX c #33FFFF",\r
-"dX c #66FFCC",\r
-"fX c #99FFFF",\r
-"gX c #CCFFFF",\r
-"hX c #FF6666",\r
-"jX c #66FF66",\r
-"kX c #FFFF66",\r
-"lX c #6666FF",\r
-"zX c #FF66FF",\r
-"xX c #66FFFF",\r
-"cX c #A50021",\r
-"vX c #5F5F5F",\r
-"bX c #777777",\r
-"nX c #868686",\r
-"mX c #969696",\r
-"MX c #CBCBCB",\r
-"NX c #B2B2B2",\r
-"BX c #D7D7D7",\r
-"VX c #DDDDDD",\r
-"CX c #E3E3E3",\r
-"ZX c #EAEAEA",\r
-"AX c #F1F1F1",\r
-"SX c #F8F8F8",\r
-"DX c #FFFBF0",\r
-"FX c #A0A0A4",\r
-"GX c #808080",\r
-"HX c #FF0000",\r
-"JX c #00FF00",\r
-"KX c #FFFF00",\r
-"LX c #0000FF",\r
-"PX c #FF00FF",\r
-"IX c #00FFFF",\r
-"UX c #FFFFFF",\r
-/* pixels */\r
-"X X X X X X X k k X X X X X X X ",\r
-"X X X X X X X k j k X X X X X X ",\r
-"X X X X X X X k o j k X X X X X ",\r
-"X X X X X X X k * o j k X X X X ",\r
-"l k k k k k k k * * . j k X X X ",\r
-"l @ @ @ @ @ @ @ 4 e e % j k X X ",\r
-"l O 3 8 e r r r r r r e ; j k X ",\r
-"l @ e e r r r r r u p a f < j k ",\r
-"l @ r u p a a a a a f f w j k i ",\r
-"l O ; ; ; ; ; < a f b 0 j k t : ",\r
-"l k k k k k k k s j 7 j k q = X ",\r
-"X $ = = = = = k g 7 j k 9 & X X ",\r
-"X X X X X X X k 2 j k 6 $ X X X ",\r
-"X X X X X X X k j k 5 + X X X X ",\r
-"X X X X X X X k k 1 + X X X X X ",\r
-"X X X X X X X = , X X X X X X X "\r
-};\r
diff --git a/src/xpm/send16noshadow.xpm b/src/xpm/send16noshadow.xpm
deleted file mode 100644 (file)
index f6cef45..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/* XPM */\r
-static const char * send16noshadow_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"16 16 256 2",\r
-"   c #ADF7AD",\r
-".  c #9CFF9C",\r
-"X  c None",\r
-"o  c #ADEFAD",\r
-"O  c #94FF94",\r
-"+  c #D6CECE",\r
-"@  c #8CFF8C",\r
-"#  c #CECECE",\r
-"$  c #CECEC5",\r
-"%  c #84FF84",\r
-"&  c #CEC5C5",\r
-"*  c #73FF73",\r
-"=  c #C5C5C5",\r
-"-  c #6BFF6B",\r
-";  c #73F773",\r
-":  c #C5BDBD",\r
-">  c #6BF76B",\r
-",  c #BDBDBD",\r
-"<  c #63F763",\r
-"1  c #B5B5B5",\r
-"2  c #52F752",\r
-"3  c #42FF42",\r
-"4  c #3AFF3A",\r
-"5  c #ADADAD",\r
-"6  c #ADADA5",\r
-"7  c #4AEF4A",\r
-"8  c #29FF29",\r
-"9  c #A5A5A5",\r
-"0  c #42E642",\r
-"q  c #9CA59C",\r
-"w  c #3AE63A",\r
-"e  c #10FF10",\r
-"r  c #08FF08",\r
-"t  c #949C94",\r
-"y  c #00FF00",\r
-"u  c #00F700",\r
-"i  c #8C948C",\r
-"p  c #00EF00",\r
-"a  c #08E608",\r
-"s  c #10DE10",\r
-"d  c #00E600",\r
-"f  c #00DE00",\r
-"g  c #19C519",\r
-"h  c #00CE00",\r
-"j  c #00C500",\r
-"k  c #008C00",\r
-"l  c #008400",\r
-"z  c #669900",\r
-"x  c #999900",\r
-"c  c #CC9900",\r
-"v  c #FF9900",\r
-"b  c #00CC00",\r
-"n  c #33CC00",\r
-"m  c #66CC00",\r
-"M  c #99CC00",\r
-"N  c #CCCC00",\r
-"B  c #FFCC00",\r
-"V  c #66FF00",\r
-"C  c #99FF00",\r
-"Z  c #CCFF00",\r
-"A  c #000033",\r
-"S  c #330033",\r
-"D  c #660033",\r
-"F  c #990033",\r
-"G  c #CC0033",\r
-"H  c #FF0033",\r
-"J  c #003333",\r
-"K  c #333333",\r
-"L  c #663333",\r
-"P  c #993333",\r
-"I  c #CC3333",\r
-"U  c #FF3333",\r
-"Y  c #006633",\r
-"T  c #336633",\r
-"R  c #666633",\r
-"E  c #996633",\r
-"W  c #CC6633",\r
-"Q  c #FF6633",\r
-"!  c #009933",\r
-"~  c #339933",\r
-"^  c #669933",\r
-"/  c #999933",\r
-"(  c #CC9933",\r
-")  c #FF9933",\r
-"_  c #00CC33",\r
-"`  c #33CC33",\r
-"'  c #66CC33",\r
-"]  c #99CC33",\r
-"[  c #CCCC33",\r
-"{  c #FFCC33",\r
-"}  c #33FF33",\r
-"|  c #66FF33",\r
-" . c #99FF33",\r
-".. c #CCFF33",\r
-"X. c #FFFF33",\r
-"o. c #000066",\r
-"O. c #330066",\r
-"+. c #660066",\r
-"@. c #990066",\r
-"#. c #CC0066",\r
-"$. c #FF0066",\r
-"%. c #003366",\r
-"&. c #333366",\r
-"*. c #663366",\r
-"=. c #993366",\r
-"-. c #CC3366",\r
-";. c #FF3366",\r
-":. c #006666",\r
-">. c #336666",\r
-",. c #666666",\r
-"<. c #996666",\r
-"1. c #CC6666",\r
-"2. c #009966",\r
-"3. c #339966",\r
-"4. c #669966",\r
-"5. c #999966",\r
-"6. c #CC9966",\r
-"7. c #FF9966",\r
-"8. c #00CC66",\r
-"9. c #33CC66",\r
-"0. c #99CC66",\r
-"q. c #CCCC66",\r
-"w. c #FFCC66",\r
-"e. c #00FF66",\r
-"r. c #33FF66",\r
-"t. c #99FF66",\r
-"y. c #CCFF66",\r
-"u. c #FF00CC",\r
-"i. c #CC00FF",\r
-"p. c #009999",\r
-"a. c #993399",\r
-"s. c #990099",\r
-"d. c #CC0099",\r
-"f. c #000099",\r
-"g. c #333399",\r
-"h. c #660099",\r
-"j. c #CC3399",\r
-"k. c #FF0099",\r
-"l. c #006699",\r
-"z. c #336699",\r
-"x. c #663399",\r
-"c. c #996699",\r
-"v. c #CC6699",\r
-"b. c #FF3399",\r
-"n. c #339999",\r
-"m. c #669999",\r
-"M. c #999999",\r
-"N. c #CC9999",\r
-"B. c #FF9999",\r
-"V. c #00CC99",\r
-"C. c #33CC99",\r
-"Z. c #66CC66",\r
-"A. c #99CC99",\r
-"S. c #CCCC99",\r
-"D. c #FFCC99",\r
-"F. c #00FF99",\r
-"G. c #33FF99",\r
-"H. c #66CC99",\r
-"J. c #99FF99",\r
-"K. c #CCFF99",\r
-"L. c #FFFF99",\r
-"P. c #0000CC",\r
-"I. c #330099",\r
-"U. c #6600CC",\r
-"Y. c #9900CC",\r
-"T. c #CC00CC",\r
-"R. c #003399",\r
-"E. c #3333CC",\r
-"W. c #6633CC",\r
-"Q. c #9933CC",\r
-"!. c #CC33CC",\r
-"~. c #FF33CC",\r
-"^. c #0066CC",\r
-"/. c #3366CC",\r
-"(. c #666699",\r
-"). c #9966CC",\r
-"_. c #CC66CC",\r
-"`. c #FF6699",\r
-"'. c #0099CC",\r
-"]. c #3399CC",\r
-"[. c #6699CC",\r
-"{. c #9999CC",\r
-"}. c #CC99CC",\r
-"|. c #FF99CC",\r
-" X c #00CCCC",\r
-".X c #33CCCC",\r
-"XX c #66CCCC",\r
-"oX c #99CCCC",\r
-"OX c #CCCCCC",\r
-"+X c #FFCCCC",\r
-"@X c #00FFCC",\r
-"#X c #33FFCC",\r
-"$X c #66FF99",\r
-"%X c #99FFCC",\r
-"&X c #CCFFCC",\r
-"*X c #FFFFCC",\r
-"=X c #3300CC",\r
-"-X c #6600FF",\r
-";X c #9900FF",\r
-":X c #0033CC",\r
-">X c #3333FF",\r
-",X c #6633FF",\r
-"<X c #9933FF",\r
-"1X c #CC33FF",\r
-"2X c #FF33FF",\r
-"3X c #0066FF",\r
-"4X c #3366FF",\r
-"5X c #6666CC",\r
-"6X c #9966FF",\r
-"7X c #CC66FF",\r
-"8X c #FF66CC",\r
-"9X c #0099FF",\r
-"0X c #3399FF",\r
-"qX c #6699FF",\r
-"wX c #9999FF",\r
-"eX c #CC99FF",\r
-"rX c #FF99FF",\r
-"tX c #00CCFF",\r
-"yX c #33CCFF",\r
-"uX c #66CCFF",\r
-"iX c #99CCFF",\r
-"pX c #CCCCFF",\r
-"aX c #FFCCFF",\r
-"sX c #33FFFF",\r
-"dX c #66FFCC",\r
-"fX c #99FFFF",\r
-"gX c #CCFFFF",\r
-"hX c #FF6666",\r
-"jX c #66FF66",\r
-"kX c #FFFF66",\r
-"lX c #6666FF",\r
-"zX c #FF66FF",\r
-"xX c #66FFFF",\r
-"cX c #A50021",\r
-"vX c #5F5F5F",\r
-"bX c #777777",\r
-"nX c #868686",\r
-"mX c #969696",\r
-"MX c #CBCBCB",\r
-"NX c #B2B2B2",\r
-"BX c #D7D7D7",\r
-"VX c #DDDDDD",\r
-"CX c #E3E3E3",\r
-"ZX c #EAEAEA",\r
-"AX c #F1F1F1",\r
-"SX c #F8F8F8",\r
-"DX c #FFFBF0",\r
-"FX c #A0A0A4",\r
-"GX c #808080",\r
-"HX c #FF0000",\r
-"JX c #00FF00",\r
-"KX c #FFFF00",\r
-"LX c #0000FF",\r
-"PX c #FF00FF",\r
-"IX c #00FFFF",\r
-"UX c #FFFFFF",\r
-/* pixels */\r
-"X X X X X X X k k X X X X X X X ",\r
-"X X X X X X X k j k X X X X X X ",\r
-"X X X X X X X k o j k X X X X X ",\r
-"X X X X X X X k * o j k X X X X ",\r
-"l k k k k k k k * * . j k X X X ",\r
-"l @ @ @ @ @ @ @ 4 e e % j k X X ",\r
-"l O 3 8 e r r r r r r e ; j k X ",\r
-"l @ e e r r r r r u p a f < j k ",\r
-"l @ r u p a a a a a f f w j k X ",\r
-"l O ; ; ; ; ; < a f b 0 j k X X ",\r
-"l k k k k k k k s j 7 j k X X X ",\r
-"X X X X X X X k g 7 j k X X X X ",\r
-"X X X X X X X k 2 j k X X X X X ",\r
-"X X X X X X X k j k X X X X X X ",\r
-"X X X X X X X k k X X X X X X X ",\r
-"X X X X X X X X X X X X X X X X "\r
-};\r
diff --git a/src/xpm/send20.xpm b/src/xpm/send20.xpm
deleted file mode 100644 (file)
index 68e7b13..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-/* XPM */\r
-static const char * send20_xpm[] = {\r
-/* columns rows colors chars-per-pixel */\r
-"20 20 256 2",\r
-"   c #CEFFCE",\r
-".  c #BDFFBD",\r
-"X  c #C5F7C5",\r
-"o  c #B5FFB5",\r
-"O  c #ADFFAD",\r
-"+  c #A5FFA5",\r
-"@  c #9CFF9C",\r
-"#  c None",\r
-"$  c #94FF94",\r
-"%  c #D6CECE",\r
-"&  c #8CFF8C",\r
-"*  c #CECEC5",\r
-"=  c #84FF84",\r
-"-  c #94EF94",\r
-";  c #7BFF7B",\r
-":  c #CEC5C5",\r
-">  c #73FF73",\r
-",  c #C5C5C5",\r
-"<  c #C5C5BD",\r
-"1  c #6BFF6B",\r
-"2  c #BDC5B5",\r
-"3  c #63FF63",\r
-"4  c #6BF76B",\r
-"5  c #BDBDBD",\r
-"6  c #BDBDB5",\r
-"7  c #5AFF5A",\r
-"8  c #63F763",\r
-"9  c #B5BDB5",\r
-"0  c #B5BDAD",\r
-"q  c #52FF52",\r
-"w  c #BDB5B5",\r
-"e  c #5AF75A",\r
-"r  c #B5B5B5",\r
-"t  c #B5B5AD",\r
-"y  c #52F752",\r
-"u  c #42FF42",\r
-"i  c #52EF52",\r
-"p  c #ADADAD",\r
-"a  c #ADADA5",\r
-"s  c #4AEF4A",\r
-"d  c #31FF31",\r
-"f  c #29FF29",\r
-"g  c #A5A5A5",\r
-"h  c #21FF21",\r
-"j  c #5AD65A",\r
-"k  c #42E642",\r
-"l  c #94AD94",\r
-"z  c #4ADE4A",\r
-"x  c #3AE63A",\r
-"c  c #5ACE5A",\r
-"v  c #10FF10",\r
-"b  c #9C9C9C",\r
-"n  c #31E631",\r
-"m  c #08FF08",\r
-"M  c #949C94",\r
-"N  c #84A584",\r
-"B  c #00FF00",\r
-"V  c #3AD63A",\r
-"C  c #52C552",\r
-"Z  c #00F700",\r
-"A  c #8C948C",\r
-"S  c #849484",\r
-"D  c #00EF00",\r
-"F  c #739C73",\r
-"G  c #08E608",\r
-"H  c #4AB54A",\r
-"J  c #31C531",\r
-"K  c #00E600",\r
-"L  c #739473",\r
-"P  c #00DE00",\r
-"I  c #63945A",\r
-"U  c #6B8C6B",\r
-"Y  c #00D600",\r
-"T  c #42A542",\r
-"R  c #638C63",\r
-"E  c #00CE00",\r
-"W  c #21B521",\r
-"Q  c #5A8C5A",\r
-"!  c #00C500",\r
-"~  c #528C52",\r
-"^  c #3A9C3A",\r
-"/  c #4A8C4A",\r
-"(  c #00BD00",\r
-")  c #319431",\r
-"_  c #219C21",\r
-"`  c #318C31",\r
-"'  c #3A843A",\r
-"]  c #219421",\r
-"[  c #298C29",\r
-"{  c #318431",\r
-"}  c #218C21",\r
-"|  c #218C19",\r
-" . c #198C19",\r
-".. c #218421",\r
-"X. c #297B29",\r
-"o. c #198419",\r
-"O. c #217B21",\r
-"+. c #108410",\r
-"@. c #197B19",\r
-"#. c #CC0066",\r
-"$. c #FF0066",\r
-"%. c #003366",\r
-"&. c #333366",\r
-"*. c #663366",\r
-"=. c #993366",\r
-"-. c #CC3366",\r
-";. c #FF3366",\r
-":. c #006666",\r
-">. c #336666",\r
-",. c #666666",\r
-"<. c #996666",\r
-"1. c #CC6666",\r
-"2. c #009966",\r
-"3. c #339966",\r
-"4. c #669966",\r
-"5. c #999966",\r
-"6. c #CC9966",\r
-"7. c #FF9966",\r
-"8. c #00CC66",\r
-"9. c #33CC66",\r
-"0. c #99CC66",\r
-"q. c #CCCC66",\r
-"w. c #FFCC66",\r
-"e. c #00FF66",\r
-"r. c #33FF66",\r
-"t. c #99FF66",\r
-"y. c #CCFF66",\r
-"u. c #FF00CC",\r
-"i. c #CC00FF",\r
-"p. c #009999",\r
-"a. c #993399",\r
-"s. c #990099",\r
-"d. c #CC0099",\r
-"f. c #000099",\r
-"g. c #333399",\r
-"h. c #660099",\r
-"j. c #CC3399",\r
-"k. c #FF0099",\r
-"l. c #006699",\r
-"z. c #336699",\r
-"x. c #663399",\r
-"c. c #996699",\r
-"v. c #CC6699",\r
-"b. c #FF3399",\r
-"n. c #339999",\r
-"m. c #669999",\r
-"M. c #999999",\r
-"N. c #CC9999",\r
-"B. c #FF9999",\r
-"V. c #00CC99",\r
-"C. c #33CC99",\r
-"Z. c #66CC66",\r
-"A. c #99CC99",\r
-"S. c #CCCC99",\r
-"D. c #FFCC99",\r
-"F. c #00FF99",\r
-"G. c #33FF99",\r
-"H. c #66CC99",\r
-"J. c #99FF99",\r
-"K. c #CCFF99",\r
-"L. c #FFFF99",\r
-"P. c #0000CC",\r
-"I. c #330099",\r
-"U. c #6600CC",\r
-"Y. c #9900CC",\r
-"T. c #CC00CC",\r
-"R. c #003399",\r
-"E. c #3333CC",\r
-"W. c #6633CC",\r
-"Q. c #9933CC",\r
-"!. c #CC33CC",\r
-"~. c #FF33CC",\r
-"^. c #0066CC",\r
-"/. c #3366CC",\r
-"(. c #666699",\r
-"). c #9966CC",\r
-"_. c #CC66CC",\r
-"`. c #FF6699",\r
-"'. c #0099CC",\r
-"]. c #3399CC",\r
-"[. c #6699CC",\r
-"{. c #9999CC",\r
-"}. c #CC99CC",\r
-"|. c #FF99CC",\r
-" X c #00CCCC",\r
-".X c #33CCCC",\r
-"XX c #66CCCC",\r
-"oX c #99CCCC",\r
-"OX c #CCCCCC",\r
-"+X c #FFCCCC",\r
-"@X c #00FFCC",\r
-"#X c #33FFCC",\r
-"$X c #66FF99",\r
-"%X c #99FFCC",\r
-"&X c #CCFFCC",\r
-"*X c #FFFFCC",\r
-"=X c #3300CC",\r
-"-X c #6600FF",\r
-";X c #9900FF",\r
-":X c #0033CC",\r
-">X c #3333FF",\r
-",X c #6633FF",\r
-"<X c #9933FF",\r
-"1X c #CC33FF",\r
-"2X c #FF33FF",\r
-"3X c #0066FF",\r
-"4X c #3366FF",\r
-"5X c #6666CC",\r
-"6X c #9966FF",\r
-"7X c #CC66FF",\r
-"8X c #FF66CC",\r
-"9X c #0099FF",\r
-"0X c #3399FF",\r
-"qX c #6699FF",\r
-"wX c #9999FF",\r
-"eX c #CC99FF",\r
-"rX c #FF99FF",\r
-"tX c #00CCFF",\r
-"yX c #33CCFF",\r
-"uX c #66CCFF",\r
-"iX c #99CCFF",\r
-"pX c #CCCCFF",\r
-"aX c #FFCCFF",\r
-"sX c #33FFFF",\r
-"dX c #66FFCC",\r
-"fX c #99FFFF",\r
-"gX c #CCFFFF",\r
-"hX c #FF6666",\r
-"jX c #66FF66",\r
-"kX c #FFFF66",\r
-"lX c #6666FF",\r
-"zX c #FF66FF",\r
-"xX c #66FFFF",\r
-"cX c #A50021",\r
-"vX c #5F5F5F",\r
-"bX c #777777",\r
-"nX c #868686",\r
-"mX c #969696",\r
-"MX c #CBCBCB",\r
-"NX c #B2B2B2",\r
-"BX c #D7D7D7",\r
-"VX c #DDDDDD",\r
-"CX c #E3E3E3",\r
-"ZX c #EAEAEA",\r
-"AX c #F1F1F1",\r
-"SX c #F8F8F8",\r
-"DX c #FFFBF0",\r
-"FX c #A0A0A4",\r
-"GX c #808080",\r
-"HX c #FF0000",\r
-"JX c #00FF00",\r
-"KX c #FFFF00",\r
-"LX c #0000FF",\r
-"PX c #FF00FF",\r
-"IX c #00FFFF",\r
-"UX c #FFFFFF",\r
-/* pixels */\r
-"# # # # # # # # # # # # # # # # # # # # ",\r
-"# # # # # # # ` 0 # # # # # # # # # # # ",\r
-"# # # # # # # ..` l # # # # # # # # # # ",\r
-"# # # # # # # [ X ) N # # # # # # # # # ",\r
-"# # # # # # # [ &X. ^ F # # # # # # # # ",\r
-"# # # # # # # } o & o T I : # # # # # # ",\r
-"` ` ` ` ` ` ` ` + 7 ; + H ~ < # # # # # ",\r
-"` = = = = = = - @ d v h $ C ' 5 # # # # ",\r
-"` = = 3 u h v v v m m m v ; c { 6 # # # ",\r
-"` = f v v m m m m m m Z G G 4 j ..t # # ",\r
-"` = v m m m Z Z D D G G G P n ; _ R 5 # ",\r
-"` = m Z G G G G G G G P Y x 4 _ Q g # # ",\r
-"` = $ $ $ $ $ & e P P E k 8  .U g # # # ",\r
-"..[ ......[ [ ] e Y ! s i o.L p # # # # ",\r
-"# # 5 6 6 6 9 ..i ( i z o.S t # # # # # ",\r
-"# # # # # # # } i i V O.A r # # # # # # ",\r
-"# # # # # # # } 7 J X.M 6 # # # # # # # ",\r
-"# # # # # # # | W ' b < # # # # # # # # ",\r
-"# # # # # # # @.~ g , # # # # # # # # # ",\r
-"# # # # # # # 6 < , # # # # # # # # # # "\r
-};\r