From 05098b1141ad1f5cf4df1caf64778f3880d07386 Mon Sep 17 00:00:00 2001 From: bguillaumat Date: Thu, 25 Feb 2021 10:33:04 +0100 Subject: [PATCH 01/46] Update docker mempool-config --- docker/README.md | 2 +- docker/backend/mempool-config.json | 6 +++--- docker/backend/start.sh | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/docker/README.md b/docker/README.md index fa8f44bb2..45c2faf46 100644 --- a/docker/README.md +++ b/docker/README.md @@ -66,7 +66,7 @@ services: MYSQL_USER: "mempool" MYSQL_PASS: "mempool" BACKEND_MAINNET_HTTP_PORT: "8999" - CACHE_DIR: "/backend/cache/" + CACHE_DIR: "/backend/cache" db: image: mariadb:10.5.8 user: "1000:1000" diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 7f3ae6729..5ebe00e8d 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -6,7 +6,8 @@ "SPAWN_CLUSTER_PROCS": 0, "API_URL_PREFIX": "/api/v1/", "POLL_RATE_MS": 2000, - "CACHE_DIR": "__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__" + "CACHE_DIR": "__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__", + "CLEAR_PROTECTION_MINUTES": __MEMPOOL_BACKEND_CLEAR_PROTECTION_MINUTES__ }, "CORE_RPC": { "HOST": "__BITCOIN_MAINNET_RPC_HOST__", @@ -17,8 +18,7 @@ "ELECTRUM": { "HOST": "__ELECTRS_MAINNET_HTTP_HOST__", "PORT": __ELECTRS_MAINNET_HTTP_PORT__, - "TLS_ENABLED": false, - "TX_LOOKUPS": true + "TLS_ENABLED": __ELECTRS_MAINNET_TLS_ENABLED__ }, "ESPLORA": { "REST_API_URL": "http://127.0.0.1:3000" diff --git a/docker/backend/start.sh b/docker/backend/start.sh index 6b01c2632..a0b20402c 100644 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -2,7 +2,8 @@ #MEMPOOL __MEMPOOL_BACKEND_MAINNET_HTTP_PORT__=${BACKEND_MAINNET_HTTP_PORT:=8999} -__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__=${CACHE_DIR:=./} +__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__=${CACHE_DIR:=./cache} +__MEMPOOL_BACKEND_CLEAR_PROTECTION_MINUTES__=${MEMPOOL_CLEAR_PROTECTION_MINUTES:=20} # BITCOIN __BITCOIN_MAINNET_RPC_HOST__=${RPC_HOST:=127.0.0.1} __BITCOIN_MAINNET_RPC_PORT__=${RPC_PORT:=8332} @@ -11,6 +12,7 @@ __BITCOIN_MAINNET_RPC_PASS__=${RPC_PASS:=mempool} # ELECTRUM __ELECTRS_MAINNET_HTTP_HOST__=${ELECTRS_HOST:=127.0.0.1} __ELECTRS_MAINNET_HTTP_PORT__=${ELECTRS_PORT:=50002} +__ELECTRS_MAINNET_TLS_ENABLED__=${ELECTRS_TLS:=false} # MYSQL __MYSQL_HOST__=${MYSQL_HOST:=127.0.0.1} __MYSQL_PORT__=${MYSQL_PORT:=3306} @@ -26,6 +28,7 @@ sed -i "s/__BITCOIN_MAINNET_RPC_USER__/${__BITCOIN_MAINNET_RPC_USER__}/g" mempoo sed -i "s/__BITCOIN_MAINNET_RPC_PASS__/${__BITCOIN_MAINNET_RPC_PASS__}/g" mempool-config.json sed -i "s/__ELECTRS_MAINNET_HTTP_HOST__/${__ELECTRS_MAINNET_HTTP_HOST__}/g" mempool-config.json sed -i "s/__ELECTRS_MAINNET_HTTP_PORT__/${__ELECTRS_MAINNET_HTTP_PORT__}/g" mempool-config.json +sed -i "s/__ELECTRS_MAINNET_TLS_ENABLED__/${__ELECTRS_MAINNET_TLS_ENABLED__}/g" mempool-config.json sed -i "s/__MYSQL_HOST__/${__MYSQL_HOST__}/g" mempool-config.json sed -i "s/__MYSQL_PORT__/${__MYSQL_PORT__}/g" mempool-config.json sed -i "s/__MYSQL_DATABASE__/${__MYSQL_DATABASE__}/g" mempool-config.json @@ -33,5 +36,6 @@ sed -i "s/__MYSQL_USERNAME__/${__MYSQL_USERNAME__}/g" mempool-config.json sed -i "s/__MYSQL_PASSWORD__/${__MYSQL_PASSWORD__}/g" mempool-config.json sed -i "s!__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__!${__MEMPOOL_BACKEND_MAINNET_CACHE_DIR__}!g" mempool-config.json sed -i "s/__MEMPOOL_BACKEND_MAINNET_HTTP_PORT__/${__MEMPOOL_BACKEND_MAINNET_HTTP_PORT__}/g" mempool-config.json +sed -i "s/__MEMPOOL_BACKEND_CLEAR_PROTECTION_MINUTES__/${__MEMPOOL_BACKEND_CLEAR_PROTECTION_MINUTES__}/g" mempool-config.json node /backend/dist/index.js From 4a24a173d31f4562b53106884062d8a6c75fc993 Mon Sep 17 00:00:00 2001 From: bguillaumat Date: Thu, 25 Feb 2021 10:40:14 +0100 Subject: [PATCH 02/46] Update docker README --- docker/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/README.md b/docker/README.md index 45c2faf46..09ec33bf3 100644 --- a/docker/README.md +++ b/docker/README.md @@ -60,6 +60,7 @@ services: RPC_PASS: "mempool" ELECTRS_HOST: "127.0.0.1" ELECTRS_PORT: "50002" + ELECTRS_TLS: "false" MYSQL_HOST: "db" MYSQL_PORT: "3306" MYSQL_DATABASE: "mempool" @@ -67,6 +68,7 @@ services: MYSQL_PASS: "mempool" BACKEND_MAINNET_HTTP_PORT: "8999" CACHE_DIR: "/backend/cache" + MEMPOOL_CLEAR_PROTECTION_MINUTES: "20" db: image: mariadb:10.5.8 user: "1000:1000" From 9e2581d73404b37e89fb17d653e5bcc9a2c992cc Mon Sep 17 00:00:00 2001 From: bguillaumat Date: Fri, 26 Feb 2021 09:04:14 +0100 Subject: [PATCH 03/46] Update var from ELECTRS to ELECTRUM for more compatibility --- docker/README.md | 8 ++++---- docker/backend/mempool-config.json | 6 +++--- docker/backend/start.sh | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docker/README.md b/docker/README.md index 09ec33bf3..aad836609 100644 --- a/docker/README.md +++ b/docker/README.md @@ -58,9 +58,9 @@ services: RPC_PORT: "8332" RPC_USER: "mempool" RPC_PASS: "mempool" - ELECTRS_HOST: "127.0.0.1" - ELECTRS_PORT: "50002" - ELECTRS_TLS: "false" + ELECTRUM_HOST: "127.0.0.1" + ELECTRUM_PORT: "50002" + ELECTRUM_TLS: "false" MYSQL_HOST: "db" MYSQL_PORT: "3306" MYSQL_DATABASE: "mempool" @@ -85,7 +85,7 @@ services: ``` -You can update all the environment variables inside the API container, especially the RPC and ELECTRS ones +You can update all the environment variables inside the API container, especially the RPC and ELECTRUM ones ## Run it diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 5ebe00e8d..ea0034aab 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -16,9 +16,9 @@ "PASSWORD": "__BITCOIN_MAINNET_RPC_PASS__" }, "ELECTRUM": { - "HOST": "__ELECTRS_MAINNET_HTTP_HOST__", - "PORT": __ELECTRS_MAINNET_HTTP_PORT__, - "TLS_ENABLED": __ELECTRS_MAINNET_TLS_ENABLED__ + "HOST": "__ELECTRUM_MAINNET_HTTP_HOST__", + "PORT": __ELECTRUM_MAINNET_HTTP_PORT__, + "TLS_ENABLED": __ELECTRUM_MAINNET_TLS_ENABLED__ }, "ESPLORA": { "REST_API_URL": "http://127.0.0.1:3000" diff --git a/docker/backend/start.sh b/docker/backend/start.sh index a0b20402c..22715f8b1 100644 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -10,9 +10,9 @@ __BITCOIN_MAINNET_RPC_PORT__=${RPC_PORT:=8332} __BITCOIN_MAINNET_RPC_USER__=${RPC_USER:=mempool} __BITCOIN_MAINNET_RPC_PASS__=${RPC_PASS:=mempool} # ELECTRUM -__ELECTRS_MAINNET_HTTP_HOST__=${ELECTRS_HOST:=127.0.0.1} -__ELECTRS_MAINNET_HTTP_PORT__=${ELECTRS_PORT:=50002} -__ELECTRS_MAINNET_TLS_ENABLED__=${ELECTRS_TLS:=false} +__ELECTRUM_MAINNET_HTTP_HOST__=${ELECTRUM_HOST:=127.0.0.1} +__ELECTRUM_MAINNET_HTTP_PORT__=${ELECTRUM_PORT:=50002} +__ELECTRUM_MAINNET_TLS_ENABLED__=${ELECTRUM_TLS:=false} # MYSQL __MYSQL_HOST__=${MYSQL_HOST:=127.0.0.1} __MYSQL_PORT__=${MYSQL_PORT:=3306} @@ -26,9 +26,9 @@ sed -i "s/__BITCOIN_MAINNET_RPC_HOST__/${__BITCOIN_MAINNET_RPC_HOST__}/g" mempoo sed -i "s/__BITCOIN_MAINNET_RPC_PORT__/${__BITCOIN_MAINNET_RPC_PORT__}/g" mempool-config.json sed -i "s/__BITCOIN_MAINNET_RPC_USER__/${__BITCOIN_MAINNET_RPC_USER__}/g" mempool-config.json sed -i "s/__BITCOIN_MAINNET_RPC_PASS__/${__BITCOIN_MAINNET_RPC_PASS__}/g" mempool-config.json -sed -i "s/__ELECTRS_MAINNET_HTTP_HOST__/${__ELECTRS_MAINNET_HTTP_HOST__}/g" mempool-config.json -sed -i "s/__ELECTRS_MAINNET_HTTP_PORT__/${__ELECTRS_MAINNET_HTTP_PORT__}/g" mempool-config.json -sed -i "s/__ELECTRS_MAINNET_TLS_ENABLED__/${__ELECTRS_MAINNET_TLS_ENABLED__}/g" mempool-config.json +sed -i "s/__ELECTRUM_MAINNET_HTTP_HOST__/${__ELECTRUM_MAINNET_HTTP_HOST__}/g" mempool-config.json +sed -i "s/__ELECTRUM_MAINNET_HTTP_PORT__/${__ELECTRUM_MAINNET_HTTP_PORT__}/g" mempool-config.json +sed -i "s/__ELECTRUM_MAINNET_TLS_ENABLED__/${__ELECTRUM_MAINNET_TLS_ENABLED__}/g" mempool-config.json sed -i "s/__MYSQL_HOST__/${__MYSQL_HOST__}/g" mempool-config.json sed -i "s/__MYSQL_PORT__/${__MYSQL_PORT__}/g" mempool-config.json sed -i "s/__MYSQL_DATABASE__/${__MYSQL_DATABASE__}/g" mempool-config.json From ec699f28fbd7fd99ac7c4b7c567ced3458737b38 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 3 Mar 2021 11:21:05 +0900 Subject: [PATCH 04/46] Update link on About page for mempool Twitter account --- frontend/src/app/components/about/about.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index c2acd7172..06e2d233f 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -182,7 +182,7 @@ - + From 275895bedd7119d8caebbf0037eca6596aca449e Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 3 Mar 2021 11:55:53 +0900 Subject: [PATCH 05/46] Update index.html metadata, OG tags, twitter tags --- frontend/src/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/index.html b/frontend/src/index.html index 7df913c67..b97790f26 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -5,16 +5,16 @@ mempool - Bitcoin Explorer - + - - - - + + + + From 2e8bd7f32e25710d9bd146f80cc058249cef1f80 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 3 Mar 2021 15:48:55 +0900 Subject: [PATCH 06/46] Put the project title back on the About page --- frontend/src/app/components/about/about.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 06e2d233f..3eb4e2c5d 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -10,9 +10,10 @@
+

The Mempool Open Source Project

-

mempool.space is developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers.

+

An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without any ads, altcoins, or third-party trackers.

From 892cebd8f4f2b302f1a633797548df0d9cc647ba Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 3 Mar 2021 21:29:18 +0900 Subject: [PATCH 07/46] Enable sending CORS headers from electrs backend in startup script Fixes #367 --- production/electrs-start-liquid | 1 + production/electrs-start-mainnet | 1 + production/electrs-start-signet | 1 + production/electrs-start-testnet | 1 + 4 files changed, 4 insertions(+) diff --git a/production/electrs-start-liquid b/production/electrs-start-liquid index cc6875000..ba0aef027 100755 --- a/production/electrs-start-liquid +++ b/production/electrs-start-liquid @@ -12,6 +12,7 @@ do -- \ -vvv \ --address-search \ + --cors '*' \ --network liquid \ --daemon-dir /elements \ --http-addr '[::]:3001' \ diff --git a/production/electrs-start-mainnet b/production/electrs-start-mainnet index 2327e5ad9..d2f5aac56 100755 --- a/production/electrs-start-mainnet +++ b/production/electrs-start-mainnet @@ -11,6 +11,7 @@ do -- \ -vvvv \ --address-search \ + --cors '*' \ --db-dir /electrs \ --daemon-dir $HOME \ --http-addr '[::]:3000' \ diff --git a/production/electrs-start-signet b/production/electrs-start-signet index eac71a190..f4da49f62 100755 --- a/production/electrs-start-signet +++ b/production/electrs-start-signet @@ -11,6 +11,7 @@ do -- \ -vv \ --network signet \ + --cors '*' \ --db-dir /electrs \ --daemon-rpc-addr '127.0.0.1:38332' \ --daemon-dir /bitcoin \ diff --git a/production/electrs-start-testnet b/production/electrs-start-testnet index 43f6b3945..68ae83b3c 100755 --- a/production/electrs-start-testnet +++ b/production/electrs-start-testnet @@ -11,6 +11,7 @@ do -- \ -vvvv \ --network testnet \ + --cors '*' \ --db-dir /electrs \ --daemon-dir $HOME \ --http-addr '[::]:3002' \ From 2a7b4f9aed2d22d19b1782e4ee9385993da38857 Mon Sep 17 00:00:00 2001 From: Jonathan Underwood Date: Wed, 3 Mar 2021 21:29:22 +0900 Subject: [PATCH 08/46] Decode hex into utf8 instead of ascii --- frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts b/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts index caf81dd82..3d62ae7d6 100644 --- a/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts +++ b/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts @@ -15,11 +15,11 @@ export class Hex2asciiPipe implements PipeTransform { if (!hex) { return ''; } - let str = ''; + let bytes: number[] = []; for (let i = 0; i < hex.length; i += 2) { - str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + bytes.push(parseInt(hex.substr(i, 2), 16)); } - return str; + return new TextDecoder('utf8').decode(Uint8Array.from(bytes)); } } From 906189c43a2daf5694fd2aaed958051b1e733d8d Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 4 Mar 2021 12:42:44 +0900 Subject: [PATCH 09/46] Add community integrations / alliances to About page, move us to bottom --- .../app/components/about/about.component.html | 150 +++++++++++++----- .../src/resources/profile/bisq_network.png | Bin 0 -> 11922 bytes frontend/src/resources/profile/blixt.png | Bin 0 -> 18370 bytes frontend/src/resources/profile/copa.png | Bin 0 -> 46349 bytes frontend/src/resources/profile/electrum.jpg | Bin 0 -> 19839 bytes frontend/src/resources/profile/liquid.svg | 39 +++++ frontend/src/resources/profile/mynodebtc.jpg | Bin 0 -> 6534 bytes frontend/src/resources/profile/phoenix.jpg | Bin 0 -> 8487 bytes frontend/src/resources/profile/raspiblitz.jpg | Bin 0 -> 42459 bytes frontend/src/resources/profile/ronindojo.png | Bin 0 -> 29499 bytes .../softsimon.jpg} | Bin frontend/src/resources/profile/umbrel.png | Bin 0 -> 7049 bytes .../{profile_wiz.png => profile/wiz.png} | Bin 13 files changed, 146 insertions(+), 43 deletions(-) create mode 100644 frontend/src/resources/profile/bisq_network.png create mode 100644 frontend/src/resources/profile/blixt.png create mode 100644 frontend/src/resources/profile/copa.png create mode 100644 frontend/src/resources/profile/electrum.jpg create mode 100644 frontend/src/resources/profile/liquid.svg create mode 100644 frontend/src/resources/profile/mynodebtc.jpg create mode 100644 frontend/src/resources/profile/phoenix.jpg create mode 100644 frontend/src/resources/profile/raspiblitz.jpg create mode 100644 frontend/src/resources/profile/ronindojo.png rename frontend/src/resources/{profile_softsimon.jpg => profile/softsimon.jpg} (100%) create mode 100644 frontend/src/resources/profile/umbrel.png rename frontend/src/resources/{profile_wiz.png => profile/wiz.png} (100%) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 3eb4e2c5d..2f36452cc 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -10,41 +10,40 @@
-

The Mempool Open Source Project

+
The Mempool Open Source Project
-

An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without any ads, altcoins, or third-party trackers.

+

An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers.

-
+
+ + + + -

Maintainers

+ + + + + -
-
-
- -
- @softsimon_ -
-
- Development -
-
- -
- @wiz -
-
- Operations -
-
-
+ + + + + -

+ + + + + -

Sponsors ❤️

+


+ +

Community Sponsors ❤️


@@ -177,31 +176,96 @@


- - - - +

Community Integrations

+ +
+
+ + Bisq +
- - - - + +
+ + Umbrel +
- - - - + +
+ + RaspiBlitz +
- - - - + +
+ + MyNode +
-
+ +
+ + RoninDojo +
+
+ + +
+ + Phoenix +
+
+ + +
+ + Electrum +
+
+ + +
+ + Blixt +
+
+ +


+ +

Community Alliances

+ + + + + + + + + +


+ +

Project Maintainers

+ +
diff --git a/frontend/src/resources/profile/bisq_network.png b/frontend/src/resources/profile/bisq_network.png new file mode 100644 index 0000000000000000000000000000000000000000..93b7410b9088689f50d91c3c716060946e625b22 GIT binary patch literal 11922 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 Y2jwRyk>LWoE&u=k07*qoM6N<$f)1Gs-v9sr literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/blixt.png b/frontend/src/resources/profile/blixt.png new file mode 100644 index 0000000000000000000000000000000000000000..da7b8e23b84ae09ea1084d6f39c203dfa6ab080a GIT binary patch literal 18370 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 L>gTe~DWM4fuZAg2 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/copa.png b/frontend/src/resources/profile/copa.png new file mode 100644 index 0000000000000000000000000000000000000000..49616d70014b6937b0245b023d9b7d39ea18fe5c GIT binary patch literal 46349 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

E~V_ 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/electrum.jpg b/frontend/src/resources/profile/electrum.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1c063d758d32c458f0f50e0844656d909407a4a GIT binary patch literal 19839 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/liquid.svg b/frontend/src/resources/profile/liquid.svg new file mode 100644 index 000000000..f0dd684f5 --- /dev/null +++ b/frontend/src/resources/profile/liquid.svg @@ -0,0 +1,39 @@ + + + brand/logo-products/liquid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/resources/profile/mynodebtc.jpg b/frontend/src/resources/profile/mynodebtc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27216e06939e51fc01df744b05f05983dab8527c GIT binary patch literal 6534 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 nTo>xh(2FZ88D&qUHplNQiVu2@=xMiXhTR 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 Gn*Ki&1tSvx literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/raspiblitz.jpg b/frontend/src/resources/profile/raspiblitz.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f626e56351a3fdabe9fdabcc4c618f9ab2193fc GIT binary patch literal 42459 zcmbTdXH*k^*ESji1Vu%ffYKC{4odF`N*5wsibMq|(tBu$^xm7)Nbf|XN$((_^xjG6 zQW9z)A)NTX%kw^Goe%FiJDKFS)@1h1&dluV+9g*rS1W+K>dI=$03sp)K$Y+ST&)7$ zD1mJ(0RT-+01p5FAO~C{q6QEXRz!pcAk+px^3NIoctUsw0EoX5{mA$81FxR!pX(WBO)p$E+HxP;-!+ZimIBruAaVu;Tt1kbBm9bR@OG3T;1F~Ji%Vx zfkD9`p<&?>35iL`DXCx5(sT3j3kr*hOG>|2*VNY4|7d9J?CS36?fcn3Fg89hIW;{q zJGY8JuB~ruZf)m;*f& zaCbX@J34=xo_e+|O!UpthQ@Y|eaz_yZ?4L9l!x$n^rO{pX>;;?ZPsn`lt|d#OSdv; zgm<^gjP*|MveviA-4sjDA*+PPb}}>4#9|(mib(#%6zna0`iUckTX6Sn{?Y?R2>YCA zW2W$&(GrkBvhPkDox~}JPde@tbAAON&4#I<^@jqnG8jXx$>TE4!z)0&%yS1Zv-qf* zdvUT&eGHOwhZ+rik7;sn7AV1X!Eg|@h%SPXd`7|3f&;8kyTCR0$lbu;-GGxq2QgcK zgs83IWmfAm%-fVdx~PKn2`ZuL%S8HzNh~V+jG5P@qs%M8aM4W(as#)=#xj5MY@~6& zSRN&$@+LH#ko68@cqsP_(Gd@9AKZ49A+jPdc^ulQDH~MXpYSTy<*?tS=$l@$9??jG z8X8K9pI@#m`h0MEKN=0}uIIY~c*`1JXc|9y7Te%$3Ah3@MV#IiJe5Y($NI7sVyZi( zdJA$iicP{bQz~vQoV&O%Qn2|4gpl3R4`)KApU8*ES67VL7{>-dgtv^JRM}gy;|C`9 zuO#B=^#559is_u?zXcne}WNW$v0&c_~p? zWE)-c3q&D$sv3FQ<)HfsP~?+iG4M3scg-$I!h#s17)J}Z4(RbS{|fEUgxW3N!I*-L zDVbY#1jIm}?s-h72f)uXe^pht`hi@1rb`vD9D+e|4{cc3Q383)y#Z&uEbxL)#ot4} zxnkEyN{o_I*?7P5%$vBH^A7sDUdGz3*JpHJ0dBm1rWI6k@ysqi!fVm)mkWbubU2CM z7&#zG=4F4WK`@=JS_MnL+;BZ2m}x99A^J@A#fl1!?hHBYf0AF1`Aymu+bqw0?QK=h z`;rd)f>3t=XP-_2=kF*oElt0YRVao(wDYz~_YHHzFu-(??tf5^s3v{v8E z!NpY9=fSY@tOsHU9z2zwSi`vHWAZvjYUDTqff1S}s+=yr*`AxWyB-e6N65tWNqfYH zoWoTy&kz;R)z&;Ty>fV^`DpEp@)L?@j5JD2&MFVnpsn;?)OT(I9>i%ayOMS{I0$5v zDVL5OwsHChw&l%ciJ+4TE7LBkaB}D?Kwv8u=7lDD^Rv5&pRK|q;;2HZ)U>o)=IMmfod|R>h52TKW>djxL;eE!Yi-7Yf%VW$%?(f zvlpYNn5;~ce|9JK#py-Fr?aBhM5?yGs;Gm}puI_wB2$P1w znCD~PHtpV~;BnIgu-yYZ)DBe-eO+*W9lO=g|VNDRI-6DSznG%g*w zs#Q{odybhzUq>2F2?*fS5OC_nv?u8=T7AM{4ZYV&i&t(JhqWX*&+R|~&9?SvMZutp zPyF~w{ynQ7@kAP6xzU^I>-qABL(EtWWP$`E8_O%@_aQj~>f>s&gJy%CTQ5sHrPR)0 zuXk8c`jqpEXWh3e6%c<+xMt4;V2%ZIm(lbxY(~^-b_WA!2Dg)Wq$b z!K3Sns_l(+57-%4ABUqUIE&Qj%%zW{A0O2&f1GYBj}# z`b9?NnsHh_VVcb==$L~N|3IlC$AX|HyI&c+D7 zx|JS3+g451D{IC|2_{Cc#QT&j#C@|lYMNQp+I6C4*f)5RJbcE!Fw@`5yS>iv6TWf< z=wrEt26kz>yUEk`Fc;>=mt!AhOB&HN=)C$^ml*ZgNtNxG4c6jINx)0cWu**Fu8kDY z#Br9#vZ_CSP-AVPsp&!=D_~gaXM!qbrQzN0s01ywGj4<6H#|v;h*RsWsHEi4OUqFZ z>)+dfJS^2d;0$x-(R4}$WGeVP*b~P6M4IQ^2 zR{*-NJ^v*frJ$wR?K<5ZsVKDZoN@0FP-dvAhgLgaXn$9+v@}4C6L2dXvqXvEGTilZ zM;7B*JJ76}eu_pt-%W#)Y$}AAb0CY=yEFXlF00b}y*B_@t$*SY+11GZW;Uf~P8k_C z_TAA`$&4i7T@T+Wugiw*@bq|b_AOI^6FXUnArCRt9Rt7N)=P9#?ze?M9XvXm8!~$T zP;%*I1i4woi2GMc1ZU3@{X{bblG&=G5g|BV!>qUoY}A*3m@;M%j`9f@aNYyugDB*P z@WZS$II1FWo939n-35WcFQmA&4p&xcWr!Whi*c=ltOa7B_;||Q0_(ms3$G;0@O0a4 z7x{gp#=H9EP~%w#XSOh?4D@}o(=nX&M*dWJv*zQ>MzJC$@q52*T{q!#G|@W%V!QZy z&enTvvgil&d}5}hBi&N&G>vNWX?D|D_2(>Rw&M2w^ltNqiMmIH+-VmC&!v5pM_V*I%1zn08W3;q3;00&bq%b+$$Tha)e3A)+i^k9g0&a`6H#3Lm967yDFwrZB98zxza+;?%C%&@0f=E?P=B#eb-yE zJT+TGW+$4Dnr7e5ua}&D@xARmVP%%&NN!X=hh+jrwLbMV!Nh;GFZ6wZt`BS0w)*%m zeQw!!(xH|-CplycoqyO^Mu%i0j*%_fcAV`ywE(hOPeX*!-$kVCe>b0A=*g66@Ro7T z0igm<BQgKK4tn=~}d-mDhkWr#Kkr=F#lpyv`JpMesd+)MV!JfPY zY_M4Q^3!8$?MOaLV6*m{1bPX^vLwTmhHU4^KE%iH?xDk!%ZmAt^MTq;9n-NpHQGvE zmJgNaBH`e~=cwBFiDsqZd7G)(ITnO|tSi)=h^>ib;A`THK~nKhc@lR|{frIhWpt?& zdR)f&&3)yT%O9jY$;lHQR>?maqvpK=>wd0vH=puF6irtxBe#`|U5f;acuj^czU^6+ z$$3x9e5&W&S2w()BzhV6Aw}w^< zJD822NPGf&02h*?|4kCL5CD*1djh@V>TAIH>~$|(|L4w;2bM@1!St*7NciT3ocTTx_;Mx(T>r^6Lc{jzhzWA5Xw;?nx*I&b^T ziJRW$(g9D&xx#cYYM`(WN>sn&{4%3-9kq)ci+ubu4 z20A-Slf-Z#UmGnh1nU!XWE!5>UI9qXF9Y2iX9GJ&F-Lu`mHg1+CUx`fg48N`^J@Lo zbq)%yeK0O;-x?^6dWF@)mld_tw6Yw8zljQs5K!8v&H;O>kGntk+=KfwsPQHzTeB}^ z`B6&$+NS8%M4(6w(beex#?s>Tm+|){X@#Eh40N#tPEc(}B&1Ie;p8FX5Ec|H2x<)q z%Vt3F=cnAilZfC~9P6D^Uic8fnC3z3AAE~k2~XGFzXQp;{L(54MrtIgV?2@etU66& z2ii2M6QnieDE1XL^P14QJ{86p>0NAV8-b^oUnaW?244a0J;7jCR~{3R;Qcc*E;iYi zI$fb0vkK;ck~9V@$_;K}a+3}D*~rr*5V04C66Y?7Z;v0IIk@v?rYSSo&gI<)7w;sQ zV@}q`y)$GH14ZPc`u8V!XW}JR+gcH})4JVe zaX{Z}Rs|_pgc{%1EnTh05hM4+PctTc8B0}G9b@H~U|scnk7SicUrl)eoJf14F>wN|(^YkPST1lwfoVU7#Fc_HWl^1t9#@_mLXI~^RWHPY=O zkiCkK=;Ayt=o}R+FZOW?(^Qw2C1TG4whv1L)$WRiP#2#49at~#s_a^Qk zl=!$QlFRZZRA1b#~#`KRank)9S#9SdQR9k*JBB`RDj*ov_$|D?muK>~2 zq!{yj6+(V;tD$4sUFoQjL!rakyhE|?>rDoSm4WNddyrcg$yNBxWx=poqe>Y~#B<3h zQ7hr0BK#Nb$M4J_uQQ90&VS6RnQUlnY1NCvu9bf6ERFeFCno+(D%Z>hr5bR)XuY0Z z0IYFO1TCc;j61St7qV-;5zt@%p{+!B1S#SUN6322cipEu3lmsvXb9<~5$>{~0ZRMN zvcFdQ;5-d*{{Y~CNa4Vk3^WD8qv#GH3d{Xb9Z4`^AKPQ$RHb(iXWlJ+oJ!*8Fxw7b zftogZ5qQrnUoq4!{s~%hq`oe4J(@nvDkMJ&OBC{+&PKA0wANSVsAMOz$LE@Of=g%dD}ea(Pu87H2a5BHz32% z4%!-6=+p(U2gLlz0Iw2O^WwduT!|-7L2X^UGt*eIW;^+Cn%#kLwfU#M=&xc2#qu_k z7+(2ySkTDg7U;$_{+@hzqMPbz!nrZu9U<|4&k*5YnIL~7(`z!_KR@Bk`J2rVWr7ro zm?whKcCp*@tgLt5SdQmovld_RmN634vd9nDL|W4UVfYQXBg8 zr7}0?+XYdAGUa5twM3n<2=mWm9Edje3WF>LsmX#tx-!R?>}}O7#{#SAacI>_-C1 z)|4NRb;nYxiWnsRj(k2|ZBwB9Z@8pf^h#G@j(yTh+$nbx?HGH4h28=Ss{VL=v`1p|8)=2ZqiPkMnWj{?#uUD#p8GLPrnnXKwZ*C^S#hlf3WyErvW zEefQE;g_us#W|N42}VBFPdRw;9a^ha__B*fkn_bl$3dI{!<-_0DwjtH8f#*b@u%3% z?n43su{y?;8?MpM5%XMM|Fs%N9DtGI^3zmB*^W29%)P>vUKj*g{&loqs;$4$&SZ8tNwQRwN-q(6#ukQ3D$M-c)$uv{e;PMfj1U|k8=sX z0tjsPU;d$@-)Fc94ttMeGMy+jS+X$#RixCtt(@PVT_2bpH*X>^Fc)ZtJbx=-Tda){ z!f#Z51)w_NqA)U2&q?e$tu7%YBNI<}_{fme8JN`8JA5(Ig2{0mvYDJv)mEY*EuD6G^spt!ivY6rGXar5h+NAQ$lMMAb}4) zrQRQEC>xrlPn`y~8s$5z9RqIh6cgz`*9QQ|#D4yC>Ke>-X7s={`l z%1lsqnpVmfA@>IvNA1T4Vn{r!>g2&akD7$@ZXKJCGa%`zdou{yXZ7EC*n>a zMZM}B}?jQ$~3B^Z0oFwSE z@-~KX$J)*A=bt+;yj`vGm_Do^IICH-w1;yh8P_i|_}y#>Aq1V8|FP=%ZWSr3%)~?o zpGiL&4hP+m;YJ&F9ef4nE`#6xws-qNGdG|tuH4OJMeHQ0L&kP`Nf|1!JTs0T{++ky zbkNuon|=il{Bex>f!E*tV@t!jYS;@S^?f_8IUOn>ld)xf+r4n%DgDzsn^9!1&@JE- zK&D}ZFi*fQkKld|)OD%sFAN9sbeM1?oY?pIWwx*9o%ys1%iv#gmSwh$A`M|s>XVL+ zc@FzbD>AmVW7u6n@l&2~1>eQVvxdMqL$#{GB;sxF4Z;t=U0&sH;wlztKE-#C7>*)k z1VRLwc|VFKb`6`fj2#|eyw0SGl3e@MBhNr9npj<&UNt5SOT;6Sh{1(lIK`v zeWo+JWc(w6an&V3`Oiq%HFD8oLxNkM4kGZ}C~vU(#tyGeN5aADT3x!yiI+rGGt8xw z(h;PK**=?xX56UWI_YQNa@vHb#Wk49WaSxdn1(TFpup^tqe{amhybv2gI!C+^ejv$ z@x%(-0b|K0Lw}?dC8X1U2NulNN&rwQq|G^RJL?TRH)IUYAt!+L$Z<+n^Q+#ef6GW0 z^S&l(RqKv2J$b0)=DPH9b?ok-d^h7GG%SWaVY$oN)1)IIVdoYl=zx#ydkJmPh_RSu3DWm1DJ8lNWh?rd~W&)5g878J%F?v#rdqFhmWR%A;>axvRO$6#K zMQz7BIkf_s8(aHW35<0W9*Aey>UxO^jxb@j7am#`?HR0m?q#vFs5Scex)xxFx9N`( z-T6IUdJ`J`DL5y$?7XLp(U6Ys*aBB^Q8vXJj>g91haq%=90^ZfDw&o4>gMs^QN7lx zj7h_Oz{#UNX8=(FSAb5w=BNRv(sAdJdDx$t=$9gGf1HOjT)53FiAcvwd>H)DrFCioa<<2Yuqub&Y$R#GDZu zz7JR6_b^z~dem@0P2_J|{U(W!v0nOYgTB9D4L30VoR{#N5k7SVm_5SZkVV+rRN!7< z6+XdcJUH((-b>jQJoAjztE*o{ZY62KI6hXGIc4U+j z38qWCz+T6{rsWZD38s~>3OfYTD%7_rG~CiJw5Mqn-V;op>;C$1gE6`RJ_`#5k;>8g z(u~S~lVbpT48QR2JU>*-sB}=@yzaH^_B~FG-Sut*@>+{(w&W%X9^YmQpX=*{en0S! zKE@jqAodI-X_Ea{(~KSUO>-v zy@W)$nUU%4)0{B;J6|Be&!-piunlb(;aE6PYj3c+U%9{kz%60$;h-=pr2QRH`-(wo zY_k^v9=;?vfpbUtoQuj@8Gaddbr#eC66v|=DG_Na)9C@8l0pWc9U=s{2cf=b6yZm% z0L(RUc-E+j;gA~M?w=E;F7@@=;@4-jZfV!ku%?Bk01_{mQLdf0>ivb1LkkWNR#rL% zwT|b8)|FXj5D@#94eIWR4Ilp47X;Y1Bv1(%BqH`q`piTp9#4w?c39s(aM+Nv;ea|s zlz!zYUezN707!kvcCjdWW6U_h*@gwHN!=5FB8?JW&skGq0Sl`|ap75;z2BiW(hBJX zI)@)b!T2S3>#hKmML8)Se?&o^FudaPD&nVpj3LF!ffJDi4RwIi`=t31qPNvjc`~gA z!kEa?{I^FH2Aw}c^<{uqK3{G$XIG?SsFMv+Gorn@&Ts_afM{?c9@tkoc$M+o-GPCW z*kO`)uaydw61dVvIg7FF5)1!W^rrA1iJPedno@ImqW_yz_G4@pKu>(FJQ%zHG2Zd1+Za_@!gP%8b;3$gqo zwUT_>QF~7wE8@b(ZVEU~2KcutfQ{p#-*-xF6dz9T*_Qd+{Lj zM+QHVDVss6mYqo>I@4J5=y7>&_T}*m-T}FPt>@#Hh~}E*Z*5JyZ#l57QJ16JN)S!_ z@bdj;8~U(4w>Dbe7qJ?nY!*T)<-ChEqh~Rk7VjC^qnab=C5fscE+xltUMu!*u8+&8 z>@)YQKPpn%B~wQ zlDLqckj2?d9%_mwBcDBaqXN+VH<0BEcEzSZvOsMH(Gq8N|&&7JzA_(+r94LHZWj?G0Ute)$Yb(|EJwBI+EcWx!ZAiDb6 zC`2^1e&^8`%@@MFZoc!&X7K3Qs1w~ZMbSJLBiZ?!#ze~qPi)r zv{WiV4L~%JIM=F4Kw*%tG|E`heAO2W(=#o;xA(pOLD8_-ofRp>Q`d2q6ZjCJ9460< z=kV2zUq#=`AKl)aPt~gZB^DWz_FT=^L*Px!WCup2BbyJs-{iOoC*2nRcP5)8C{qzr z@vls_Ge(U#{lYZ0^OpcMY^u7nUc&%xU9c&Lan!A+NZ{Yu!7}%C!(%{Ha@@bVy3-RM zhwSwi&22n**#}$GnRUWbHJgKwHJS&qHs61y!4;PE7K`?EfaRcJ9)8)U;3< zmVdy0YWZI<=x5h~5S*jX!*^Cmzjfp1A2ZojF$Fq@L=cUy1D}Qc{ADK$ss`O`y@BJ$ zaOP%_t;UAh9ZN8AWxvsN|J`r8GVHWo5Eqr{_<{Z}1pkSJB+0OMP86h~a0X9mJYJ8b zLtOtt@Y3bz>C7FL5{`ycJ}3=3_0*Su0zgcLi5ULT<<}G7t~5>PTLK8D`~$+iqt9C; z{#qZPO216U=%RqDjvcahx8!g6{-5~2HNGHe^HC<#;R8K~0I7HJCS1hA5CsjB6LSVJ zOgR5S-w`pJSl#dNtxqk_u$o*I+F^kD+b#g%Ph#OnjRUg>*ylJ1igR}pb@8XKRUGEb z7^*dnd?(;e@m=U!_Z=tcrZ`1GP8s6!A&ms2tDQYxn_%IlL0-*=l#1%gf;YO6nTrXM z!*hYBUr?akeiR;b4;)poQ32+NR2m)a)bw-t>I9U280(T|(J`0*?jBDCuAIU) z;Uy*@55X7b@Y=Upn!mi>d%d7{7j z_ABg@>SuTD^%9wzZ$fsSsL9TTo2PsL5;?Cr-ZkDbfIMy*-+wq(d*gA))LtGh?U1dR*{gOa=puzr zwc3)$(XgM|VGOZ~I2%He9$ZjrJZQUW3$Epb-cs$coXTHP1_DHD8vwr|G~|wT#OUFF zSmwz2-^I*LiG(m{n-lIJo=04rrT*;zC%}p!%5w$E1ct8`MIOVLG3+`Ss?%;7NljJF z{@>6)v%206;{LVpFuYXj zTWQ4+ezX0<)rN=kMB4Oa{p`uABQEEAJUnVvz2i))P+9@q=mG~_-?M#z-9 z2VsuAhy?8yje4DtUsD%<_;ZM|is>CTVk}0gn12>DTutY5?Z1s%QB*+ zwZmVu)U4S{Dh{xSF-bX?ekOnSTy$@n5lM$q*^|V6vSGcIz1hBeEB&@%54kaKS*OgP zreui1Yq{O(K%7h|YfHk->3JtD{S3sB6m+Iu|HHxWG2SL0lm3HxU8DqDc<>vBkw6`0 zJGLF*3So?DxVbHpAn$VEA zjx#DR9R!CLJzv=W!67FbcWwFAiqG_!0fk}-1 z<@WsNY4hb@rdNP1(G|VbTM31a-lTtl*wlN>I~;86`USJ*E#I9q8*?+K-{gl6k#$LaeHzKm7;a(~8@-gz?XNWg@)Sa0)+~Skk4G(Fg4-)xOds}Yb zoUfXEim@)CizI=Zc>nBTI0;!{_lN0@KtvB%NHI?n`dCU3BkdBmnd2nv z+*!=sS@&c7RAmfD4Ll6I{ThwmJWoM!E~-xO#16uzYO_9`0%yR2?Y|&aS`y7uX1y7c zygt7nFj)Md7!38Im)`pRn#t@Y-g__+6SQEf4*Cpv678wtXa4ZmFwP2X-3~8HOQy@3 z;VI@biUANea02`^y#ym5&%myVhV|o=r&%*UuL+0gT~wd-VI_x){}}NkIKDXM+w82o z-v4xITDXF%%ssXFlG+#-e^duY_4RslxM;c;)x`Buh{SzM0!U}&$I1PuB+iimC3KTW2%?aHTTjvec4G2EUK;g07nh&o+H?%|F`Y$ z0>On+8c?o3;rnvdUzvqUHl8suMu+^zIEATy)35_GA zl@^u0CAkUnaW}tb;{Cj9%`uQ&ZMO6Ln=zS}#K6MNg)(@Ei3$2IDvH5ZBgo7auPUaR8u z2rd7EIl(?q4Xm3HXN5RV=T)s&DzLF$uc*Q5xUTm;C6<22$iXIDZwmP8wp{DDr-_uG zgZ6#5ZLF4!4Xrs#kfl_){blbR=RvE4*BXG4b(+ZOE0ON0-DRfxLCn(Q<)E zGH~TfoZ>xwWC79p$Dp!f(Kf=^$t+wKGg=9?x2+nqS>=~fI4$!(tewas+a0OeccJ)( zjl_={UwWcLJ7Y<~ZS9(ccsU2O z^($Iz!;qcGlR1eIa}TbEl+j5}m|^{VTPQb85YwH1?=CKM^k$Izv780xulh`ZnSJ{O zn1J5tJ4vRv_L4OwPuB0td(246Sx>}98d|s$TWKF3Tv=Ukp7Cg+W|o2Rt9i&x-1YE* ztOTB_TSNwzW|#S`{Vn@(2GA8d0l4G1>FrFO2j{njM)z7rzXm0$~<2gNW1{id!o$`2E!(aH`x?{1F6kyX4zoPuk({@A8x|t>XSgn5 zElz?Z1!OtvAJ4 zkq%HMhz>u^9Sr>o@O4Y)_tlE0xMFFwdLOEcql9X20@wXm4+XXd$tkSuIazVpqh6+nrhKW55zs ziieC3Kq|q9XsT5N6NtWp?G+DU@Kh*l@9PhhsbX@38psy`bv{uw$q9FZsGKrIgS?ME zaJ0-E96>bD!ZMyn>0!n{w>{aO&2=T!g<`|AizYKl`hCrht6V9qY#?*q44`~2+2@d# z>s(_OyXJ6b7?ljpW`t9zqnna4rcG>$DhEffqO;mYivgtpM&X_Q3u|b?l!O;&gxph% z>kG>3UzCeH?f{|?Y|DG{l6_cNKPBH)1T@U-G5UoNAr99KDK&%m%>Tr;oN%Q7LZt>a z8zT2ymb=Vuk2$)x7;IPFt{@Z^e(!jE<>1I;1>G?E2>(#Uc$?0j8 zNAQAf$LX$_xDFcmrVMUEU+DI*{^cAY7Of4l4q5~o9OfuipB)!l;ZC#LXi%(s(_hY^ z_MfUkj@QONoFiuUUmb+0;lD)%1w^#dJSOtge}XWvZKpMRoq*MvP`2Z28BJ@|a`Y_EGJqKWUE!6YHe=7?xQ>=U#)S4fNz23d&K2p=C2481( zmhHXIMfNJ_h#@K}XQR!sm5xwjGD2x6;X5(!SLbD^$!>C{(=NKZ7)l8LEiJHfKKK&c ze-i*VU^>}IebnZUQ$*KCV0!antiqggPm3r$C?@^jMqFVj}f{=J0@hrvCeEvK;6Vdo|#yfeZH=1K1 ze>Y*W?&6_XN_h?v#0WNDJqSKwWyB1=4%HZ~`EnnzzvD3%76_m;u;kz=CQS>|CyApx zT*sP2rpU|o6#Ovz%`jdI`vwlBH{_CQNmRX_l4r%D#deJ>L9 zxG^W8ub+D%c+ggJ;mccr=N13`*2_lj@c;bk%HHgy3SvNyZScIL8w z_mfz0JhBQ&fAyZeo)4lgiaj7qSXyPp1@){tiq#11;lrB zo5-(%bQPkva{=nw8Wm@WM_PXd3wJMvJAJQTXY}bAH7uRi@oP>^)ukJkWJ!iSI;m)& zsj&K)WsBm8Z!Ow$yh&8iC#G9Ei_MCz5 z-#SRB;uJ^>PnEFbkg+;g&1U;;_8#$iay<8_;x-FMD4W#s{MT-*YgVfEUb2?hzCd7- z9rO{18b?{`D}zp{SlN5STC?rRPi1$PBQ}ufGs{rW(^JtiRvh)&X*kfot;R1lw03^D z8f=aL#J*?~aHchk>f5Dhdw0*{Fp`NxEi1fT@(S=Ag^2)1Xv5W(gw%=_Wwmh%;az$; z#(F$u>imVxqnCEtn#S&S?`XA^0MM(czf{5YHCg|1-9cZMMT2-&~r#(CG6(`sF!Atzo$!6IE^DdvZ;aZS6_k}Cr4stBB*W|Wh@^Z zS%G_wg0|zr}{R(ZetK{;-KBt7@KtkSaD3j*|r4xOrLM| z;$Fy{NyB3j&rCkaX&Vc+dG0`6oU&DJ!MO4QBdXO8j}jMZshy3r9~%T&rH_S6(5>i3 z?s$uCT%@q8W61C~1(A#*z#u8Zps$JMm`GiasKWZnchIxY5!KPeeNsqZZ!(7Pmo-x1 zDKkeFjBu9)F2z{pEXVKmdPf+nZ+G$n7S!PDY^oWmW2}6LO{_ zQhi;ebvYEzjmgKNV@?La^9ZfTRdTZhp~W4EbN-3TPM@F9P}apixW1oq>}WAKBJy-X z)Fxedt5o8p*+8iTz(=n$!|vEu3GG7~-}#2GrSuDoKkv`xnj?6*Z>}f`F8<0lLn8dp zeqvqEJJa0NI}!8F+4M%ALsAxRAu2Y|S0DNNFYetM6BMn`*+M+fU@-H_nAm%+sy&fN zm<;p(?WR|z9xSetUqRR8(C<|TWwcBy6cp;wppVSRQj<0M6|vpSzA{XQIWwszl<`C| ze%tCb{;O$i`L}8PP=(O6{;LO4N0^L5sZ-L~7E)3{MxE$f`m zZa)>+?*h3NrgxV+V*})G;>ou{6*1<2aplIf@Qq;4w{PjTtbVwR{nN6h$mF`#mfEax zVSs9*JX#eBJ!w|N8)9p4o74EkHrqV-jd+8y3ZOfL6Un)YB?L_vTB~UdOn}u%`EPt$ z({CwXxuxS3rfG(cUI4b^vdsymZBHEu$+uuIA^+9=ihKH>fSjAY8g-pIL3*%?9o<`#>2IoOSqk-vzxOUh4cxF)o4d@X`2 z|8MV=NcB3`utf1Xp;=;6_^)QkT{=CNH;L^4*F@v-z>L>1yRYEI%Wt*~=%osaoaqX( zGKEY{O|=jbxe<@~_V>GaN{cxXo?mOr5S$-BU2MT%D>YHetGfsGD6D!W1oe^C=tme@ zCNO|ad4pkC=Ej2!o|0K;$8)GdxE%k|B90LQ^w#Y#aM_(WA^#FsK1^fv33h%Q9b$<0 z{&olQy7t^P*GAlUzrr!!Xz!@fg1q1h&)P*|9}r&)Er2R7=dHO&y+%MD72zizdpki7 z_hj>@k6K}ac>Y%4)4quw{Wq@!>OD>zEkLOH5O=|QpGpe1%Mup)*`4AGy)66QpPw>T zW*|HRDsYS?#vK;Jk6XHL4h;7%!FZ4MmG`Btvl?GCb>OMSo0$s)V3x!K7~vu1`-W%7 z+Bo)lvyJ8^NgSqxzuc7sX(ep8LQEx75P}x5#;)8P+ikFXBo+WjzZ|x=W>PhDkgCOs}1Kw&P|CHVR$Vb-1Mx;MBEt%KlBZjU0U- z81)To`e8}P89O<>=35^mF?~zPSM=CMzG41EHv1)_dR=R>EGhn;>X3ej%2DjrbfpEXQ5X;!h9ut=ThpGRJXY>94 zxN$A5O%+9rv_`F>R!fak)h=3Umr$!HYR61V%^F2fGg_-=YR`%tdym>AwjwcuB)!hh z_jg_Y$Nxrh%fk_IoX2~;Ue9Bel^DLF&)gECf4`}^WlKTyADQS>@EoFnWR1&=G-i~J zx6v|ZHAbQ>h`T4?s*yiwm@HV0#NYW<5NN?tY`U7e{?xc}*iu%3PE9hI|I3kh9}eCu zl5=tr43mRk)kb1Hw~$PV5G?p*gL@@DzR#!p@jb8z#MDNRM(Tn6$B*wkpNVcm##RuE z9QZcC^K%FMZ-z+txn}=N9Cbw2}mf~)@KJ1_?K;EeT>Ah zqb!y!sf_%|J{C3XTJ|x{<0Pek{+RWAB<6f#0BXx*z%ZV%201-Vz&2hmM#yWNM!?ji z%%2{@PWPAN5?bzZBMU_h1WH~q5Jk0_#*txLJ)5U${!VY!bb8B$zLLk3-k$!XeVvL! z>Gx2;1IrO+CM7ouHC`kgc;$zcz_`yrf`_S7nyBZ+t!S4*z_)7K2xy`;az2G;``PB* zWV|yo4FMWi2)54M&xlAcwL{Eqmt<<>%PH-$FWZ0RB%c+D3bcWtUyPN%IrQqI=nY>? z)(#n9jHko}T3cIFigNt5`~^~<>PR#9@#lC!CVA+w48GSS| zE~73V;k1hXM^?SU$K#|>Xmhe6geue|oj}Vs;KA1Y^R$FDD^Ew|M05#j6P2&Qc!{5b)$c*5NS<%`lkkW^N_1H|$l;$%>%*bDW zd_j?m)BC*!P58eW@4sk7tNZ^KjXL~eRqlMXfmFk3l&J`!c)lOmw5ySkt}>eZK!GK& z=;Li7=d=&@0unFexVO|4;0z{frQH$S)7>z~r&-j!^M67> z*uKNy6L|d~&1Wq867|@_j*cVa)|j52d#Pw&s-JmD`scflE%&jat}?nBojx^lI?G6DtNrzH^IK>;-?ey_oBBMRvd=kq zgJMgCcSpk@Zh+vA6(08PktRjP*PUx!zn{i8vyC!rHlDTt+PaaIPvZ!-uBLbPt_ZH^ zQM&tHJf2Efo|JDGM`2z)Kip9Bj;%K~(v4N+r&LdfEp0fg@rvsyg?xSNv49i8Cv>qMHm*sh)qWyQc`qa#1`^MNJ`THFFcKq! z)be-X)sB&_Wo`y$#}3U^txw*MY76?mda(CxO`YPs%E@&kS*(6R`ysEjC+{!W4xN8{;JkPuk2JI3Si6| z{vmwVqH@^Sc+9$I^Dffvqh5B6#Rc4Ku^Q}2@h_V-uCq5ENDr8aGky$Gd#Wx|IxLE_ zIGw|S2)szP!s$H>;1+W6p1kofoQ?Lfab~yiStO~6hWP877leYelylS4Vim|Myq^#J zaK6j&Vcn)#HxAGCi~wK)@Y2~W$mnfD_r;Pd(1;N}KgcmA{V582V%8lvNnAe%w^twK zoxa6a`d}YnHb0U?p6n;SHSfA<6-7GE2lp#8Nt^%g_ox>&mAj)kudL*DPk{- z6ZCTIKkYqWct@ZT@M4Uy^J>KG7U`8OxC^iyDw|_hzIo&M6Or_X8t@>KzmkYeLlSKu z8smjoj^Lp%!8{+A6|4q~=++eHW}t7Q$^IzI`1SN}lXqFyWb2$5!1xDKn2< z-Fti7AmFhp&~^kAlgoN8Siz1tySbj`qU{ItH%WyGHl^xa1WBxt@(T`ebC(L$HT%F6Da=f+hZY1%6|1 zp*zsiVECcn*+Y+@FL$_qePB*N^XF(G=2}3jR1W8vU1+0igX(&JrL@Am3(yy6W>?j~ zdy#NT=M?eezfDN1s3R90ojsSA7B2RIpG(u)$nXCh^wa_m!pnpGS0uvc+{1sw|06Rn zYMP>=s3z;9K2{n1MLJtIg z4aVu!XMNJ5^YXW`#9qwk%siw@f3FhA`DT+%6136_W?Ja|9$xO<(rEwG*s1R@l*rPs zhFC~uf5-Ls+_3{pv8~LDT`GQ9?IxfToy7h+7(eKeDiX-t5)dzcy#<2;G5WYuTHf-x zRQnVc<@PG5NQo8Mw6vVa+Y*1L*K_cU+)#9=Smdi?o^FWne#X{R23Qo)&e6&!^u3EE zFTk+16uRr~?;Fg6Iyu7Tp=UmX$lxDOpdbvjnkTyATduCi`_o5cw5p1Z8!<+`{q=9C z`oHMsXOI+0WTY|hO{Aj)hv4TB5agX!od7A@BdrPX6-u+;SC-{a#4Z4aC} z6HAnDlO{sgNYmI9)SudB)5)DC*3K|LyUn<^)u1h{%c`I4y$h^Wd4%7%&aLhA_pW9R z^7gyd7Wnc5!^7+*-_()vOs%r|hY@!@^|eTj6J{H!89%ZigGtM(b2LIfzFcE@`Q+L? zVW<4fSfg&pldDit?KvCJO`s$;O{@-;AGAw^HKh@Zyh>Fnoa=^$Q#k2lZZr&we*>j| z-CzRFTIEfr%b<{jx@8LQM$)Yyv6grk2!i_DoIlU|wr*cKISVnDb;DLQ`}5HQjwi6J z#)8%@z4BOrf=n$$Ey!Q zmW6^1yosxPysY51R#MUQ&!7i*cThz6g!$B$hs9FsEXVcq^F)G=Qd8her8VOb3D$!g zeViik;}0nr8`kl29UJeHsd|PmRU?KkA~p!WeZeD2E^J-q_j&G)Nyr3#JY488(m%7~ z%7e9;k{?X`c72&;90+Q){q?od)M>S}w8yDvBLghwW}P&R)^Yl15mqOU^&5#R zPTC6jap%1~O(Hsr&q=CSugL8Q%D%Z{4pj>9Jz3#W{p4r-28= zAIg5GscLq2&gdREd;Wcmh3?2TxKpd^tc}gacA(h8N+WW{ zKSKg42?Gm4j3{|hEm0a6Y_bIf_#Dh`c9E_&e(M8=2WcL5e8O?37Sm|m{x~n){eC$P z_HapJJo71zp(u|>xiiqibp*1gAh<(@m__1wC8G0d@hLdL_DkHYf*+2uMJ(GIhz+fGU0nxQ0{CtJR3tkl{v!)^ z_@E3-|BsjV^y5OPYx(Z_lxqEfRlg&75N{%LO*P16@h>m$v~Q3`d2aUhYDs`_7V^DB z4@fhU?OW7yz(6K3&Us_WE8_c@A#zz5a;R}4@v-KWXUs|9@Ukal!>LR1+&CY+YF0U2 z29$h1LaHsdg1Rpqq2un?NF!EvU9{*-9d^^17$78#u>00}O zu8_cDOce8c;1zhM>;+J3T;oMTLvBMY^bMXaxJd9ZLPV|u50ENi0P^WeS*y~7DqZ*y z1ZVmuVbbIj7WzkMbhW@-Vb}n6>AnS%!Ign)8d@VDFE8sqg`6VJ;m#HooldT-1yy@7 zET$NU+RKml6|V!sF}08^nA>>4?f0+HWl5uUWw##L&T1isIT8-?mCIn+Az}EWH8Xsm zVUwU!%&;#du{@Ies5>N3ejs^A*ZT!HB_xUc6OLVk+aUAu++=Iy7m3Q2bR#+8oR9{# zOq?mTnl*QRSY-xzmOMXLVD*T@fD!LA@^aEsw2gFSXICJ;;D_cy*RI#?iwI88xmYm0 z>5u}v8fsx4q3{X&tLm%&Yx8A?31u~WB(`w3bLd{__tFI?RN8X~P4E)R==fbAPXG?W zNV*FhScQDPALP2CWE>1Kn}7#Bdhn3(Qgg=>!O6hE&T7+6;Q{fx!Om(;laqTWdAtpI zOn8QWS{3bspiztD@GnCtuk|pJ!p>hBu#}Fcf|yu^w9E=CG6D;8;-qozHwo-HoN(D* z-i2FLkw%*!3Gr;kCGa22DHiLu$6@2Ta&W8WHf0yP?cAw--TaP?`t!Q*c)u0Z-BA`1?wo?MGAqeyTQN^Bm2%)(08cBD_9=LEKciI}sK)W@dS8&bx!$2jD%?+>CO`0)c(nD z=N*eZb&_As2HICjM`paz(a*Ne!8S=Z_z@PdTC!EChSv22AD>;x4M(nrCU!o$wDSga zJU(hWw@=;aIdF-LKrdoduU5oI7BW!Xi4Ahiu&+*;^pZmcgGn=2*4_e0@0MC9ZghahcAX3c?Pye;ectn}k$OC?b}Fp3Dxz6y2)3=bUt$Z|4FNSR`ymlVn; zgjiU+QQ3Mev7X?i7)I;w@_mSdbQmW-%?msD*-H>2@BT+-n?$*HWi|F6nJ@5bG&c~7 zQ~@R{2Y-{j>);?o5MLH$L*r*$>a-oGnDw%g1C2}w`SRW+>cQcG7Hr!9Ttc{!Y)%}t-m1!QGW=hz^D7NeE{y1pmWyFFR!Q?tK|MP3O>;$ zl;BOg>v9ywmsG?3-Xb|(1|4)f~6YV{f-+yOvmB1{$O7$hc%)Fn~dq^tH|z8j7sZEY>1*%KqiAV2o1g${SCpA){_#0Hp8U zxR|2q>ii#BZs`}%g0;{ElIenq{nJ0uS^8(?zDFUoRrKs+Nsv!2DvEC$~!$*6DmplY{;!hd+xhnAl^t_O{ z(j!Rd1N$dZ1N0rZ&Gv@mn(V%$7ZsZBe@Ct=Cx45LGwj8e=oPZPom_fFfSaiV?-oo) zj%@f#{Unyt3(O3X-i2@zEHbqYYamROsi=K5@DfzRIUNH^8Uor zqKykyIi|;hXUtvdtmqCKcX|UK)vGR7g0`la*&bL>d0mHcO&i8X9brjX0P_qw$rLRHj>VSG61<)nmF zZ6ta*o{3$z=o8xdkio6+HS5S3Gr!{k>1ylyriPq-zs5%2Bs2Ev>YG}E#r!kRg&&nF zCwEJ5JV<$v++QVsBwwoSV%PNZ%pH0BUCAGKs>z%oEmPj9J+Cz$lh3;uA&>7u9(pYO z2CZ7v$>?*KX^FmzSjqIK-lE958XRT~cb@(+N>JzwTD8y82=CUtY?%&8I)fSRU0mZ? z-XvU(-z4Kd=9=LkMKpG6WPU$fM(wUAn@qgB(igGN-#OafWqbGnb{lJ9I_L5Yt&-|z z^m1QMv=slb0uj|>0xMRZ|1Rb40h^KQ=>|t}AYKAg)N6uWkoYC$(K)cx_}sayXq&p> z-)Tyq@#RDlMXC_Scz9!>BHv097C*g)_W>dTMSMNi(Xep2aTrob&$M-0mKDzrQ=Kyk zb268W_=cf(bh_4f(G?SU!m{o1)N5veB%3bWD@*c4?*szS$DLWCZCK%Vs&;Q74eYHf?X31(*CaS-4T)+ z3Io|HqEbWgwgZuB4Bs^OVRnTwn?YWY{Svue;ot$)2u1^`i2buIh1(0BXdZdAesS8OHg>k;%N3$Dsx=tNX#HO|Z*sV)^<41{RgfN-C zwb9q(J6M&yP&ve=?P(TX!5?dZ?kQef`vrMT`j8VdVi zIt&)ULgoxtc+zoatAq^RZ+o?S3c=HHP+$rvPIcwSm-uIfWURfz;2h{fHTYyOA!D)OSYWA6}HuDl-GwLAz@ z2JKo&rwpb35&MC*i1zx$)4)zqZTk!K+N6?kmekuFF)eVU^o$&o`j2eaWRH)V@zX#9 zWpqOVT&8o>)6n(kVUp`_S6@W&5hZ2DwLtwSWol@ewyN^CzT&P%^!>8jfUim+FIb<52X&7&U&WhC883aRwQwsKL!3=?ptyT5tRGMTm>W)^x0$p$;uIudg~KaHg|P zbz?@@=Zn&ARYFTixkbj?2qM;=lk(|J2z$e5fPr zOI81%^f7--`x~#mk?C)uV@8q;{^`e!w7zSdjeuFO@c8hl?udxP-=a;ZcbS)w3jwSwlM%`>VY&x%s zo+lHFk#^uHWHno~755vqDMc}VQSlVSlW(COeN2PbgVNhBdr?_8!y{#hj!Z*d$`V*u zI3ako87N}$BhTxmWnA_6=%=#BDdW`?!*Hx1x9kyP?b}(1To| zyr%_~@XuQ#&d1XAQJy)HCp6!o5Cv}#3kGIiqkL`{;2zjBe4n|qnPRQN<$VVrufD?T z#7gA|4A=nMEJfR3uL(9F(3G?TAJ74@8q$l%24@F@2L>8TZB}77oGYVih{|Z_2#)`q z$q_lL!KKzzjnkB@s9E`I>yNywg4aX}ib7#$lx7V*~QbI3a%iJ2y z`?ck4dN_t`@$}-3s!pLhT%Ki6x=)AfzTolSBhCj7Fje~;8vFA?gK9cB_lSa}B|l=e zbWu7DpgYpSZoR$Hdl(k{E>z*G;ASruxWTP)J1aqZEkqo8Dt4&XAEBAREG!$VP?9n*H3Z$z;1lv zYo1!v<9YTbsNu$`Q@W-g{*~m;HJFO=sc(RNN^53eN9uH4CI1ao_PNAvcAApBs*(?6 zhz`ZK7|qd6n2iktDJp-i;r-i+lv9+r>PM$t4%>6yU4$@Z?vNnUU0$Hgk?HDtawF4- zf$3@oMU%r?<2rEOudVOGWySFtN}}psLtYt6dG7h!CK&}2??Q){ETSzgi*Kgc;;+2+ z2rD*z5V2Q)iZm)AYkI6A;hyt<9-PGEB;+rPQX28`^QMJ0|AV-k42hhg{fE?>Ib z?tNXDxT-K?i|Th17yCish~y8EJ=ZUX022R4kK@{j>yzWp|B)SNb|>t(oN17#KCY^# znd6Hw#Wy~>y5w(5K01r*98vrbh)DWGRD%_8gmCWQ&Aq{?!omG0ERSu}DZV5HnO=WZ zeR0Do%dq&Gm`|3*f0kfGKfq;Y`v~abR)W$>CzgNc3tjUB>1zuJ$kfBA6UR{%uFwpc6uQ zSdk8kVzu9YrRAv3Hmi;_(l7$J1jbb1a&fDr)!V{0zFJH@9AuX%HtZ#cHb=JZNB-Tzms_n60tXN-@KJSSM z)1tca`#^Wp66iG(;BOK}+})UcNGsi`LmMBO#j}mrCZgJSgs~NfRV9@gq8{(#b58~X zHPT@Y=G8}Jt220 zvGw6)f|Dn%dfxRlHFc`|RlS=ZN~H7;$&=eEimYU|AE#s|O&_S)Pr)})Tx;hcW?9qi z>nZ-*MM%dvqHAT|3it{hfp+}teL#Wd(@T3b?PK=o;q(|?lD_d9=&P5h4(~*M@@J7l zCJ}$5FYiHhPOY$VHQ{e2gDgwB;>vd}JuM@7m*_i%-8sEi*uc^-Dl5ZNVPaejXg00G zrOd^N^&eS6ZKludg00SiEZ2yKzNpI>j}5RHyJI*F zcTZT*-Fb%eCugAIprE$j6Jhte+~@$@M%MlKi%$UpGt+nw&hkO21Ro7-PE0~z{ zc{w>B{{%=%+x~#xS5&zE-79EmNfFyyQBO6qvyO@i^OBZqqaou@?h!qLoqhz)$aDe= z-jKT|4to-r(4rpxMeJ*iRT_D`wAd0=8fEsc(g?E9?RLa+(AB|)UGnUnBFdL3ujWp_ z{3A>Age<#_C0J;0S7gIeGCFBRAbSjpaKm%N&_=fZ#|?{x`9=z^(!B56@ws6TeF9LN zFccO8&Ch2s2jMYW*~P+`$iL+WZA#dHb5M^&OaQVcA?h)r3jhx3P5988tMFsDebIBv z@7WiB-8B0Xy!pm#IAwn@dZGnRfmN9L8CUQyccD^!O|%vT zryx4>d6fwiI5($62O597tgqQweg@}$d$xaC6`i78(V~{xvZ#5nHm@DrP2`U~)>YLC z(XE8I)QP#bOC0r0)@L_5`8}D2P5CVvFJ?YDJ+|MkE-`<5;jOQ)P#f&g^xBV2!K)99*y*=R~9$nP#FxWzwB+Fw9AOYZB zA+i(N3o}>^_Dx3VVM+G+ZDEA~03(}7r0h6<)3!eOzHV0Z;x`0sn9^9*7q4rT*ihDJ z-ukpux&M>4A&=O^n=`M z6K9m*N>qq-OI!Z}rrd?$r$5gGV@MdJBP?!41!WmIWn1DT^>W-gpEaVL}t^?C-L zxjuPBNB^4DJ;KA|avGrAkN11geB-jeZ?Cj6@sI2SOxFX{c@e@|%xvRJwO z0>uDUh5099hzL*P{RN6-zwd9zFC!>_2YQRmA%~xbT&;k_mWEc83uzS{I-W%^v*~kw zDvJ4Wz`;K=I2T>2eXs0o=JlF4LDo|fi70c*j35{`$Vv$>2GDuv`lz!v$M^4jWU-GM zs^Z8+h1`24$d#D5gv{^}u%jG3!ke7fg`2X3sM3MHqmjS}CysP2bG5!Zfdwk1*^)nT zLj8=K{ra5Y#*@z3ANG8IW{%H3_*bPU>RAfb7Pba}M@a#=FmaD;x*!uMaww!|Du)qi zso!y7xx*D%8>fHS`w%{9qGd&omFRNu%X2IdOWEbj|8$S+E{) zgjg2fQ~*sWl4nm0d2)$MF`BRxkc74XtMKM8;KH14aJ0+!?t34^#d@1@# z2{f`V7~KM#g7ollpzu8lt#L~Wqp#NWlz+DZ6DRz4C~f-oAbdZToc&6OF zN9C&sf*n2`(v?YWYDy*_O7v5QNS|IMM!1q_o$8QmAwqNaTNRNXYExo!nSQ87}L2^7*n*|2bq@ zbXPny#$4sXUom&2{{(;^XCN?<%&wR_sneHLi2N?55n< z^$iExwinm66yG4_z;8i#VK_hzkbM1inb8#J8+5%jyE?12zWrVfBel3^a}V51^?s4I z=z8l+SPOUrUv%?VI?rt*`>BGr2%Oedt1A~i)<}dlBd_v8$;-pl5m;-XvK?4!09Z@r z8E1NWJlX$mEyn+Mt%WTlBRll6%c&7qs#@nGiX-*F>89=FugC={U@0UMAno}B;R5m@ zGrJmGUBl@Gr!xLnSK;AYfbIT4oN0QxN2m6%%CKZIJmas-o~luUg#{IVV|wdOPeH<# z=w)7K!uM%N=vt3Qu)B*AF^ltsl|gD!+CbVAT){%2+$sb`N$FRY1{3&4#tSfviON&T_2`AX`}JRBT6dMf14}jWJDbAC ze=m2y$=%$T+z5t`W=D@s-)c(1&oWb9lLTkDNuS0PmGYpTf6U)bN4vqhUfF+(|BFf` zK)EX+e`bwM($?inSE`yM3-lD!C94RJ&riTQt6&PRvN;{*46wcKZbdch^gtiJ5OlVx z|FK>=yao4s*-^E(E-LKqKQjMDBcgtV0+IR$G*BJ8S3fJ`@~Ten5i5r;-{qh`xYxJ) z-Pl|+SAk$LQNDx3vz7&>UD+;Du1c*snkni>4Z>>Z(Y5=DHiVa|_q$He>NMb2vWp=d ztxWYelRf4iudSX5gguSG7|(Tz@Yn19syx%O_8 z-vxh@vKpfMAvoFNPt+#C-;havDH2GS_x`+vue2VWJXPmbbL^jbqrQ7F9aP>8qaM~c zHs-m_TUKsXl~F5dH~ns;M>L`)!G-Z^Ryp1T7?13kU^+1)u}ynxQs;F6E^*=`lp>Yp z_7?8d+Lk~Y(CFeEcYv0G(J8a-h6t-)J+TIMQ%<>`$D#U@gJ19mVLdEo-7xSYgO&-I z`0hWI_Xj;qbMh}XXQq+)$_cL@FW@+)jEdSp!}^C1f4oV&Jo-i6*NFgR03-`X1I*r8+ z)h!D42*?0~OZ_DJH%s8f=bB_fP4)WE)9?E7rwfB3_ikjv-nT` z(;tUf-M?FfjSk%C0Y|4i*<`)gX7(0Ll0$6xsZF`pxN6TBO%w(OHVfx9)MrRX#+!bV zdZ462cMbLgPC>f&hX6=E3ZYF?Utep6(&9}>rc2K#GxB{Y@1_w`uOpKc16C;`yE~OT zQ48>9u&@|>$m#G1Tm%R#!=pMz?o|-CTtKo@LGX>hPwsOyKLR?Vi7x7bh|LQxus!1W zTwITOfXN1gz@o7-u@hhn$K|Qkiz#PB7w%e_pM0piRNNzBDq}0xB2)l*N=nc1qQ35g z&!YIzvuRgMbLHfnq`3`h^|e%vSEb)6f74K2cq>p8pZqWOl&dlnuL8YwH=5k-pjI7jXA8X-4t z>ZFZRlF}#wa)+l3Q!Sy}+L9H!8BQ!DT_3^np=DZmBD|Z%B`}ZXUNv{>o|?S*E}+L@ z$K@pD}wzYzf)?i@k}RpeXsx--=nQXzd?ax&CHLUc6T;dndZeTzp{;7XEi3 z*yKF5!p*IgHm#w-H^cv1wWL6LdIG`=f&^jp_5ZwrGAwms>U(H!1Zh2vKIZ0u9udK)vh2Afw}YarX=?xKuX%3BJ3a8IGotjwA|5OHTx=Uy7F;-338)d z|9t3i@^3L1yvol{ISU|+J^9b;dUwQG{@{h>>v^+z9e;lj75A$$Ndux3aZLXg&#v$T zWo8zrhK;~7umbOh+V_S;4l4$upWXj>-)^>`4HG-y7je`2*i<#5=f7|^5!OHsM#pM* z*g?&V(u~uZkllj$!4~p3_L5g@vKqF>0UH~0!*dqRjkcjwO!=v1ro6m&76u2QG-Q2( zu_l`UkOxpnN#O;tKNRBFRxykqXuMMI%^uy1*9>xl^-x~@GaCj@3N}6Z5Wb)QVx_V? zX|zhID6Y1restgp0w8vh+ zx?4n0*nuhzmp|M2eF0a28m_nwbrfvI6kbXtCb}|RHzXZ-mL79}_5P7PeVYRsYf*4L z)xA9?HiM6et!7&MwpPFSah~Y+>wJ+>scPY@Aa`$ZL@y_>J(++%oyZ49-r;k5U&4~< zp37fI`yO+h@YWE5angF&d1$uY$wwLdfjm+FDzX6b323|507O0zgNy{3Q@5perjb^`>yNUX$^3_2BO{`c zJUy)f#3;aet%HnArN)J!e3z{1f3^)2{^^e#s;vI%B^?%e@2lOr9%E(YBNot)IH}%J z-W%-^DwMG%ha<5qF8U9;P@)|Q2hJlSIDQ>XJ4a<5|%x&C|Y zLlj^xsw&!qow8uEURh&harhGGeHnKHSAio^t%9U!liYn795nK+%0nX4`NX9+!6cze zS-ckSk+0J<(0QJET-^Wrc;GBpk`Bs2I(o1NVT9^;-rkH?G|I<6>NG|Km+sb2Uj(N# z1#i2#=@n1=`>AS;FRA4w=Yq98P&^RS4pMl=rcg*pBy`H1RUM;D-mJF$aV>R?= z``vF5)Tdx?6K(+FoUWn{nhUp>adBf;^Bt*s-WZO$`jEhgbj>w8*!LE(FE9H%OXOWy zv0@OvX4pd*gU3UE!$*T9m>pu#kH1Y44a74%2ew`tcqBh}z-ek+%iUMYr8plZLYeih zpRaF$rw50L(nltx6DHHykS9U-m;YHR0H@%8h9(3L{v2!Dv0TH};eLZ~4;QdkHRBrV zu}~6`I=szr8TjoZYJ~2)1;>>SA|b|iF6m{fcb|YdD7#>hBtg7BX2@@KB-WKQPzDV+ zwcrFiFP~Z*uZ(87#jADZS-Tkk$TjBE=lD4!t)i#Qkh5nF&&;6jS($zxMOz}vnlFu( ziBjTcU&Jg3FADh^x}=2tNi0yjQskd=2iuKEL7Tdcy0?tqr6`{e;_$!U7^2H}txrwlHNIgV<*g)dxzz1x0|d7eF=*{q4W$lK)? zkpp+LZ>I2*KA`UOXd;e|V&vRezc?64{WTAGccHCxn;0~*w*(q_Fgtyf{jc=cepAsD zXChGdWSNAKMqxFO2<5Bzw_mtBu=;8UxNeEUCk)DD}%Ze{X(X?)ISypTBHN=Zcp ztVX*RG}6ci{vz8-Nu&*wv$MuP`7=)Hw#HvM4u=;oa)6u-zZs;CGdlZBF!P-Wi2r`? zoQpX5;z88sED_!hC3zpNg%qrsL`)2CRMQ2yMkMG}yZkuZC+U3H(3% z13~df4)4(*Ff;!JL!5W|?d0PAMZMSuuCEdjIinMncuaX5nJ%x8I;sh_$a;J;&Y@qk zh2H*-t8<JQu?}KduKgu?g7?N1SU0PdvdtKD$6&t>dTX{s-@jk(=b@6>2kjK}JK? zMrKWe`>%;e<1a>yjil8TnO-lJ`$slVThD*{(vtI1RP7)L{J}mw2*=7J!EzAnv%Ark z_K$2zFMm^}mgK3YXW$tKH~ycz(rYe0aFWgB;i>Q8l4buFmH%QUAH}n091aeOWI!Ox zMGS-HXh}3S0PI!K@3ute8ILlKEAWfJ*G!pSE{}9K?6YsAzju#Do8G(Z$tir0CJA+w z-O~t9G4pW>EFCuReQ8y;+4ZLQMZ$j}(-#Pt{Yw@DjRv&P|3W4^uX+^VCg36?qeu#% zA)tx5u$4kE1&LY1>jy#E19QOCV|LYap!)g$DnJ+N2e616=k3=f?#!Scq2Tjun4&#; zzB%a3>p)k!R{XJ&f=^vee(?AfwNrYaOxYS2hC}|mq*D($RdH*&gIe6djg`*;b;yC( zhckpknuRbXb9A5lE;~DY@2UceG1s>G{J#S5ajBKn!2b$B_c4%mkpKV1=5Z}2jHO3; z4eupp^muW4E+FyDFZa!a)TxtMuRI^HPz6eFQr6{D&99I9_h3y?1<{1k#THTQ!<|)w zqi$(px<1$;D(oJ3&dtaR4=;j!m(gd~TH>m^l_8t&yGwYUcOSn$=4mN``_1lOH6rG(KJM83L;@P6c|5-2sT%-u}ROH z_b=W}{Pv4y-RJ{>R6DW*r&9DNa`UOS_&JH4-mh}p%H0Q~xh{L|&Z5n8{hNPfNeKi6 zgP0;cFN6IIf+1ur#B<5%tSPAc+FvOZUaZk%G35eJiWzjXASA-&@%2PBt)XM7Im$Cq z!S8*)zK>04D_(J?2YyqLU6HMe1 z?O@+*eW$0VtwYLbkm3b`GQK5){!@TN6kn3d+X&tqMK(3kwt@OOcjJn$?B0VQ11$e; zqt7#lL)>J-kOzc5s%7t@bq4%)A7>o18NUZo$PrgWh13Vs6Fk z=+uMS=`;j!uAd3JJwduSgw@p4UX3YW4!$GLnOOf^;}UM=w}*OT6qaJp$c&hQq|iRqSul*A99tYDH&@;8YO&vZkPIw;*xw-@b5Xc zbS0&f@tPBrEVZHCMZxS5qQD9>2;LdZDP>nvw7V%fYo$6$VkIo1l%4WZJJHlLY&B~;PS@%XWiZ=l$|S-O76}nVhu&2k-lVugbc!Oa(0s#YaQ?&==o@YiQAHi zg_iIf3u`9~IcQQrxUN+o|WCj0HV=T8Ou=$UUD z;aFc?X0qNtit#EO6y$i9QJ>%XPo`XDvw1gkbmlpd0{zi%5L}7b{cW4EOpsqzl*H;F zS|4lTAUEdwl)E;#UB7zDcO{615qzj55Ef-O$fJm>oNE49W zB7{VxcL4zbB~Vq_kM4_Ki>P}3^N&Kev{;!?7h}rYcC03 zr=N<*;d5li5j+yb)ToaO=$udz#XVnLNj&vE+0ab{Rxp2xZyUOf?Lx~ zCcYqMNpBF~%NLHNN?e=zQ1n_vRY3UQBkcE9dLi!S__y31>aR2pz~vGRl>6 z5AcNQEN?tiZnqW1SFELTZ(a9R)p_2tY1qYo$mYFd3UH}pG=D1T zA~6%S@QwR&GozYEHl7>}4DZrE3Pd+N?DOMrP2Rt(5x3XI?Mp5Gh3%YlV}S<1KawI> z6RhowEX}O84nJkYTa~oaN9H|I7~_l^?)!6;qw8MY{~X23OWWU%eg{O9ogfE5|F#EO ziw}+EWd3On_ygi!0x;M156rbQ(THuZrppK!E&Uhf!sK8>BLK{mMpq3*rvs&QcE)i# zuHKRp`sxGoZ3}A z6!jmtE>qg{rZM}Mz7_CD1V5bIJe{uUHJwxu=>Iu<^A@0|NIReC;QoG!2GJ7aQqZR- zk4Cgy6=q^?&8sNoFgHut2}jzvpgO{LwjT3^qI>0(DheU+7jb%{00zlh+P0lmye^Mim<0`eL!r zoKtnL@Z3`)1-cyA<&$GnH&GE}cJgiY7ikKM;aQY3kzM*Bz*=3EIPTnoS%hiu0I6a| z4qNY^am|vL!^-d}&#+_2>Era=nwL^VI_vOL15e$9{bvZ36xP`GMIi-MVW*qsHTi4K zgC3M65?)?Bk+(z7IAbprY-t=ZS3DvS=t9f zU?6;Paaq)Y;;nVV+TI8@=^2_ks7Oqbi_LX${_T@NM5EX?t8QnaPnmBr_qN2|FwFm&ENe#J!FKd1G` zG>(4_#kS8YO{xR{`*`?VV?-1UmB@UvEeVsa@d3a7-2C%>SENGy&{ zunnqgZdnWWi_G2NWZO~49$XrSJ`jX2b^*f)|y>?=<@QO zdM6w>eM)$#P+P>Ht~)A?ewnqYm-9;?uqE;==p+n}%ZJ{?4kkIS&Tdafzp1y(sfIRk zu;y7cYr?OR?y^Hz`Ev1_xY2evCG^pBXl9RJi6tMcybf&`Fbr(QuUhMrpv&$*Mz-s6 zLDoA!Hx;x3mJp1V(sRVaJztOylY2oBUXO_^X9Q)B&1n~|8-uL9jdlr*8ivbTDzX?) z*o|Y7flwY=(d?*}zb$bL+k`?AGW+av{YhORB*>tCTsk17p{Xfpy*5ohIYCW6HDWm- zP@cnh! zgZv7&lbG^DgQ~!t?7HN5L$lH6HLuqve3GAFH3=wI%6l+!Cm0Yq;Z(s{preS zhj$Mjudvla%gQlgly$$Zqb3|XNph6^51060N^G8Q)+shrs9-Qs90`e zIV3=Z_EY8i?*1PO@dCeE4SI=JE|oDq)41Rw^(fsV7C_y3I;P!%DpQ%ON=*dktg@$R zF(MY4az4~`o;NPlJh%{n^>axP^P71DL%shRmlKHB@F}(a*l1+5lELK8_0~6@>FvtO zmwWcyV}fnJ$wHNA@rnyE4;J^|?HIMIk7QqEi?vNwU0qGW%JlI;`zKiy$;ikFokt zaAo+d`SIyHZJ8?x{uK=j104zd8VYIK9@{T0X3eK&`uu!&RcQWkSs zfbqKEKeVm{UI3d6(7G*B0IeG@qsmvFXrJo395XWicZB4`8{v!Z%H9hTXHD%;){aJp z&%KZBu1*xoyw&pYEA~tu1~)iNjCbg@w_|+OiEMRsH5E0LA$Uscf-h-EoNukN!f*6>(06G2Ur!c zZV@wdD&C?hyC;d<<*)Ky+NC53Z3?ctf{o%bIvjkQwWh53iqBBB=Q7I^yHU8olh6b$ zUDjaPv@$pPQX^olLXy$OHb%n7Wnr)p~wx!`W`7pqR9AYbcY*sJ{#8*2JFmE*8$jmP%= z`%a&$GOlg;rpm|`d}0U3xT~0rJHtD5-+o@@m#jAgJwBq?#IbmiV&zy9aVVW&Fb9vw`n!bFyA`zTt%68hiZr9OL5mA=`H8|(^Qd1 zGo^xhH6X>NetQ`TSsJOw`UAIZxw@(!(nVN_Vz+W{rG%P$Z(eTiSKfKhOJs^9MMK|W zms{YBM>*N}Q`O3Gu`XzJs(RWj*}iAONePb@Y;$Pd2gSGIK|qG1js(@#OAVg|Iz~%J z8qa5?1QEX*0r%o*Tytgt5w+w;$V|dAPgZKaX5h{&Oxu#g{Q&nyH|#A*7rgzL)1JsJ ziUJ^k8TXYb(h$qFcTRFoH0Qtf+i)jRk$gPC(>E~I2bD5&lT|}}M^T_s|8Et*^KgXU z&6go)-5r*;+dT;wkBIyBtmDN3@haEx&-RNeu;Bx(AKGkfH+3QZzR6u#bA0NBqXlAQ)c*w<8b@mbgX|_ww#yqDJ>W$fSqKf z^ZG2E7<)V(AX4X|BtbE-P>2obDhhY^+z`MFpjn4O+rYf^s*xhsRtd=J-zob7vSptfdL4^7kq8ze%oKktg%@cD`S|zVkdb*74X1HDh|b7O2sC2;Falr~ z^_&mXpZGmGvgqj{FN$PeP?3?plQW>Z{qnikDr3*}54q<_n+RYT6ms248Yh2$a6gR1 z$rY~)$0@bxUyTVG3uIR`Hbhc?xg3<5PO<4lHdcyi@Wu~PG(p>O7bgi=RO{DA+DcdA z^l=KfwHY0wC9(DhSM^nvT9rf4?UogYE_#1PS7)db9Rg$c$w|sOX;s#@(Y5-|ziO=bji3=#OdbA#2FC14N z-bByjUL<>|iSNXn_yxuf1N2_>F3sFfg-X$mlKSMld%T0sD+k!#PTu$$PxX@zS|k@g z0qe#5km!_{Ms-DGLWF-!y*7G@CRQ!6fA0A)y5y?9yKW)1-uGVJ9t6pD^&wTE9NeZx z7xQ=euqQK%r|r)4G%9au&VyT|*YbR#AD%LhCkuWpx?hg$&AfpcXS#p1p>OcIQ&r?? za)fynp)VZyvPsRTBt3DgrWP~Re&T}YsDHN1gVB8_uY>8q0$M}01Cm2!7TA@=IQE51{w4#bx)(5ef0*dR=nmv=!z!5T_|fva)D;si#1%mC*SDM!D+Z-o=)U=r=fS*{g-nWL zzNuP}*jRsUhkHk3Vvpdp%<^k++bm+yZ!){MN&UqMg7Dz`4b;s>gM3(i;OnPGH8L$O zj(cuO?!9##?#gSz1;UmlDQdOkF5?REQ_S=5p{lXHyB8%S;gvNroPsRs@(*1-) zd8`RU`*1u()OdL%ZWO3nR3vWFAUEwUly+g#rhMdRB_OJ=r?;d=fA@-WajI{YD>wZe!&v$%?O zaf86C095b#1JxC(VGk$RCZ1q`iM2K`v91M)AH6j5Y>F%h zGQud8PQW3Zj580|ag;~Jt9A|OU5%{s484(v;Ze!M=*8W?%$?rUC2BT`Fi*?4=g8Y}gBTcJxz|0f&b>xu}{AFKQwW zE{XGdXIR*4^5p}x52hgx`cw^<_pdl-4^?o=(Nm-Qs*0dBI&)+$3bbPfX|McPZrIH)U`a?mp z#tWw3bU)kq1jZ^wXGut(DW+biQb@I|F%iqI6{Q`(^Hm(}2*N(eXNwO9MQCK*t9M3^EmI&c*yX=Ky7TQ!2YzLzpWxVr%Gnv zGc|*{OkqKqo954P=~#~Xk#jEt&P&O!H6kK4AY_!*Wrf{NU5#*L@9TldxP3($|uk-7$`MsjYdX2n~S$FPHS=4FhaPWpxZuz8Ow5bg0`=>brEJfCOD4&*CLOvNJC zPQa<>#yIdv2;L2wFt1KfE)W|ixMDL>(%a{|5=%j|8}6UNN0BKQNkHI7FZ3Y4$(FXY zzG?9cA6;=vd0y#N{g)i;%3>a0*?ks;-Jj4gzd$cP5nT_yKK^LaxygzLTpIid8j2c7 zRlEjZSxrHM8S{gcm?6H09c+orhqvaQw7ZtMb1gZDFbRExIdZC9LFMBm+TI{|s(hPD z-PRIj2qJdds8j;3Gegimwb%P^;#Y}P%Rn%=ultad-$5af00gJOvj40Pc)lMFsucT~ z5(g7f^IPN&Q+rd$cQ5MYI7?9VhzwP4NSJw;Wqz*Hx`*y4c#55LRSj5i&FDyy$1k1C z%iy4Q1mkps8lH}>aYU;wu%q<}o<*68d;lYZygrY536gfWjsR4TcFT7Tu<3WAwgTZnZ=0bI#wYZ?ZimNanJ0rSmMQa{8cKgCaQk7GH+0^89CpDLkqp z%`Xh8Ae6twXtrqG)%-C%mf>*&w;2t4@?jb`qt>R zHF{^IQz*oTu^;zny!hv=6@Kp_Gb5zaQMpQZcj~Z|GVU51rX=YYg)8 zx#O7E${!+D<>^aF#k^Z2sq^hlu?`Sx>Fm87c?ga`QNuW(_Sju?aI?^cQM17Cp479v ztyOC%`P!4sYW2LMq}y^Io_wcKKI*+kakfXy0mP;;a)9TAi;tM<(+bP1;HGu{A*%1P zQ(c3mZ*agn&_{c%C6FOIpL)US@+;+#u0`pdWe*w{iUL;1=(P|)Na z=i{F4eXI5bP#lPx=Q~y8JB0xv>094oljCiN<|a_69A(dN1~p?@^wil zeT~LsWCq(CQmH zi5FEabte#-!no7$bAOl=KBY}b1Z$K#trm3@sG`zru{NVuoiJ{7gRV!o5Zx?7ro}@L zITW2~wPHa(TGSXx+@^ACoeS*Y&bG@C_qf5(>%;tPTI<-z;YdH5V2!t2qSViY6sy;Y z4a24wxB{#{%WPT&xdgbqy`3>)koI6W+kN{iI+A3cyr(=;Ddsb$+0#+&r$1A>F|6LJ zwnQzBHNoU$uxS(ZZ!d2%{U*DM;@iQ_%a4QiZyOK=+=dY&`)O)s3d`Vur2I})gpu&A zzE1zuTF%R6F}*O8k47m332^jnG(k{_AFX?K-3pGIKCnCT=_G!61IGdzBzw3@puTP9 z7QnudmXtH@AxxUC<_F*>ZGca4wvfiAxVKH3(9;Q*XMx`$34jZ=_L;X+uK7p!u&0nb z*;d4>=5&txYf|)QA8(Cx_rs+$N(%!yw(4M~90>;@zsXLPugxpyX`Py=677KfIf$W* zDqPs2Us$UPxYPexxy4H04?(wY%u%qUMUo(~s+nrz+O`cmpiHxl{o#et4B~YC{x{H^ z*b%a$tKrixZ4qGmw_!>kx0IZ=7K@SBL473L(+#KO$GsfutmnD-x{J$o7m?E}@#hx6 zM{X!6(O_50zBGoUk?iY%Ti~)fUCqxpvol6Cf(s@DRh?srY<%YD8dfniME-DtyZ(d<^suQ-XAXK)RKjWar^N6dcg=AFKV8>=Q z;w5$$_2D5JB)uNtN?B20VS8OYcp@MiB)$<(cZxP6g7_B{!h|Zno4oEkty(>8K-Hty zO>5ZJ-zF_bbv$YiW0@_98@%euSvM#+-VhhYeXW_FU^Sr@3Phi|y~K&IS4oUY=ehWS}}M&zZN)^Vsj4826)2W`lp*|8Bl4AYWeWliciqUI}BQ! z-$*(~F2Knke2Zo8=|Y;hH{|@nywl-z4&ThxoB^wn(R~?tANw~ITpD+qzn|F?23s*x zC=&H>;anan0_51_ZF1KT9a<@5WLkYJ;u9Fe#<9ZmPW`?z5FQEJfJ)*GvHJ__Az}n( zYI-Uj*Z@g3RI&lJS4|&Lb z=Z6X4xJuWed4>^;ZB*talHJEQYiL+sZz%OobMKlf_OO=!V_vnmPUi~`t4V+0F+$}@z|rR~E&=wLUn4{Rx@Lfw zjXzNv|6NpyOK#M7b#NELXTddHUJ7G2yZCN!}nKMu`mgp^h#5P1ajPLa1rFVTY&=ALIkC zF@av!nZTVPqpe1Lvok*nEa>sl(V&4Qurlyjb2&@7xG_P^t7|yT{FB)7m@cl We|9aKuD71;e{8V-|G#v69o@Q&o@1Af^Dn%Oyete)7l= zNaeJHYJG2sM}Z*LGRcJn+fpBk)>2rk-nI^3&C79Vfko{^yJIo!@PXp{@VT%v;LmL< zef|Iw`eYibDgcR5_m)q~2*FVCTAG9*G21#H%SiQ)EC=>$_9gb%37997ye3b=pEuIQ z{)qKQuIUTxQCA=rPcsii)CaZt;013`g|7Wki`vRO*mMRYmc*u7c;VD(a>nD^g6 zN(T$yG>SiwtFro}Oh!VikFaV0HNZ1Nt}gnhKOQYpnaJxaH2vb;ZPBF2VaCUxW|!82=cK%5Qs1a z4mB^AuZ{HfYEfehenb)9&qtM*i^Bx-rq4@n7JKI4>I*6?S{QnOHM<7Xk3A&w@Ib|~ zVRYcXniBrlBtR11dmHNWI)Ft`gopBKI6| zTMQ1Qyc9mBt2~`wxx=NT=s{v?;c2QoF`Qgd?JDML5|!F<5U=lkl_?MeIMAiJ>HN{# z3&2=Kk^(aU-V{|IJ)K&}qTy8Kd{lC`fFwCqBo9{pL!Ozz4@u6}*jX!@^6_c!u`;N& z8w7r&k`(WNcUuaVj9s$mY7sC}l9iIa^!+A@Yk)0y`QhApe=%ms`aEu+Ir;c*Zz)z* z`e^*!z?EX(*q7es*Xr!mH>k0VFkhpIs08g*JD~lB;4?DFk!e_4-%_hqtNBHb;zJ8z zTSOXq>6WlPqE7gPSyM`Bas)mA{{!1T=3dg%BEZ8~PUUD<7f@3{8RNNT{X2yA8cuT) zX#UUXyuA`FbkVF&cntIuI2PFrKl%~P^&pBR`jmr^u${3*+t>8Sx@fWLI*>4|?O3mb zOrO3kDJ zl>tb0R)`GL-mE10hInwLj(7D9BwaZhwt=Oz$_IVZgjd`_{6O6v5M3o5y-xeqo!2?} z)=`oo-A#mjNZ#FU&@Qyw2zwv*Jqc6n)@wSbg=fqL|BB?}#<#SXHrTu%rt)m7G6XsF z3{ZFp22a46IL8_*H-qKF{5gowB1XSPn@9$VkXY-S z)M!S^)Km&ytFQ9MYAYiZ>BAzY$!06zTwKB-owg7PeO(nuynzA_Xc^c6)+M-}CE_If ztgd|_0H;2T;^A2B!RAuGj4ow5kP1g!%Mq2L0_iU)y&qotuu8ClNqN}VfAF%%1Gh`+ z7fy?iKSh9L)ZZz=LkdT}I~*j!vPKng4+&@KKf!*UxAXQMh^pnDOPAz1`|=FCOk zzkBbWEY?-o5Igc?+7%w#_M4&vt=eo@G&T~3P)kxn8y1XfCGG$okWDKgi;>n=g~IP^ z27Jga7$Dc}{jub3e6o?3AJdoe_Jqx}d`mp1H7fGj@hH=6MXXWTVgm<{VZ0;Z$Oz~E`tGcVBLfD0>Zu%^|M)ZM^r5A=-@OhrlNfO51r zzqMoXz#rIS+i$N&2ACdwO=6|l4rx;^bZvA4QzUMuzMFKnrEcNyM}8%0#tJ2$8@7mY zasI2$-AP*%bO1}x`X-9?2v9FU%QaydR>E$mMt_j|8gJEk#ePMsNGai{1}hx=KK>`) zkVFz}x#&~8*{8Qon8|=_A*A!&XA)tVdb3h>mRf-u%L z$lyC^cD!R2#FDH&)<6ad`0BbURQ@ng4KiIlf0zA_$LXM*nV}&qu&rI&3;aj$#g0-3 z-uyEr*b?459*N<95Zk|x-oAaW@R6d3;*$Q@dKt}_V<&lx=ZKnJQ*wo*)4Qh)0hCU% z6Dh(9IWH=g_&pHmo+J#oz?6Z71lQjYbTq&wz=PNQa%8TQ&O}Nv zwMB%V14vq0a#bN5cRmQAw{~@e+d=&K`sz~eazCEDsCMQ{7j5MII$^vyDyHjU0Z&)` zR}!YtW3VPY!}+;@tvzbM`5YB1m-B%Ac;|@mq0wKEwAuzwgyMiHT;&ye#RG5~a5l!O zTo9#+z`i7C5&LFnc5z9k0jLJeFXHKG{fYu>F~p1S|J~k6{7sX1Y>33ZdsXy$>v&at zDI}n%Fb8nUq8G|E>azK0Ma%Y!Pl_(Yyyp-0ojnyDqmllG^en2f(f$O@zD9}s+x5?N zB_lyI&>|{*HUg>gr{(aCxk4iR0OnwLwoD8EX{g$rQXz4!WxL20akSL+rr;(yaDOQI zvk_b=W2SVR&-Re?ZxO1^_gCT(_WPJ8QUS#O4cT)e{N3fgF2qvRn4poxt_YR$V+eb7 zUxn;zycM#%9EqQ65H8Nc zVz)uCa*Z##c0#`*l(|!&d$e7|^ei&)vr9%sXdfa75E6p9ZI>gH0=?}0Sjqw+2ni399>nRPzO%1v|!&y}Ed6;-g8QI~gw z@3-xrYJ&$ak39IwoUsSCcEm$S#@d)E(|%x(9_Ul)*2X(ex6;HXDlLccu-7QWQX%qT z4&|U&&v|Tan}ij9K~B{#M@=k#%@nn_oE_^g@80gp?v#e#)jsH5%DF>Z(M2Dn)Y|EH zfAkQ_sBH@rlabOaPGhxaPpI`4KeizEwDh4Iw7&!5R>LYa!LFLhzvn-FK03s`6lbt;kB)LNw2S#kt4%?fN>%&i^{>GE zXq|XJiVLBOYFWoNRf7{~TX3gvL9?SQ0qGsVjaIt z?r%V#TfiYmJHDW1b9j%JGem~<_W6pfuiusMhR$@#DSJd&KqXsOO=pk(GE14PwJ6au5TrER@O^vqCEovHl3zu>$NXzluB7YV$HCT2hlyQVfQ-l5CEJfC*nObDOT?gVB1Rtgv$|j{?W>RlpW92iyi%a z%?n4)3$gMNZ%Jjz6rEw4q8Ukg{z^ioGS0>A)n5ekPT7a|*sq?ln;-X;0=hL-gkiN$ zoeK*`m`&+K20v&cJ1{zqhKqsG=(3yutQK|l)n7{~;5U78mfXX?=L!2z{{XevKUDxpbZ;XC{eY=vB$ttQ3#tLsKXuLXALY?7~~mDFXUopzqw zQ#P{IsFhG^nBTpvII`z>(jpxkK43Sv%VmiG9KhcDc&bg?m^z4s3t{-K=_l{u&fqeW>zO1ITIId_@C6h4xJ z%pZ$=b{tIxjZhpNZ@l&sMunR?AmxudR|YHw ze`zHjpmM!9L`VtD)d|`i8)^C^0~mKH>5Cniy`SGv>{7lgG<@1EsHazCJz9hRk+AJ& zK&QeW?GPPRYw_1osT~kFJ(7}a{Lle-3dyBE7p14S!+8=IPP(ZDnDw84pgV7huy2zc zm7}NdFI`6Hng?_nV|8KO=feVgSSM{iN@2<(we3x5tq6#zUn|$;^}1{AB#&cf;eawr zfK^sRXPOd;hT9Myp91+KI?N4qPF=#Vj7TLO&Qb(WUz6HAqUdNLS!fC#?wN(GqU64` z9u|>avf5U6d~1vw!_5(srH(8T{jjX=9 zD96+l_$vmtpNgW|$e{!reqXG=)VJV4^*4YxMS5!JA*3yG{VQzTcgc>kGQAnUqO-B1 zpmj!aooN!8CaA%9OjS$S&R(5dFe5n- znAFdkR`|%C>8Nt4Gn-UmYUl`m-)3J&YuvD0lg#LXh~_DF@}1(mH70dE*Xvk<5)E>-6(i4 zL?ytt^Vz8NH>!=%yuHZRz4h|^3zs~o)bZBTHY&2hz|2X^j%IB9&_gI7!u(>X>iQlc zvjh%zekcgK2fZh3J5pM?TJZ;w0-7lD&gO7pSX$EZe?DEIraII`vsLSJu~i3V+LGX3 z4X?W5c`KoEYBl(S5X*M0e|@!r9{SA8Va-m zSS2|e98w4){@wtNaG7AASA|Q=Lpk`6-b%wCbPXo!gn0cg1{@`hhX)N}OHYPa0pr+V zA~|d|)s2dT{Zv#@5+{QmOF(@UajW?-8v&^NPtl5BLr2o4iCfm@C4Vyv0z0N*z3b$^ zq`Q1wr;~YBj%XCXc)6SAsJkA&gygj`uH|fuyRoD-3#$P zvEV$N5hI^vQP(sBT0elf!F%0z=fe#6gmILpn4x9%h*S0;b~cs^P&o9uH7D6q6jzVj z_a!7;9Z4o%Nwa2fv&zUVCwV3+fx{O!*hN zA@Ah+I+)TW*G?(*%;`hH;(+=J2^R;{?gT7C82Iq}2h5FYcev~I7 z^S?jKH&iA%K#^X^O)8UPqnv-{V}nu#AkFp5;>~LzuJVi>mJ>eJ3o0I#80|+b=>dJE zRF{t#Xe1@a(5yICk=@2~6r?aUl&R~LG9yFw*T$51h?jZkp_4dzG~zs*U^Ja zUV13Jy>*S1XXAGhDt;(DC&#y?Lnr?Pc&loez6zSN)@BC;x$bItig~OR{?v&j#w1MqM3K)H?q;_2zlJb7HDMub0Hgd=4)a zTgynRD-BUHFXiu6j8u~0tO|ua`L!IgP&GX4gf+z5mT`ZZ)V_@U>xf}r=puZ^_6W_r z&alraxJUiL3d8kz*x8J_<9@kDX&dqWeVmVyrs10{ zA_@PX+oFQGL5(*U*U{Yio+8caIU6olPxo4iuOIER0GjxS_f<12ORe#|4X7LIsCD9S zv6+>P3bnTu4|gUSIGoFcq``v1xE++ob$-B3z#8llUFMhi;)Qt`*AVHcyy|K7@y6?;~96KN%S9ORt{qU;i6DMw7>&BB+3u+VTRAA~##^`#XGnnedNTQ*t?-8uo(A&;y!`Plx)sgA&JoD-s}ZI~`4@z% z%Q4YPRz8WlSE}F%k5o{J3-<7HN8L+f+rJoU+iG%lC;Y&NPgjI{CrVcZd()K!Yr6P* zpt&|z_ZT(x>k7M5>J_!dq+BhM(Aeb6S)c`u0;#8(u>)#gQn>g9La`Nj0K)?-oxF^G zC$#ctC19*`f-#q&`Nf)1WcuGuXwn;@T5|4LVTeOmLlzK#7qif4!4N8L}kQntKesQrIqZwqnhZX!-(h)jRd^$%1;tdmI4G~(E9eLqou5rV_T@`10+C*{mTXumeY zN#=BD9>hI|#JxxN_b2Z^HL9ZlZ^>6Y6)+F5gg(YAmOTDgM9M{8-1_`vUr7pwrE7GP z=?rtIkpOI|H*rJO_yYb&gU~L1d;%KSsZql=h!#E8K*0D{#KGnjFj>D<}23XIb zP=UP_6PcPE)~*tV{#_@ktVL-w{+e#9+^Vcv3XrcLj76^u5dnGsVQeOz;k%3ZJqE@r za}T{+iK*s0Q(F)FfjJtA{E8=gyj^+9bn+=Z&}5*VTqwRQC1dk==*rn3n}kVgYHfeK zL0@kv>KX8s$s*)+O&~(edL9XS2f{P{zJ`^^#uVB8%+l&x$F+(scW6{e3Fub&#iI`asElO_rKMZa85*V0)joGmmgBgvSmJWu`&PESv^5O$`+CS>_=*W{_J*EWebVvCcT1kUF#shTU0WKCH*6M^0YR5o{>}5)13Y(EbFGI8FuAcT=?M#(e z4;o;i8R23wvgOZ6l3-=*Pb>LY6dtq2ZRFMW^sIMt-8V5M3S&pd$aFzpcDly_0G;x8 zZ=2C*t}@F@GEr(lu|pRZ>fJO^tRdD8k_DpCJY#FhL~AWR>|XZBtx!bC5&lddVLRI9 z;q9G>`>b(wJ$9H@_T>*CD#Vv#ID#&LJ|@w?Y9zzV)(PWf%HBTe(ylO(r@|Iu!+7{< z*XaSOU^Ur8({|zzex_=ir5eG5xv>5C-Ie6~N4QdW6_15J)>T!3nlBix`i#2#x^6}G zA>Af1ehRM`-bYh>GOCv6ho*Y-(y_oJ>{5#TYI*qad_7hsl>*4 zU_x2KQmBH{+i;VeNY6tf$I9W*YarxN5y1L~Q3kWq8DaNVp|uvO5&IrmLjEQN>h@7N z;=NyYJxG>fR%|Cq1n9u+DRn%$kxudEo#_>yNf34a5Zunm(%vQNvC3}?Xm}krffJ6t zEymf8X;+vo^XX=R%0cKXD2Mx3*W#PYoG#iZrSD7*z*^GtbMR+87UJt71j6&N2z}&Y zOtc-|DR<*PDFS42moOYpfP?(vZ~pp;WaCY3oB1ns)a;VjxC0Vc6{RG?d9V+g9#a9U zt0*MO;{KM3QyoO?pNZtY{!!4rc0%pQBrUZQHDYuD_4&Oxe~yOHMk?`f9#9p3^&!H> zEVqureIFg{Oeec4J;J|6an#}|y^xQ!#?HlJ@DNr45=>B?Z4 z>^NWWPjN(m>!vHuU^U_A?0n%5KHD}9uAx|T zLx>_${_$DDc!cF~N63Ryk=wC>OLVsI`UY`BJ0bWL-sv;jV3p24_*s&JN0n~NOT$$? zwTrGTb66GU3x%Xpq=%mnsST10)meU#WT~qa)XF;qBAhqAMHGv)BOw8-mPMW)(_U1j ziGCW<9Q!$_oQQI9wfGj{MfRqR5>DJ@ML`Z|>Y!41#9pEG+;cPc47MN_}P@&32Nwix3HCv9{iB0~xEhG46q*(aVCij3@>rtZLO*trQGJqYekH@5H!%nw#6BH1z z(mwY%Z6$~@p*J$ep?~GC-YiW_!{?VGKKn4G_588BCYV2PpHW0?m=@NV)>lyY89&|y zee$f)m1uwmn+Ev0>j;h$7k180Ja0w|!o#Aq3uDc3mdoAP5#l?`e=wjw7iX|@wsia$ zus1-Rm`t5E-g z>OH&hSlq7K2EcZM*QugR+HEhmKO)TqZKT)LAqX9AOWGp2&H0fq*rPHjY*yoa6hSY8 zHvkwLlqrRWVZC|t3V47o49da@vxW9&$B0w%FeNC` zXS=XCz}B~Kk<}?Fs#pA+A)z=GEtPffy1u@m$XE|sj`SK6ka)wtk$P@6?yl{I%Ns;- z9hD3yu)ld3_ZIg%*;`xE-ng!3U4JHrgHOL&+K-K>*7Ax8It}zC(OH{dAIr4xxe{Kl zAR3LM)BiquDLuFod6*Z}VIXzS<}m24QvKcFn#Dt{HT9@?QG;U|q>RhLK=a7{jFjd( zk`*bg`g4$DVBCNXCbpzjO2CqX4OqUq@oG{l;C2MRgU2 zubusf$=^o3i0bAr2MVm+-YRx2lG`F%3i@{Ws7S;k?TlAgD-2+E-dGk$rnKZ+Ob&QM z@EtMMBUL3qGwZjE3gE`E{R66H)>%oh04ecz({+{_I2DB}@;hOQj0ycW73$|^MGnp$ z;MEz!wP_wA+!2|TKV7wo!OMT7VHj;fcA7uOPD9R#RI>Xy+#TN6;S(d|_*Gxs{8Jy_ zyE@Ke&Xr=Lqj4lq!P58-hJ70YZDBoNOR1W-um%=*a2yl5YnfQg5`eF~x5E|dgITH1 z;q)(E3^EOEGKXx^>zLztFTU|kf6o-4;?%)@Co~oMP12Kd7_N&m+w=z9kTvb4=_5}5 z_OcrALbI6sol*A4n`}=(IK`s$Y1~gQp#||AydhtF0U%TST>J(_2$sh9)Km+)MwJ+D z+SObkdJJ?NmfmM2{x^EQ@nj)Sjrqy6b1rd(y?ZS&GNwD&UZ4hQ>-78TiD<4__5@+H zF5%!uS5-0ZxN)GopGN7e`)yz<{(G#pt&`c=Cd+ zxGLT;uZg|8)2F-1M6ecn9qscdaVQkKx4~(ioOi=+gD3;e3Z#xh&}lbzP*dezgX=hI z!4xUW0Ce&0mjT$H)YmtpFiv>Bq5WMS5%W>&KUC`gOn^@LgLpFfQKPm zWIaasZZ=#ZZ%hqDpO-osE^q1htN>p|-&Eqy4C*?JQk|ARe4D+*zfl zaSz9=G*`1LHO%n)j~gCg9J)1MN{8s!I6|esr4z@0tXov*gEUtIn1>BC0of;UR7c@C zI=(+ZJy#H>G$^*8PnBD?v2{<9m-;>l~tE8+c(fqM4}aBEIz*fSpETJ&$u-(G0gj40kZ9OWvR?8b+N^|rXRfltC&EjXX50X`21aEE ze9DK=Adi}vR1{D&mQP)*yVb0&C#SC!g#L^`vX?LZ>&=3R)mOwD{2O~Wi+#yCc3kop z1;;gqLoA-r7iIMLlJ6OBWmzy@8DM`IdU%4Sbb+Wq)AA|wIqybs?+Fx0CCJJfLLl1U zKSIxUA_4;(&Aqi~kbZ)@YFG(z&%DnKXzSj3@vz18jk&(ock^@P!FCjLwnpITq8OP$9VPf zV1cKse~LU~)8s>=bxFX9A&gEle;Wb9<5 zrIn^-o7q=+@?%DmU6kd^&!cj2()0x8L46AaxtTzMKs?Vr2Z<-q9tXFr!j-)QIxqHY zx}pkh{@9sMf=Et#6#yTMq4yq`;OxQak<-~XN z78B5jMs}YObZJCeHu1z8)Zseef8guKQz|L4mf+pI9?8)0!hY#=Yx_w_y@qNvCg*hkR97uZ{Yhe(_;?zZOK+S=%)gyf?B@l{pUOme;qZHFs=IUKGp zc+QS7FMDH|-(i&l@k*lo=yueoQMYk}m> z72%G;w<5kJws=94P#dsFfp(jOb%OA)!%|6*lzWQ}!p@fI1mVTjvK20(r^&g#ibgHi zWlY%=gF1F)-9BA0u6BnV|Cdu}waLS}&4JVI@KrADs_>Sy!e6SHfB);<_ZlF?GaY%$ z=6V*BBOfkw(WUQrlVuLYvd3D;Kb;DC01#=8fG5(hSNQT#3V+Bimy zB*#QL2Skrq&R`8jz?<@Ovsdkep`c5#W9QtID=5Z8#&YTeaRz;3`)1$_ZeLZwOqP1? z=iAAzpijO0wcW$^E1@g;MSH`sxc7?-#;C@Iv#&inUqJ~a0vQC$X9|GZ_$B8KQ2x;k zErZkEbx~U{iuY+pGQ@r9>6*TM2m=D1gYaiBltG&pQM_)Q6>#q_mJB&CEabBWim~M3 z(?Xp~!xPLCVRyj?PoO|vPSuK&&VOm@7LGz@I`COGAE{>4+hyB3~PmJ70otV%qH4LrnH7w=Q zpExiM|AK=2igk8Zh^)+Svz*s4+*yCL;( zwc%e%wG%rts}QmvKe<%8WfvDdi>2`a6jWCiTT+{+{e1GIrCoBPV7X27B0X~wpOj@#mH`-j<>AWQW-ea>A`FZ!Vs-T7+H>Bpjx z3;sHL42$3Nzrrg0$n6eBhR>cmn)oPDJ= zT3_qNR&EuZ_X`|f7NYWRSW4|Mp=9K?fC&K*-A*zucNTTxFb2LFCQQTWie1%EEJsb3 z`9qcv`~z0E+o(L(R1<});@*%c^d*;7r~CLJbf_FmOxjw8w2Bl^H`47BzIjuL;Etx)rTY{#{D>ltHUXdsoDsid$%NP$H0rER_Qb-Uv_-)A zmwq|@@Yo>fi+07c2R^lEBm8{2u$;KD@6LciRZes{^-49gW73q?i4&3LkrW#dec(J< zBDH+9d0IdHc#y8FCyPkfqOGKnmBA2)AmDD`?CVqCf46S9NA0HZ`!K8Q^00>t zWDX{OmSOf7kNbCLTz3N0&QM)zI8Y$|Kttp-@1Klp{2)S6CF$yg_N^7;E4o{jW54B@ zH|*ay+^~HWcHa!Fm(R$Uq;z{sG|+G9iR=KOL)m>j~v zW+wH_;xU_4W~1zo9@{N`4$FP~?Aaml^|dWCICRM;g1hc#Y$24zpnv6(isE1dp78MI zjs4bOT9Lw}pjwbUXF1*Je10`^ypfCo&gZ$3#`5FC$#Z?7ePrEvE_=%q=eWSp`HwG# zrdjBXi^82nIyEQkT)r#uA{nuo?c5b|dqR4|EjN`sS*fQ*+$r6Z&@G^mSSfo0qHQ|% z^8@A2rxCMf7C6sQx72Tac*g5|DbQe*KhTYAVFNm zKZ|S-skK;}$gGd6%_O~E6rM}V0clS6gsKl|(C?Ubt{sSXNt9D&71VK_+di#>%mQxH zXUl@XmETXd6s1aVe<)ALf1{!Lb`6pW>35Q0unU#&zyz9``*@pA;=YmsvXnntmiCtZFy% z+~oMUfAoXj<3(?QT{*b|H4bmA+!1>pn0Fp~&0-cvwC!>CUx@%dO}ivzwuds4Z9Ijz zU`?w;xDR|>4qd2{@VqmS36YNGVHq+?`Fv2$dl`&Z=QJsV89Z7K_A4SW>sx-ZPcJU9 z-bqhIInNeu-YVr)75u^c-Sy*O?!Da>SKTAMv2xBuhsQrqG0wTtfh;$V=YPWFCJZ3l zr9$K;X?}`zixd4_x|*_O>Wh8CsHWUk)brZ!;nzO5?#aQBF%WcNX<-z!Hx1v4w~DlS z`}$k(n_qeuq+}Gq8lt5EEQ$}9w4l+v)3+kjG{wxZBU+9VN)$1*9crH~-pbl^GG#NJ z6Q*Hw?F(z7c@~pT3_JEr8~@yhc@k6L3BRrQd`(caCH&9rKiss#=s?%`LNA0rXY5SFc9#K5XLs(R^Pd({*2BJOE>Z|tH82#BnC@RK;vhUH zHI|cNGPN-sVaOU%btBeT9dOig7>r_jDgW;U-_^CIy+cjLMD;q8eON8x{;!JvW%$R^ zUrT|-p9Rv$Zix>r-kgWEGjDz-(X?L`K3nLyx_+k8mmw&qAY_?GTw$=yH>K=DmEW z*_v`x`l{6rqgfCuZ;8d6gBtx(%^tjCR}?zhtSBnxqzzvQ}5SEod+fi0f-ltQC*08 zpM3h<;r@47f6tm$8ROe1)|76i6Mt=JtveT&d@6Bo|5);ZQ}*_Q(bG-`^;nELZiwjTht#4mPncdqwmqfZ}|WFCm=vIA{9s&6df` z@j+!>(W_=wj+)02+%q!U&2JzDPNNl;-5!~?4`h;@1+W8XcYiSCY0OvnY$5}v^h>Dq zst|XDo5HiKVkXU*BVPC6_qz;I(3|YFd@`)`fFwJVaBU8Azv&ASTr z6NBCh9Qq#fYYMqfhTALU0@E>{BjX=yJ3gX$y<6EvrhVEyg-%PQiX?oXxp zK#Z!hIWpZf_lzat9;)gU(!vl%N3s`E1OZkXxBAjH-aI@Up9~YQmqzR}lj6~G;UsUD z>hCbQNr#ytW;Kq)3Hu0X&p=wLpP#B%xwsei(*CZUXc@L;7NhT!GF@5kb=?I18;X*J zLCUeS0<~q&>@>yc^w_O&Uwkd9v)&<7DYn&1YE&?~r9f*#e{e-)?yQvA1-mlih)>mj zO;MKGV-tydLlw}eyhFz#8CDfJ4_exP4v1DpCh`b&A8!?r`ZM zUO92IdVH1K@p&L4h_cpR_8c_hB53k*}H zvZhEzZQ>^LJz&BJ#fCRv@*u|7QPm7+gVkm^L-!l|9a&Zql}JN)cV3mD)3j#AkIz#< zw-mPR4$L;OOtuf&4^c>>6Ap%9>KeNm8t&=!pRb##Ord^b7&xj#uThx5-x7_WGzL0h z#0~aw$**I^VjL2_?0^mu3)IKP8oa#O49sV~52cD$yxP|_S$e(xOGuVWBA#T_ezk2&W$&0+wGMqExBgV zeU!a~#4AmzxCh+lZ5?qmx%36w9-8^1RgvLv@90+)dHO=Cva!gu&;tn*?Y?k79Ti$Y zr)Fd(k!2C{?%OUiMdtlw1xnvHp^WY09yj6DbdtCl;~J8t`tqu%(YHD~A>5tB{O{?!mRtNX(a#$m zlBX!D{*-cEeNg$*${1v7y|0rBV@kq}y($b~+}=J^g^0R`hcIFmsHm}g>07?{SKN+C z-qL2DGlX(cxr&azM1M^y7X9YKa*IZi8o6H;*K0+$?*&)#lB%wj2Oj+i-F9(qCGGuG z1oT|r!7F)^Z?dn=pBn$&RE@PbWjB$kpfq)k3>uayVf8 z*RA?ek}9&zx2A=A^iy?03D0;tOt{RGh!dsJ-_dnc;yHeOc=&DSFoZ1V>VuF8{e>9+ z-#aOS_GYS5>ur`X^c`iO97RGSC{u$&p+mz@vGP|)*Hwse+}NLduV70=Wsv?{fGGClm(Mf$>O|S=&B=y-Ua|MzqyQcS zjv;ByA73oeHYdSuG`$Zm5>8s(2KoA3b{c7D?0@?&-Ac}PukdJW{QKI;V?G7y-$AFQ zCd1G4YL0&4Q!TUX$7soWig{wr1J>BTaT9PAl?C*TDU%|IuQiB7M^J8GXRnyvz||uj z5ikor1o%*zOG&64Jtlp4bEa+bs`cZ`YpJ$6FV3CF^{2SPYlKFoOM)s59y6Aal?P+c z*6BcT+v(zF4r%#^ehJNf(P&>`_m8C_uEcUpRj5Awn6swL;_NxXD@ ztSgqpVun>)rOKZX&i2~iNm@Z)R%M!em6OowC1}#X8H$rdV{mz=$&ttLn15II#r`8+ zTtOmn6!pIss-4;FA8@Syjr%FZai$vl)-`dyVJ_-x&|*qpK;LQ~EOStfzS$0nE#|MH zjP-QS$7DC7FC@tFgEsxtmC*F)Jx-(W^*=JjO)}#XByB0q*$N1MP0BuIxnz3 zIyY7~e0oDg#nJ}&UV-0|Uy^`7ukk`_KXNYKU7MxFH3K|Kr^GZh=_UN>s<_XAn4k24 zH^qGZ!@qxlR;2wULHo-pt!3(a0|PtVTjUtYB7{l2YbR|$1pR?FUGbZs;pSY&-(WRw zSix?4aUx!sxr+afCqX?bNU~8T(e%OABiPcmaay3sKeRaNEZkW~!D_3NdB44@k|SO& z>4j+G87m8FkKR8Vss1Buc}%TU%8+k|Xl40N);n=kS_)3X!@a=ev$jM?o{r+U9~HxM z$;jff|0(Ue!r}VDcNx8x(R(L^=)DX^?*u`J76d``ZuH)h5WPf+P9&m>o~VOF@5Jb% zmr>6C{hxC#&c(SpS97y=ThE@gzx94^VFIYKG2o0g_ho5;FUL=?tCa9gGbbYoD(Rjj z{D!Y8MVyj1H9yiE4&T`RFf{wQuxsom!b8w$#!a~ z==@FH5Q6$FJyurU$O66*RGfRFFwJ)rn@p5G&)a^RQdJ?KHt%+Ads0cgWx`?mN+l81 zBsl?AwDTcREgQZ<(<{#Z~4Ivgh+Sz07FH_0sLQc|yniIP7O zNi_9ospDD|2JGBJ9Ue(IFdbQ0X&8Z*fThbnFZougiIYh{1@U{5ey2`x!?wTTf7efkUiLfIC48di^jU@NiRr3Fde`h*9ubn5PEHplCQbu@!O zrI)fx`GZ>@_wwuT?pim8@0|dSxY|uqrh(mNcN%;%--#;0&vb)MtDvCxiv8dzdvbx- zE=5{$hGRTIjb#)(yu$p4s+xz$Mbi3&!p0MwW})aqU6zcDA#J?d1bLMA@|<^Gob)O+8+ ztxVZ?FOe+y%bEFTiPCB>-!D|GP4lWr?sryWtfqUZ)62J93@x#xnl%;%PWz(Pr@8bJ zmp{Y`&5W@$KX#`mSq~LWZTF?kEl2(P-kmbOk4h(*qc(`>a2YVMnEtYxjZ>6=f!HE` z_Do}+E}shhgu`xyJ9*E6a2Q+}xP7lsW2tOsO6{ce2&Q08;l_McM6zcAw^SH-Y5D0x zNgJ|g0E40zX*kS$Y0uM#cQVExf=%I@L%oC2oD6uk7IWlAJgxf~t8?c;WqV&zWIrEk zL+8EYFa@R4yKZvht$V6DFpcjhLg+zCn30F@jE6ij)8NUOBF~l&hp@{_LQm9vQ70qC zMjJzPJN^eE$+K5e>5$m-W5`GAX}qrked@SWmH?f#Z+|wje{+XNgRWk2-|YFujmh-+ z+w5w58b7zodOR!Ho?l`9y2w*S1*7!_cGCEcKO$2PZ#QJ--6F~r-5w$vH{%N4QB~d^ z2HQG*m@SE(yU^b6fAe%qaKH)Y+{in0HPVws2GrN#We;q=NS9wrvolzhq-U7%&5l~VyJA0Zgo22=D2*ngP7zA7R4dpbfN=)4z;(Ty3ZewQ}!@_lw* z*nEGy+fXAPQ#>X&?r%i`7(1Idm$mhG6&W!JzjFcdD1Xk2ppwZ6l7i4JMTzJBg=d}J zr7at8{hH-}NM-2hyK8)>I~pu$TA7gQM(KDHE2Ki*FP36%Q=kv72-yW%&XLqXZE3{; z@EanPatp}c;zJKsv48ftiw1QYn_*&Np6!E~DbUyPj^Ia(2ZeJ*b8k2oc78yP_|QXP5k=LvtSp7g*T%R#v>EZ%1H3JbXl@D0WL!G=P;o}G2>uP zZcfe*-Lo>aQobRPIOdGIXHCs7f{%W@bIWR^-@6rB*U~p7-4}EL2@4(}*8DWt$)ro* z*ymE(TS>AE(ND8#clQGKz5y$x-a_WE?`M!DVH+4@`E*fGkRiZI2d67yJkxi_1X{oP z0iM-dKlWxM+~4-^@uUQqGa=Cx{)wyg7?Dmgz-33P>S?7hp6w5M#tfB79aycY+0bHF z3zvsIs!0xD1oE#~if1e&B`AHSaST3`@BCmi0e{>V$C^)MXs&C|1%Qq`o}q2uBHB24 zQ=@$@LwPM{s^fW%2!S}&;;A#if@zx~tlF_RT1CnZzAOarkDep09lTf&>ZXEg+R0!Y zyGR+3w=8)oG{*0$h^zO*YGuuazcC^SVk{A_WNA~BI2T<{^A({RvkYfz8*hCS=5^Y2 z|1s-5GjqkgHaN}8H(S7E;g1GP4X)>?&X%q97BSy1NTC%#-=IwR_6bIque(KZ!B@1s zFsN!O%f+U)TnfHhs^!sZ+B^Tv+a++~@s@v_qXXbe!vp!^BAlH@#lEX}iLZDZJyQ}F z!y!g`WdbF1bRdtF^6^jTb2^k*Mxh`;+`j=>B7C1n(|o7e8@hW|3y=6_MKfT=n)F)&y}xJil&Stot_k z`Ck?nL&PfQ_ZlP>rjwN{70~_`NS0@0Qcg1^Dv`!#9N3i5SA02)CZdNFSLXoa(^yGT zo{Q1v0ZhjHWlB<2dm<;p%u8S1zu~SWNZ^(_6L{kt{8aF7DgKvLjJNyk?KfjNe~Qx9 z#QOCdd`sff6tHu;;eJ*5?z>&l!DGI80=H z(d)Ro{F{p~QSLCJLT0Iqe;jAf0pqd_$e~7NVDjfHBr=;DeVK5MfDoOw#k6}bDj4G$^fSg-0Dbo5-?;lhumo7>A{R~2guEmjTJtBZ~$kz`e zm?`-_PxEL>b|yXC8UGGEcK;Q@JTjNUK~3UK$k;I#f_KhyQ>Q%;#5xd%G4J}&!MXg_H@M5JbbFA zrQLR_sg6b`$O>>G8drb75MKS%K}=xR+FY7~JO&j40O+t>V`PzlQmAq0k#ayrz@ry; z<8BCwOS43e_?AQqqtDED=BIEIjUrsO2cYR?o z%H<;y9bAehhFd@)y1F#e-@WBxjCDtwj6Bbh@xz#9d#oy}Fg0l~$Idkp297snWKN51HA(yQ^ol0rVXCIdAG!+TOHRIWqq(b=8vHYvoh)Wbtw)nU zZ^yomeVr|Czu5Hf^Fod?_EoQ@{{2!szL0d6pyy|qr#1Lv$*pPEoNKD<@PytSGuBN& z)1cHD;SjY&Z;9v&;XopgC2arE?x%1FAYN7OXyYaBju)yF=3B>e~D(b_MZRSg?0 z`jOVGa{;ocUs2c73*U;Cha?)8W3vL^FV6WRh7InZbt8)`o1q1Ji0wkw#L>Rjw z4pM4g65LVG^KB8hgm<&>rTYvCJjPMx%cU^HvV_O&@U+tz|9(m2oo8tF3y*i2F}@uC z0hcrVEMK=7<#gM(P!N%>Jn8CQnq_KWCbE-6kArV)NpJuL_|)N>=9hjlSIlgQ+sE?- zL3e^k#?#WDyRSt9FNI+3f5qB248na$cfbmGvdoe=op3ZaNn192uYC0f6Z4w@cnBkt zRW}nyQH8DPOsJJ|%78$u?M8Z{_jLQ5ABeGQQI%q98L=c@l=i%O=aGNBR_rH#wLt-( z9jKt&*J(yF<&7x_k2SOHEUsdV@B$i_gKsv45nPxB>UX50nNEHuTs6RQ~-;XiP&lZpeJD>zqs2MIDHuCTD}RRZ~V_7 z%+LLv|B_yIV*O#Cn&Rq8O(Weks-6WUlV-AYcy8u7y>-aAW#%I>c{23P#b4cY9Po(h zRyM-C_bz%lT<_6wvtu#~*iEo#rW{e6GiSXnz&yh7FaJh4^ZF6ck@rogIh9A!m(r-M z=kt9kPh7!T?H+C+=cB0e_ou$qy-m=4zY^WO)EdD4EM4+3mE$^4*t_(b&%5va7){Su ziqiBLTR*V4DUOAOVN$8UK6ScJsc)HH*v)7hRxsg>D8Ps+OiVndvNcQajq;;hHSpg$ zD9cr8yL2fQSfdpxTh6FHoj}u)yK2EICpv9Sx~3?dI8nc~IwW~*Fu|o2j?;9n_0?o> z-(XpAin4B77`8Zryt63xlT{%)F*+;F^>{T3 zO2)hTr{wRn@`uN_=>Kd zm?J?6!d=v$^1>`$^G!XP2}QV{RRETUsOQ|W^v?+e%)D4TE%~s8kHIAzLHrBp3>v;D zkKW#Vo>lO2yM&)NdBZD!R;u){vy|QLiB(yFNc@keDgC!pOlL#gLm&NxfG^q0lR1(fMDcp^@k2xE zg6>LGQ)75t$Dz-mlm13VnW(v=9+K083w0c~`0Lwg`*J+qCLT-~7IrbKURv?2u{#{h zuNde=Qmq)A1$|9o2au0+S;eFli`gY?zPtIx^5i!}`N|uXL$>dEx``07Wlb5ak3T5R zr3+!wF%l%VBs%N{YfR5y2u=hL#j+E8BtY=*rrx z;IBcW<%UXL=8CU0Zbgd=Gw_!K`f;pufXQi(Oo zg_$YK`H5Yr*8W#{0=42mz?d&qK^$Z!wEb9Pt8P)zbh=ylbvsqtUK!cp(gR-e7=wJ? zD|caZ4u%%=T&xh7D&iWW4KfyZjUTZbj<%Fi^`6WA#IH`REM1~R-&n5anQ6VPu1o5y z9i<0FRmVbc;Z7iRbj=Y~+Ypbvb>rV1)l^W_s!cYQL2w-jARwSximLs59W#+IbwOz74M z&9dl9rK@_G0{vq=i>}b!)%Y&isAT`O-_E`a#~A^B5(&KZSJHZ4tNKPGRkEMuwf?hxN?G0%`1>OM0F=Rzi?t|hxtF^H- zYsS>1UF_RVEd$rvz?~~(unzwr-CeVkrft5a&5h(?wC`Jzv0UloL+WRHsMcEgs&YZ&yq-_nYzV407zff=Oa+!ArWY29ghaTHPLwB?d`yh_wBaJlj%{9#~4F2)VSLD;)a?oZr5 zkVzm#8=aOx*@8{s7obDUQRHAZX^euk121sEO?7+2scPf}_SuE9$621d2# zUut_VgYl@es#t>nT*EFM1LP;|dst>id?|{}Xt>bv7Kt&pw0wAfO~h7$x^OxI4iG~8 zjBp-+$t9qAa@AeZl_X4o@1ezRm&doGlRubKSFpUP&OuYbigK-H(@eo#cq1D=&Aq9g z#2X(|OybLK&Z7glHPm!fuBBIf@;qU3$6b=OZH_2zM?WCA5;qy<@5y>G++{Zx~6E@3r&sqWlh$EMN1^uq;jJm~e14C=SW3&VQo3*LM)`zJhOu9%p6ROwhm6v6N%%hPVVj{o z^`69`HeBJp46Yx<{G4VM{kKOPcl8KEiHC*sOsRD&MAdCWoQzn(cE)L(Q3CMDal{}1 z)a9hY)J}<3L8U=qruZX8({bAl&Db%9vMirL8>|VzAE_`ySO$xDfK`-L@J_2!PQ1R< zAdgXz**fk;q$;W4Rqv|^&55yxE{_1_+7LJ(dEmmUh51wXu_FBpUC$(xl!bWL@A33c zz1`FMJJr<*Pk8Cl51J^&;~VsMm0VVoaF2mIe99v4ri$@AY3VZ!Kxc>>!m#D16LO8q z+WoePPDuwizZNAyvN4v(&lNe8D*-`w2T@O9I=C!7H%ZBBn*F~Ha;jy@(~&}@j+PiGife2yxyXpPJN2x=4h9|B_PNi0}OtRI0k7)r0RjwVWKnP8fUa zf`@yG!4WMRz}@1rotgCorV^s2#S9oC1+t&wWYC}QP#oNT8t}ruH1BOGQJs>3y(WEF z#@UL4L6YKv!PhwdQgW-kG5kPbP>f9J`&Hz~pX%)C1^iQvAYA^+8*LHcqhPqy#87cU zO@5?&gKVF|!56UE(2qwhy2~v;%p-T~xUdH``Vg#vAi{UmHJ*yHEKB)__#c!3rXgYo z3?Xb4vYZd{1l#ie0KuP!iAcj`uMU^DBy-Wta7y_k)l^<02u`E#(c8~m zlkP>w<1BCc3Jf_-G5hq!apQ(+{p6Z{%`ql|cZ9(P{(CRZS>09R`@Zfbqt`2gxe0V2 zp6FM<=i7UHMUV{@MCbVjJHYBl(1p5x7?1~?Wp$~nuVWgv38mOsNu$!PM4CGAoj%TH#1kjA+5wwy46bl+h zVC0DpJN*Z>^s!*BR*cH4rB(V$#w{<}_19A7xh9a%IGn9`;JLA{iKG_h%~)KqUlO{K zApZwg(_=+{gNvLKFG9`(9_2k`_5xP-ZD&`)rp0rHJ6C28?A=bvE`}>AY7qy%I(+{T zJTzaI1zo+h206qsI&h&)!-m9FOZge00qwQ5v;dhwRR(qiXG2jf;MJ&o?G-UAKBqy- zao8^Nz!gBP+vS;5YePL}S8nprHYzFrEHlx_)fK$SyG9~;?|jpQg2^^hAvykVm#jZ6 z!~^VrLR*=xStlg{=2*IVuTc{w|CU$}`Y_zjZz_!JT<_Lg>wrKug12vKfKt6uI&Uig zOS6GWX&oZJesyu0qwZTQyV?SeR=0}B*(&~@H3L5y_d6kQ-YBSn@$YBIi_@CJy$xil zy!N@*X830MwYJ9Qi7ZU@IFSFjxbpfpZ!xht2*&4?n1ZtlfA2Eq_S8|*vanfeKi^ot zg4k82m3=DNG?xY!j(ONLM~?dj`VD|LWS@#bUIPx1=OaNqf1Eb9gvtG_RbcbA{CA!g z&R4~q;aV`cX>W!zc%4t#P9y$|RIqwZ=uk+dby1&`X@yMc+syKv37?mns(y{B66+J) zbKIUpmk;}tQQ_DMH;&;@TA-Mcic*8J@%+7Wc`8NgTcR$zqI8pLjEG!5ynB?hMxQkK z-$KTn@1Qzpac!|-DmkJa#ner4?UwT}t_7%vhaDrLYK8G`%MzK{T9r!O`{wK} z_f&FLa5K@3xCGFEg*ntxsOeqL+F*r zV?1u@@3x56&n2#(z#$b-FG#{<(5F;53^$P9%aeD*de{X$oQBLSS_um*R2}!y@hQHB z33_*qRPeRx&dE-i#t$U3#?zn|~%K^KL^ye%#I_J;>RZE+vFvFZ>;ry`1hRM}~wn z!MWfxk2A6=j;Ayyu)723apW_m8^VQnir&hZ;0lU)<=`^D1+cEWnvTVB$0L7tvF;li*buYsh?2v8T+ zNXfA%Laq&f9)nA_n}!9_NXB@~OqoPWGu(%^#Qc<@I^+ym?sA z!{yx%zV)b342~WKJK{8hp9F=J<`S^IVta8Ub)twr^!%F- zYE2S_r~FOJD|{;X0$&qY)rpRjVnV}8VO3nG*>MwnVTTe%KNN;Jd2q zAR(GQ6=X$H9`PliOGGLGLH}3tqr;kw{rhXRyoN7d59MeiWq)Li(qKxIirL8lkR$}1 z0Jp#6gs4(@|LA{i;T7w5vWBFYkv}7FfBR=;p9P@F!^>A%!>B#7BA3Iz)60xgmrhES zuP2}7q>K8Mek(!8w~#IB0sa!Yus_552!;Q?796T9XUf#Gy6ncpph5p566N&<`!5)} ziZUe?;U6;xpZ~|x_gh$ifPDBHye6Mzr;CyliP?%}`$N{n$cg(k*JOAE-hSk6)xc^5 zL|Qyof>HxJ^F-OvR78^ktn*yG*fU%H%#eNY#naQ60#F_An&jF`0KIZ3IX7>GhI3C2 z^!zTCebZ$FQc7CJ8#de^6h#g}Ij(51v`bpFzmvU)2vjt*p~)dQB{f&)0=Kj8rqaVu z=moVvd!ZD2{%07Y&%mPNvk?FLwhrZd^7(F5XWy+zytn%?n+!*fFSCFzxlDH477-;+ z3o_fQo2Zq9@L$Lhada)+9n!vpce#N>EFyUCg9Ogm9*Omz8V{jZ3Z08x$0AIFUDR}|AtHS^?w14Dx2Qd`7(yilm8 z^gLzpVq#ktu%&HZL)9;ICI)vz%g+N=xMs|>eN?EsL8`t`WV|{j(t=`;hxm3b3H=S^ zb@Nr08r#7iJ~n}YO100Ri;(vv6Ux+@9YM+B-3gelix^QLQ4_ytHAsqIfeak8+dfvB z)~px$EZ}L>ACjZ^t*6+@mFG=(ADoE4^UV(v8xL1hmh#hu%yrTL_F)b?1BnoVukCRp z{U155%-(SQ{TL$JNlnj=*sp($k>9IG7Pxw(qC%>gkqzSr=YBQ?y2H0zegKV4i1&^> ze{L8=NhkX42jD^Wmei{@Q>P1+*&)VrY?!_^LH~0yK@~KE6T;FOgQuS15B|LJbOOrqBs_I|;5_tyZtJlH6gM@JJ-*U5Qob+<95Gm4Ql4oIlSS5?g-~)F|C6C= zy>8olqoA5U@}&)(e%^)*U+rp+8Yq>-@K*@tP?k%7YOuFa$} zs9?!osk!`Emmm+#*meV2cgM-F_hfw-2oY2S3Kl=KCWubU(FJy6^`P4`Zy{@K9SgiQ zF)Xv)>{4hfPyA}YUP>l=h!6?ny&VMsm-vZkk9)1#Ayzqh#m(bwv&HpbxFj_ELdeXw z{|!T)lr1I?j;A|tg`ei<^Rm%o z>7Vk;>0hix@;4@bZiGS&454~2L0vjgBtt*g&p!5o83=`Fy{SVVSFUTIwgw|S!%5KD zS{@fW3u}Vvvv3tTt&~q<^7c|CcT4GgDP(lSxJqH}* z(Sw=H8HfK|SlSQz>rW0ja&Tz6;<*dq+YrTQuHJwADXS5O)V)vK;W+R^yL@(Dm+2Aq z@x-dwV}L!q)qd(sQCm_t7Ec}fcWH zW2E`Fq1@ZqRpU-n*rP4;gzyR<-AP_lXGx}zHcJHHmEU&_wHHH*%wPqf=a@J~CDOqV z0`24hn-@Izk$KwA<3I8xk1&DeOWdAgOUhZu!PU@J)s8sc|= zf+KuI<5fGjz`Z8|m*N|La4B*n(q0FfZ1kluPXr7HE~%5;TmES`dfZ6%UxrmR2%wwz zQ^9rM0`^?ws6UnK4fN3+Tt)dKnD3(=$pmq3J636bQU$T|XhT4~Ee!{lcMO)>(5!Zq+)PF94;304RAV{lY}R64lL`~8{UFH#9V#s-e2waGc`jp5A5E%3Nd<2fN?sJ z8Y^RFf7*!H{uRQI=qn)ZVvB@M1_?9&z`QP0MUAyY3 z?)R4%WVQ(ZO2^q>s5l0* zbP83cI|sCZjt ziTu%?MsBMhb2uCYXM82YL~kea+yrA5l(qQ-1BRzI2SnYl%9F*Tp#T-qPGiO^_U<=o z0BoTuCn?v;4^BnefXHn(IObE)#<2mW3lQ&v(Gl}>_V}mWy=^a<6%aV1o5z8&7rjS{ zj^@FKNj`#R(Pq*4I$jB$;7S1d2qgyAdGr8h#^j8)m~@vKEH|})lA}}Bt7(iZeaD~>)E``g-DAudNhs0cXH#+#+ z(~Aj6JR0KW=z~lC5rN$|8XB_SU-LWNeHW~o&Gr)*#-^xi!|`XBh|&e8EDd6Eki=y& z)5b?_<@P*vRWq#g-+AW^|8Mt0-G9vaj~Q+IitS7WxBXJ&sJkw*0p(7@#ncK!!7!1j zsjC)E{{7MuZtqu_o=%4$g-hbl?7~(r1ejtT$L)xG^wpL;#Q~?ua-^g^M?;};7dt@r zotb4HSoQCtJ?@BmBZ1JKVMWPpcwHp$l9noHLr$|Ll?*`#5y3gc?2nFV{`KWR!p?)# ziZbJ2PEDl8V8g)5us9bBmJ)-|C+uJ>N&I-t0OyHple>7c$CqjTta<*dIaD#?3*QLn z51nZ=>_CRr{bU*Mc;KO;RZBUO6RD^^i3k7A_DSxX%h^{oD?w+8Dq+e+t`0_2LhB+O z*)R&8cTt}yd|H_Cwbk&hah-2ZCr)%<QIdmwFF4QrH z)7YaS__ZB#j%-`Qfz{&1Hc(mS;f(8(MwoBiHa6M0l^+ZJ#k><0;BK6S7q>njKch;5 z=gT>*kB7{HEeoyI20QX2g^?^s4!ZY$M3Ui{{YYDoZ9k{t6Xf?{-fdFRC+}P*hu(aS z4ivpPHn0~vWy06EwC=U(@5AgzWMQ(_k*RAFL)tSfcNK2jqEe030rFdcQVD$Hkqb=x z-;^eO)?nf4gYm;>`Y~X77`b+t;67CuBpDK)JjpRUx{`$r8%)G*1`Je$>z#&(G_%i> z%z=%)ll#WMxq?-0lCHw3!z{UF}xJzvH&%qrk52g$|T4Izgq9NMJ26KYf2^ zEa%IENW7SIV08t;T~doEFzjF&fZ54%tB!K~&563VX5<6CFcgP8QcV3R6>GXb^Wjqy zkPe67Ytf&AO+b1andCig!iXU7q!f4>V)~KNTionHx0<5r)eM|xed^pzL1wAG6xDFz z4do)@7YR|D;GO;2d$~_|F=V1Z=Ae^?(u;)jA4yP<2yy%`%pLKSfEs+xbF~ttkN6Z! zd_HcR!)H%6mJ$%T%5g08)U$mf?qtW~=x-E3@FY(%7kG;82QQ05*}rkV^z<}6|CXbA zaryp>GE9$Z@PDENGDwIjU1}vNHC104(#%7}`wG^Lb+l(97e?EGw5>N`A%j0IV*#Md z1!%zqXe6*@zSCy-|I1wbKaq{4*4JSH)Ncx?mkPRpAW2Sdl^5RjHr}tL?L1!tKWM^& z!b1FlBK(4)&jm%Kg+-)A1o;F7r3D2K#){AWuLIt?+rM!L_^w6Ez;5@9RmmsNO#A8q<}O^gEUBY%mC6Q zeaGK@?uYx~|Kb0fea?Q)UT3ZS?!C{m*1Ok^(t@fG;nUy)001IYh@uX z*qduJbcOX!PD2g=sQFBAYmSY62U$XNGyni!HUJp01tiuU>E&8I28b( za>;DgmO=|~EYwsK0T2JK+_sW0002#{s-m2p_xygAPpXM^(t`|=cUpsttd`VMQ6*F! zGD}Lr>{pQGuJ6GVV>YQx!1|wJ!%}Uw2=RAboBXz~{?1?T1(G$V|UOzc)W1nH!HMpmHG$-q2{ff#h_=hVi@Vcq_UGY!i{8)k@UajlQ8 zGik&4J}uQ=^+>p}RKJ4Y)G*C@&(Ht<*x!@Gmj8v~iW+4VJ^&<-IBu{QLt^{rnB$?o zkPYSdS~#!WUe*4#8OG9~6nwfgF>V{EbV-_8T+PMb5YbEmRFh?(jABfL9FC0IzqSyv z2hMTW{2EhzE(SIU*TlRjxaRYi9q!<2?j)sz?X6^v4xNggvcUti28y~qGXJgUBt7$m zDbwbJBYsgCwh&-HkdlZ53yaS=j6(CFQ2iH=uStzLmf!Hd0X$zv>4(ejYLi1kS!c30 zhIOW2ffh2TMGGkyl+HTRXKrRp{OVerfMp8BnugA|HrmRHn%b$v;x<>I+eAv0`s)uI zl)5qMAdk)uJYe6Cx-QH=#eNyH47PQ<%9&@2tzhYdS_w86kw>m*NAeYX687VzeO%VB zDJi*B>8rlG2L*sju(&Xm$b-3#Eb=})W`o-i6{UB%1qq?<+`Fh5LYqzL zrOV%B`%kyZg27X-S~;#;^Qi#FsZj>l0*IMn=7(Q<$RT?+xH)qQ@r$Qjfxwnj4FlFH z#I8h^>3x;Gh)kJk@VELMo60aGMhQmcoViDV%V%08_U)F82MgeHp}913uDFpJ7sR#^ z=5?0*ct?J6tLpG0mXt~D57ef>YwNoD^tc^o(ospKoD@S1P?S&X#IpEE{l!H77F_W*JR=WPPWO*>h&Tg6n2ZXIM3kd+cgO^q2^9#Rp4MMhS6d z!EO34PljgOjRLSx-r>j0f*8|ZgZ6_RgNN-LOqfYWG8T63zNafxA}Aov5Q<+I62&-d zEx1O6wGhReaie4eIUkWi;Crt|?(#A3Sf)p8Do1#vbMedUetrP*a{oVImDZgsmtn_~ zVmzxL^cu9;{`E6Ma+(@u>#zIKtsOvoY}XY7RqGEhN3GobU>EKd#9HH;n3DQyt$aGi zHlCh?ZftO(uVIcwZ5Hu9dNaC+q)z(WM)B-G`xktC({{HxLp$B#Fk+Q;1NgI`aeY_& zDsjZutIDZR^p9xRQf;aisNmtRa30O9q$0xC-U!M`DP2z3GJ)#SDB_lP_l11JD2SM& zSyAk##J~T_2KQp$*qLyE4?SJ}NVBJ%70G1?j`LEHj?R~PZS0{q7%K=H!MULAHGW>! zAC;B0?7;?a>>*b+JIlJ@<)yG}@FMe5gJ7$PADUPr z^bu-e-A>;N#V>@w4eS)zN?Vt+9H<%mo~bP&cDMuh?+ceV;e0JxiO$mt#o5t3wojLE zVgoo(75MXUh+Wkz)3S0JWzhc4sxdy5{!v08=H1M5-Mez`#Fz3MMIRNnT+JHsO$Aw! zf4O-3m))*L^u_E>Q#5;i>Zj2Dlf5v_TK?-B`LO1q_@nmd{;M;}WnM9R*6p#T)7zU} z1JJ(Xj~|?iiq`GrzB)>pfBvX1Id7ZvYDu)*7jz#a>1~f6;b(ex$mi`0ygVN*Ta>-{ zlP{kKT-SmR(T^?+cWVdWhi{jZsGk#)tlh{qtW5zE*iR+vp9Cf557H7^(B3-;oEyH(F^1Tr7?gYQgE6SN*h;KMeU`c6HC zJ`gfq9ElzdRndFtGgic1M~_p%FP?Tyu1Z|Q_0Qrdw{*1 z@n-ql`bpnBwN1J>B1hiPE-spmDA8VFZls;+F2C3nzEu?=BR|)oetFxB8A%m$&tnr% zFZZrQj4H`;kd;iXBXJ;1$d0+&F6Zf=a^gVl7&VIJL|8Ig*a7j|R>9 zhq_OTSxliE+K(qD@-=pkh6H;u_AIO;q6(6`c&dU1qh#0h)t|8SnExF@5Z5RRMA(F=%=RY)oREiq0n}=j@K|G83)#d)j-v zo#k~rBH)IQq2z}1>m0gu<_wX1$V?o-!qroPiC9KJPnM2U6L>#9KS?QO@T%H#N=&kW zo~wbEPCwuxv=G+|4#TBkhe|R`SIyOXnH+<0!7@FmIk+_ct7PbuA;yLbtqiZQpB)S;z<>TKku+|&nNZUu{Mu@Axw zMPt$hgjfB4#R&uXxtR>W^mGUp#r$l{H%^>BC8w=0Al@bh-G5hvPx;X^qNSvXolx<1`+NUmE@t?Jd!q8Ji2331orQLC zh7UEMZQ7P)yo&vaja6Nd^dK*ZQb)#-H}{+NiN+FxUP;?GhuK_k)UgNIP?I$U1daaX z&n-5kD;w6qM(X;Wda~P zDA2pdySSK_3`J$cCmaJGnL8NR=gYKg1AeRjKz%j=&&ouwhz%$~sRM*%0>2bR`H}<+ zsd~m7@Tt@FM)XtN`314WU^MUgmax-U&`%=Bu_QQuWSG!ym|9Fa6ZS*&J5)jz-1Yxj z@RnGTkwZSy2BcYyB3kl|5)B=8V=;W< z9Oq-@Scls9O2|){L)?5-BEbrj5R>RQ^@gKwCTXKXYNA`c%HHvt&{UnJwd1~mXA#^a zCeqJ;1mHlaO>8F}9TGJp=i>{hn3i3vHXT5%=`dHT5Ytwt+|M(F8%s~{%T!3W(Otho zlOme}Y%<&*H7s7tiM=Rn(cxY#mqeCR!_VTk>%Eai%ynd~X)S}VikEHSCWV)6{XaJo zJfwF*6V3x3#x92kzjcRj#lM|Dqlu!fM{VJWHZ0{Ut)1PQs&@>2NZ?-k?tf<6c>48W zay)Ou@^ej6`C24%{8!evzEXuR1%g2HM9zQ}8B^BW8WfF6)^tcawd8Rv2+}sS#A9#g z5%T%&Q=DlEr{g}Ng@??Ul)#cMso3Z#+T%f5Udoc1Qf#y`Yu~!&-VoAVO@;?`x zq<+73F56r(ti-g!QB#W%6%oUg1n;UVyQ?U@*v!q~a*#WGP#!bJ915J#G{hwB=NuDx zG+J;Xg^CGj&4u0~>+SFQoZDad0_GP&a?0UTY%Mctd5v2)v1>Q@EEzoea@>!nSM$Fy zctgTkn729%E6?tYb~JY;ce1nSGrNK`F>!$z2CKEK;keibiK)iOk<)uzMXvD`6KLZk z|8*k%O2%GLaQBs90WvU7GT>vR6F}2AJ>2t}#MVVw`T%7@)D1J#>Ep-0lkU*)! zBNwR3+lpW?h#C}$S9C*1iyqZYQt1E}Aaet(X1HlT$`)5sF7Wz@qnPYQ1rl-Ncfp6GIn9B>IV5yj1Ds;$v@KtDf zxiapG1mxuX>U)=xM*V$2d%xeSh+*fFNu%K%l?C!`@CD7`A?R1|RX8-T7Z*M0cn3;z zDa!JjeEFG@ji{{^AqF8ezm5LUpq=vuGfv;oy{mUyrzf{E;X1}wP!~LA6_HQ;FF?N% zyrkn(sUz1`o=@&HigbohOBWca^95_WYG?SNqH$}ZhYu)-U6;j75oTI zH=v4f*U0b_dh#4cg3t12I5ZiLwhY2TgNt!?y~>u|K4CQJZw`*+UtUoCS(g0rgqVzm zflBp+U^|`3TK92CL(rh{=iV%@yJHY7bHR@}<{8RX)4of`;9r?#3p#;^F9GgjhRZNZt@cWh ztjbKHxfjm$-mAKASHl$23*~$JA*f1(I_8V%ck0tnz#`vZC`^iu^u7uyawn3LG9eov zWf|d=0P%NLjB%~s!|I3YFzDXBR< zi!`j}*k}iZ3dViOVTaSTc$i-NhP=#7*Pnl=n@7$5k24s;?jy~M+3XxSkC zj|(lL`a%K(%19J*IkerO?JZZM)9I}5>VB+so8bRR4I2;2*5(b%V z2ruQ`LK%k5@Wi%Ac^C0&hQDl0C(+qeTB^7)cQK{@1Ks5xmKxou*g&&7-&;lJ^-Kw} zR<|xaw(rj_nx9(iYdA!7y)M5~(zjJgH0zC#<6cdY{0%G`+bd0$cMSCpswpYG z^*uUnzUS3>NcJtF@4#=~PEwDoOiyasMZ!R3b?+1s&Q{*#L= zF-^N#{Fi7hv)efuY>GnyT_Ph5l#EJ{>r!c#W*1Af|t*ROlyQsSQ+$qe84y>~WVA&YSfKYM6x!a6>WO9A`j@--v;tci$8iYWfF zR7>-dxr_AccHW5}pHC;i*?P`)c4KL&=y?&7H|fz}8f(+Iajf>IJj9wslA+SLYp+ zdKsS6F)-o#$BV7N7#vnoI@pk#!PyLjr+nBv*cw_|Kr_uTtclfcC0!eOe@PLNXQ!IX zN|o-?m&U5uWFnbo)0NVUsTv(6F*^jDBaM=hZM5njqJDIWrMX0+RoT235Ln9sYgH&e zhecxe4gI$b@*=>LQQM#j&%ccI3V@1IH13_~-ODIj!Mh7Mukfa0RoqmueLdx{mJKp~?KfYOsTG~ZmongCb{ z{=k6INrthtCk$Ww(et~DdmS7q_S?W>OHfN7c*@VD4D1Kf@K$s+*q0!Yc7tJDRi>%C z7vdFGYGX)Pp*X)3xJfKk8u(^G_qKrw#PM{~RT;9oV2O7?eu3cPTYf_JnNKr`wv1%r zl&|AIr^@c8WoHWvJk9!4o>fAYt~FA)p#eINH7;^YnhWKBo>#0arjx(y0>m>V^PAhU zpV-$WCx>l;C@s=txw{3? zx)Tgor~l8+Gd!!0u0T??3G{$^eMb}AyRa;nlFfm0)VKA?g|uw&Xfr>w%%ku1iad80 z)Y$?nK}fzD-ZBaLN4Fusuy_@f4kSc{OeI57o{} zsIW1y1sad_CglH)jN91eKS_#q0XMFIIw;~_kG*jkg1Dq;Xz=UxvJ!4pF?GVI~3P}L+u{K5WO7LLn!?z1d$0m4|)PaqJ z9F0vN*eJm%RrWtq|3R`-op6+a{hKbPWW2&-*cV&HZdY+~*m%ca;&ah1@RRxUa3!mB?MBZu6nZT5uGybL!#I<`A>1b^Ki zo#RdGQMyNGG%o=JK1?+jdKZ=Vx6kJJ@M)B}MZGmN8y`MFug>^7(;QWhULIu7huxB1YBgI~=t~3zEP6S)dYyOB%KgS}=dB-D>h%~oIlWMe zlwO+XIv$JmWA|}u=&8>u>54r4e>+6uU=~IODRgkk;eR|KZXX(rI>!@h_M?jkgp_!k zuI=iBP19+*Zo_(lIo)W-U()!>Knll2SUO}rdZ~m)x;hrUPdd;PrKLLn5d;mBIe|S3 zjs|_HmlWW;JG2*6_cL~>#`n^Lz(<4Kdt5eP=gXKg z%iL9uHw`CC%Eg>asv}GNDQ&Sm%et3(U0nX9Q-JT?;|oIX8j~ETxoI0`z8C4MNi6SaHN(yyNm&f@#EtP}ywJA#iLM4kb(Kyb3sG zb@hlbi7_wOnxw_6fR9UE8@U#xJ@YS*(1dBWG(*8yE+TpY{9qw5Fuwp7KR=kCe@cGQ`2SOIbhdhL@~ literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile_wiz.png b/frontend/src/resources/profile/wiz.png similarity index 100% rename from frontend/src/resources/profile_wiz.png rename to frontend/src/resources/profile/wiz.png From 8ca6f0665098fc7847435dd5b6845251dfe5637e Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 4 Mar 2021 15:47:59 +0900 Subject: [PATCH 10/46] Fix i18n tags on new About page titles --- frontend/src/app/components/about/about.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 2f36452cc..6487b553b 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -176,7 +176,7 @@


-

Community Integrations

+

Community Integrations

+ +
+ + Satpile +
+
+ + +
+ + BLW +
+
+


Community Alliances

diff --git a/frontend/src/resources/profile/blw.png b/frontend/src/resources/profile/blw.png new file mode 100644 index 0000000000000000000000000000000000000000..015d867774960aa3acd60222b0c8c7c990051bb2 GIT binary patch literal 9222 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 K8?_qv-2N~12pjJJ literal 0 HcmV?d00001 diff --git a/frontend/src/resources/profile/satpile.jpg b/frontend/src/resources/profile/satpile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bdd2dc2a1310679c023fc254e1e971dc4ef8425 GIT binary patch literal 17800 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

73&ygY2Fn7No> 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 literal 0 HcmV?d00001 From 72ded16543bc210a391749239b0fb0d9e710d77e Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 4 Mar 2021 16:27:36 +0900 Subject: [PATCH 12/46] Tweak padding/margins on About page logos --- frontend/src/app/components/about/about.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 358c8d3f8..655ed7c2b 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -253,11 +253,11 @@

Community Alliances

- + - +


From 2c5cf94982445ee9a4c7729ea57e9898412a0f66 Mon Sep 17 00:00:00 2001 From: Jonathan Underwood Date: Thu, 4 Mar 2021 19:07:20 +0900 Subject: [PATCH 13/46] Graph hides all fee rates below clicked value --- .../statistics/chartist.component.ts | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/components/statistics/chartist.component.ts b/frontend/src/app/components/statistics/chartist.component.ts index b0e9aff3a..73ba57a17 100644 --- a/frontend/src/app/components/statistics/chartist.component.ts +++ b/frontend/src/app/components/statistics/chartist.component.ts @@ -449,30 +449,27 @@ Chartist.plugins.legend = function (options: any) { const legendIndex = parseInt(li.getAttribute('data-legend')); const legend = legends[legendIndex]; - if (!legend.active) { - legend.active = true; - li.classList.remove('inactive'); + const activateLegend = (_legendIndex: number): void => { + legends[_legendIndex].active = true; + legendElement.childNodes[_legendIndex].classList.remove('inactive'); - var indexOfInactiveLegend = cacheInactiveLegends.indexOf(legendIndex, 0) + const indexOfInactiveLegend = cacheInactiveLegends.indexOf(_legendIndex, 0); if (indexOfInactiveLegend > -1) { cacheInactiveLegends.splice(indexOfInactiveLegend, 1); } + } - } else { - legend.active = false; - li.classList.add('inactive'); - cacheInactiveLegends.push(legendIndex); + const deactivateLegend = (_legendIndex: number): void => { + legends[_legendIndex].active = false; + legendElement.childNodes[_legendIndex].classList.add('inactive'); + cacheInactiveLegends.push(_legendIndex); + } - const activeCount = legends.filter(function(legend: any) { return legend.active; }).length; - if (!options.removeAll && activeCount == 0) { - // If we can't disable all series at the same time, let's - // reenable all of them: - for (let i = 0; i < legends.length; i++) { - legends[i].active = true; - legendElement.childNodes[i].classList.remove('inactive'); - } - - cacheInactiveLegends = []; + for (let i = legends.length - 1; i >= 0; i--) { + if (i >= legendIndex) { + if (!legend.active) activateLegend(i); + } else { + if (legend.active) deactivateLegend(i); } } From b2769d2af3fa3463c083a2dc61404d99eaca347f Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 5 Mar 2021 02:46:23 +0700 Subject: [PATCH 14/46] Adding Sparrow wallet to about page. --- .../app/components/about/about.component.html | 7 +++++++ frontend/src/resources/profile/sparrow.png | Bin 0 -> 30532 bytes 2 files changed, 7 insertions(+) create mode 100644 frontend/src/resources/profile/sparrow.png diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 655ed7c2b..3aebf7858 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -248,6 +248,13 @@ + +
+ + Sparrow +
+
+


Community Alliances

diff --git a/frontend/src/resources/profile/sparrow.png b/frontend/src/resources/profile/sparrow.png new file mode 100644 index 0000000000000000000000000000000000000000..cff0fd30258314bdab8e7a0c1df2326bcc8c2116 GIT binary patch literal 30532 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⪙!~Zc+=&t^OvzD zv*vjx!8SP&K*I%2QoZN_c=z2u_!~mV_cDbdGm*|iH)h{&RaFrRN2i)Y*7#j$teM?Z zJfF{_uWxood&02b#Oc0$-WlGnrcvbOlJ?6a6VP>i?5QW8xDQL4GR}?-kMsi2oF2Dq z0w{|T*|cY{>-f`}rXC4Y*I#-1`KKR9M8jVL;3W)uGiIkyXEs>B=orx#EdaM~-%jqj z>+a9$hVh@#OrDe*wW?_v#=}tsz9u{ar^Xr3C;xaS0KLFG>K`*VmEvzyFReDw_VKa54v3naf_$bseE_6uPeHVZodL z00n?aL_t);BJyZ&48nfSj9tSp(9_cgMVW0cvVsK+Hx0O%%dcFdP|d-Eg?tYAT&8c| z6OTV)YObZ&TRMR3vrq2(RyviwbJLD(n@!C|P3IwI=*A!b(d`SUiku%Z4E+Qs^rT)Rz}BBAE;1}0Z(Y8Z${LZ_bI_vAj)`&??ei<+M5 zC`w$vDK)wOa={Q#he78^Z&;PG#x6x`OAHQ>uE|MXA)hw=IYcSh2= zJ2c&>2)@Wf44S5)wLSowrThqlWHN=};nBJF2rq)+XYUj6mX=>lr^pqi&zsApF*-c_ zGZR4R^8|%%f^afpVwA!VxhlNYnbn^Aw(uP$19tD)(ed1kz~X(s!r}!0BV~iM zC75RI6im~A+mvWUPCVz_ljE;nT~mPk=_*vATcx6YH%ufTk#=YR{}q78PWFmO3Vob> zUo6A664;i_bbLk#fqcFYoApeM1Xyxqb^7gnU62x})t4)rTBY*%`LmIiO8fndFqa>r zAH3fC=Q<5j2oamn%e@x1{Q`W&ViBd%d~91Z+_r4(m$g7CMZ;On*L>;g z%?I~xk0GeZ;%S7|ChI*LhK)XZ!amP^9Pi(;6RDIn;0wRfblp!7e6cr^>|<>8cc@%0 zqfnTRZ6nM;qN^Kmn*;am?g94=geiei%GS(u;mW0p7j9yy6dKnEtxeYZwoC&+KZ2C{ zeS}gQ5>!ed4-XEehlYmEQ^vYFec5pwkWW+0P@QCkQ$-Q4IlwvBB&Cu6Tv2Jrq*4Vv**qY4Gav#8YrA|#%#{{qVM|)`TUgKXf$G9FhUs;T|GaO4St%LQu120{OIBR zJC_TSle2&2Gr%rYgSA!>yAu5l!b|$qB5d-7O4Y zyY^12X}K3b7C~8xu&ofDEDE9@`5e`bS~P%vb&MJ^En2i_ e(V|7mR+S&J4)>(VDOiXA0000 Date: Fri, 5 Mar 2021 07:43:42 +0900 Subject: [PATCH 15/46] Show fee tiles on mobile --- .../app/components/mempool-graph/mempool-graph.component.ts | 5 ++--- frontend/src/styles.scss | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index 285c46df4..d5acbff6c 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -32,7 +32,6 @@ export class MempoolGraphComponent implements OnInit, OnChanges { ) { } ngOnInit(): void { - const showLegend = !this.isMobile && this.showLegend; let labelHops = !this.showLegend ? 48 : 24; if (this.small) { labelHops = labelHops / 2; @@ -73,12 +72,12 @@ export class MempoolGraphComponent implements OnInit, OnChanges { }, axisY: { labelInterpolationFnc: (value: number): any => this.vbytesPipe.transform(value, 2), - offset: showLegend ? 160 : 60, + offset: this.showLegend ? 160 : 60, }, plugins: this.inverted ? [Chartist.plugins.ctTargetLine({ value: 1000000 })] : [] }; - if (showLegend) { + if (this.showLegend) { this.mempoolVsizeFeesOptions.plugins.push( Chartist.plugins.legend({ legendNames: [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 9e90ca5b4..aad6a9f35 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -81,9 +81,6 @@ body { .box { padding: 0.75rem; } - .ct-legend { - display: none; - } } .navbar-nav.liquid > .active { From c3927c9f0a2656a79fadc20f2b0ff82f5b2364d4 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 5 Mar 2021 13:32:52 +0900 Subject: [PATCH 16/46] Fix community integration links on About page to point to GitHub repos --- .../app/components/about/about.component.html | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 3aebf7858..bb12c4d70 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -178,77 +178,77 @@

Community Integrations

-
+
Bisq
- +
Umbrel
- +
RaspiBlitz
- +
MyNode
- +
RoninDojo
- +
Phoenix
- +
Electrum
- +
Blixt
- +
Satpile
- +
BLW
- +
Sparrow From f157a509524f4e66c9559ae5041e9368a5a6e990 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 5 Mar 2021 15:19:56 +0900 Subject: [PATCH 17/46] Update hostname in index.html for stats.mempool.space --- frontend/src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/index.html b/frontend/src/index.html index b97790f26..7f344bc08 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -40,7 +40,7 @@ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { - var u="//stats.wiz.biz/"; + var u="//stats.mempool.space/"; _paq.push(['setTrackerUrl', u+'m.php']); _paq.push(['setSiteId', '5']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; From 92e2df462747d23f174315f275fb0d5647128b2a Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 5 Mar 2021 16:30:08 +0900 Subject: [PATCH 18/46] Move the Bisq logo on About page from Integrations to Alliances (#375) --- .../app/components/about/about.component.html | 19 ++++++++----------- frontend/src/resources/profile/bisq.svg | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 frontend/src/resources/profile/bisq.svg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index bb12c4d70..59a7198d1 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -178,13 +178,6 @@

Community Integrations

-
-
- - Bisq -
-
-
@@ -259,12 +252,16 @@

Community Alliances

-
- + + - - + + + + + +


diff --git a/frontend/src/resources/profile/bisq.svg b/frontend/src/resources/profile/bisq.svg new file mode 100644 index 000000000..a0ea96c6e --- /dev/null +++ b/frontend/src/resources/profile/bisq.svg @@ -0,0 +1,18 @@ + + + + bisq_logo_green + Created with Sketch. + + + + + + + + + + + + + From 904cf62c78ae287cc7cc5be9eb475cc3cb651933 Mon Sep 17 00:00:00 2001 From: John Bolton Date: Thu, 4 Mar 2021 23:28:10 -0800 Subject: [PATCH 19/46] Fixes mempool-graph legend off-by-one Resolves issue #283. --- .../mempool-graph/mempool-graph.component.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index d5acbff6c..4bdcd01cb 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -78,22 +78,22 @@ export class MempoolGraphComponent implements OnInit, OnChanges { }; if (this.showLegend) { - this.mempoolVsizeFeesOptions.plugins.push( - Chartist.plugins.legend({ - legendNames: [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, + const legendNames: string[] = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, 250, 300, 350, 400].map((sat, i, arr) => { if (sat === 400) { - return '350+'; + return '350+'; } if (i === 0) { - if (this.stateService.network === 'liquid') { - return '0 - 1'; - } - return '1 sat/vB'; + return '0 - 1'; } return arr[i - 1] + ' - ' + sat; - }) - }) + }); + // Only Liquid has lower than 1 sat/vb transactions + if (this.stateService.network !== 'liquid') { + legendNames.shift(); + } + this.mempoolVsizeFeesOptions.plugins.push( + Chartist.plugins.legend({ legendNames: legendNames }) ); } } From 962480171600f6e4a25546cf51a8687de76acf3a Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 5 Mar 2021 16:33:05 +0900 Subject: [PATCH 20/46] Add a bit more margin to alliances on About page --- frontend/src/app/components/about/about.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 59a7198d1..909b8c8cd 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -257,7 +257,7 @@ - + From 14db7e4c8b2e19441608b0c5e7443770d5df03f2 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 5 Mar 2021 21:07:31 +0900 Subject: [PATCH 21/46] Update ToS for copyright, mempool.space operator, external link policy (#377) Update ToS for copyright, mempool.space operator, external link policy --- .../terms-of-service.component.html | 51 +++++++++++++++--- .../terms-of-service.component.ts | 7 ++- .../resources/mempool-space-logo-bigger.png | Bin 0 -> 15430 bytes 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 frontend/src/resources/mempool-space-logo-bigger.png diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.html b/frontend/src/app/components/terms-of-service/terms-of-service.component.html index 20fcf311d..99de1a981 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.html +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.html @@ -1,16 +1,18 @@

- +

Terms of Service

-
Updated: October 12, 2020
+
Updated: March 05, 2021


+

The official mempool.space website and its API service are operated by Mempool Space K.K.

+
By using this website or accessing its API, you agree to these Terms of Service:

@@ -29,16 +31,51 @@

PRIVACY POLICY

-

The operators of this website may collect your IP address as part of basic webserver logs and a self-hosted statistics application, but this data will never be sold or shared with third parties. Please use Tor when accessing this website to protect your privacy.

+

Out of respect for our users, this website does not utilize any third-party trackers, and the operators of this website do not share any user data with third-parties. However, your IP address may incidentally be collected as part of basic webserver logs for systems administration purposes, and as part of an anonymized self-hosted statistics application for analytics. Therefore we recommend using Tor browser to conceal your IP address when accessing this website, or operating your own self-hosted instance of this website.

-

SPONSOR POLICY

+
-

If you donate at least 0.01 BTC to mempool.space and submit your Twitter username at the time of donation, we will generally feature your Twitter profile photo on our About page with a link to your Twitter account. However, we reserve the right to remove sponsors listed on our website that in our sole discretion are inappropriate. All donations made are non-refundable.

+

BITCOIN ONLY

-
+

Out of respect for our users, this website does not support altcoins, and is generally Bitcoin Only. However, in order to support various Bitcoin Layer 2 Networks, various fiat stablecoin tokens on Liquid, and the BSQ governance token for the Bisq DAO are not considered altcoins as they do not distract users from Bitcoin, and is part of our mission to support the full Bitcoin ecosystem. -

+
+ +

EXTERNAL LINKS

+ +

Out of respect for our users, this website does not display advertising, and generally does not link to external sources. However, to acknowledge members of the Bitcoin open-source community and direct supporters of The Mempool Open Source Project, external links will be made in the following cases:

+
    +
  • If you are an individual contributor to The Mempool Open Source Project, and have made regular contributions to the satisfaction of its maintainers, we may display your Twitter or GitHub profile photo on the About page, with a link to your Twitter or GitHub profile.
  • +
  • If you are a member of the Bitcoin community on Twitter, and have made a one-time donation of at least 0.01 BTC to The Mempool Open Source Project on mempool.space/about, we will generally display your Twitter profile photo on the About page, with a link to your Twitter account.
  • +
  • If you are a member of the Bitcoin community on GitHub, and have made recurring donations of at least $100 USD per month to The Mempool Open Source Project through the GitHub Sponsors program for at least 6 months, we will generally display your GitHub profile photo on the About page, with a link to your GitHub account.
  • +
  • If you represent an open source project that benefits the Bitcoin community, and have integrated The Mempool Open Source Project into your project, we will generally feature the project's logo on the About page, with a link to the project's GitHub repository.
  • +
  • If you represent an alliance of members of the Bitcoin community, and that alliance has a relationship to The Mempool Open Source Project, we may display the alliance logo on the About page, with a link to the alliance website.
  • +
  • If you represent an enterprise organization, and have made a one-time donation of at least $25,000 USD to The Mempool Open Source Project, we will generally display your organization's logo on the About page, with a link to your organization's website.
  • +
+

However, we reserve the right to remove any links from our website that in our sole discretion are inappropriate. All donations are non-refundable.

+ +
+ +

COPYRIGHT NOTICE

+ +

Copyright © 2019-2021 The Mempool Open Source Project + +

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, and/or sublicense 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. + +

Commons Clause License Condition v1.0 + +

Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software. + +

For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Cause License Condition notice. + +

+

+
diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts index c45547be5..66367dc49 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts @@ -1,9 +1,14 @@ import { Component } from '@angular/core'; +import { Env, StateService } from '../../services/state.service'; @Component({ selector: 'app-terms-of-service', templateUrl: './terms-of-service.component.html' }) export class TermsOfServiceComponent { - constructor() { } + officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; + + constructor( + private stateService: StateService, + ) { } } diff --git a/frontend/src/resources/mempool-space-logo-bigger.png b/frontend/src/resources/mempool-space-logo-bigger.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b0a384ca3e8752748d3fd0104636169fcaae19 GIT binary patch literal 15430 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 Date: Sun, 7 Mar 2021 09:36:52 +0900 Subject: [PATCH 22/46] Minor tweak of ToS formatting, clarify Bitcoin Only, add 3rd party licenses --- .../terms-of-service.component.html | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.html b/frontend/src/app/components/terms-of-service/terms-of-service.component.html index 99de1a981..e58b560b6 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.html +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.html @@ -5,7 +5,7 @@

Terms of Service

-
Updated: March 05, 2021
+
Updated: March 07, 2021


@@ -37,7 +37,7 @@

BITCOIN ONLY

-

Out of respect for our users, this website does not support altcoins, and is generally Bitcoin Only. However, in order to support various Bitcoin Layer 2 Networks, various fiat stablecoin tokens on Liquid, and the BSQ governance token for the Bisq DAO are not considered altcoins as they do not distract users from Bitcoin, and is part of our mission to support the full Bitcoin ecosystem. +

Out of respect for our users, this website does not support altcoins, and is generally Bitcoin Only. Fiat stablecoin tokens on Liquid and the BSQ governance token for the Bisq DAO are not considered altcoins, as they do not distract users from Bitcoin and are part of our stated mission to support the entire Bitcoin ecosystem and Bitcoin Layer 2 Networks.


@@ -46,17 +46,22 @@

Out of respect for our users, this website does not display advertising, and generally does not link to external sources. However, to acknowledge members of the Bitcoin open-source community and direct supporters of The Mempool Open Source Project, external links will be made in the following cases:

  • If you are an individual contributor to The Mempool Open Source Project, and have made regular contributions to the satisfaction of its maintainers, we may display your Twitter or GitHub profile photo on the About page, with a link to your Twitter or GitHub profile.
  • +
  • If you are a member of the Bitcoin community on Twitter, and have made a one-time donation of at least 0.01 BTC to The Mempool Open Source Project on mempool.space/about, we will generally display your Twitter profile photo on the About page, with a link to your Twitter account.
  • +
  • If you are a member of the Bitcoin community on GitHub, and have made recurring donations of at least $100 USD per month to The Mempool Open Source Project through the GitHub Sponsors program for at least 6 months, we will generally display your GitHub profile photo on the About page, with a link to your GitHub account.
  • +
  • If you represent an open source project that benefits the Bitcoin community, and have integrated The Mempool Open Source Project into your project, we will generally feature the project's logo on the About page, with a link to the project's GitHub repository.
  • +
  • If you represent an alliance of members of the Bitcoin community, and that alliance has a relationship to The Mempool Open Source Project, we may display the alliance logo on the About page, with a link to the alliance website.
  • +
  • If you represent an enterprise organization, and have made a one-time donation of at least $25,000 USD to The Mempool Open Source Project, we will generally display your organization's logo on the About page, with a link to your organization's website.

However, we reserve the right to remove any links from our website that in our sole discretion are inappropriate. All donations are non-refundable.


-

COPYRIGHT NOTICE

+

OPEN SOURCE LICENSE

Copyright © 2019-2021 The Mempool Open Source Project @@ -72,6 +77,12 @@

For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Cause License Condition notice. +
+ +

THIRD PARTY OPEN SOURCE LICENSES

+ +

The Mempool Open Source Project uses open source software provided by third parties, and the copyright statements and licenses for these third-party components are included with this software at the following URL: THIRD-PARTY LICENSES.

+
From e5972aa1812aff96c8c22443bab6637556385c42 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 7 Mar 2021 20:05:20 +0700 Subject: [PATCH 23/46] Updating transifex. --- frontend/src/locale/messages.xlf | 104 +++++++++++++++---------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index 4140d8340..aeabb0550 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -940,11 +940,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -996,7 +996,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1044,7 +1044,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1056,7 +1056,7 @@ About src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1084,7 +1084,7 @@ Layer 2 Networks src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1092,7 +1092,7 @@ Stats src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1100,7 +1100,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1108,7 +1108,7 @@ Graphs src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1120,7 +1120,7 @@ TV view src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1132,7 +1132,7 @@ Assets src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1140,50 +1140,26 @@ master-page.assets - - About the project + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1191,7 +1167,7 @@ Become a sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1199,15 +1175,39 @@ Request invoice src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1224,7 +1224,7 @@ Navigate to https://mempool.space/about to sponsor src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1232,7 +1232,7 @@ Amount required src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1240,7 +1240,7 @@ Minimum amount is 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1248,7 +1248,7 @@ If you donate 0.01 BTC or more, your profile photo will be added to the list of sponsors above :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1256,7 +1256,7 @@ Waiting for transaction... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1264,7 +1264,7 @@ Donation confirmed! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1272,7 +1272,7 @@ Thank you! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you From d20cec4e594b4f635b9367e416a3b1531f0cd38a Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 7 Mar 2021 20:13:39 +0700 Subject: [PATCH 24/46] Updating translations from transifex. --- frontend/src/locale/messages.ar.xlf | 110 ++++++++--------- frontend/src/locale/messages.cs.xlf | 110 ++++++++--------- frontend/src/locale/messages.de.xlf | 110 ++++++++--------- frontend/src/locale/messages.en_US.xlf | 104 ++++++++-------- frontend/src/locale/messages.es.xlf | 110 ++++++++--------- frontend/src/locale/messages.fa.xlf | 110 ++++++++--------- frontend/src/locale/messages.fi.xlf | 110 ++++++++--------- frontend/src/locale/messages.fr.xlf | 110 ++++++++--------- frontend/src/locale/messages.he.xlf | 160 ++++++++++++------------- frontend/src/locale/messages.hr.xlf | 104 ++++++++-------- frontend/src/locale/messages.hu.xlf | 110 ++++++++--------- frontend/src/locale/messages.it.xlf | 110 ++++++++--------- frontend/src/locale/messages.ja.xlf | 110 ++++++++--------- frontend/src/locale/messages.ka.xlf | 110 ++++++++--------- frontend/src/locale/messages.ko.xlf | 110 ++++++++--------- frontend/src/locale/messages.nb.xlf | 110 ++++++++--------- frontend/src/locale/messages.nl.xlf | 110 ++++++++--------- frontend/src/locale/messages.pl.xlf | 109 ++++++++--------- frontend/src/locale/messages.pt.xlf | 110 ++++++++--------- frontend/src/locale/messages.sl.xlf | 110 ++++++++--------- frontend/src/locale/messages.sv.xlf | 118 +++++++++--------- frontend/src/locale/messages.tr.xlf | 110 ++++++++--------- frontend/src/locale/messages.uk.xlf | 110 ++++++++--------- frontend/src/locale/messages.vi.xlf | 110 ++++++++--------- frontend/src/locale/messages.zh.xlf | 110 ++++++++--------- 25 files changed, 1333 insertions(+), 1462 deletions(-) diff --git a/frontend/src/locale/messages.ar.xlf b/frontend/src/locale/messages.ar.xlf index c88ce8b88..36f035147 100644 --- a/frontend/src/locale/messages.ar.xlf +++ b/frontend/src/locale/messages.ar.xlf @@ -1009,11 +1009,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1068,7 +1068,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1118,7 +1118,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1131,7 +1131,7 @@ حول src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1162,7 +1162,7 @@ شبكات الطبقة ٢ src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1171,7 +1171,7 @@ احصائيات src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1180,7 +1180,7 @@ لوحة التحكم src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1189,7 +1189,7 @@ الرسوم البيانية src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1202,7 +1202,7 @@ وضع التلفزيون src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1215,7 +1215,7 @@ الأصول src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1223,56 +1223,26 @@ master-page.assets - - About the project - نبذه عن المشروع + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - يهدف مشروع mempool المفتوح المصدر إلى صنع مستعرض عالي الجودة وبشكل صوري لنظام Bitcoin بأكمله، دون تشتيت الانتباه لأشياء مثل الـ altcoins أو وضع اعلانات أو متتبعات طرف ثالث. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - فريق الصيانة + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - تطوير - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - العمليات - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - الرعاة ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1281,7 +1251,7 @@ كن راعياً ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1290,16 +1260,40 @@ طلب الفاتوره src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service شروط الخدمة src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1317,7 +1311,7 @@ انتقل إلى https://mempool.space/about للاعلان src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1326,7 +1320,7 @@ المبلغ المطلوب src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1335,7 +1329,7 @@ الحد الأدنى هو 0.001 بتكوين src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1344,7 +1338,7 @@ إذا تبرعت بمبلغ 0.01 بتكوين أو أكثر ، فستتم إضافة صورة ملفك الشخصي إلى قائمة الرعاة أعلاه :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1353,7 +1347,7 @@ في إنتظار التحويلات src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1362,7 +1356,7 @@ تم تأكيد التبرع! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1371,7 +1365,7 @@ شكراً لك! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.cs.xlf b/frontend/src/locale/messages.cs.xlf index edd3ee204..126f5348b 100644 --- a/frontend/src/locale/messages.cs.xlf +++ b/frontend/src/locale/messages.cs.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ O projektu src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Sítě 2. vrstvy src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Statistiky src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Rozcestník src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Grafy src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ TV pohled src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Aktiva src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - O projektu + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Cílem open-source mempool projektu je implementace vysoce kvalitního průzkumného a vizualizačního webu pro celý bitcoinový ekosystém, bez rušivých prvků, jako jsou altcoiny, reklama nebo sledovače třetích stran. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Správci + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Vývoj - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Obsluha - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponzoři ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Staňte se sponzorem ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Vyžádat si fakturu src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Podmínky služby src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Přejít na https://mempool.space/about na sponzory src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Požadovaná částka src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Minimální částka je 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Pokud darujete 0,01 BTC nebo více, vaše profilová fotka bude přidána do seznamu sponzorů výše :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Čekání na transakci... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Dar potvrzen! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Děkujeme! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.de.xlf b/frontend/src/locale/messages.de.xlf index 1203dbad6..ee74e80fd 100644 --- a/frontend/src/locale/messages.de.xlf +++ b/frontend/src/locale/messages.de.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Über src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Layer 2-Netzwerke src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Statistiken src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Grafiken src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ TV-Ansicht src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Vermögenswerte src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Über das Projekt + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Das Open-Source-Projekt von mempool zielt darauf ab, eine qualitativ hochwertige Explorer- und Visualisierungswebsite für das gesamte Bitcoin-Ökosystem zu implementieren, ohne Ablenkungen durch Altcoins, Werbung oder Tracker von Drittanbietern. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Maintainer + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Entwicklung - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Betrieb - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsoren ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Werde ein Sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Rechnung anfordern src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Nutzungsbedingungen src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Um ein Sponsor zu werden, navigieren Sie zu https://mempool.space/about src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Mindestbetrag src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Der Mindestbetrag beträgt 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Wenn Sie 0,01 BTC oder mehr spenden, wird Ihr Profilfoto zur Liste der Sponsoren oben hinzugefügt :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Warten auf die Transaktion ... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Spende bestätigt! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Vielen Dank! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.en_US.xlf b/frontend/src/locale/messages.en_US.xlf index 41ed33bb6..046c91aeb 100644 --- a/frontend/src/locale/messages.en_US.xlf +++ b/frontend/src/locale/messages.en_US.xlf @@ -939,11 +939,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -995,7 +995,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1043,7 +1043,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1055,7 +1055,7 @@ About src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1083,7 +1083,7 @@ Layer 2 Networks src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1091,7 +1091,7 @@ Stats src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1099,7 +1099,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1107,7 +1107,7 @@ Graphs src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1119,7 +1119,7 @@ TV view src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1131,7 +1131,7 @@ Assets src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1139,50 +1139,26 @@ master-page.assets - - About the project + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1190,7 +1166,7 @@ Become a sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1198,15 +1174,39 @@ Request invoice src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1223,7 +1223,7 @@ Navigate to https://mempool.space/about to sponsor src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1231,7 +1231,7 @@ Amount required src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1239,7 +1239,7 @@ Minimum amount is 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1247,7 +1247,7 @@ If you donate 0.01 BTC or more, your profile photo will be added to the list of sponsors above :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1255,7 +1255,7 @@ Waiting for transaction... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1263,7 +1263,7 @@ Donation confirmed! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1271,7 +1271,7 @@ Thank you! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.es.xlf b/frontend/src/locale/messages.es.xlf index 8351c4815..f9e7191c5 100644 --- a/frontend/src/locale/messages.es.xlf +++ b/frontend/src/locale/messages.es.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Sobre nosotros src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Redes de segunda capa src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Estadísticas src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Gráficos src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ Vista de TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Activos src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Sobre el proyecto + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Mempool es un proyecto de código abierto cuyo objetivo es proporcionar una web donde explorar y visualizar todo el ecosistema de Bitcoin de la mejor forma posible, sin distracciones como altcoins, publicidad o rastreadores de terceros. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Mantenedores + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Desarrollo - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operaciones - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Patrocinadores ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Sé patrocinador ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Solicitar factura src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Términos de servicio src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Vaya a https://mempool.space/about para patrocinarnos src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Cantidad requerida src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ La cantidad mínima es 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Si donas 0.01 BTC o más, tu foto de perfil aparecerá en la lista de patrocinadores que puedes ver aquí arriba :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Cargando transacción... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ ¡Donación confirmada! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ ¡Gracias! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.fa.xlf b/frontend/src/locale/messages.fa.xlf index 9b1018230..d137faf71 100644 --- a/frontend/src/locale/messages.fa.xlf +++ b/frontend/src/locale/messages.fa.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ رابط برنامه‌نویسی نرم‌افزار (API) src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ درباره src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ شبکه‌های لایه 2 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ آمار src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ داشبورد src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ گراف‌ها src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ نمایش تلویزیونی src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ دارایی‌ها src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - درباره پروژه + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - پروژه متن‌باز ممپول یک کاوشگر باکیفیت و سایت بصری‌ساز برای همه زیست‌بوم بیت‌کوین است و کاربر را درگیر حواس‌پرتی‌هایی مثل آلت‌کوین‌ها، تبلیغات و جاسوس‌افزارها نمی‌کند. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - توسعه‌دهنده‌ها + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - توسعه‌دهنده - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - امور عملیاتی - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - حامیان ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ حامی شوید ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ درخواست فاکتور src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service شرایط خدمات src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ برای حامی شدن به اینجا برو https://mempool.space/about src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ مبلغ مورد نیاز است src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ حداقل مبلغ 0.001 بیت‌کوین است src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ اگر 0.01 بیت‌کوین یا بیشتر اهدا کنید، تصویر شما به لیست حامیان بالا اضافه می‌شود :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ منتظر تراکنش... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ اهدا هدیه تایید شد! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ ممنون! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.fi.xlf b/frontend/src/locale/messages.fi.xlf index e6e473642..82285d0d0 100644 --- a/frontend/src/locale/messages.fi.xlf +++ b/frontend/src/locale/messages.fi.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ Tietoja src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ Toisen kerroksen verkot src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ Tilastot src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ Kojelauta src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ Kaaviot src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ TV näkymä src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ Omaisuuserät src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - Tietoja projektista + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Mempool avoimen lähdekoodin projektissa tarkoituksena on toteuttaa korkealaatuinen tutkimus- ja visualisointisivusto koko Bitcoin-ekosysteemille ilman häiriötekijöitä, kuten altcoineja, mainontaa tai kolmannen osapuolen seurantalaitteita. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Ylläpitäjät + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Kehitys - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Toiminnot - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsorit ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ Ryhdy sponsoriksi ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ Pyydä lasku src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Käyttöehdot src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ Sponsoroidaksesi navigoi osoitteeseen https://mempool.space/about src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ Vaadittu määrä src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ Vähimmäismäärä on 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ Jos lahjoitat 0,01 BTC tai enemmän, profiilikuvasi lisätään yllä olevaan sponsoriluetteloon :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ Odotetaan siirtotapahtumaa... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ Lahjoitus vahvistettu! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ Kiitos! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.fr.xlf b/frontend/src/locale/messages.fr.xlf index 9a59db7f1..2b51ed971 100644 --- a/frontend/src/locale/messages.fr.xlf +++ b/frontend/src/locale/messages.fr.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ A propos src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Réseaux de couche 2 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Statistiques src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Tableau de bord src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Graphiques src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ Vue TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Actifs src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - À propos du projet + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Le projet open-source mempool vise à implémenter un explorateur de haute qualité pour l'entièreté de l'éco-système Bitcoin, sans distraction telles que les altcoins, les publicités, ou les traqueurs tiers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Mainteneurs + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Développement - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Opérations - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsors ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Devenir sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Demander une facture src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Conditions d'utilisation src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Aller à https://mempool.space/aboutpour sponsoriser src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Montant requis src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Le montant minimum est de 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Si vous donnez 0,01 BTC ou plus, votre photo de profil sera ajoutée à la liste des sponsors ci-dessus :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ En attente de la transaction... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Don confirmé! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Merci! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.he.xlf b/frontend/src/locale/messages.he.xlf index 2d26ebcaa..fdf4ec666 100644 --- a/frontend/src/locale/messages.he.xlf +++ b/frontend/src/locale/messages.he.xlf @@ -42,7 +42,7 @@ confirmation - אישור + אישורים src/app/components/transaction/transaction.component.html 17 @@ -86,7 +86,7 @@ Unconfirmed - טרם אושר + טרם אושרו src/app/components/transaction/transaction.component.html 22 @@ -215,7 +215,7 @@ sat - סאט + סאטושיז src/app/components/transaction/transaction.component.html 80 @@ -365,7 +365,7 @@ ETA - זמן הגעה משוער + זמן אישור משוער src/app/components/transaction/transaction.component.html 119 @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1095,7 +1095,7 @@ multisig of - MultiSig מ + multisig of src/app/components/address-labels/address-labels.component.html 5 @@ -1113,7 +1113,7 @@ Liquid - רשת הנזילות + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ אודות src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ רשתות שכבה שנייה src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ סטטיסטיקה src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ לוח מחוונים src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ גרפים src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ תצוגת מרקע src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ נכסים src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - על הפרוייקט + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - מטרת פרויקט הקוד הפתוח של Mempool הינה יישום סייר והדמיה באיכות גבוהה עבור כל המערכות של ביטקוין, ללא הסחות דעת כמו אלטקוינז, פרסום או מעקב אחר משתמשים. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - מתחזקים + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - פיתוח - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - תפעול - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - תומכים ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ הצטרף כתומך ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ בקשת חשבונית src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service תנאי השירות src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ עבור ל https://mempool.space/about כדי לתמוך src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ כמות נדרשת src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ הסכום המינימלי הינו 0.001 ביטקוין src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ בתרומה של 0.01 ביטקוין או יותר, תמונת הפרופיל שלך תתווסף לרשימת התורמים מעלה :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ ממתין לטרנזקציה... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ תרומה אושרה! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ תודה לך! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you @@ -1967,7 +1961,7 @@ Difficulty adjustment - התאמת קושי + התאמת קושי הכרייה src/app/dashboard/dashboard.component.html 209 @@ -1976,7 +1970,7 @@ API Service - ממשק API + API Service src/app/components/api-docs/api-docs.component.html 4 @@ -2090,7 +2084,7 @@ Returns our currently suggested fees for new transactions. - הצג עמלות מומלצות לטרנזקציות חדשות + Returns our currently suggested fees for new transactions. src/app/components/api-docs/api-docs.component.html 37 @@ -2100,7 +2094,7 @@ Returns current mempool as projected blocks. - מאחזר את הממפול הנוכחי כבלוקים + Returns current mempool as projected blocks. src/app/components/api-docs/api-docs.component.html 41 @@ -2110,7 +2104,7 @@ Mempool - ממפול + Mempool src/app/components/api-docs/api-docs.component.html 49 @@ -2120,7 +2114,7 @@ Returns current mempool backlog statistics. - הצג את סטטיסטיקת הממפול העכשיווית + Returns current mempool backlog statistics. src/app/components/api-docs/api-docs.component.html 59 @@ -2182,7 +2176,7 @@ Returns the raw block representation in binary. - מאחזר תצוגת בלוק בבינארי. + Returns the raw block representation in binary. src/app/components/api-docs/api-docs.component.html 105 @@ -2190,7 +2184,7 @@ Returns the hash of the block currently at :height. - מאחזר את הגיבוב של הבלוק שכרגע ב: בגובה + Returns the hash of the block currently at :height. src/app/components/api-docs/api-docs.component.html 109 @@ -2198,7 +2192,7 @@ Returns the 10 newest blocks starting at the tip or at :start_height if specified. - מאחזר את 10 הבלוקים החדשים ביותר, מתחיל בקצה או ב :start_height אם הוגדר. + Returns the 10 newest blocks starting at the tip or at :start_height if specified. src/app/components/api-docs/api-docs.component.html 113 @@ -2206,7 +2200,7 @@ Returns the height of the last block. - מאחזר את גובה הבלוק האחרון. + Returns the height of the last block. src/app/components/api-docs/api-docs.component.html 117 @@ -2214,7 +2208,7 @@ Returns the hash of the last block. - מאחזר את גיבוב הבלוק האחרון. + Returns the hash of the last block. src/app/components/api-docs/api-docs.component.html 121 @@ -2230,7 +2224,7 @@ Transactions - טרנזקציות + Transactions src/app/components/api-docs/api-docs.component.html 129 @@ -2288,7 +2282,7 @@ Returns the spending status of all transaction outputs. - מאחזר מצב הבזבוז של כל הפלטים של הטרנזקציה. + Returns the spending status of all transaction outputs. src/app/components/api-docs/api-docs.component.html 167 @@ -2312,7 +2306,7 @@ Addresses - כתובות + Addresses src/app/components/api-docs/api-docs.component.html 179 @@ -2362,7 +2356,7 @@ Assets - נכסים + Assets src/app/components/api-docs/api-docs.component.html 213 @@ -2372,7 +2366,7 @@ Returns information about a Liquid asset. - מאחזר את כל המידע על נכסים נזילים. + Returns information about a Liquid asset. src/app/components/api-docs/api-docs.component.html 223 @@ -2470,7 +2464,7 @@ This transaction saved % on fees by using native SegWit-Bech32 - טרנזקציה זו חסכה % בעמלות בשימוש של Native SegWit-Bech32 + טרנזקציה זו חסכה % בעמלות בשימוש של Native SegWit-Bech32 src/app/components/tx-features/tx-features.component.html 1 @@ -2497,7 +2491,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit-Bech32 - טרנזקציה זו חסכה % בעמלות בשימוש של SegWit ויכלה לחסוך % יותר בשדרוג לNative SegWit-Bech32 + טרנזקציה זו חסכה % בעמלות בשימוש של SegWit ויכלה לחסוך % יותר בשדרוג לNative SegWit-Bech32 src/app/components/tx-features/tx-features.component.html 3 @@ -2506,7 +2500,7 @@ This transaction could save % on fees by upgrading to native SegWit-Bech32 or % by upgrading to SegWit-P2SH - טנרזקציה זו יכלה לחסוך % בעמלה בשדרוג לNative SegWit-Bech32 או % בשדרוג לSegWit-P2SH + טנרזקציה זו יכלה לחסוך % בעמלה בשדרוג לNative SegWit-Bech32 או % בשדרוג לSegWit-P2SH src/app/components/tx-features/tx-features.component.html 5 diff --git a/frontend/src/locale/messages.hr.xlf b/frontend/src/locale/messages.hr.xlf index c291d33e8..34db31bd9 100644 --- a/frontend/src/locale/messages.hr.xlf +++ b/frontend/src/locale/messages.hr.xlf @@ -956,11 +956,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1012,7 +1012,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1060,7 +1060,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1072,7 +1072,7 @@ About src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1100,7 +1100,7 @@ Layer 2 Networks src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1108,7 +1108,7 @@ Stats src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1116,7 +1116,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1124,7 +1124,7 @@ Graphs src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1136,7 +1136,7 @@ TV view src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1148,7 +1148,7 @@ Assets src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1156,50 +1156,26 @@ master-page.assets - - About the project + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1207,7 +1183,7 @@ Become a sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1215,15 +1191,39 @@ Request invoice src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1240,7 +1240,7 @@ Navigate to https://mempool.space/about to sponsor src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1248,7 +1248,7 @@ Amount required src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1256,7 +1256,7 @@ Minimum amount is 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1264,7 +1264,7 @@ If you donate 0.01 BTC or more, your profile photo will be added to the list of sponsors above :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1272,7 +1272,7 @@ Waiting for transaction... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1280,7 +1280,7 @@ Donation confirmed! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1288,7 +1288,7 @@ Thank you! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.hu.xlf b/frontend/src/locale/messages.hu.xlf index 48a94de45..960a95ee4 100644 --- a/frontend/src/locale/messages.hu.xlf +++ b/frontend/src/locale/messages.hu.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ Részletek src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ Második Réteg Hálózatok src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ Adatok src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ Irányítópult src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ Grafikon src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ TV nézet src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ Assetok src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - Bővebben a projektről + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - A mempool egy nyílt fórráskódú projekt amelyel azt szeretnénk elérni, hogy kimagasló minőségű keresőt és vizualizációs webhelyet tartsunk fenn a teljes bitcoin ökoszitéma számára annélkül hogy figyelemelterelő szarpénzek, idegesítő hirdetések vagy más harmadik fél általi nyomkövetőket használnánk ehhez. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Fenntartók + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Fejlesztés - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operáció - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Támogatóink ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ Legyél te is támogatónk! ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ Számla kérése src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Általános Szolgáltatási Feltételek src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ Navigálj a https://mempool.space/about-ra hogy támogasd a projektet src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ Összeg szükséges src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ A minimum mennyiség 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ Ha 0.01 BTC-t vagy többet adományozol, akkor a profilkéedet a támogatól listáján feltüntetjük :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ Tranzakcióra vár... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ Adomány megerősítve! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ Köszönjük! ❤️ src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.it.xlf b/frontend/src/locale/messages.it.xlf index 69412fb7f..ecc8eabaa 100644 --- a/frontend/src/locale/messages.it.xlf +++ b/frontend/src/locale/messages.it.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ Su di noi src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ Reti Layer 2 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ Statistiche src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ Grafici src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ Vista TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ Assets src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - Sul progetto + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Il progetto open-source mempool si prefigge di sviluppare un explorer di alta qualità per l'intero ecosistema del Bitcoin, senza distrazioni quali altcoins, pubblicità e tracker esterni. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Manutentori + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Sviluppo - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operazioni - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsors ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ Diventa uno sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ Richiedi una fattura src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Condizioni d'uso src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ Visitate https://mempool.space/about per sponsorizzare src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ Importo richiesto src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ L'importo minimo è di 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ Se doni almeno 0.01 BTC la tua foto di profilo sarà aggiunta alla lista degli sponsors qui sopra :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ In attesa della transazione... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ Donazione confermata! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ Grazie! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.ja.xlf b/frontend/src/locale/messages.ja.xlf index b32a90ba1..121912ea6 100644 --- a/frontend/src/locale/messages.ja.xlf +++ b/frontend/src/locale/messages.ja.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ このアプリについて src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ レイヤー2のネットワーク src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ 統計 src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ ダッシュボード src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ グラフ src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ テレビ src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ 資産 src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - プロジェクトについて + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - mempoolオープンソースプロジェクトは、アルトコイン、広告、サードパーティのトラッカーなどの気が散るものなく、ビットコインエコシステム全体に高品質のエクスプローラーと視覚化Webサイトを実装することを目的としています。 + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - メンテナー + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - 開発 - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - オペレーション - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - スポンサー❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ スポンサーになる❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ 請求書を依頼する src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service 利用規約 src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ スポンサーになるには、https://mempool.space/aboutに移動します。 src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ 必要な金額 src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ 最小額は0.001BTCです src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ 0.01 BTC以上を寄付すると、プロフィール写真が上記のスポンサーリストに追加されます:) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ トランザクションを待ち... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ 寄付が確定しました! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ ありがとうございました! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.ka.xlf b/frontend/src/locale/messages.ka.xlf index 2704a453c..febc33a9b 100644 --- a/frontend/src/locale/messages.ka.xlf +++ b/frontend/src/locale/messages.ka.xlf @@ -1003,11 +1003,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1062,7 +1062,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1112,7 +1112,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1125,7 +1125,7 @@ ჩვენს შესახებ src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1156,7 +1156,7 @@ ქსელის 2-ე ფენა src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1165,7 +1165,7 @@ სტატისტიკა src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1174,7 +1174,7 @@ დაფა src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1183,7 +1183,7 @@ დიაგრამები src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1196,7 +1196,7 @@ სატელევიზიო ხედვა src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1209,7 +1209,7 @@ აქტივები src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1217,56 +1217,26 @@ master-page.assets - - About the project - პროექტის შესახებ + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - mempool open-source პროექტია, რომლის მიზანია მაღალი ხარისხის ექსპლორერის შექმნა და ბლოქჩეინის ვიზუალიზაცია ბიტკოინ ეკოსისტემისთვის, შემაწუხებელი ალტკოინების, რეკლამის, და third-party ტრეკერების გარეშე + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - შემნახველები + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - დეველოპერი - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - ოპერაცია - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - სპონსორები ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1275,7 +1245,7 @@ გახდი სპონსორი ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1284,16 +1254,40 @@ მოითხოვეთ ინვოისი src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Მომსახურების პირობები src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1311,7 +1305,7 @@ სპონსორობისთვის გადადით https://mempool.space/about - ზე src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1320,7 +1314,7 @@ საჭირო თანხა src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1329,7 +1323,7 @@ მინიმალური თანხაა 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1338,7 +1332,7 @@ თუ თქვენ გადარიცხავთ 0.01 BTC ან მეტს, თქვენი პროფილი დაემატება სპონსორების სიას :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1347,7 +1341,7 @@ ტრანსაქციის მოლოდინში... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1356,7 +1350,7 @@ გადარიცხვა დადასტურებულია! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1365,7 +1359,7 @@ დიდი მადლობა! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.ko.xlf b/frontend/src/locale/messages.ko.xlf index 289a2b970..adb1ed398 100644 --- a/frontend/src/locale/messages.ko.xlf +++ b/frontend/src/locale/messages.ko.xlf @@ -1011,11 +1011,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1070,7 +1070,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1119,7 +1119,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1132,7 +1132,7 @@ 대하여 src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1163,7 +1163,7 @@ 레이어 2 네트워크들 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1172,7 +1172,7 @@ 통계 src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1181,7 +1181,7 @@ 대시보드 src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1190,7 +1190,7 @@ 그래프 src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1203,7 +1203,7 @@ TV 뷰 src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1216,7 +1216,7 @@ 자산 src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1224,56 +1224,26 @@ master-page.assets - - About the project - 프로젝트에 대하여 + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - mempool은 오픈소스 프로젝트이며 비트코인 생태계에 고품질 탐색기와 시각화 웹사이트의 제공을 목표로 두고 있습니다. 알트코인, 광고 또는 웹트래킹 같이 불필요한 요소는 일절 포함하지 않습니다. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - 메인테이너들 + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - 개발 - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - 운영 - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - 후원 ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1282,7 +1252,7 @@ 후원하기 ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1291,16 +1261,40 @@ 인보이스 요청하기 src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service 이용약관 src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1318,7 +1312,7 @@ 후원은 https://mempool.space/about 에서 하실 수 있습니다 src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1327,7 +1321,7 @@ 필요한 금액 src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1336,7 +1330,7 @@ 최소 금액은 0.001 BTC입니다 src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1345,7 +1339,7 @@ 0.01BTC 이상을 기부하시면 위의 후원 목록에 프로필 사진이 추가됩니다. :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1354,7 +1348,7 @@ 트랜잭션을 기다리는 중... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1363,7 +1357,7 @@ 후원이 완료되었습니다! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1372,7 +1366,7 @@ 감사합니다! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.nb.xlf b/frontend/src/locale/messages.nb.xlf index 02caa8d78..c93a87d48 100644 --- a/frontend/src/locale/messages.nb.xlf +++ b/frontend/src/locale/messages.nb.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ Om src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ Lag 2-nettverk src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ Statistikk src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ Dashbord src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ Grafer src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ TV-modus src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ Ressurser src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - Om prosjektet + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Mempool er et åpen-kildekode prosjekt som prøver å implementere en utforsker og visualiserings webside av høy kvalitet for hele Bitcoin økosystemet, uten distraksjoner som altcoins, reklame eller tredjeparts trackere. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Vedlikeholdere + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Utvikling - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operasjoner - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsorer ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ Bli en sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ Be om faktura src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Bruksvilkår src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ Gå til https://mempool.space/about for å sponse src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ Beløp som kreves src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ Minimum beløp er 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ Hvis du donerer 0.01 BTC eller mer, så blir ditt profilbilde lagt til i listen av sponsorer ovenfor :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ Venter på transaksjon... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ Donasjon bekreftet! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ Tusen takk! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.nl.xlf b/frontend/src/locale/messages.nl.xlf index 50ed5fc7b..f2a8df086 100644 --- a/frontend/src/locale/messages.nl.xlf +++ b/frontend/src/locale/messages.nl.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Over src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Laag-2-netwerken src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Statistieken src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Grafieken src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ TV-weergave src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Activa src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Over het project + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Het (open source) mempool project heeft als doel om een hoge kwaliteit explorer en visaulisatie te bieden voor het gehele Bitcoin-ecosysteem, zonder afleidingen als altcoins, reclame of trackers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Onderhouders + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Ontwikkeling - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operationeel - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsoren ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Wordt een sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Verzoek factuur src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Servicevoorwaarden src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Navigeer naar https://mempool.space/about om te sponsoren src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Bedrag vereist src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Minimumbedrag is 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Als je 0.01 BTC of meer doneert, wordt je profielfoto aan de bovenstaande lijst van sponsoren toegevoegd :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Wachten op transactie... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Donatie bevestigd! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Bedankt! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.pl.xlf b/frontend/src/locale/messages.pl.xlf index 35b55f2cb..f8d0349d2 100644 --- a/frontend/src/locale/messages.pl.xlf +++ b/frontend/src/locale/messages.pl.xlf @@ -1010,11 +1010,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1069,7 +1069,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1119,7 +1119,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1132,7 +1132,7 @@ O stronie src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1163,7 +1163,7 @@ Sieci Warstwy 2 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1172,7 +1172,7 @@ Statystyki src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1181,7 +1181,7 @@ Dashboard src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1190,7 +1190,7 @@ Wykresy src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1203,7 +1203,7 @@ Widok TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1216,7 +1216,7 @@ Zasoby src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1224,55 +1224,26 @@ master-page.assets - - About the project - O projekcie + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Opiekunowie + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Rozwój - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operacje - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsorzy ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1281,7 +1252,7 @@ Zostań sponsorem ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1290,16 +1261,40 @@ Poproś o fakturę src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Warunki korzystania z usługi src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1316,7 +1311,7 @@ Navigate to https://mempool.space/about to sponsor src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1325,7 +1320,7 @@ Wymagana ilość src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1334,7 +1329,7 @@ Minimalna ilość to 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1343,7 +1338,7 @@ Jeśli przekażesz 0.01 BTC lub więcej, Twoje zdjęcie profilowe zostanie dodane do listy sponsorów powyżej :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1352,7 +1347,7 @@ Oczekiwanie na transakcje... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1361,7 +1356,7 @@ Darowizna potwierdzona! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1370,7 +1365,7 @@ Dziękujemy! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.pt.xlf b/frontend/src/locale/messages.pt.xlf index 41f9b5844..e71790e6d 100644 --- a/frontend/src/locale/messages.pt.xlf +++ b/frontend/src/locale/messages.pt.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Sobre src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Rede 2ª Camada src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Estatísticas src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Painel de controle src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Gráficos src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ Visualização da TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Ativos src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Sobre o projeto + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - O projeto de código aberto mempool visa implementar um explorador de alta qualidade e um site de visualização para todo o ecossistema Bitcoin, sem distrações como altcoins, publicidade ou rastreadores de terceiros. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Mantenedores + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Desenvolvimento - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operação - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Patrocinadores ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Seja um patrocinador ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Solicitação de Pagamento src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Termos de Serviço src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Acesse https://mempool.space/about para patrocinar src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Quantidade necessária src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Quantidade mínima é 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Se você doar 0,01 BTC ou mais, sua foto de perfil será adicionada na lista de patrocinadores acima :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Aguardando transação... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Doação confirmada! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Obrigado! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.sl.xlf b/frontend/src/locale/messages.sl.xlf index 52d478f09..ec1742081 100644 --- a/frontend/src/locale/messages.sl.xlf +++ b/frontend/src/locale/messages.sl.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1125,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1138,7 +1138,7 @@ O projektu src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1169,7 +1169,7 @@ Omrežja 2. plasti src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1178,7 +1178,7 @@ Statistika src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1187,7 +1187,7 @@ Pregledna plošča src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1196,7 +1196,7 @@ Grafi src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1209,7 +1209,7 @@ TV pogled src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1222,7 +1222,7 @@ Sredstva src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1230,56 +1230,26 @@ master-page.assets - - About the project - O projektu + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Cilj odprtokodnega projekta mempool, je ustvariti visokokakovostno spletno mesto za raziskovanje in vizualizacijo celotnega Bitcoin ekosistema, brez motečih vsebin, kot so alternativne kriptovalute, oglaševanje ali sledilci tretjih ponudnikov. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Vzdrževalci + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Razvoj - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operacije - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponzorji ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1288,7 +1258,7 @@ Postanite sponzor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1297,16 +1267,40 @@ Ustvari račun src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Pogoji storitve src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1324,7 +1318,7 @@ Pojdite na https://mempool.space/about za sponzorstvo. src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1333,7 +1327,7 @@ Znesek je zahtevan src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1342,7 +1336,7 @@ Najmanjši znesek je 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1351,7 +1345,7 @@ Če prispevate 0.01 BTC ali več, bo vaša fotografija profila dodana na zgornji seznam sponzorjev :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1360,7 +1354,7 @@ Čakanje na transakcijo... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1369,7 +1363,7 @@ Prispevek potrjen! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1378,7 +1372,7 @@ Hvala vam! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.sv.xlf b/frontend/src/locale/messages.sv.xlf index 0f17c12a2..c1e8d2af2 100644 --- a/frontend/src/locale/messages.sv.xlf +++ b/frontend/src/locale/messages.sv.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1104,6 +1104,7 @@ Lightning + Lightning src/app/components/address-labels/address-labels.component.html 11 @@ -1112,6 +1113,7 @@ Liquid + Liquid src/app/components/address-labels/address-labels.component.html 17 @@ -1123,7 +1125,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1138,7 @@ Om src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1169,7 @@ Lager 2-nätverk src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1178,7 @@ Stats src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1187,7 @@ Instrumentbräda src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1196,7 @@ Grafer src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1209,7 @@ TV-vy src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1222,7 @@ Assets src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1230,29 @@ master-page.assets - - About the project - Om projektet + + The Mempool Open Source Project + Open Source-projektet Mempool src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Öppen källkodsprojektet Mempool har som mål att implementera en högkvalitativ utforskare och visualiserare för hela Bitcoins ekosystem, utan distraktioner som altcoins, reklam eller tredjepartsspårare. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. + En utforskare och API som utvecklas och drivs för Bitcoin-communityt, med fokus på den nya marknaden för transaktionsavgifter för att hjälpa vår övergång till ett ekosystem i flera lager, utan annonser, altcoins eller tredjepartsspårare. src/app/components/about/about.component.html 16 - - Maintainers - Ansvariga + + Community Sponsors ❤️ + Communitysponsorer ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Utveckling - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Drift - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsorer ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1261,7 @@ Bli sponsor ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1270,43 @@ Begär faktura src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + Communityintegrationer + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + Communityallianser + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + Projektunderhållare + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Användarvillkor src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1324,7 @@ Navigera till https://mempool.space/about för att sponsra src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1333,7 @@ Belopp som krävs src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1342,7 @@ Lägsta belopp är 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1351,7 @@ Om du donerar 0,01 BTC eller mer läggs din profilbild till i listan över sponsorer ovan :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1360,7 @@ Väntar på transaktion... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1369,7 @@ Donation bekräftad! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1378,7 @@ Tack! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.tr.xlf b/frontend/src/locale/messages.tr.xlf index 55bc2456a..c13177618 100644 --- a/frontend/src/locale/messages.tr.xlf +++ b/frontend/src/locale/messages.tr.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Hakkında src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ 2. Katman Ağlar src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Stat src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Panel src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Grafikler src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ TV görünümü src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Varlıklar src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Proje hakkında + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Açık kaynak kodlu mempool projemiz ile Bitcoin ekosistemi tarafından tercih edildiği şekilde altcoinler, reklam ve 3. parti takipçiler olmayan, görsel olarak zengin bir blok gezgini yaratıyoruz. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Kahramanlar + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Geliştirici - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Operasyonlar - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Sponsorlar ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Sponsor olun ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Fatura isteyin src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Hizmet Koşulları src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Sponsorluk hakkındaya https://mempool.space/about yönlendir. src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Gereken miktar src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Minimum izin verilen miktar 0.001 BTC'dir. src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ 0.01 BTC veya üstünde bağış yaparsanız, profil resminiz yukarıdaki listeye eklenecektir :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ İşlem bekleniyor... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Bağış onaylandı! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Teşekkürler! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.uk.xlf b/frontend/src/locale/messages.uk.xlf index 93258e8ba..defa22992 100644 --- a/frontend/src/locale/messages.uk.xlf +++ b/frontend/src/locale/messages.uk.xlf @@ -1014,11 +1014,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1073,7 +1073,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1123,7 +1123,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1136,7 +1136,7 @@ Про src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1167,7 +1167,7 @@ Мережі 2 шару src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1176,7 +1176,7 @@ Статистика src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1185,7 +1185,7 @@ Панель src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1194,7 +1194,7 @@ Графіки src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1207,7 +1207,7 @@ TV перегляд src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1220,7 +1220,7 @@ Активи src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1228,56 +1228,26 @@ master-page.assets - - About the project - Про проект + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Mempool це проект з відкритим кодом націлений на створення високоякісного експлореру та сайту з візуалізацією для всієї екосистеми Біткоїна, без відволікаючих фактів на кшталт альткоїнів, реклами чи сторонніх трекерів. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Розробники + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Розробка - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Операції - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Спонсори ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1286,7 +1256,7 @@ Стати спонсором ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1295,16 +1265,40 @@ Отримати рахунок src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Умови використання src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1322,7 +1316,7 @@ Перейдіть до https://mempool.space/about щоб спонсорувати src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1331,7 +1325,7 @@ Необхідна сума src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1340,7 +1334,7 @@ Мінімальна сума 0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1349,7 +1343,7 @@ Якщо ви пожертвуєте 0.01 BTC або більше, фото вашого профілю буде додане до списку спонсорів вище :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1358,7 +1352,7 @@ Очікуємо на транзакцію... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1367,7 +1361,7 @@ Пожертвування підтверджене! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1376,7 +1370,7 @@ Дякую вам! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.vi.xlf b/frontend/src/locale/messages.vi.xlf index 0035507a2..4b2b13555 100644 --- a/frontend/src/locale/messages.vi.xlf +++ b/frontend/src/locale/messages.vi.xlf @@ -1013,11 +1013,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1072,7 +1072,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1122,7 +1122,7 @@ API src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1135,7 +1135,7 @@ Về chúng tôi src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1166,7 +1166,7 @@ Mạng lớp 2 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1175,7 +1175,7 @@ Số liệu src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1184,7 +1184,7 @@ bảng điều khiển src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1193,7 +1193,7 @@ Đồ thị src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1206,7 +1206,7 @@ Giao diện TV src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1219,7 +1219,7 @@ Tài sản src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1227,56 +1227,26 @@ master-page.assets - - About the project - Về dự án + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Dự án mã nguồn mở mempool hướng đến triển khai một trang web trực quan và chất lượng cao cho toàn bộ hệ sinh thái Bitcoin, không có sự phiền nhiễu khác như altcoin, quảng cáo hoặc trình theo dõi của bên thứ ba. + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - Bảo trì + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - Phát triển - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - Vận hành - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - Nhà tài trợ ❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1285,7 +1255,7 @@ Trở thành nhà tài trợ ❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1294,16 +1264,40 @@ Yêu cầu hoá đơn src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service Điều khoản Dịch vụ src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1321,7 +1315,7 @@ Điều hướng đến https://mempool.space/about để tài trợ src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1330,7 +1324,7 @@ Số lượng yêu cầu src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1339,7 +1333,7 @@ Số lượng tối thiểu là 0,001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1348,7 +1342,7 @@ Nếu bạn quyên góp từ 0,01 BTC trở lên, ảnh hồ sơ của bạn sẽ được thêm vào danh sách các nhà tài trợ ở trên :) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1357,7 +1351,7 @@ Đang chờ giao dịch ... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1366,7 +1360,7 @@ Đã xác nhận tài trợ! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1375,7 +1369,7 @@ Cảm ơn bạn! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you diff --git a/frontend/src/locale/messages.zh.xlf b/frontend/src/locale/messages.zh.xlf index 27265bfc7..d45b56dfe 100644 --- a/frontend/src/locale/messages.zh.xlf +++ b/frontend/src/locale/messages.zh.xlf @@ -1011,11 +1011,11 @@ src/app/components/master-page/master-page.component.html - 34 + 35 src/app/components/master-page/master-page.component.html - 45 + 46 src/app/bisq/bisq-blocks/bisq-blocks.component.ts @@ -1070,7 +1070,7 @@ src/app/components/master-page/master-page.component.html - 31 + 32 src/app/components/mempool-block/mempool-block.component.html @@ -1120,7 +1120,7 @@ 应用程序接口 src/app/components/master-page/master-page.component.html - 58 + 59 src/app/components/api-docs/api-docs.component.ts @@ -1133,7 +1133,7 @@ 关于 src/app/components/master-page/master-page.component.html - 61 + 62 src/app/components/about/about.component.ts @@ -1164,7 +1164,7 @@ 第2层网络 src/app/components/master-page/master-page.component.html - 21 + 22 master-page.layer2-networks-header @@ -1173,7 +1173,7 @@ 统计 src/app/components/master-page/master-page.component.html - 37 + 38 master-page.stats @@ -1182,7 +1182,7 @@ 仪表板 src/app/components/master-page/master-page.component.html - 42 + 43 master-page.dashboard @@ -1191,7 +1191,7 @@ 图表 src/app/components/master-page/master-page.component.html - 48 + 49 src/app/components/statistics/statistics.component.ts @@ -1204,7 +1204,7 @@ TV模式 src/app/components/master-page/master-page.component.html - 51 + 52 src/app/components/television/television.component.ts @@ -1217,7 +1217,7 @@ 资产 src/app/components/master-page/master-page.component.html - 55 + 56 src/app/assets/assets.component.ts @@ -1225,56 +1225,26 @@ master-page.assets - - About the project - 项目介绍 + + The Mempool Open Source Project src/app/components/about/about.component.html 13 about.about-the-project - - The mempool open-source project aims to implement a high quality explorer and visualization website for the entire Bitcoin ecosystem, without distractions like altcoins, advertising, or third-party trackers. - Mempool开源项目旨在为整个比特币生态系统搭建一个高质量、可视化,但不会像其他加密货币、广告或第三方中介这些分散注意力的网站。 + + An explorer and API developed and operated for the Bitcoin community, focusing on the emerging transaction fee market to help our transition into a multi-layer ecosystem, without ads, altcoins, or third-party trackers. src/app/components/about/about.component.html 16 - - Maintainers - 维护人员 + + Community Sponsors ❤️ src/app/components/about/about.component.html - 22 - - about.maintainers - - - Development - 开发总工程师 - - src/app/components/about/about.component.html - 32 - - about.development - - - Operations - 首席运营官 - - src/app/components/about/about.component.html - 40 - - about.operations - - - Sponsors ❤️ - 赞助商❤️ - - src/app/components/about/about.component.html - 47 + 46 about.sponsors.withHeart @@ -1283,7 +1253,7 @@ 成为赞助商❤️ src/app/components/about/about.component.html - 63 + 62 about.become-a-sponsor @@ -1292,16 +1262,40 @@ 请求开票 src/app/components/about/about.component.html - 85 + 84 about.sponsor.request-invoice + + Community Integrations + + src/app/components/about/about.component.html + 179 + + about.integrations + + + Community Alliances + + src/app/components/about/about.component.html + 253 + + about.alliances + + + Project Maintainers + + src/app/components/about/about.component.html + 269 + + about.maintainers + Terms of Service 服务条款 src/app/components/about/about.component.html - 205 + 293 src/app/dashboard/dashboard.component.html @@ -1319,7 +1313,7 @@ 转到 https://mempool.space/about 成为赞助人 src/app/components/about/about.component.html - 65 + 64 about.navigate-to-sponsor @@ -1328,7 +1322,7 @@ 所需金额 src/app/components/about/about.component.html - 82 + 81 about.sponsor.amount-required @@ -1337,7 +1331,7 @@ 最低金额为0.001 BTC src/app/components/about/about.component.html - 83 + 82 about.sponsor.minimum-amount @@ -1346,7 +1340,7 @@ 如果您捐赠超过0.01 BTC,您的个人资料与照片将被添加到赞助商列表中:) src/app/components/about/about.component.html - 92 + 91 about.sponsor.description @@ -1355,7 +1349,7 @@ 交易等待中... src/app/components/about/about.component.html - 170 + 169 about.sponsor.waiting-for-transaction @@ -1364,7 +1358,7 @@ 确认捐赠! src/app/components/about/about.component.html - 175 + 174 about.sponsor.donation-confirmed @@ -1373,7 +1367,7 @@ 感谢! src/app/components/about/about.component.html - 175 + 174 about.sponsor.thank-you From b594a9d249dc4c9ba03c5bb68ba0fef6c06220f0 Mon Sep 17 00:00:00 2001 From: junderw Date: Sun, 7 Mar 2021 23:45:43 +0900 Subject: [PATCH 25/46] Fix? --- .../components/statistics/chartist.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/statistics/chartist.component.ts b/frontend/src/app/components/statistics/chartist.component.ts index 73ba57a17..924a4a598 100644 --- a/frontend/src/app/components/statistics/chartist.component.ts +++ b/frontend/src/app/components/statistics/chartist.component.ts @@ -309,7 +309,7 @@ const defaultOptions = { Chartist.plugins.legend = function (options: any) { let cachedDOMPosition; - let cacheInactiveLegends: any = []; + let cacheInactiveLegends: { [key:number]: boolean } = {}; // Catch invalid options if (options && options.position) { if (!(options.position === 'top' || options.position === 'bottom' || options.position instanceof HTMLElement)) { @@ -453,16 +453,13 @@ Chartist.plugins.legend = function (options: any) { legends[_legendIndex].active = true; legendElement.childNodes[_legendIndex].classList.remove('inactive'); - const indexOfInactiveLegend = cacheInactiveLegends.indexOf(_legendIndex, 0); - if (indexOfInactiveLegend > -1) { - cacheInactiveLegends.splice(indexOfInactiveLegend, 1); - } + cacheInactiveLegends[_legendIndex] = false; } const deactivateLegend = (_legendIndex: number): void => { legends[_legendIndex].active = false; legendElement.childNodes[_legendIndex].classList.add('inactive'); - cacheInactiveLegends.push(_legendIndex); + cacheInactiveLegends[_legendIndex] = true; } for (let i = legends.length - 1; i >= 0; i--) { @@ -472,6 +469,9 @@ Chartist.plugins.legend = function (options: any) { if (legend.active) deactivateLegend(i); } } + // Make sure all values are undefined (falsy) when clicking the first legend + // After clicking the first legend all indices should be falsy + if (legendIndex === 0) cacheInactiveLegends = {}; const newSeries = []; const newLabels = []; @@ -509,7 +509,8 @@ Chartist.plugins.legend = function (options: any) { const legendSeries = legend.series || [i]; const li = createNameElement(i, legendText, classNamesViable); - const isActive: boolean = !(cacheInactiveLegends.indexOf(i) > -1); + // If the value is undefined or false, isActive is true + const isActive: boolean = !cacheInactiveLegends[i]; if (isActive) { activeSeries.push(seriesMetadata[i].data); activeLabels.push(seriesMetadata[i].label); From 3b8d3221cfd26689f9cac86e4d8a4eb4e482c214 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 7 Mar 2021 21:48:33 +0700 Subject: [PATCH 26/46] Adding enterprise sponsors i18n string. --- .../app/components/about/about.component.html | 2 ++ frontend/src/locale/messages.xlf | 36 +++++++++++-------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 909b8c8cd..de6003c28 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -43,6 +43,8 @@


+

Enterprise Sponsors

+

Community Sponsors ❤️

diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index aeabb0550..6bdbd8d9d 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -1155,11 +1155,19 @@ 16 + + Enterprise Sponsors + + src/app/components/about/about.component.html + 46 + + about.sponsors.enterprise + Community Sponsors ❤️ src/app/components/about/about.component.html - 46 + 48 about.sponsors.withHeart @@ -1167,7 +1175,7 @@ Become a sponsor ❤️ src/app/components/about/about.component.html - 62 + 64 about.become-a-sponsor @@ -1175,7 +1183,7 @@ Request invoice src/app/components/about/about.component.html - 84 + 86 about.sponsor.request-invoice @@ -1183,7 +1191,7 @@ Community Integrations src/app/components/about/about.component.html - 179 + 181 about.integrations @@ -1191,7 +1199,7 @@ Community Alliances src/app/components/about/about.component.html - 253 + 255 about.alliances @@ -1199,7 +1207,7 @@ Project Maintainers src/app/components/about/about.component.html - 269 + 271 about.maintainers @@ -1207,7 +1215,7 @@ Terms of Service src/app/components/about/about.component.html - 293 + 295 src/app/dashboard/dashboard.component.html @@ -1224,7 +1232,7 @@ Navigate to https://mempool.space/about to sponsor src/app/components/about/about.component.html - 64 + 66 about.navigate-to-sponsor @@ -1232,7 +1240,7 @@ Amount required src/app/components/about/about.component.html - 81 + 83 about.sponsor.amount-required @@ -1240,7 +1248,7 @@ Minimum amount is 0.001 BTC src/app/components/about/about.component.html - 82 + 84 about.sponsor.minimum-amount @@ -1248,7 +1256,7 @@ If you donate 0.01 BTC or more, your profile photo will be added to the list of sponsors above :) src/app/components/about/about.component.html - 91 + 93 about.sponsor.description @@ -1256,7 +1264,7 @@ Waiting for transaction... src/app/components/about/about.component.html - 169 + 171 about.sponsor.waiting-for-transaction @@ -1264,7 +1272,7 @@ Donation confirmed! src/app/components/about/about.component.html - 174 + 176 about.sponsor.donation-confirmed @@ -1272,7 +1280,7 @@ Thank you! src/app/components/about/about.component.html - 174 + 176 about.sponsor.thank-you From 3e1c4a7e598061ee3dab09e1ed3895de3246bfbe Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 8 Mar 2021 12:56:40 +0900 Subject: [PATCH 27/46] Add link to Bisq's GitHub repo on About page --- frontend/src/app/components/about/about.component.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index de6003c28..4851cfc1b 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -180,6 +180,13 @@

Community Integrations

+ +
+ + Bisq +
+
+
From a52f98c39d79c51543bba8540856d084b14ab146 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 8 Mar 2021 18:33:02 +0900 Subject: [PATCH 28/46] Proxy /api/v1/contributors from mempool.space, also fix HTTP headers Fixes #366 --- production/nginx-mempool.conf | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/production/nginx-mempool.conf b/production/nginx-mempool.conf index e0489ad0b..3c11c0e6e 100644 --- a/production/nginx-mempool.conf +++ b/production/nginx-mempool.conf @@ -102,16 +102,37 @@ try_files $uri $uri/ /en-US/index.html =404; } - # mainnet API - location /api/v1/donations { - proxy_pass https://node220.bitcoin.wiz.biz; + # serivces API + location /api/v1/contributors { # don't rate limit this API prefix + proxy_pass https://node220.bitcoin.wiz.biz; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; + } + location /api/v1/donations { + # don't rate limit this API prefix + proxy_pass https://node220.bitcoin.wiz.biz; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; } location /api/v1/donations/images { + # don't rate limit this API prefix proxy_pass https://node220.bitcoin.wiz.biz; proxy_cache services; proxy_cache_valid 200 1d; + expires 7d; + add_header Cache-Control "public, no-transform"; + proxy_hide_header onion-location; + proxy_hide_header strict-transport-security; + proxy_hide_header content-security-policy; + proxy_hide_header x-frame-options; } + + # mainnet API location /api/v1/ws { proxy_pass http://127.0.0.1:8999/; proxy_http_version 1.1; From d5cc55867064306b2807b3af3d33e6e21466cb55 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 8 Mar 2021 18:50:21 +0900 Subject: [PATCH 29/46] Modify nginx.conf to cache HTML for 10m and static resources for 1h Fixes #61 --- production/nginx-mempool.conf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/production/nginx-mempool.conf b/production/nginx-mempool.conf index 3c11c0e6e..b9be208a6 100644 --- a/production/nginx-mempool.conf +++ b/production/nginx-mempool.conf @@ -34,6 +34,13 @@ # fallback for all URLs i.e. /address/foo /tx/foo /block/000 location / { try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + add_header Cache-Control "public, no-transform"; + expires 10m; + } + location /resources { + try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + add_header Cache-Control "public, no-transform"; + expires 1h; } location @index-redirect { add_header vary accept-language; From e32066affda31a2feb753bcb6dc7a7ab165b520f Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 9 Mar 2021 03:56:41 +0900 Subject: [PATCH 30/46] Display all Project Contributors on About page using GitHub API (#382) --- .../app/components/about/about.component.html | 32 ++++++++++++++++--- .../app/components/about/about.component.ts | 7 ++++ frontend/src/app/services/api.service.ts | 4 +++ nginx-mempool.conf | 6 ++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 4851cfc1b..528cb14fb 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -281,19 +281,43 @@
+

+ +

Project Contributors

+ +
+
+
+
+ + + +
+ + {{ contributor.name }} +
+
+
+ +

+


diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 6d7b3dbc1..59e941465 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -19,9 +19,11 @@ export class AboutComponent implements OnInit, OnDestroy { paymentForm: FormGroup; donationStatus = 1; sponsors$: Observable; + contributors$: Observable; donationObj: any; sponsorsEnabled = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; sponsors = null; + contributors = null; requestSubscription: Subscription | undefined; constructor( @@ -51,6 +53,11 @@ export class AboutComponent implements OnInit, OnDestroy { .subscribe((sponsors) => { this.sponsors = sponsors; }); + + this.apiService.getContributor$() + .subscribe((contributors) => { + this.contributors = contributors; + }); } ngOnDestroy() { diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index b31bb24f3..21a1aa8b3 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -77,6 +77,10 @@ export class ApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/donations'); } + getContributor$(): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/contributors'); + } + checkDonation$(orderId: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/donations/check?order_id=' + orderId); } diff --git a/nginx-mempool.conf b/nginx-mempool.conf index 6da53dfd2..8c2f6948b 100644 --- a/nginx-mempool.conf +++ b/nginx-mempool.conf @@ -40,6 +40,12 @@ location /api/v1/donations/images { proxy_pass https://mempool.space; } + location /api/v1/contributors { + proxy_pass https://mempool.space; + } + location /api/v1/contributors/images { + proxy_pass https://mempool.space; + } location /api/v1/ws { proxy_pass http://127.0.0.1:8999/; proxy_http_version 1.1; From a530d8b17f0458bf25394199f327c70f84ac5b4f Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 9 Mar 2021 14:09:58 +0900 Subject: [PATCH 31/46] Improve grammar, layout, and formatting of Terms of Service page --- .../terms-of-service.component.html | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.html b/frontend/src/app/components/terms-of-service/terms-of-service.component.html index e58b560b6..1ae690d41 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.html +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.html @@ -5,13 +5,14 @@

Terms of Service

-
Updated: March 07, 2021
+
Updated: March 09, 2021


The official mempool.space website and its API service are operated by Mempool Space K.K.

+

This website and its API service are operated by an individual member of the Bitcoin community, who is not affiliated with Mempool Space K.K.

By using this website or accessing its API, you agree to these Terms of Service:
@@ -31,31 +32,33 @@

PRIVACY POLICY

-

Out of respect for our users, this website does not utilize any third-party trackers, and the operators of this website do not share any user data with third-parties. However, your IP address may incidentally be collected as part of basic webserver logs for systems administration purposes, and as part of an anonymized self-hosted statistics application for analytics. Therefore we recommend using Tor browser to conceal your IP address when accessing this website, or operating your own self-hosted instance of this website.

+

Out of respect for the Bitcoin community, this website does not utilize any third-party trackers or cookies, and the operators of this website do not share any user data with third-parties. However, your IP address may be collected as part of basic webserver logs necessary for systems administration purposes, and as part of an anonymized self-hosted statistics application for analytics. To protect your privacy, use Tor browser to access this website's Tor V3 onion hostname to conceal your IP address, or alternatively install and use your own self-hosted instance of this website.


-

BITCOIN ONLY

+

BITCOIN ONLY POLICY

-

Out of respect for our users, this website does not support altcoins, and is generally Bitcoin Only. Fiat stablecoin tokens on Liquid and the BSQ governance token for the Bisq DAO are not considered altcoins, as they do not distract users from Bitcoin and are part of our stated mission to support the entire Bitcoin ecosystem and Bitcoin Layer 2 Networks.

+

Out of respect for the Bitcoin community, this website does not support altcoins, and is generally "Bitcoin Only". The IOU tokens for Bitcoin and fiat currencies on the Liquid network, and the BSQ colored Bitcoin for DAO governance on the Bisq Network, are not considered altcoins as they do not distract users from Bitcoin and are part of our stated mission to support the entire Bitcoin ecosystem including Bitcoin Layer 2 Networks.


-

EXTERNAL LINKS

+

EXTERNAL LINK POLICY

-

Out of respect for our users, this website does not display advertising, and generally does not link to external sources. However, to acknowledge members of the Bitcoin open-source community and direct supporters of The Mempool Open Source Project, external links will be made in the following cases:

+

Out of respect for the Bitcoin community, this website does not display advertising, and generally does not link to external websites. However, exceptions are made for references to Bitcoin's technical documentation, for acknowledgements of individual members and open-source projects within the Bitcoin community, and for direct contributors and supporters of The Mempool Open Source Project, as follows:

    -
  • If you are an individual contributor to The Mempool Open Source Project, and have made regular contributions to the satisfaction of its maintainers, we may display your Twitter or GitHub profile photo on the About page, with a link to your Twitter or GitHub profile.
  • +
  • In order to refer to Bitcoin technical documentation, external links may by added where applicable, to informational websites that respect that Bitcoin community and do not display advertising, altcoins, or third-party trackers, such as bitcoin.it and bitcoin.org.

  • -
  • If you are a member of the Bitcoin community on Twitter, and have made a one-time donation of at least 0.01 BTC to The Mempool Open Source Project on mempool.space/about, we will generally display your Twitter profile photo on the About page, with a link to your Twitter account.
  • +
  • In order to acknowledge individual contributors to The Mempool Open Source Project who have made at least 10 contributions visible on GitHub, the contributor's GitHub profile photo will automatically be displayed on mempool.space/about, with a link to their GitHub profile.

  • -
  • If you are a member of the Bitcoin community on GitHub, and have made recurring donations of at least $100 USD per month to The Mempool Open Source Project through the GitHub Sponsors program for at least 6 months, we will generally display your GitHub profile photo on the About page, with a link to your GitHub account.
  • +
  • In order to acknowledge members of the Bitcoin community who have made a one-time donation of at least 0.01 BTC to The Mempool Open Source Project on mempool.space/about, the Bitcoin community members's Twitter profile photo will automatically be displayed on mempool.space/about, with a link to their Twitter profile.

  • -
  • If you represent an open source project that benefits the Bitcoin community, and have integrated The Mempool Open Source Project into your project, we will generally feature the project's logo on the About page, with a link to the project's GitHub repository.
  • +
  • In order to acknowledge members of the Bitcoin community who have made recurring donations of at least $100 USD per month to The Mempool Open Source Project through our GitHub Sponsors program for at least 6 months, the Bitcoin community member's GitHub profile photo will automatically be displayed on mempool.space/about, with a link to their GitHub profile.

  • -
  • If you represent an alliance of members of the Bitcoin community, and that alliance has a relationship to The Mempool Open Source Project, we may display the alliance logo on the About page, with a link to the alliance website.
  • +
  • In order to acknowledge open source projects that benefit the Bitcoin community and have integrated The Mempool Open Source Project into their software, the open source project's logo may be displayed on mempool.space/about, with a link to the project's GitHub repository.

  • -
  • If you represent an enterprise organization, and have made a one-time donation of at least $25,000 USD to The Mempool Open Source Project, we will generally display your organization's logo on the About page, with a link to your organization's website.
  • +
  • In order to acknowledge federations or alliances within the Bitcoin community that have a relationship to The Mempool Open Source Project, the federation or alliance logo may be displayed on mempool.space/about, with a link to the alliance website.
  • +
    +
  • In order to acknowledge the enterprise organizations within the Bitcoin community that have made a significant one-time donation of at least $25,000 USD to The Mempool Open Source Project, the organization's logo may be displayed on mempool.space/about, with a link to the organization's website.

However, we reserve the right to remove any links from our website that in our sole discretion are inappropriate. All donations are non-refundable.

@@ -63,25 +66,37 @@

OPEN SOURCE LICENSE

-

Copyright © 2019-2021 The Mempool Open Source Project + Copyright © 2019-2021 The Mempool Open Source Project -

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, and/or sublicense 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. + 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, and/or sublicense copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -

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. +

-

Commons Clause License Condition v1.0 + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -

Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software. +

-

For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Cause License Condition notice. + 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. -
+

-

THIRD PARTY OPEN SOURCE LICENSES

+ Commons Clause License Condition v1.0 -

The Mempool Open Source Project uses open source software provided by third parties, and the copyright statements and licenses for these third-party components are included with this software at the following URL: THIRD-PARTY LICENSES.

+

+ + Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software. + +

+ + For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Cause License Condition notice. + +

+ +

THIRD PARTY LICENSES

+ +

The Mempool Open Source Project contains open source software provided by third parties, and the copyright statements and licenses for these third-party components are included at the following URL: THIRD-PARTY LICENSES.

From 4cbf2e0eb42d591d30501cd4cea1c079e718b87c Mon Sep 17 00:00:00 2001 From: Jonathan Underwood Date: Fri, 12 Mar 2021 15:20:40 +0900 Subject: [PATCH 32/46] Lower volume for sound effects (#385) * Turn down that racket *shakes cane* * Maybe a little lower * Maybe 80%? * 70? * 30 ok? * 65 sounds best --- frontend/src/app/services/audio.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/services/audio.service.ts b/frontend/src/app/services/audio.service.ts index 78b072bfc..bb765aa38 100644 --- a/frontend/src/app/services/audio.service.ts +++ b/frontend/src/app/services/audio.service.ts @@ -20,6 +20,7 @@ export class AudioService { this.isPlaying = true; this.audio.src = '../../../resources/sounds/' + name + '.mp3'; this.audio.load(); + this.audio.volume = 0.65; // 65% volume this.audio.play().catch((e) => { console.log('Play sound failed' + e); }); From 6b47895aec53fdc701f36ebb0930782abef36c04 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 15 Mar 2021 00:11:05 +0900 Subject: [PATCH 33/46] Change mempool project license to GNU Affero General Public License v3 The files contained in this source code repository are currently released as "open source" under the terms of the [MIT license](https://opensource.org/licenses/MIT), with the additional protections of the [Commons Clause License Condition v1](https://commonsclause.com/), in order to restrict monetization of the mempool app, with the intended result of mempool remaining free software (as in free beer) for the Bitcoin community. However, because of the Commons Clause being added to our license terms, The Mempool Open Source Project cannot formally be considered as [Free and open-source software (FOSS)](https://en.wikipedia.org/wiki/Free_and_open-source_software), according to the generally accepted definition of ["What is free software?"](https://www.gnu.org/philosophy/free-sw.en.html), and this has drawn some criticism from the Bitcoin open source community. Therefore, in order to make The Mempool Open Source Project truly FOSS, I hereby propose to change our project's license to the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0.html), which seems most suitable for a web application. While this won't keep the mempool free as in free beer, it will keep mempool free as in free speech, which is what actually matters. Here is [the TL;DR of AGPLv3](https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)): > The AGPL license differs from the other GNU licenses in that it was > built for network software. You can distribute modified versions if > you keep track of the changes and the date you made them. As per usual > with GNU licenses, you must license derivatives under AGPL. It > provides the same restrictions and freedoms as the GPLv3 but with an > additional clause which makes it so that source code must be > distributed along with web publication. Since web sites and services > are never distributed in the traditional sense, the AGPL is the GPL of > the web. Could all contributors to The Mempool Open Source Project please ACK this PR? @softsimon @wiz @bguillaumat @TechMiX @junderw @andrerfneves @pox @jambolo @6102bitcoin @devinbileck @fiatjaf @timlucmiptev @Czino @lucasmoten --- COPYING | 661 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 44 +--- 2 files changed, 673 insertions(+), 32 deletions(-) create mode 100644 COPYING diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..be3f7b28e --- /dev/null +++ b/COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. diff --git a/LICENSE b/LICENSE index c4670fc9f..f21c46044 100644 --- a/LICENSE +++ b/LICENSE @@ -1,35 +1,15 @@ -MIT License with Commons Clause License Condition v1.0 +The Mempool Open Source Project +Copyright (c) 2019-2021 The Mempool Open Source Project Developers -Copyright (c) 2019-2020 The Mempool Open Source Project +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at your +option) any later version. -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, and/or sublicense -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +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 Affero General Public +License for more details. -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. - -Commons Clause License Condition v1.0 - -Without limiting other conditions in the License, the grant of rights under -the License will not include, and the License does not grant to you, the -right to Sell the Software. - -For purposes of the foregoing, “Sell” means practicing any or all of the -rights granted to you under the License to provide to third parties, for a -fee or other consideration (including without limitation fees for hosting or -consulting/ support services related to the Software), a product or service -whose value derives, entirely or substantially, from the functionality of -the Software. Any license notice or attribution required by the License must -also include this Commons Cause License Condition notice. +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . From f173b17b90720e9267856e36c6534dc373f15280 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 15 Mar 2021 05:45:53 +0900 Subject: [PATCH 34/46] Delete MIT+CC license from Terms of Service, add AGPLv3 to About page --- .../app/components/about/about.component.html | 54 ++++++++++++------- .../terms-of-service.component.html | 34 +----------- 2 files changed, 36 insertions(+), 52 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 528cb14fb..f0d7358c3 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -275,6 +275,24 @@


+

Project Contributors

+ +
+
+
+
+ + + +
+ + {{ contributor.name }} +
+
+
+ +


+

Project Maintainers

@@ -298,29 +316,27 @@
+
+ Copyright (c) 2019-2021
+ The Mempool Open Source Project
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero 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 Affero General Public
+ License for more details.
+
+ GNU Affero General Public License v3.0

- -

Project Contributors

- -
-
-
-
- - - -
- - {{ contributor.name }} -
-
-
- -

+ Third Party Licenses -

+
Terms of Service diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.html b/frontend/src/app/components/terms-of-service/terms-of-service.component.html index 1ae690d41..9d1e0a43f 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.html +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.html @@ -64,39 +64,7 @@
-

OPEN SOURCE LICENSE

- - Copyright © 2019-2021 The Mempool Open Source Project - -

- - 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, and/or sublicense 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. - -

- - Commons Clause License Condition v1.0 - -

- - Without limiting other conditions in the License, the grant of rights under the License will not include, and the License does not grant to you, the right to Sell the Software. - -

- - For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you under the License to provide to third parties, for a fee or other consideration (including without limitation fees for hosting or consulting/ support services related to the Software), a product or service whose value derives, entirely or substantially, from the functionality of the Software. Any license notice or attribution required by the License must also include this Commons Cause License Condition notice. - -

- -

THIRD PARTY LICENSES

- -

The Mempool Open Source Project contains open source software provided by third parties, and the copyright statements and licenses for these third-party components are included at the following URL: THIRD-PARTY LICENSES.

+

EOF

From 6a07eb0d9157ff59d0eaa3f7f8601f97a62079c0 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 16 Mar 2021 01:55:21 +0900 Subject: [PATCH 35/46] Add link to WARden Portfolio app as Community Integration on About page --- .../app/components/about/about.component.html | 7 +++++++ frontend/src/resources/profile/warden.jpg | Bin 0 -> 15077 bytes 2 files changed, 7 insertions(+) create mode 100644 frontend/src/resources/profile/warden.jpg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index f0d7358c3..f583216f2 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -257,6 +257,13 @@ + +
+ + WARden +
+
+


Community Alliances

diff --git a/frontend/src/resources/profile/warden.jpg b/frontend/src/resources/profile/warden.jpg new file mode 100644 index 0000000000000000000000000000000000000000..740530593ce0b83a6691dfff8ac018d8eed30d12 GIT binary patch literal 15077 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 Date: Wed, 17 Mar 2021 22:23:29 +0900 Subject: [PATCH 36/46] Add link to Specter Wallet on our About page --- .../app/components/about/about.component.html | 7 +++++++ frontend/src/resources/profile/specter.jpg | Bin 0 -> 3313 bytes 2 files changed, 7 insertions(+) create mode 100644 frontend/src/resources/profile/specter.jpg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index f583216f2..2936a7d25 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -264,6 +264,13 @@ + +
+ + Specter +
+
+


Community Alliances

diff --git a/frontend/src/resources/profile/specter.jpg b/frontend/src/resources/profile/specter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d559ebe1e641fbdcd956bcfbe7fb4ac09a27c87d GIT binary patch literal 3313 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 Date: Thu, 18 Mar 2021 01:06:58 +0900 Subject: [PATCH 37/46] Fix icon for Specter Wallet on About page --- .../app/components/about/about.component.html | 14 +++++++------- frontend/src/resources/profile/specter.jpg | Bin 3313 -> 0 bytes frontend/src/resources/profile/specter.png | Bin 0 -> 67466 bytes 3 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 frontend/src/resources/profile/specter.jpg create mode 100644 frontend/src/resources/profile/specter.png diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 2936a7d25..4ff644cc8 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -222,6 +222,13 @@ + +
+ + Specter +
+
+
@@ -264,13 +271,6 @@
- -
- - Specter -
-
-


Community Alliances

diff --git a/frontend/src/resources/profile/specter.jpg b/frontend/src/resources/profile/specter.jpg deleted file mode 100644 index d559ebe1e641fbdcd956bcfbe7fb4ac09a27c87d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3313 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 Date: Thu, 18 Mar 2021 05:46:16 +0000 Subject: [PATCH 38/46] Fix typo in README (#392) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e65422775..deb89708f 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Install mempool dependencies from npm and build the backend: ```bash # backend - cd ../backend/ + cd backend npm install npm run build ``` From ac4588cdab4ff807cb35c74ea5e2a08a188b642e Mon Sep 17 00:00:00 2001 From: andrewtoth Date: Thu, 18 Mar 2021 05:52:46 +0000 Subject: [PATCH 39/46] Add recommended fee percentile config (#394) --- backend/mempool-config.sample.json | 3 ++- backend/src/api/common.ts | 7 +++++++ backend/src/api/mempool-blocks.ts | 3 ++- backend/src/config.ts | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index 82bcfbe56..c444929b5 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -7,7 +7,8 @@ "API_URL_PREFIX": "/api/v1/", "POLL_RATE_MS": 2000, "CACHE_DIR": "./cache", - "CLEAR_PROTECTION_MINUTES": 20 + "CLEAR_PROTECTION_MINUTES": 20, + "RECOMMENDED_FEE_PERCENTILE": 50 }, "CORE_RPC": { "HOST": "127.0.0.1", diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 1c0fa7b77..5ed2d4c4a 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -12,6 +12,13 @@ export class Common { return medianNr; } + static percentile(numbers: number[], percentile: number) { + if (percentile === 50) return this.median(numbers); + const index = Math.ceil(numbers.length * (100 - percentile) * 1e-2); + if (index < 0 || index > numbers.length - 1) return 0; + return numbers[index]; + } + static getFeesInRange(transactions: TransactionExtended[], rangeLength: number) { const arr = [transactions[transactions.length - 1].feePerVsize]; const chunk = 1 / (rangeLength - 1); diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index d3dbfcb16..823eeb6ab 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -1,5 +1,6 @@ import { MempoolBlock, TransactionExtended, MempoolBlockWithTransactions } from '../mempool.interfaces'; import { Common } from './common'; +import config from '../config'; class MempoolBlocks { private static DEFAULT_PROJECTED_BLOCKS_AMOUNT = 8; @@ -76,7 +77,7 @@ class MempoolBlocks { blockVSize: blockVSize, nTx: transactions.length, totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0), - medianFee: Common.median(transactions.map((tx) => tx.feePerVsize)), + medianFee: Common.percentile(transactions.map((tx) => tx.feePerVsize), config.MEMPOOL.RECOMMENDED_FEE_PERCENTILE), feeRange: Common.getFeesInRange(transactions, rangeLength), transactionIds: transactions.map((tx) => tx.txid), }; diff --git a/backend/src/config.ts b/backend/src/config.ts index b213d5edc..ace63394c 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -10,6 +10,7 @@ interface IConfig { POLL_RATE_MS: number; CACHE_DIR: string; CLEAR_PROTECTION_MINUTES: number; + RECOMMENDED_FEE_PERCENTILE: number; }; ESPLORA: { REST_API_URL: string; @@ -64,6 +65,7 @@ const defaults: IConfig = { 'POLL_RATE_MS': 2000, 'CACHE_DIR': './cache', 'CLEAR_PROTECTION_MINUTES': 20, + 'RECOMMENDED_FEE_PERCENTILE': 50, }, 'ESPLORA': { 'REST_API_URL': 'http://127.0.0.1:3000', From 8b5d3dabe7becc71ab916404b80c51f8025557fc Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 18 Mar 2021 16:29:11 +0900 Subject: [PATCH 40/46] Update package.json license tags --- backend/package.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index a8add53e8..676b2e4dc 100644 --- a/backend/package.json +++ b/backend/package.json @@ -2,7 +2,7 @@ "name": "mempool-backend", "version": "2.0.0", "description": "Bitcoin mempool visualizer and blockchain explorer backend", - "license": "MIT", + "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", "repository": { "type": "git", diff --git a/frontend/package.json b/frontend/package.json index dd2bba86b..6bea8afa5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,7 +2,7 @@ "name": "mempool-frontend", "version": "2.0.0", "description": "Bitcoin mempool visualizer and blockchain explorer backend", - "license": "MIT", + "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", "repository": { "type": "git", From f1f847a9f8bebd5acb0a1297da96c35c375f700e Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 18 Mar 2021 17:37:51 +0900 Subject: [PATCH 41/46] Add the GNU AGPLv3 logo to About page --- .../app/components/about/about.component.html | 1 + frontend/src/resources/profile/gnuagplv3.svg | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 frontend/src/resources/profile/gnuagplv3.svg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 4ff644cc8..273495658 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -343,6 +343,7 @@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
License for more details.
+
GNU Affero General Public License v3.0

diff --git a/frontend/src/resources/profile/gnuagplv3.svg b/frontend/src/resources/profile/gnuagplv3.svg new file mode 100644 index 000000000..505d940db --- /dev/null +++ b/frontend/src/resources/profile/gnuagplv3.svg @@ -0,0 +1,51 @@ + +Layer 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b2d08d69cfd3a9aea9a1544079ec89d7ccf3ce5e Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 18 Mar 2021 19:18:59 +0700 Subject: [PATCH 42/46] Round sat/vB in fee rating tooltip. fixes #364 --- .../app/components/tx-fee-rating/tx-fee-rating.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.html b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.html index ff2ab4e33..4bfdf885d 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.html +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.html @@ -1,3 +1,3 @@ Optimal -Overpaid {{ overpaidTimes }}x -Overpaid {{ overpaidTimes }}x +Overpaid {{ overpaidTimes }}x +Overpaid {{ overpaidTimes }}x From d3c53c740681e4b971e0d3ff6e8ca723ee76221a Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 18 Mar 2021 23:47:40 +0700 Subject: [PATCH 43/46] CPFP support (#395) * CPFP support. fixes #5 fixes #353 fixes #360 * Use effectiveFeePerVsize for mempool statistics. * Renaming endpoint cpfp-info to just cpfp. * Renaming decended to BestDescendant. * Updating language file with new strings. --- .../bitcoin/bitcoin-api-abstract-factory.ts | 1 - backend/src/api/bitcoin/bitcoin-api.ts | 13 +- backend/src/api/bitcoin/esplora-api.ts | 5 - backend/src/api/blocks.ts | 13 +- backend/src/api/common.ts | 67 ++- backend/src/api/mempool-blocks.ts | 38 +- backend/src/api/statistics.ts | 6 +- backend/src/api/transaction-utils.ts | 4 +- backend/src/index.ts | 4 +- backend/src/mempool.interfaces.ts | 21 + backend/src/routes.ts | 24 + .../api-docs/api-docs.component.html | 4 + .../transaction/transaction.component.html | 64 +-- .../transaction/transaction.component.ts | 22 +- .../tx-fee-rating/tx-fee-rating.component.ts | 2 +- .../src/app/interfaces/electrs.interface.ts | 1 + .../src/app/interfaces/node-api.interface.ts | 17 + frontend/src/app/services/api.service.ts | 6 +- frontend/src/locale/messages.xlf | 464 +++++++++--------- 19 files changed, 487 insertions(+), 289 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index 951d9576c..697c68e43 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -3,7 +3,6 @@ import { IEsploraApi } from './esplora-api.interface'; export interface AbstractBitcoinApi { $getRawMempool(): Promise; $getRawTransaction(txId: string, skipConversion?: boolean, addPrevout?: boolean): Promise; - $getRawTransactionBitcoind(txId: string, skipConversion?: boolean, addPrevout?: boolean): Promise; $getBlockHeightTip(): Promise; $getTxIdsForBlock(hash: string): Promise; $getBlockHash(height: number): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 919b06092..2abebeb07 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -22,16 +22,6 @@ class BitcoinApi implements AbstractBitcoinApi { }); } - $getRawTransactionBitcoind(txId: string, skipConversion = false, addPrevout = false): Promise { - return this.bitcoindClient.getRawTransaction(txId, true) - .then((transaction: IBitcoinApi.Transaction) => { - if (skipConversion) { - return transaction; - } - return this.$convertTransaction(transaction, addPrevout); - }); - } - $getRawTransaction(txId: string, skipConversion = false, addPrevout = false): Promise { // If the transaction is in the mempool we already converted and fetched the fee. Only prevouts are missing const txInMempool = mempool.getMempool()[txId]; @@ -47,6 +37,9 @@ class BitcoinApi implements AbstractBitcoinApi { return this.bitcoindClient.getRawTransaction(txId, true) .then((transaction: IBitcoinApi.Transaction) => { if (skipConversion) { + transaction.vout.forEach((vout) => { + vout.value = vout.value * 100000000; + }); return transaction; } return this.$convertTransaction(transaction, addPrevout); diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index a98941899..5aa9f7fec 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -48,11 +48,6 @@ class ElectrsApi implements AbstractBitcoinApi { throw new Error('Method getAddressTransactions not implemented.'); } - $getRawTransactionBitcoind(txId: string): Promise { - return axios.get(config.ESPLORA.REST_API_URL + '/tx/' + txId, this.axiosConfig) - .then((response) => response.data); - } - $getAddressPrefix(prefix: string): string[] { throw new Error('Method not implemented.'); } diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 7f9581ea9..25f92ff5c 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -84,14 +84,21 @@ class Blocks { } } + transactions.forEach((tx) => { + if (!tx.cpfpChecked) { + Common.setRelativesAndGetCpfpInfo(tx, mempool); + } + }); + logger.debug(`${transactionsFound} of ${txIds.length} found in mempool. ${txIds.length - transactionsFound} not found.`); const blockExtended: BlockExtended = Object.assign({}, block); blockExtended.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0); blockExtended.coinbaseTx = transactionUtils.stripCoinbaseTransaction(transactions[0]); - transactions.sort((a, b) => b.feePerVsize - a.feePerVsize); - blockExtended.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.feePerVsize)) : 0; - blockExtended.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions.slice(0, transactions.length - 1), 8) : [0, 0]; + transactions.shift(); + transactions.sort((a, b) => b.effectiveFeePerVsize - a.effectiveFeePerVsize); + blockExtended.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.effectiveFeePerVsize)) : 0; + blockExtended.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions, 8) : [0, 0]; if (block.height % 2016 === 0) { this.lastDifficultyAdjustmentTime = block.timestamp; diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 5ed2d4c4a..021990418 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -1,4 +1,4 @@ -import { TransactionExtended, TransactionStripped } from '../mempool.interfaces'; +import { CpfpInfo, TransactionExtended, TransactionStripped } from '../mempool.interfaces'; export class Common { static median(numbers: number[]) { @@ -20,16 +20,16 @@ export class Common { } static getFeesInRange(transactions: TransactionExtended[], rangeLength: number) { - const arr = [transactions[transactions.length - 1].feePerVsize]; + const arr = [transactions[transactions.length - 1].effectiveFeePerVsize]; const chunk = 1 / (rangeLength - 1); let itemsToAdd = rangeLength - 2; while (itemsToAdd > 0) { - arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].feePerVsize); + arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].effectiveFeePerVsize); itemsToAdd--; } - arr.push(transactions[0].feePerVsize); + arr.push(transactions[0].effectiveFeePerVsize); return arr; } @@ -71,4 +71,63 @@ export class Common { }, ms); }); } + + static setRelativesAndGetCpfpInfo(tx: TransactionExtended, memPool: { [txid: string]: TransactionExtended }): CpfpInfo { + const parents = this.findAllParents(tx, memPool); + + let totalWeight = tx.weight + parents.reduce((prev, val) => prev + val.weight, 0); + let totalFees = tx.fee + parents.reduce((prev, val) => prev + val.fee, 0); + + tx.ancestors = parents + .map((t) => { + return { + txid: t.txid, + weight: t.weight, + fee: t.fee, + }; + }); + + // Add high (high fee) decendant weight and fees + if (tx.bestDescendant) { + totalWeight += tx.bestDescendant.weight; + totalFees += tx.bestDescendant.fee; + } + + tx.effectiveFeePerVsize = totalFees / (totalWeight / 4); + tx.cpfpChecked = true; + + return { + ancestors: tx.ancestors, + bestDescendant: tx.bestDescendant || null, + }; + } + + + private static findAllParents(tx: TransactionExtended, memPool: { [txid: string]: TransactionExtended }): TransactionExtended[] { + let parents: TransactionExtended[] = []; + tx.vin.forEach((parent) => { + const parentTx = memPool[parent.txid]; + if (parentTx) { + if (tx.bestDescendant && tx.bestDescendant.fee / (tx.bestDescendant.weight / 4) > parentTx.feePerVsize) { + if (parentTx.bestDescendant && parentTx.bestDescendant.fee < tx.fee + tx.bestDescendant.fee) { + parentTx.bestDescendant = { + weight: tx.weight + tx.bestDescendant.weight, + fee: tx.fee + tx.bestDescendant.fee, + txid: tx.txid, + }; + } + } else if (tx.feePerVsize > parentTx.feePerVsize) { + parentTx.bestDescendant = { + weight: tx.weight, + fee: tx.fee, + txid: tx.txid + }; + } + parents.push(parentTx); + parents = parents.concat(this.findAllParents(parentTx, memPool)); + } + }); + return parents; + } + } diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index 823eeb6ab..c52c458e9 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -1,3 +1,4 @@ +import logger from '../logger'; import { MempoolBlock, TransactionExtended, MempoolBlockWithTransactions } from '../mempool.interfaces'; import { Common } from './common'; import config from '../config'; @@ -33,9 +34,40 @@ class MempoolBlocks { memPoolArray.push(latestMempool[i]); } } + const start = new Date().getTime(); + + // Clear bestDescendants & ancestors + memPoolArray.forEach((tx) => { + tx.bestDescendant = null; + tx.ancestors = []; + tx.cpfpChecked = false; + if (!tx.effectiveFeePerVsize) { + tx.effectiveFeePerVsize = tx.feePerVsize; + } + }); + + // First sort memPoolArray.sort((a, b) => b.feePerVsize - a.feePerVsize); - const transactionsSorted = memPoolArray.filter((tx) => tx.feePerVsize); - this.mempoolBlocks = this.calculateMempoolBlocks(transactionsSorted); + + // Loop through and traverse all ancestors and sum up all the sizes + fees + // Pass down size + fee to all unconfirmed children + let sizes = 0; + memPoolArray.forEach((tx, i) => { + sizes += tx.weight + if (sizes > 4000000 * 8) { + return; + } + Common.setRelativesAndGetCpfpInfo(tx, memPool); + }); + + // Final sort, by effective fee + memPoolArray.sort((a, b) => b.effectiveFeePerVsize - a.effectiveFeePerVsize); + + const end = new Date().getTime(); + const time = end - start; + logger.debug('Mempool blocks calculated in ' + time / 1000 + ' seconds'); + + this.mempoolBlocks = this.calculateMempoolBlocks(memPoolArray); } private calculateMempoolBlocks(transactionsSorted: TransactionExtended[]): MempoolBlockWithTransactions[] { @@ -77,7 +109,7 @@ class MempoolBlocks { blockVSize: blockVSize, nTx: transactions.length, totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0), - medianFee: Common.percentile(transactions.map((tx) => tx.feePerVsize), config.MEMPOOL.RECOMMENDED_FEE_PERCENTILE), + medianFee: Common.percentile(transactions.map((tx) => tx.effectiveFeePerVsize), config.MEMPOOL.RECOMMENDED_FEE_PERCENTILE), feeRange: Common.getFeesInRange(transactions, rangeLength), transactionIds: transactions.map((tx) => tx.txid), }; diff --git a/backend/src/api/statistics.ts b/backend/src/api/statistics.ts index dbac2936e..468f136b9 100644 --- a/backend/src/api/statistics.ts +++ b/backend/src/api/statistics.ts @@ -68,13 +68,13 @@ class Statistics { } } // Remove 0 and undefined - memPoolArray = memPoolArray.filter((tx) => tx.feePerVsize); + memPoolArray = memPoolArray.filter((tx) => tx.effectiveFeePerVsize); if (!memPoolArray.length) { return; } - memPoolArray.sort((a, b) => a.feePerVsize - b.feePerVsize); + memPoolArray.sort((a, b) => a.effectiveFeePerVsize - b.effectiveFeePerVsize); const totalWeight = memPoolArray.map((tx) => tx.vsize).reduce((acc, curr) => acc + curr) * 4; const totalFee = memPoolArray.map((tx) => tx.fee).reduce((acc, curr) => acc + curr); @@ -85,7 +85,7 @@ class Statistics { memPoolArray.forEach((transaction) => { for (let i = 0; i < logFees.length; i++) { - if ((logFees[i] === 2000 && transaction.feePerVsize >= 2000) || transaction.feePerVsize <= logFees[i]) { + if ((logFees[i] === 2000 && transaction.effectiveFeePerVsize >= 2000) || transaction.effectiveFeePerVsize <= logFees[i]) { if (weightVsizeFees[logFees[i]]) { weightVsizeFees[logFees[i]] += transaction.vsize; } else { diff --git a/backend/src/api/transaction-utils.ts b/backend/src/api/transaction-utils.ts index 8c6b89a6b..8c3867329 100644 --- a/backend/src/api/transaction-utils.ts +++ b/backend/src/api/transaction-utils.ts @@ -26,9 +26,11 @@ class TransactionUtils { } private extendTransaction(transaction: IEsploraApi.Transaction): TransactionExtended { + const feePerVbytes = Math.max(1, (transaction.fee || 0) / (transaction.weight / 4)); const transactionExtended: TransactionExtended = Object.assign({ vsize: Math.round(transaction.weight / 4), - feePerVsize: Math.max(1, (transaction.fee || 0) / (transaction.weight / 4)), + feePerVsize: feePerVbytes, + effectiveFeePerVsize: feePerVbytes, }, transaction); if (!transaction.status.confirmed) { transactionExtended.firstSeen = Math.round((new Date().getTime() / 1000)); diff --git a/backend/src/index.ts b/backend/src/index.ts index 2389d38b5..ff32c915b 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -73,6 +73,8 @@ class Server { this.server = http.createServer(this.app); this.wss = new WebSocket.Server({ server: this.server }); + this.setUpWebsocketHandling(); + diskCache.loadMempoolCache(); if (config.DATABASE.ENABLED) { @@ -86,7 +88,6 @@ class Server { fiatConversion.startService(); this.setUpHttpApiRoutes(); - this.setUpWebsocketHandling(); this.runMainUpdateLoop(); if (config.BISQ_BLOCKS.ENABLED) { @@ -145,6 +146,7 @@ class Server { setUpHttpApiRoutes() { this.app .get(config.MEMPOOL.API_URL_PREFIX + 'transaction-times', routes.getTransactionTimes) + .get(config.MEMPOOL.API_URL_PREFIX + 'cpfp/:txId', routes.getCpfpInfo) .get(config.MEMPOOL.API_URL_PREFIX + 'fees/recommended', routes.getRecommendedFees) .get(config.MEMPOOL.API_URL_PREFIX + 'fees/mempool-blocks', routes.getMempoolBlocks) .get(config.MEMPOOL.API_URL_PREFIX + 'backend-info', routes.getBackendInfo) diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index f0237cd10..2f080b110 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -26,6 +26,27 @@ export interface TransactionExtended extends IEsploraApi.Transaction { vsize: number; feePerVsize: number; firstSeen?: number; + effectiveFeePerVsize: number; + ancestors?: Ancestor[]; + bestDescendant?: BestDescendant | null; + cpfpChecked?: boolean; +} + +interface Ancestor { + txid: string; + weight: number; + fee: number; +} + +interface BestDescendant { + txid: string; + weight: number; + fee: number; +} + +export interface CpfpInfo { + ancestors: Ancestor[]; + bestDescendant: BestDescendant | null; } export interface TransactionStripped { diff --git a/backend/src/routes.ts b/backend/src/routes.ts index c03c08b75..0677663b3 100644 --- a/backend/src/routes.ts +++ b/backend/src/routes.ts @@ -94,6 +94,30 @@ class Routes { res.json(times); } + public getCpfpInfo(req: Request, res: Response) { + if (!/^[a-fA-F0-9]{64}$/.test(req.params.txId)) { + res.status(501).send(`Invalid transaction ID.`); + return; + } + + const tx = mempool.getMempool()[req.params.txId]; + if (!tx) { + res.status(404).send(`Transaction doesn't exist in the mempool.`); + return; + } + + if (tx.cpfpChecked) { + res.json({ + ancestors: tx.ancestors, + bestDescendant: tx.bestDescendant || null, + }); + } + + const cpfpInfo = Common.setRelativesAndGetCpfpInfo(tx, mempool.getMempool()); + + res.json(cpfpInfo); + } + public getBackendInfo(req: Request, res: Response) { res.json(backendInfo.getBackendInfo()); } diff --git a/frontend/src/app/components/api-docs/api-docs.component.html b/frontend/src/app/components/api-docs/api-docs.component.html index 14204e36d..583f89008 100644 --- a/frontend/src/app/components/api-docs/api-docs.component.html +++ b/frontend/src/app/components/api-docs/api-docs.component.html @@ -40,6 +40,10 @@ GET {{ network.val === '' ? '' : '/' + network.val }}/api/v1/fees/mempool-blocks Returns current mempool as projected blocks. + + GET {{ network.val === '' ? '' : '/' + network.val }}/api/v1/cpfp/:txid + Returns the ancestors and the best descendant fees for a transaction. + diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 48e6db4b8..7938429fa 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -73,22 +73,7 @@
- - - - - - - - - - - -
Fee{{ tx.fee | number }} sat ()
Fee per vByte - {{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} sat/vB -   - -
+
@@ -146,18 +131,7 @@
- - - - - - - - - - - -
Fee{{ tx.fee | number }} sat ()
Fee per vByte{{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} sat/vB
+
@@ -295,4 +269,36 @@ In ~{{ i }} minute {{ i }} block -{{ i }} blocks \ No newline at end of file +{{ i }} blocks + + + + + + + + + + + + + + + + + +
Fee{{ tx.fee | number }} sat ()
Fee per vByte + {{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} sat/vB + +   + + +
Effective fee + {{ tx.effectiveFeePerVsize | number : '1.1-1' }} sat/vB + +   + + +
+ +
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index cbd3916fc..d0c396959 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -91,10 +91,28 @@ export class TransactionComponent implements OnInit, OnDestroy { this.getTransactionTime(); } } + if (this.tx.status.confirmed) { this.stateService.markBlock$.next({ blockHeight: tx.status.block_height }); } else { - this.stateService.markBlock$.next({ txFeePerVSize: tx.fee / (tx.weight / 4) }); + if (tx.effectiveFeePerVsize) { + this.stateService.markBlock$.next({ txFeePerVSize: tx.effectiveFeePerVsize }); + } else { + this.apiService.getCpfpinfo$(this.tx.txid) + .subscribe((cpfpInfo) => { + let totalWeight = tx.weight + cpfpInfo.ancestors.reduce((prev, val) => prev + val.weight, 0); + let totalFees = tx.fee + cpfpInfo.ancestors.reduce((prev, val) => prev + val.fee, 0); + + if (cpfpInfo.bestDescendant) { + totalWeight += cpfpInfo.bestDescendant.weight; + totalFees += cpfpInfo.bestDescendant.fee; + } + + const effectiveFeePerVsize = totalFees / (totalWeight / 4); + this.tx.effectiveFeePerVsize = effectiveFeePerVsize; + this.stateService.markBlock$.next({ txFeePerVSize: effectiveFeePerVsize }); + }); + } } }, (error) => { @@ -139,7 +157,7 @@ export class TransactionComponent implements OnInit, OnDestroy { return; } - const txFeePerVSize = this.tx.fee / (this.tx.weight / 4); + const txFeePerVSize = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4); for (const block of mempoolBlocks) { for (let i = 0; i < block.feeRange.length - 1; i++) { diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts index a1a7b0b3c..2055e995f 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts @@ -52,7 +52,7 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy { } calculateRatings(block: Block) { - const feePervByte = this.tx.fee / (this.tx.weight / 4); + const feePervByte = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4); this.medianFeeNeeded = block.medianFee; // Block not filled diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index b53c01ef9..1ea0184ae 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -11,6 +11,7 @@ export interface Transaction { // Custom properties firstSeen?: number; + effectiveFeePerVsize?: number; } export interface Recent { diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 56b7c90c9..24e6bf35d 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -8,3 +8,20 @@ export interface OptimizedMempoolStats { mempool_byte_weight: number; vsizes: number[] | string[]; } + +interface Ancestor { + txid: string; + weight: number; + fee: number; +} + +interface BestDescendant { + txid: string; + weight: number; + fee: number; +} + +export interface CpfpInfo { + ancestors: Ancestor[]; + bestDescendant: BestDescendant | null; +} diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 21a1aa8b3..32ff8b092 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; -import { OptimizedMempoolStats } from '../interfaces/node-api.interface'; +import { CpfpInfo, OptimizedMempoolStats } from '../interfaces/node-api.interface'; import { Observable } from 'rxjs'; import { StateService } from './state.service'; import { WebsocketResponse } from '../interfaces/websocket.interface'; @@ -88,4 +88,8 @@ export class ApiService { getInitData$(): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/init-data'); } + + getCpfpinfo$(txid: string): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp/' + txid); + } } diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index 6bdbd8d9d..cc70645cc 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -97,7 +97,7 @@ Inputs & Outputs src/app/components/transaction/transaction.component.html - 168 + 142 src/app/bisq/bisq-transaction/bisq-transaction.component.html @@ -114,7 +114,7 @@ Details src/app/components/transaction/transaction.component.html - 170 + 144 Transaction Details transaction.details @@ -123,11 +123,11 @@ Details src/app/components/transaction/transaction.component.html - 176 + 150 src/app/components/transaction/transaction.component.html - 252 + 226 src/app/bisq/bisq-transaction/bisq-transaction.component.html @@ -143,7 +143,7 @@ Size src/app/components/transaction/transaction.component.html - 181 + 155 Transaction Size transaction.size @@ -152,7 +152,7 @@ Virtual size src/app/components/transaction/transaction.component.html - 185 + 159 Transaction Virtual Size transaction.vsize @@ -161,7 +161,7 @@ Weight src/app/components/transaction/transaction.component.html - 189 + 163 Transaction Weight transaction.weight @@ -187,15 +187,156 @@ Transaction Timestamp transaction.timestamp + + Included in block + + src/app/components/transaction/transaction.component.html + 55 + + + src/app/bisq/bisq-transaction/bisq-transaction.component.html + 36 + + Transaction included in block + transaction.included-in-block + + + Confirmed + + src/app/components/transaction/transaction.component.html + 62 + + Transaction Confirmed state + transaction.confirmed + + + After + + src/app/components/transaction/transaction.component.html + 63 + + Transaction confirmed after + transaction.confirmed.after + + + Features + + src/app/components/transaction/transaction.component.html + 67 + + + src/app/components/transaction/transaction.component.html + 125 + + + src/app/bisq/bisq-transaction/bisq-transaction.component.html + 42 + + Transaction features + transaction.features + + + ETA + + src/app/components/transaction/transaction.component.html + 104 + + Transaction ETA + transaction.eta + + + First seen + + src/app/components/transaction/transaction.component.html + 98 + + Transaction first seen + transaction.first-seen + + + In several hours (or more) + + src/app/components/transaction/transaction.component.html + 111 + + Transaction ETA in several hours or more + transaction.eta.in-several-hours + + + Transaction not found. + + src/app/components/transaction/transaction.component.html + 251 + + transaction.error.transaction-not-found + + + Waiting for it to appear in the mempool... + + src/app/components/transaction/transaction.component.html + 252 + + transaction.error.waiting-for-it-to-appear + + + In ~ minutes + + src/app/components/transaction/transaction.component.html + 267 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 41 + + Block Frequency (plural) + mempool-blocks.eta-of-next-block-plural + + + In ~ minute + + src/app/components/transaction/transaction.component.html + 269 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 43 + + Block Frequency + mempool-blocks.eta-of-next-block + + + block + + src/app/components/transaction/transaction.component.html + 271 + + + src/app/components/footer/footer.component.html + 22 + + shared.block + + + blocks + + src/app/components/transaction/transaction.component.html + 272 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 30 + + + src/app/components/footer/footer.component.html + 23 + + shared.blocks + Fee src/app/components/transaction/transaction.component.html - 79 - - - src/app/components/transaction/transaction.component.html - 152 + 278 Transaction fee transaction.fee @@ -204,11 +345,7 @@ sat src/app/components/transaction/transaction.component.html - 80 - - - src/app/components/transaction/transaction.component.html - 153 + 279 Transaction Fee sat transaction.fee.sat @@ -217,11 +354,7 @@ Fee per vByte src/app/components/transaction/transaction.component.html - 83 - - - src/app/components/transaction/transaction.component.html - 156 + 282 src/app/bisq/bisq-transaction/bisq-transaction.component.html @@ -234,11 +367,11 @@ sat/vB src/app/components/transaction/transaction.component.html - 85 + 284 src/app/components/transaction/transaction.component.html - 157 + 294 src/app/components/transactions-list/transactions-list.component.html @@ -295,150 +428,14 @@ sat/vB shared.sat-vbyte - - Included in block + + Effective fee src/app/components/transaction/transaction.component.html - 55 + 292 - - src/app/bisq/bisq-transaction/bisq-transaction.component.html - 36 - - Transaction included in block - transaction.included-in-block - - - Confirmed - - src/app/components/transaction/transaction.component.html - 62 - - Transaction Confirmed state - transaction.confirmed - - - After - - src/app/components/transaction/transaction.component.html - 63 - - Transaction confirmed after - transaction.confirmed.after - - - Features - - src/app/components/transaction/transaction.component.html - 67 - - - src/app/components/transaction/transaction.component.html - 140 - - - src/app/bisq/bisq-transaction/bisq-transaction.component.html - 42 - - Transaction features - transaction.features - - - ETA - - src/app/components/transaction/transaction.component.html - 119 - - Transaction ETA - transaction.eta - - - First seen - - src/app/components/transaction/transaction.component.html - 113 - - Transaction first seen - transaction.first-seen - - - In several hours (or more) - - src/app/components/transaction/transaction.component.html - 126 - - Transaction ETA in several hours or more - transaction.eta.in-several-hours - - - Transaction not found. - - src/app/components/transaction/transaction.component.html - 277 - - transaction.error.transaction-not-found - - - Waiting for it to appear in the mempool... - - src/app/components/transaction/transaction.component.html - 278 - - transaction.error.waiting-for-it-to-appear - - - In ~ minutes - - src/app/components/transaction/transaction.component.html - 293 - - - src/app/components/mempool-blocks/mempool-blocks.component.html - 41 - - Block Frequency (plural) - mempool-blocks.eta-of-next-block-plural - - - In ~ minute - - src/app/components/transaction/transaction.component.html - 295 - - - src/app/components/mempool-blocks/mempool-blocks.component.html - 43 - - Block Frequency - mempool-blocks.eta-of-next-block - - - block - - src/app/components/transaction/transaction.component.html - 297 - - - src/app/components/footer/footer.component.html - 22 - - shared.block - - - blocks - - src/app/components/transaction/transaction.component.html - 298 - - - src/app/components/mempool-blocks/mempool-blocks.component.html - 30 - - - src/app/components/footer/footer.component.html - 23 - - shared.blocks + Effective transaction fee + transaction.effective-fee Coinbase @@ -929,7 +926,7 @@ src/app/components/api-docs/api-docs.component.html - 75 + 79 @@ -1060,7 +1057,7 @@ src/app/components/about/about.component.ts - 38 + 40 master-page.about @@ -1199,15 +1196,23 @@ Community Alliances src/app/components/about/about.component.html - 255 + 276 about.alliances + + Project Contributors + + src/app/components/about/about.component.html + 292 + + about.contributors + Project Maintainers src/app/components/about/about.component.html - 271 + 310 about.maintainers @@ -1215,7 +1220,7 @@ Terms of Service src/app/components/about/about.component.html - 295 + 357 src/app/dashboard/dashboard.component.html @@ -1223,7 +1228,7 @@ src/app/components/api-docs/api-docs.component.html - 284 + 288 Terms of Service shared.terms-of-service @@ -1847,27 +1852,27 @@
src/app/components/api-docs/api-docs.component.html - 54 + 58 src/app/components/api-docs/api-docs.component.html - 80 + 84 src/app/components/api-docs/api-docs.component.html - 134 + 138 src/app/components/api-docs/api-docs.component.html - 184 + 188 src/app/components/api-docs/api-docs.component.html - 218 + 222 src/app/components/api-docs/api-docs.component.html - 243 + 247 API Docs Endpoint api-docs.shared.endpoint @@ -1884,27 +1889,27 @@
src/app/components/api-docs/api-docs.component.html - 55 + 59 src/app/components/api-docs/api-docs.component.html - 81 + 85 src/app/components/api-docs/api-docs.component.html - 135 + 139 src/app/components/api-docs/api-docs.component.html - 185 + 189 src/app/components/api-docs/api-docs.component.html - 219 + 223 src/app/components/api-docs/api-docs.component.html - 244 + 248 API Docs Description api-docs.shared.description @@ -1944,11 +1949,20 @@ API Docs for /api/v1/fees/mempool-blocks api-docs.fees.mempool-blocks + + Returns the ancestors and the best descendant fees for a transaction. + + src/app/components/api-docs/api-docs.component.html + 45 + + API Docs for /api/v1/fees/cpfp + api-docs.fees.cpfp + Mempool src/app/components/api-docs/api-docs.component.html - 49 + 53 API Docs tab for Mempool api-docs.tab.mempool @@ -1957,7 +1971,7 @@ Returns current mempool backlog statistics. src/app/components/api-docs/api-docs.component.html - 59 + 63 API Docs for /api/mempool api-docs.mempool.mempool @@ -1966,7 +1980,7 @@ Get the full list of txids in the mempool as an array. The order of the txids is arbitrary and does not match bitcoind. src/app/components/api-docs/api-docs.component.html - 63 + 67 API Docs for /api/mempool/txids api-docs.mempool.txids @@ -1975,7 +1989,7 @@ Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: txid, fee, vsize, and value. src/app/components/api-docs/api-docs.component.html - 67 + 71 API Docs for /api/mempool/recent api-docs.mempool.recent @@ -1984,77 +1998,77 @@ Returns the confirmation status of a block. Available fields: in_best_chain (boolean, false for orphaned blocks), next_best (the hash of the next block, only available for blocks in the best chain). src/app/components/api-docs/api-docs.component.html - 89 + 93 Returns a list of transactions in the block (up to 25 transactions beginning at start_index). Transactions returned here do not have the status field, since all the transactions share the same block and confirmation status. src/app/components/api-docs/api-docs.component.html - 93 + 97 Returns a list of all txids in the block. src/app/components/api-docs/api-docs.component.html - 97 + 101 Returns the transaction at index :index within the specified block. src/app/components/api-docs/api-docs.component.html - 101 + 105 Returns the raw block representation in binary. src/app/components/api-docs/api-docs.component.html - 105 + 109 Returns the hash of the block currently at :height. src/app/components/api-docs/api-docs.component.html - 109 + 113 Returns the 10 newest blocks starting at the tip or at :start_height if specified. src/app/components/api-docs/api-docs.component.html - 113 + 117 Returns the height of the last block. src/app/components/api-docs/api-docs.component.html - 117 + 121 Returns the hash of the last block. src/app/components/api-docs/api-docs.component.html - 121 + 125 Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, and previousblockhash. src/app/components/api-docs/api-docs.component.html - 85 + 89 Transactions src/app/components/api-docs/api-docs.component.html - 129 + 133 API Docs tab for Transactions api-docs.tab.transactions @@ -2063,70 +2077,70 @@ Returns details about a transaction. Available fields: txid, version, locktime, size, weight, fee, vin, vout, and status. src/app/components/api-docs/api-docs.component.html - 139 + 143 Returns the confirmation status of a transaction. Available fields: confirmed (boolean), block_height (optional), and block_hash (optional). src/app/components/api-docs/api-docs.component.html - 143 + 147 Returns a transaction serialized as hex. src/app/components/api-docs/api-docs.component.html - 147 + 151 Returns a transaction as binary data. src/app/components/api-docs/api-docs.component.html - 151 + 155 Returns a merkle inclusion proof for the transaction using Electrum's blockchain.transaction.get_merkle format. src/app/components/api-docs/api-docs.component.html - 159 + 163 Returns the spending status of a transaction output. Available fields: spent (boolean), txid (optional), vin (optional), and status (optional, the status of the spending tx). src/app/components/api-docs/api-docs.component.html - 163 + 167 Returns the spending status of all transaction outputs. src/app/components/api-docs/api-docs.component.html - 167 + 171 Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The txid will be returned on success. src/app/components/api-docs/api-docs.component.html - 171 + 175 Returns a merkle inclusion proof for the transaction using bitcoind's merkleblock format. src/app/components/api-docs/api-docs.component.html - 155 + 159 Addresses src/app/components/api-docs/api-docs.component.html - 179 + 183 API Docs tab for Addresses api-docs.tab.addresses @@ -2135,42 +2149,42 @@ Returns details about an address. Available fields: address, chain_stats, and mempool_stats. chain,mempool_stats each contain an object with tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, and spent_txo_sum. src/app/components/api-docs/api-docs.component.html - 189 + 193 Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid (see below). src/app/components/api-docs/api-docs.component.html - 193,194 + 197,198 Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query. src/app/components/api-docs/api-docs.component.html - 197 + 201 Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging). src/app/components/api-docs/api-docs.component.html - 201 + 205 Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid, vout, value, and status (with the status of the funding tx).There is also a valuecommitment field that may appear in place of value, plus the following additional fields: asset/assetcommitment, nonce/noncecommitment, surjection_proof, and range_proof. src/app/components/api-docs/api-docs.component.html - 205 + 209 Assets src/app/components/api-docs/api-docs.component.html - 213 + 217 API Docs tab for Assets api-docs.tab.assets @@ -2179,28 +2193,28 @@ Returns information about a Liquid asset. src/app/components/api-docs/api-docs.component.html - 223 + 227 Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset. src/app/components/api-docs/api-docs.component.html - 227 + 231 Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units. src/app/components/api-docs/api-docs.component.html - 231 + 235 BSQ src/app/components/api-docs/api-docs.component.html - 238 + 242 API Docs tab for BSQ api-docs.tab.bsq @@ -2209,49 +2223,49 @@ Returns statistics about all Bisq transactions. src/app/components/api-docs/api-docs.component.html - 248 + 252 Returns details about a Bisq transaction. src/app/components/api-docs/api-docs.component.html - 252 + 256 Returns :length of latest Bisq transactions, starting from :index. src/app/components/api-docs/api-docs.component.html - 256 + 260 Returns all Bisq transactions that exist in a Bitcoin block. src/app/components/api-docs/api-docs.component.html - 260 + 264 Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index. src/app/components/api-docs/api-docs.component.html - 264 + 268 Returns the most recently processed Bitcoin block height processed by Bisq. src/app/components/api-docs/api-docs.component.html - 268 + 272 Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address. src/app/components/api-docs/api-docs.component.html - 272 + 276 From 6f1cdd0c8b735750fd8fc50ffd82c2c55d95cd30 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 18 Mar 2021 23:53:39 +0700 Subject: [PATCH 44/46] Adding missing return after expressjs response. --- backend/src/routes.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/routes.ts b/backend/src/routes.ts index 0677663b3..399c3b8ab 100644 --- a/backend/src/routes.ts +++ b/backend/src/routes.ts @@ -111,6 +111,7 @@ class Routes { ancestors: tx.ancestors, bestDescendant: tx.bestDescendant || null, }); + return; } const cpfpInfo = Common.setRelativesAndGetCpfpInfo(tx, mempool.getMempool()); From 5148de8f171dbe0e81da6526acf9bdea5d1fc5b9 Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 19 Mar 2021 13:47:37 +0700 Subject: [PATCH 45/46] Shuffle mempool transactions before saving disk cache. (#398) fixes #397 --- backend/src/api/common.ts | 8 +++++++- backend/src/api/disk-cache.ts | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 021990418..130e0205d 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -71,6 +71,13 @@ export class Common { }, ms); }); } + + static shuffleArray(array: any[]) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + } static setRelativesAndGetCpfpInfo(tx: TransactionExtended, memPool: { [txid: string]: TransactionExtended }): CpfpInfo { const parents = this.findAllParents(tx, memPool); @@ -129,5 +136,4 @@ export class Common { }); return parents; } - } diff --git a/backend/src/api/disk-cache.ts b/backend/src/api/disk-cache.ts index cbdff49f0..909f12681 100644 --- a/backend/src/api/disk-cache.ts +++ b/backend/src/api/disk-cache.ts @@ -6,6 +6,7 @@ import blocks from './blocks'; import logger from '../logger'; import config from '../config'; import { TransactionExtended } from '../mempool.interfaces'; +import { Common } from './common'; class DiskCache { private static FILE_NAME = config.MEMPOOL.CACHE_DIR + '/cache.json'; @@ -27,6 +28,8 @@ class DiskCache { mempoolArray.push(mempool[tx]); } + Common.shuffleArray(mempoolArray); + const chunkSize = Math.floor(mempoolArray.length / DiskCache.CHUNK_FILES); await fsPromises.writeFile(DiskCache.FILE_NAME, JSON.stringify({ From e688948e42e042af9028cc719b1d2838466bcd92 Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 19 Mar 2021 19:10:11 +0700 Subject: [PATCH 46/46] Bugfix: Don't extend already extended transactions to not override the firstSeen property. fixes #390 --- backend/src/api/transaction-utils.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/api/transaction-utils.ts b/backend/src/api/transaction-utils.ts index 8c3867329..2a5d3a9ad 100644 --- a/backend/src/api/transaction-utils.ts +++ b/backend/src/api/transaction-utils.ts @@ -26,6 +26,11 @@ class TransactionUtils { } private extendTransaction(transaction: IEsploraApi.Transaction): TransactionExtended { + // @ts-ignore + if (transaction.vsize) { + // @ts-ignore + return transaction; + } const feePerVbytes = Math.max(1, (transaction.fee || 0) / (transaction.weight / 4)); const transactionExtended: TransactionExtended = Object.assign({ vsize: Math.round(transaction.weight / 4),