From 6bee7541d6c744dda9c9e0562d9c333cd3da6dc5 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 28 Dec 2020 23:45:16 +0100 Subject: [PATCH 01/64] very first draft for transaction in/outs for atomics --- src/currency_core/currency_basic.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 8ac26a6f..4acf9a9f 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -223,6 +223,21 @@ namespace currency END_SERIALIZE() }; + struct txin_to_htlc + { + crypto::hash hltc_origin; + txout_v key_offset; + crypto::key_image k_image; // double spending protection + std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature + + BEGIN_SERIALIZE_OBJECT() + FIELD(hltc_origin) + FIELD(key_offset) + VARINT_FIELD(k_image) + FIELD(etc_details) + END_SERIALIZE() + }; + struct txin_multisig { uint64_t amount; @@ -249,6 +264,21 @@ namespace currency END_SERIALIZE() }; + struct txout_htlc + { + crypto::hash htlc_hash; + uint8_t flags; //select type of the hash, may be some extra info in future + uint64_t expiration; + crypto::public_key pkey; + + BEGIN_SERIALIZE_OBJECT() + FIELD(htlc_hash) + FIELD(flags) + VARINT_FIELD(expiration) + FIELD(pkey) + END_SERIALIZE() + }; + typedef boost::variant txin_v; typedef boost::variant txout_target_v; From 4ee72ef7ac2fae145a05ec9f5718a3f229819cd0 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Tue, 29 Dec 2020 23:42:37 +0100 Subject: [PATCH 02/64] implemnting htlc inputs/outputs handling in core(work in progress) --- src/currency_core/blockchain_storage.cpp | 143 +++++++++++++++-------- src/currency_core/blockchain_storage.h | 25 ++-- src/currency_core/currency_basic.h | 9 +- 3 files changed, 120 insertions(+), 57 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index c22f9ad9..03052424 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4210,7 +4210,15 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha LOG_ERROR("Failed to validate multisig input #" << sig_index << " (ms out id: " << in_ms.multisig_out_id << ") in tx: " << tx_prefix_hash); return false; } - + } + else if (txin.type() == typeid(txin_to_htlc)) + { + const txin_to_htlc& in_ms_htlc = boost::get(txin); + if (!check_tx_input(tx, sig_index, in_ms, tx_prefix_hash, *psig, max_used_block_height)) + { + LOG_ERROR("Failed to validate multisig input #" << sig_index << " (ms out id: " << in_ms.multisig_out_id << ") in tx: " << tx_prefix_hash); + return false; + } } sig_index++; } @@ -4243,6 +4251,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, //TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_get_keys_loop); std::vector output_keys; + scan_for_keys_context scan_context = AUTO_VAL_INIT(scan_context); if(!get_output_keys_for_input_with_checks(tx, txin, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase)) { LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); @@ -4257,61 +4266,77 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, return check_tokey_input(tx, in_index, txin, tx_prefix_hash, sig, output_keys_ptrs); } +//---------------------------------------------------------------- +struct outputs_visitor +{ + std::vector& m_results_collector; + blockchain_storage::scan_for_keys_context& m_scan_context; + const blockchain_storage& m_bch; + uint64_t& m_source_max_unlock_time_for_pos_coinbase; + outputs_visitor(std::vector& results_collector, + const blockchain_storage& bch, + uint64_t& source_max_unlock_time_for_pos_coinbase, + blockchain_storage::scan_for_keys_context& scan_context) + : m_results_collector(results_collector) + , m_bch(bch) + , m_source_max_unlock_time_for_pos_coinbase(source_max_unlock_time_for_pos_coinbase), + , m_scan_context(scan_context) + {} + bool handle_output(const transaction& source_tx, const transaction& validated_tx, const tx_out& out, uint64_t out_i) + { + //check tx unlock time + uint64_t source_out_unlock_time = get_tx_unlock_time(source_tx, out_i); + //let coinbase sources for PoS block to have locked inputs, the outputs supposed to be locked same way, except the reward + if (is_coinbase(validated_tx) && is_pos_block(validated_tx)) + { + CHECK_AND_ASSERT_MES(should_unlock_value_be_treated_as_block_height(source_out_unlock_time), false, "source output #" << out_i << " is locked by time, not by height, which is not allowed for PoS coinbase"); + if (source_out_unlock_time > m_source_max_unlock_time_for_pos_coinbase) + m_source_max_unlock_time_for_pos_coinbase = source_out_unlock_time; + } + else + { + if (!m_bch.is_tx_spendtime_unlocked(source_out_unlock_time)) + { + LOG_PRINT_L0("One of outputs for one of inputs have wrong tx.unlock_time = " << get_tx_unlock_time(source_tx, out_i)); + return false; + } + } + + if (out.target.type() == typeid(txout_htlc)) + { + m_scan_context.htlc_outs.push_back(boost::get(out.target)); + + }else if (out.target.type() != typeid(txout_to_key)) + { + LOG_PRINT_L0("Output have wrong type id, which=" << out.target.which()); + return false; + } + + crypto::public_key pk = boost::get(out.target).key; + m_results_collector.push_back(pk); + return true; + } +}; + //------------------------------------------------------------------ // Checks each referenced output for: // 1) source tx unlock time validity // 2) mixin restrictions // 3) general gindex/ref_by_id corectness -bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, const txin_to_key& txin, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const +bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const { CRITICAL_REGION_LOCAL(m_read_lock); - struct outputs_visitor - { - std::vector& m_results_collector; - const blockchain_storage& m_bch; - uint64_t& m_source_max_unlock_time_for_pos_coinbase; - outputs_visitor(std::vector& results_collector, - const blockchain_storage& bch, - uint64_t& source_max_unlock_time_for_pos_coinbase) - : m_results_collector(results_collector) - , m_bch(bch) - , m_source_max_unlock_time_for_pos_coinbase(source_max_unlock_time_for_pos_coinbase) - {} - bool handle_output(const transaction& source_tx, const transaction& validated_tx, const tx_out& out, uint64_t out_i) - { - //check tx unlock time - uint64_t source_out_unlock_time = get_tx_unlock_time(source_tx, out_i); - //let coinbase sources for PoS block to have locked inputs, the outputs supposed to be locked same way, except the reward - if (is_coinbase(validated_tx) && is_pos_block(validated_tx)) - { - CHECK_AND_ASSERT_MES(should_unlock_value_be_treated_as_block_height(source_out_unlock_time), false, "source output #" << out_i << " is locked by time, not by height, which is not allowed for PoS coinbase"); - if (source_out_unlock_time > m_source_max_unlock_time_for_pos_coinbase) - m_source_max_unlock_time_for_pos_coinbase = source_out_unlock_time; - } - else - { - if (!m_bch.is_tx_spendtime_unlocked(source_out_unlock_time)) - { - LOG_PRINT_L0("One of outputs for one of inputs have wrong tx.unlock_time = " << get_tx_unlock_time(source_tx, out_i)); - return false; - } - } - - if(out.target.type() != typeid(txout_to_key)) - { - LOG_PRINT_L0("Output have wrong type id, which=" << out.target.which()); - return false; - } - crypto::public_key pk = boost::get(out.target).key; - m_results_collector.push_back(pk); - return true; - } - }; - outputs_visitor vi(output_keys, *this, source_max_unlock_time_for_pos_coinbase); - return scan_outputkeys_for_indexes(tx, txin, vi, max_related_block_height); + return scan_outputkeys_for_indexes(tx, amount, key_offsets, vi, max_related_block_height, scan_context); } +//------------------------------------------------------------------ +bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const +{ + scan_for_keys_context scan_context_dummy = AUTO_VAL_INIT(); + return get_output_keys_for_input_with_checks(tx, amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_context_dummy); +} + //------------------------------------------------------------------ // Note: this function can be used for checking to_key inputs against either main chain or alt chain, that's why it has output_keys_ptrs parameter // Doesn't check spent flags, the caller must check it. @@ -4491,6 +4516,32 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, return true; #undef LOC_CHK +} +//------------------------------------------------------------------ +bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, const txin_to_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const +{ + CRITICAL_REGION_LOCAL(m_read_lock); + + //TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_get_keys_loop); + + std::vector output_keys; + std::vector key_offsets(txin.key_offset, 1); + scan_for_keys_context scan_contex = AUTO_VAL_INIT(); + if (!get_output_keys_for_input_with_checks(tx, txin.amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_contex)) + { + LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); + return false; + } + //TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_ch_in_get_keys_loop); + + //TODO: add caludating hash + + std::vector output_keys_ptrs; + output_keys_ptrs.reserve(output_keys.size()); + for (auto& ptr : output_keys) + output_keys_ptrs.push_back(&ptr); + + return check_tokey_input(tx, in_index, txin, tx_prefix_hash, sig, output_keys_ptrs); } //------------------------------------------------------------------ uint64_t blockchain_storage::get_adjusted_time() const diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 5dea7182..5142e72d 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -133,6 +133,11 @@ namespace currency } }; + struct scan_for_keys_context + { + std::list htlc_outs; + }; + // == Output indexes local lookup table conception == // Main chain gindex table (outputs_container) contains data which is valid only for the most recent block. // Thus it can't be used to get output's global index for any arbitrary height because there's no height data. @@ -232,7 +237,7 @@ namespace currency template bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) { uint64_t stub = 0; return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub); } template - bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height) const ; + bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& scan_context) const ; uint64_t get_current_blockchain_size() const; uint64_t get_top_block_height() const; @@ -273,12 +278,14 @@ namespace currency bool validate_tx_service_attachmens_in_services(const tx_service_attachment& a, size_t i, const transaction& tx)const; bool check_tx_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase)const; bool check_tx_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const; + bool check_tx_input(const transaction& tx, size_t in_index, const txin_to_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height)const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash) const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height, crypto::hash& max_used_block_id)const; bool check_ms_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const transaction& source_tx, size_t out_n) const; bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const; - bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_to_key& txin, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; + bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const; + bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; bool check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const; uint64_t get_current_comulative_blocksize_limit()const; uint64_t get_current_hashrate(size_t aprox_count)const; @@ -664,17 +671,17 @@ namespace currency //------------------------------------------------------------------ //------------------------------------------------------------------ template - bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height) const + bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, uint64_t amount, const std::vector& key_offsets, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const { CRITICAL_REGION_LOCAL(m_read_lock); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size); - uint64_t outs_count_for_amount = m_db_outputs.get_item_size(tx_in_to_key.amount); + uint64_t outs_count_for_amount = m_db_outputs.get_item_size(amount); TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size); if (!outs_count_for_amount) return false; TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute); - std::vector absolute_offsets = relative_output_offsets_to_absolute(tx_in_to_key.key_offsets); + std::vector absolute_offsets = relative_output_offsets_to_absolute(key_offsets); TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop); size_t output_index = 0; @@ -696,7 +703,7 @@ namespace currency LOG_ERROR("Wrong index in transaction inputs: " << i << ", expected maximum " << outs_count_for_amount - 1); return false; } - auto out_ptr = m_db_outputs.get_subitem(tx_in_to_key.amount, i); + auto out_ptr = m_db_outputs.get_subitem(amount, i); tx_id = out_ptr->tx_id; n = out_ptr->out_no; TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_loop_get_subitem); @@ -715,9 +722,9 @@ namespace currency - CHECK_AND_ASSERT_MES(tx_in_to_key.key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller - bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, tx_in_to_key.key_offsets.size() - 1); - CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast(outtk.mix_attr) << ", key_offsets.size = " << tx_in_to_key.key_offsets.size()); + CHECK_AND_ASSERT_MES(key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller + bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, key_offsets.size() - 1); + CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast(outtk.mix_attr) << ", key_offsets.size = " << key_offsets.size()); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop_handle_output); if (!vis.handle_output(tx_ptr->tx, validated_tx, tx_ptr->tx.vout[n], n)) diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 4acf9a9f..f20f1a66 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -225,6 +225,7 @@ namespace currency struct txin_to_htlc { + uint64_t amount; crypto::hash hltc_origin; txout_v key_offset; crypto::key_image k_image; // double spending protection @@ -279,9 +280,9 @@ namespace currency END_SERIALIZE() }; - typedef boost::variant txin_v; + typedef boost::variant txin_v; - typedef boost::variant txout_target_v; + typedef boost::variant txout_target_v; //typedef std::pair out_t; struct tx_out @@ -797,6 +798,10 @@ SET_VARIANT_TAGS(currency::tx_receiver, 32, "receiver2"); // @#@ TODO @#@ SET_VARIANT_TAGS(currency::extra_alias_entry, 33, "alias_entry2"); +//htlc +SET_VARIANT_TAGS(currency::txin_to_htlc, 34, "txin_to_htlc"); +SET_VARIANT_TAGS(currency::txout_htlc, 35, "txout_htlc"); + #undef SET_VARIANT_TAGS From faa8f69cf38b0e8990edd77d20e7fe134df4554e Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 30 Dec 2020 23:58:03 +0100 Subject: [PATCH 03/64] added sha256 and RIPEMD160 sources --- src/crypto/RIPEMD160.c | 287 +++++++++ src/crypto/RIPEMD160.h | 150 +++++ src/crypto/RIPEMD160_helper.h | 38 ++ src/crypto/bitcoin/byteswap.h | 59 ++ src/crypto/bitcoin/common.h | 110 ++++ src/crypto/bitcoin/cpuid.h | 24 + src/crypto/bitcoin/endian.h | 241 ++++++++ src/crypto/bitcoin/sha256.cpp | 719 +++++++++++++++++++++++ src/crypto/bitcoin/sha256.h | 41 ++ src/crypto/bitcoin/sha256_helper.h | 29 + src/currency_core/blockchain_storage.cpp | 21 +- src/currency_core/currency_basic.h | 4 +- 12 files changed, 1721 insertions(+), 2 deletions(-) create mode 100644 src/crypto/RIPEMD160.c create mode 100644 src/crypto/RIPEMD160.h create mode 100644 src/crypto/RIPEMD160_helper.h create mode 100644 src/crypto/bitcoin/byteswap.h create mode 100644 src/crypto/bitcoin/common.h create mode 100644 src/crypto/bitcoin/cpuid.h create mode 100644 src/crypto/bitcoin/endian.h create mode 100644 src/crypto/bitcoin/sha256.cpp create mode 100644 src/crypto/bitcoin/sha256.h create mode 100644 src/crypto/bitcoin/sha256_helper.h diff --git a/src/crypto/RIPEMD160.c b/src/crypto/RIPEMD160.c new file mode 100644 index 00000000..0f832305 --- /dev/null +++ b/src/crypto/RIPEMD160.c @@ -0,0 +1,287 @@ +/********************************************************************\ +* +* FILE: rmd160.c +* +* CONTENTS: A sample C-implementation of the RIPEMD-160 +* hash-function. +* TARGET: any computer with an ANSI C compiler +* +* AUTHOR: Antoon Bosselaers, ESAT-COSIC +* DATE: 1 March 1996 +* VERSION: 1.0 +* +* Copyright (c) 1996 Katholieke Universiteit Leuven +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without restriction, +* including without limitation the rights to use, copy, modify, merge, +* publish, distribute, sublicense, and/or sell copies of the Software, +* and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +\********************************************************************/ + +/* header files */ +#include +#include +#include +#include "RIPEMD160.h" + +/********************************************************************/ + +void MDinit(dword *MDbuf) +{ + MDbuf[0] = 0x67452301UL; + MDbuf[1] = 0xefcdab89UL; + MDbuf[2] = 0x98badcfeUL; + MDbuf[3] = 0x10325476UL; + MDbuf[4] = 0xc3d2e1f0UL; + + return; +} + +/********************************************************************/ + +void compress(dword *MDbuf, dword *X) +{ + dword aa = MDbuf[0], bb = MDbuf[1], cc = MDbuf[2], + dd = MDbuf[3], ee = MDbuf[4]; + dword aaa = MDbuf[0], bbb = MDbuf[1], ccc = MDbuf[2], + ddd = MDbuf[3], eee = MDbuf[4]; + + /* round 1 */ + FF(aa, bb, cc, dd, ee, X[0], 11); + FF(ee, aa, bb, cc, dd, X[1], 14); + FF(dd, ee, aa, bb, cc, X[2], 15); + FF(cc, dd, ee, aa, bb, X[3], 12); + FF(bb, cc, dd, ee, aa, X[4], 5); + FF(aa, bb, cc, dd, ee, X[5], 8); + FF(ee, aa, bb, cc, dd, X[6], 7); + FF(dd, ee, aa, bb, cc, X[7], 9); + FF(cc, dd, ee, aa, bb, X[8], 11); + FF(bb, cc, dd, ee, aa, X[9], 13); + FF(aa, bb, cc, dd, ee, X[10], 14); + FF(ee, aa, bb, cc, dd, X[11], 15); + FF(dd, ee, aa, bb, cc, X[12], 6); + FF(cc, dd, ee, aa, bb, X[13], 7); + FF(bb, cc, dd, ee, aa, X[14], 9); + FF(aa, bb, cc, dd, ee, X[15], 8); + + /* round 2 */ + GG(ee, aa, bb, cc, dd, X[7], 7); + GG(dd, ee, aa, bb, cc, X[4], 6); + GG(cc, dd, ee, aa, bb, X[13], 8); + GG(bb, cc, dd, ee, aa, X[1], 13); + GG(aa, bb, cc, dd, ee, X[10], 11); + GG(ee, aa, bb, cc, dd, X[6], 9); + GG(dd, ee, aa, bb, cc, X[15], 7); + GG(cc, dd, ee, aa, bb, X[3], 15); + GG(bb, cc, dd, ee, aa, X[12], 7); + GG(aa, bb, cc, dd, ee, X[0], 12); + GG(ee, aa, bb, cc, dd, X[9], 15); + GG(dd, ee, aa, bb, cc, X[5], 9); + GG(cc, dd, ee, aa, bb, X[2], 11); + GG(bb, cc, dd, ee, aa, X[14], 7); + GG(aa, bb, cc, dd, ee, X[11], 13); + GG(ee, aa, bb, cc, dd, X[8], 12); + + /* round 3 */ + HH(dd, ee, aa, bb, cc, X[3], 11); + HH(cc, dd, ee, aa, bb, X[10], 13); + HH(bb, cc, dd, ee, aa, X[14], 6); + HH(aa, bb, cc, dd, ee, X[4], 7); + HH(ee, aa, bb, cc, dd, X[9], 14); + HH(dd, ee, aa, bb, cc, X[15], 9); + HH(cc, dd, ee, aa, bb, X[8], 13); + HH(bb, cc, dd, ee, aa, X[1], 15); + HH(aa, bb, cc, dd, ee, X[2], 14); + HH(ee, aa, bb, cc, dd, X[7], 8); + HH(dd, ee, aa, bb, cc, X[0], 13); + HH(cc, dd, ee, aa, bb, X[6], 6); + HH(bb, cc, dd, ee, aa, X[13], 5); + HH(aa, bb, cc, dd, ee, X[11], 12); + HH(ee, aa, bb, cc, dd, X[5], 7); + HH(dd, ee, aa, bb, cc, X[12], 5); + + /* round 4 */ + II(cc, dd, ee, aa, bb, X[1], 11); + II(bb, cc, dd, ee, aa, X[9], 12); + II(aa, bb, cc, dd, ee, X[11], 14); + II(ee, aa, bb, cc, dd, X[10], 15); + II(dd, ee, aa, bb, cc, X[0], 14); + II(cc, dd, ee, aa, bb, X[8], 15); + II(bb, cc, dd, ee, aa, X[12], 9); + II(aa, bb, cc, dd, ee, X[4], 8); + II(ee, aa, bb, cc, dd, X[13], 9); + II(dd, ee, aa, bb, cc, X[3], 14); + II(cc, dd, ee, aa, bb, X[7], 5); + II(bb, cc, dd, ee, aa, X[15], 6); + II(aa, bb, cc, dd, ee, X[14], 8); + II(ee, aa, bb, cc, dd, X[5], 6); + II(dd, ee, aa, bb, cc, X[6], 5); + II(cc, dd, ee, aa, bb, X[2], 12); + + /* round 5 */ + JJ(bb, cc, dd, ee, aa, X[4], 9); + JJ(aa, bb, cc, dd, ee, X[0], 15); + JJ(ee, aa, bb, cc, dd, X[5], 5); + JJ(dd, ee, aa, bb, cc, X[9], 11); + JJ(cc, dd, ee, aa, bb, X[7], 6); + JJ(bb, cc, dd, ee, aa, X[12], 8); + JJ(aa, bb, cc, dd, ee, X[2], 13); + JJ(ee, aa, bb, cc, dd, X[10], 12); + JJ(dd, ee, aa, bb, cc, X[14], 5); + JJ(cc, dd, ee, aa, bb, X[1], 12); + JJ(bb, cc, dd, ee, aa, X[3], 13); + JJ(aa, bb, cc, dd, ee, X[8], 14); + JJ(ee, aa, bb, cc, dd, X[11], 11); + JJ(dd, ee, aa, bb, cc, X[6], 8); + JJ(cc, dd, ee, aa, bb, X[15], 5); + JJ(bb, cc, dd, ee, aa, X[13], 6); + + /* parallel round 1 */ + JJJ(aaa, bbb, ccc, ddd, eee, X[5], 8); + JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9); + JJJ(ddd, eee, aaa, bbb, ccc, X[7], 9); + JJJ(ccc, ddd, eee, aaa, bbb, X[0], 11); + JJJ(bbb, ccc, ddd, eee, aaa, X[9], 13); + JJJ(aaa, bbb, ccc, ddd, eee, X[2], 15); + JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15); + JJJ(ddd, eee, aaa, bbb, ccc, X[4], 5); + JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7); + JJJ(bbb, ccc, ddd, eee, aaa, X[6], 7); + JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8); + JJJ(eee, aaa, bbb, ccc, ddd, X[8], 11); + JJJ(ddd, eee, aaa, bbb, ccc, X[1], 14); + JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14); + JJJ(bbb, ccc, ddd, eee, aaa, X[3], 12); + JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6); + + /* parallel round 2 */ + III(eee, aaa, bbb, ccc, ddd, X[6], 9); + III(ddd, eee, aaa, bbb, ccc, X[11], 13); + III(ccc, ddd, eee, aaa, bbb, X[3], 15); + III(bbb, ccc, ddd, eee, aaa, X[7], 7); + III(aaa, bbb, ccc, ddd, eee, X[0], 12); + III(eee, aaa, bbb, ccc, ddd, X[13], 8); + III(ddd, eee, aaa, bbb, ccc, X[5], 9); + III(ccc, ddd, eee, aaa, bbb, X[10], 11); + III(bbb, ccc, ddd, eee, aaa, X[14], 7); + III(aaa, bbb, ccc, ddd, eee, X[15], 7); + III(eee, aaa, bbb, ccc, ddd, X[8], 12); + III(ddd, eee, aaa, bbb, ccc, X[12], 7); + III(ccc, ddd, eee, aaa, bbb, X[4], 6); + III(bbb, ccc, ddd, eee, aaa, X[9], 15); + III(aaa, bbb, ccc, ddd, eee, X[1], 13); + III(eee, aaa, bbb, ccc, ddd, X[2], 11); + + /* parallel round 3 */ + HHH(ddd, eee, aaa, bbb, ccc, X[15], 9); + HHH(ccc, ddd, eee, aaa, bbb, X[5], 7); + HHH(bbb, ccc, ddd, eee, aaa, X[1], 15); + HHH(aaa, bbb, ccc, ddd, eee, X[3], 11); + HHH(eee, aaa, bbb, ccc, ddd, X[7], 8); + HHH(ddd, eee, aaa, bbb, ccc, X[14], 6); + HHH(ccc, ddd, eee, aaa, bbb, X[6], 6); + HHH(bbb, ccc, ddd, eee, aaa, X[9], 14); + HHH(aaa, bbb, ccc, ddd, eee, X[11], 12); + HHH(eee, aaa, bbb, ccc, ddd, X[8], 13); + HHH(ddd, eee, aaa, bbb, ccc, X[12], 5); + HHH(ccc, ddd, eee, aaa, bbb, X[2], 14); + HHH(bbb, ccc, ddd, eee, aaa, X[10], 13); + HHH(aaa, bbb, ccc, ddd, eee, X[0], 13); + HHH(eee, aaa, bbb, ccc, ddd, X[4], 7); + HHH(ddd, eee, aaa, bbb, ccc, X[13], 5); + + /* parallel round 4 */ + GGG(ccc, ddd, eee, aaa, bbb, X[8], 15); + GGG(bbb, ccc, ddd, eee, aaa, X[6], 5); + GGG(aaa, bbb, ccc, ddd, eee, X[4], 8); + GGG(eee, aaa, bbb, ccc, ddd, X[1], 11); + GGG(ddd, eee, aaa, bbb, ccc, X[3], 14); + GGG(ccc, ddd, eee, aaa, bbb, X[11], 14); + GGG(bbb, ccc, ddd, eee, aaa, X[15], 6); + GGG(aaa, bbb, ccc, ddd, eee, X[0], 14); + GGG(eee, aaa, bbb, ccc, ddd, X[5], 6); + GGG(ddd, eee, aaa, bbb, ccc, X[12], 9); + GGG(ccc, ddd, eee, aaa, bbb, X[2], 12); + GGG(bbb, ccc, ddd, eee, aaa, X[13], 9); + GGG(aaa, bbb, ccc, ddd, eee, X[9], 12); + GGG(eee, aaa, bbb, ccc, ddd, X[7], 5); + GGG(ddd, eee, aaa, bbb, ccc, X[10], 15); + GGG(ccc, ddd, eee, aaa, bbb, X[14], 8); + + /* parallel round 5 */ + FFF(bbb, ccc, ddd, eee, aaa, X[12], 8); + FFF(aaa, bbb, ccc, ddd, eee, X[15], 5); + FFF(eee, aaa, bbb, ccc, ddd, X[10], 12); + FFF(ddd, eee, aaa, bbb, ccc, X[4], 9); + FFF(ccc, ddd, eee, aaa, bbb, X[1], 12); + FFF(bbb, ccc, ddd, eee, aaa, X[5], 5); + FFF(aaa, bbb, ccc, ddd, eee, X[8], 14); + FFF(eee, aaa, bbb, ccc, ddd, X[7], 6); + FFF(ddd, eee, aaa, bbb, ccc, X[6], 8); + FFF(ccc, ddd, eee, aaa, bbb, X[2], 13); + FFF(bbb, ccc, ddd, eee, aaa, X[13], 6); + FFF(aaa, bbb, ccc, ddd, eee, X[14], 5); + FFF(eee, aaa, bbb, ccc, ddd, X[0], 15); + FFF(ddd, eee, aaa, bbb, ccc, X[3], 13); + FFF(ccc, ddd, eee, aaa, bbb, X[9], 11); + FFF(bbb, ccc, ddd, eee, aaa, X[11], 11); + + /* combine results */ + ddd += cc + MDbuf[1]; /* final result for MDbuf[0] */ + MDbuf[1] = MDbuf[2] + dd + eee; + MDbuf[2] = MDbuf[3] + ee + aaa; + MDbuf[3] = MDbuf[4] + aa + bbb; + MDbuf[4] = MDbuf[0] + bb + ccc; + MDbuf[0] = ddd; + + return; +} + +/********************************************************************/ + +void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen) +{ + unsigned int i; /* counter */ + dword X[16]; /* message words */ + + memset(X, 0, 16 * sizeof(dword)); + + /* put bytes from strptr into X */ + for (i = 0; i<(lswlen & 63); i++) { + /* byte i goes into word X[i div 4] at pos. 8*(i mod 4) */ + X[i >> 2] ^= (dword)*strptr++ << (8 * (i & 3)); + } + + /* append the bit m_n == 1 */ + X[(lswlen >> 2) & 15] ^= (dword)1 << (8 * (lswlen & 3) + 7); + + if ((lswlen & 63) > 55) { + /* length goes to next block */ + compress(MDbuf, X); + memset(X, 0, 16 * sizeof(dword)); + } + + /* append length in bits*/ + X[14] = lswlen << 3; + X[15] = (lswlen >> 29) | (mswlen << 3); + compress(MDbuf, X); + + return; +} + +/************************ end of file rmd160.c **********************/ diff --git a/src/crypto/RIPEMD160.h b/src/crypto/RIPEMD160.h new file mode 100644 index 00000000..94dc0ceb --- /dev/null +++ b/src/crypto/RIPEMD160.h @@ -0,0 +1,150 @@ +/********************************************************************\ +* +* FILE: rmd160.h +* +* CONTENTS: Header file for a sample C-implementation of the +* RIPEMD-160 hash-function. +* TARGET: any computer with an ANSI C compiler +* +* AUTHOR: Antoon Bosselaers, ESAT-COSIC +* DATE: 1 March 1996 +* VERSION: 1.0 +* +* Copyright (c) 1996 Katholieke Universiteit Leuven +* +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without restriction, +* including without limitation the rights to use, copy, modify, merge, +* publish, distribute, sublicense, and/or sell copies of the Software, +* and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +\********************************************************************/ + +#ifndef RMD160H /* make sure this file is read only once */ +#define RMD160H + +/********************************************************************/ + +/* typedef 8 and 32 bit types, resp. */ +/* adapt these, if necessary, +for your operating system and compiler */ +typedef unsigned char byte; +typedef unsigned long dword; + +/* if this line causes a compiler error, +adapt the defintion of dword above */ +typedef int the_correct_size_was_chosen[sizeof(dword) == 4 ? 1 : -1]; + +/********************************************************************/ + +/* macro definitions */ + +/* collect four bytes into one word: */ +#define BYTES_TO_DWORD(strptr) \ + (((dword) *((strptr)+3) << 24) | \ + ((dword) *((strptr)+2) << 16) | \ + ((dword) *((strptr)+1) << 8) | \ + ((dword) *(strptr))) + +/* ROL(x, n) cyclically rotates x over n bits to the left */ +/* x must be of an unsigned 32 bits type and 0 <= n < 32. */ +#define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* the five basic functions F(), G() and H() */ +#define F(x, y, z) ((x) ^ (y) ^ (z)) +#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define H(x, y, z) (((x) | ~(y)) ^ (z)) +#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) +#define J(x, y, z) ((x) ^ ((y) | ~(z))) + +/* the ten basic operations FF() through III() */ +#define FF(a, b, c, d, e, x, s) {\ + (a) += F((b), (c), (d)) + (x);\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define GG(a, b, c, d, e, x, s) {\ + (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define HH(a, b, c, d, e, x, s) {\ + (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define II(a, b, c, d, e, x, s) {\ + (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define JJ(a, b, c, d, e, x, s) {\ + (a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define FFF(a, b, c, d, e, x, s) {\ + (a) += F((b), (c), (d)) + (x);\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define GGG(a, b, c, d, e, x, s) {\ + (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define HHH(a, b, c, d, e, x, s) {\ + (a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define III(a, b, c, d, e, x, s) {\ + (a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } +#define JJJ(a, b, c, d, e, x, s) {\ + (a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10);\ + } + +/********************************************************************/ + +/* function prototypes */ + +void MDinit(dword *MDbuf); +/* +* initializes MDbuffer to "magic constants" +*/ + +void compress(dword *MDbuf, dword *X); +/* +* the compression function. +* transforms MDbuf using message bytes X[0] through X[15] +*/ + +void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen); +/* +* puts bytes from strptr into X and pad out; appends length +* and finally, compresses the last block(s) +* note: length in bits == 8 * (lswlen + 2^32 mswlen). +* note: there are (lswlen mod 64) bytes left in strptr. +*/ + +#endif /* RMD160H */ + +/*********************** end of file rmd160.h ***********************/ diff --git a/src/crypto/RIPEMD160_helper.h b/src/crypto/RIPEMD160_helper.h new file mode 100644 index 00000000..290a60ea --- /dev/null +++ b/src/crypto/RIPEMD160_helper.h @@ -0,0 +1,38 @@ +// Copyright (c) 2020 The Zano developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#pragma once + +#include "hash.h" +extern "C" { +#include "RIPEMD160.h" +} + + + +namespace crypto { + +#pragma pack(push, 1) + POD_CLASS hash160{ + char data[20]; + }; +#pragma pack(pop) + + inline void RIPEMD160_hash(const void *data, std::size_t length, hash &h) + { + void MDinit(dword *MDbuf); + void compress(dword *MDbuf, dword *X); + void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen); + } + + inline hash RIPEMD160_hash(const void *data, std::size_t length) + { + hash h; + RIPEMD160_hash(data, length, reinterpret_cast(&h)); + return h; + } + +} + +POD_MAKE_HASHABLE(crypto, hash) diff --git a/src/crypto/bitcoin/byteswap.h b/src/crypto/bitcoin/byteswap.h new file mode 100644 index 00000000..27ef1a18 --- /dev/null +++ b/src/crypto/bitcoin/byteswap.h @@ -0,0 +1,59 @@ +// Copyright (c) 2014-2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_COMPAT_BYTESWAP_H +#define BITCOIN_COMPAT_BYTESWAP_H + +#if defined(HAVE_CONFIG_H) +#include +#endif + +#include + +#if defined(HAVE_BYTESWAP_H) +#include +#endif + +#if defined(MAC_OSX) + +#include +#define bswap_16(x) OSSwapInt16(x) +#define bswap_32(x) OSSwapInt32(x) +#define bswap_64(x) OSSwapInt64(x) + +#else +// Non-MacOS / non-Darwin + +#if HAVE_DECL_BSWAP_16 == 0 +inline uint16_t bswap_16(uint16_t x) +{ + return (x >> 8) | (x << 8); +} +#endif // HAVE_DECL_BSWAP16 == 0 + +#if HAVE_DECL_BSWAP_32 == 0 +inline uint32_t bswap_32(uint32_t x) +{ + return (((x & 0xff000000U) >> 24) | ((x & 0x00ff0000U) >> 8) | + ((x & 0x0000ff00U) << 8) | ((x & 0x000000ffU) << 24)); +} +#endif // HAVE_DECL_BSWAP32 == 0 + +#if HAVE_DECL_BSWAP_64 == 0 +inline uint64_t bswap_64(uint64_t x) +{ + return (((x & 0xff00000000000000ull) >> 56) + | ((x & 0x00ff000000000000ull) >> 40) + | ((x & 0x0000ff0000000000ull) >> 24) + | ((x & 0x000000ff00000000ull) >> 8) + | ((x & 0x00000000ff000000ull) << 8) + | ((x & 0x0000000000ff0000ull) << 24) + | ((x & 0x000000000000ff00ull) << 40) + | ((x & 0x00000000000000ffull) << 56)); +} +#endif // HAVE_DECL_BSWAP64 == 0 + +#endif // defined(MAC_OSX) + +#endif // BITCOIN_COMPAT_BYTESWAP_H diff --git a/src/crypto/bitcoin/common.h b/src/crypto/bitcoin/common.h new file mode 100644 index 00000000..afaf0e11 --- /dev/null +++ b/src/crypto/bitcoin/common.h @@ -0,0 +1,110 @@ +// Copyright (c) 2014-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_CRYPTO_COMMON_H +#define BITCOIN_CRYPTO_COMMON_H + +#if defined(HAVE_CONFIG_H) +#include +#endif + +#include +#include + +#include "endian.h" + +uint16_t static inline ReadLE16(const unsigned char* ptr) +{ + uint16_t x; + memcpy((char*)&x, ptr, 2); + return le16toh(x); +} + +uint32_t static inline ReadLE32(const unsigned char* ptr) +{ + uint32_t x; + memcpy((char*)&x, ptr, 4); + return le32toh(x); +} + +uint64_t static inline ReadLE64(const unsigned char* ptr) +{ + uint64_t x; + memcpy((char*)&x, ptr, 8); + return le64toh(x); +} + +void static inline WriteLE16(unsigned char* ptr, uint16_t x) +{ + uint16_t v = htole16(x); + memcpy(ptr, (char*)&v, 2); +} + +void static inline WriteLE32(unsigned char* ptr, uint32_t x) +{ + uint32_t v = htole32(x); + memcpy(ptr, (char*)&v, 4); +} + +void static inline WriteLE64(unsigned char* ptr, uint64_t x) +{ + uint64_t v = htole64(x); + memcpy(ptr, (char*)&v, 8); +} + +uint16_t static inline ReadBE16(const unsigned char* ptr) +{ + uint16_t x; + memcpy((char*)&x, ptr, 2); + return be16toh(x); +} + +uint32_t static inline ReadBE32(const unsigned char* ptr) +{ + uint32_t x; + memcpy((char*)&x, ptr, 4); + return be32toh(x); +} + +uint64_t static inline ReadBE64(const unsigned char* ptr) +{ + uint64_t x; + memcpy((char*)&x, ptr, 8); + return be64toh(x); +} + +void static inline WriteBE32(unsigned char* ptr, uint32_t x) +{ + uint32_t v = htobe32(x); + memcpy(ptr, (char*)&v, 4); +} + +void static inline WriteBE64(unsigned char* ptr, uint64_t x) +{ + uint64_t v = htobe64(x); + memcpy(ptr, (char*)&v, 8); +} + +/** Return the smallest number n such that (x >> n) == 0 (or 64 if the highest bit in x is set. */ +uint64_t static inline CountBits(uint64_t x) +{ +#if HAVE_BUILTIN_CLZL + if (sizeof(unsigned long) >= sizeof(uint64_t)) { + return x ? 8 * sizeof(unsigned long) - __builtin_clzl(x) : 0; + } +#endif +#if HAVE_BUILTIN_CLZLL + if (sizeof(unsigned long long) >= sizeof(uint64_t)) { + return x ? 8 * sizeof(unsigned long long) - __builtin_clzll(x) : 0; + } +#endif + int ret = 0; + while (x) { + x >>= 1; + ++ret; + } + return ret; +} + +#endif // BITCOIN_CRYPTO_COMMON_H \ No newline at end of file diff --git a/src/crypto/bitcoin/cpuid.h b/src/crypto/bitcoin/cpuid.h new file mode 100644 index 00000000..0877ad47 --- /dev/null +++ b/src/crypto/bitcoin/cpuid.h @@ -0,0 +1,24 @@ +// Copyright (c) 2017-2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_COMPAT_CPUID_H +#define BITCOIN_COMPAT_CPUID_H + +#if defined(__x86_64__) || defined(__amd64__) || defined(__i386__) +#define HAVE_GETCPUID + +#include + +// We can't use cpuid.h's __get_cpuid as it does not support subleafs. +void static inline GetCPUID(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d) +{ +#ifdef __GNUC__ + __cpuid_count(leaf, subleaf, a, b, c, d); +#else + __asm__ ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "0"(leaf), "2"(subleaf)); +#endif +} + +#endif // defined(__x86_64__) || defined(__amd64__) || defined(__i386__) +#endif // BITCOIN_COMPAT_CPUID_H diff --git a/src/crypto/bitcoin/endian.h b/src/crypto/bitcoin/endian.h new file mode 100644 index 00000000..354c6372 --- /dev/null +++ b/src/crypto/bitcoin/endian.h @@ -0,0 +1,241 @@ +// Copyright (c) 2014-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_COMPAT_ENDIAN_H +#define BITCOIN_COMPAT_ENDIAN_H + +#if defined(HAVE_CONFIG_H) +#include +#endif + +#include "byteswap.h" + +#include + +#if defined(HAVE_ENDIAN_H) +#include +#elif defined(HAVE_SYS_ENDIAN_H) +#include +#endif + +#ifndef HAVE_CONFIG_H +// While not technically a supported configuration, defaulting to defining these +// DECLs when we were compiled without autotools makes it easier for other build +// systems to build things like libbitcoinconsensus for strange targets. +#ifdef htobe16 +#define HAVE_DECL_HTOBE16 1 +#endif +#ifdef htole16 +#define HAVE_DECL_HTOLE16 1 +#endif +#ifdef be16toh +#define HAVE_DECL_BE16TOH 1 +#endif +#ifdef le16toh +#define HAVE_DECL_LE16TOH 1 +#endif + +#ifdef htobe32 +#define HAVE_DECL_HTOBE32 1 +#endif +#ifdef htole32 +#define HAVE_DECL_HTOLE32 1 +#endif +#ifdef be32toh +#define HAVE_DECL_BE32TOH 1 +#endif +#ifdef le32toh +#define HAVE_DECL_LE32TOH 1 +#endif + +#ifdef htobe64 +#define HAVE_DECL_HTOBE64 1 +#endif +#ifdef htole64 +#define HAVE_DECL_HTOLE64 1 +#endif +#ifdef be64toh +#define HAVE_DECL_BE64TOH 1 +#endif +#ifdef le64toh +#define HAVE_DECL_LE64TOH 1 +#endif + +#endif // HAVE_CONFIG_H + +#if defined(WORDS_BIGENDIAN) + +#if HAVE_DECL_HTOBE16 == 0 +inline uint16_t htobe16(uint16_t host_16bits) +{ + return host_16bits; +} +#endif // HAVE_DECL_HTOBE16 + +#if HAVE_DECL_HTOLE16 == 0 +inline uint16_t htole16(uint16_t host_16bits) +{ + return bswap_16(host_16bits); +} +#endif // HAVE_DECL_HTOLE16 + +#if HAVE_DECL_BE16TOH == 0 +inline uint16_t be16toh(uint16_t big_endian_16bits) +{ + return big_endian_16bits; +} +#endif // HAVE_DECL_BE16TOH + +#if HAVE_DECL_LE16TOH == 0 +inline uint16_t le16toh(uint16_t little_endian_16bits) +{ + return bswap_16(little_endian_16bits); +} +#endif // HAVE_DECL_LE16TOH + +#if HAVE_DECL_HTOBE32 == 0 +inline uint32_t htobe32(uint32_t host_32bits) +{ + return host_32bits; +} +#endif // HAVE_DECL_HTOBE32 + +#if HAVE_DECL_HTOLE32 == 0 +inline uint32_t htole32(uint32_t host_32bits) +{ + return bswap_32(host_32bits); +} +#endif // HAVE_DECL_HTOLE32 + +#if HAVE_DECL_BE32TOH == 0 +inline uint32_t be32toh(uint32_t big_endian_32bits) +{ + return big_endian_32bits; +} +#endif // HAVE_DECL_BE32TOH + +#if HAVE_DECL_LE32TOH == 0 +inline uint32_t le32toh(uint32_t little_endian_32bits) +{ + return bswap_32(little_endian_32bits); +} +#endif // HAVE_DECL_LE32TOH + +#if HAVE_DECL_HTOBE64 == 0 +inline uint64_t htobe64(uint64_t host_64bits) +{ + return host_64bits; +} +#endif // HAVE_DECL_HTOBE64 + +#if HAVE_DECL_HTOLE64 == 0 +inline uint64_t htole64(uint64_t host_64bits) +{ + return bswap_64(host_64bits); +} +#endif // HAVE_DECL_HTOLE64 + +#if HAVE_DECL_BE64TOH == 0 +inline uint64_t be64toh(uint64_t big_endian_64bits) +{ + return big_endian_64bits; +} +#endif // HAVE_DECL_BE64TOH + +#if HAVE_DECL_LE64TOH == 0 +inline uint64_t le64toh(uint64_t little_endian_64bits) +{ + return bswap_64(little_endian_64bits); +} +#endif // HAVE_DECL_LE64TOH + +#else // WORDS_BIGENDIAN + +#if HAVE_DECL_HTOBE16 == 0 +inline uint16_t htobe16(uint16_t host_16bits) +{ + return bswap_16(host_16bits); +} +#endif // HAVE_DECL_HTOBE16 + +#if HAVE_DECL_HTOLE16 == 0 +inline uint16_t htole16(uint16_t host_16bits) +{ + return host_16bits; +} +#endif // HAVE_DECL_HTOLE16 + +#if HAVE_DECL_BE16TOH == 0 +inline uint16_t be16toh(uint16_t big_endian_16bits) +{ + return bswap_16(big_endian_16bits); +} +#endif // HAVE_DECL_BE16TOH + +#if HAVE_DECL_LE16TOH == 0 +inline uint16_t le16toh(uint16_t little_endian_16bits) +{ + return little_endian_16bits; +} +#endif // HAVE_DECL_LE16TOH + +#if HAVE_DECL_HTOBE32 == 0 +inline uint32_t htobe32(uint32_t host_32bits) +{ + return bswap_32(host_32bits); +} +#endif // HAVE_DECL_HTOBE32 + +#if HAVE_DECL_HTOLE32 == 0 +inline uint32_t htole32(uint32_t host_32bits) +{ + return host_32bits; +} +#endif // HAVE_DECL_HTOLE32 + +#if HAVE_DECL_BE32TOH == 0 +inline uint32_t be32toh(uint32_t big_endian_32bits) +{ + return bswap_32(big_endian_32bits); +} +#endif // HAVE_DECL_BE32TOH + +#if HAVE_DECL_LE32TOH == 0 +inline uint32_t le32toh(uint32_t little_endian_32bits) +{ + return little_endian_32bits; +} +#endif // HAVE_DECL_LE32TOH + +#if HAVE_DECL_HTOBE64 == 0 +inline uint64_t htobe64(uint64_t host_64bits) +{ + return bswap_64(host_64bits); +} +#endif // HAVE_DECL_HTOBE64 + +#if HAVE_DECL_HTOLE64 == 0 +inline uint64_t htole64(uint64_t host_64bits) +{ + return host_64bits; +} +#endif // HAVE_DECL_HTOLE64 + +#if HAVE_DECL_BE64TOH == 0 +inline uint64_t be64toh(uint64_t big_endian_64bits) +{ + return bswap_64(big_endian_64bits); +} +#endif // HAVE_DECL_BE64TOH + +#if HAVE_DECL_LE64TOH == 0 +inline uint64_t le64toh(uint64_t little_endian_64bits) +{ + return little_endian_64bits; +} +#endif // HAVE_DECL_LE64TOH + +#endif // WORDS_BIGENDIAN + +#endif // BITCOIN_COMPAT_ENDIAN_H diff --git a/src/crypto/bitcoin/sha256.cpp b/src/crypto/bitcoin/sha256.cpp new file mode 100644 index 00000000..56266951 --- /dev/null +++ b/src/crypto/bitcoin/sha256.cpp @@ -0,0 +1,719 @@ +// Copyright (c) 2014-2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "sha256.h" +#include "common.h" + +#include +#include + +//#include + +#if defined(__x86_64__) || defined(__amd64__) || defined(__i386__) +#if defined(USE_ASM) +namespace sha256_sse4 +{ + void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks); +} +#endif +#endif + +namespace sha256d64_sse41 +{ + void Transform_4way(unsigned char* out, const unsigned char* in); +} + +namespace sha256d64_avx2 +{ + void Transform_8way(unsigned char* out, const unsigned char* in); +} + +namespace sha256d64_shani +{ + void Transform_2way(unsigned char* out, const unsigned char* in); +} + +namespace sha256_shani +{ + void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks); +} + +// Internal implementation code. +namespace +{ + /// Internal SHA-256 implementation. + namespace sha256 + { + uint32_t inline Ch(uint32_t x, uint32_t y, uint32_t z) { return z ^ (x & (y ^ z)); } + uint32_t inline Maj(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (z & (x | y)); } + uint32_t inline Sigma0(uint32_t x) { return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); } + uint32_t inline Sigma1(uint32_t x) { return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); } + uint32_t inline sigma0(uint32_t x) { return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); } + uint32_t inline sigma1(uint32_t x) { return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); } + + /** One round of SHA-256. */ + void inline Round(uint32_t a, uint32_t b, uint32_t c, uint32_t& d, uint32_t e, uint32_t f, uint32_t g, uint32_t& h, uint32_t k) + { + uint32_t t1 = h + Sigma1(e) + Ch(e, f, g) + k; + uint32_t t2 = Sigma0(a) + Maj(a, b, c); + d += t1; + h = t1 + t2; + } + + /** Initialize SHA-256 state. */ + void inline Initialize(uint32_t* s) + { + s[0] = 0x6a09e667ul; + s[1] = 0xbb67ae85ul; + s[2] = 0x3c6ef372ul; + s[3] = 0xa54ff53aul; + s[4] = 0x510e527ful; + s[5] = 0x9b05688cul; + s[6] = 0x1f83d9abul; + s[7] = 0x5be0cd19ul; + } + + /** Perform a number of SHA-256 transformations, processing 64-byte chunks. */ + void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks) + { + while (blocks--) { + uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; + + Round(a, b, c, d, e, f, g, h, 0x428a2f98 + (w0 = ReadBE32(chunk + 0))); + Round(h, a, b, c, d, e, f, g, 0x71374491 + (w1 = ReadBE32(chunk + 4))); + Round(g, h, a, b, c, d, e, f, 0xb5c0fbcf + (w2 = ReadBE32(chunk + 8))); + Round(f, g, h, a, b, c, d, e, 0xe9b5dba5 + (w3 = ReadBE32(chunk + 12))); + Round(e, f, g, h, a, b, c, d, 0x3956c25b + (w4 = ReadBE32(chunk + 16))); + Round(d, e, f, g, h, a, b, c, 0x59f111f1 + (w5 = ReadBE32(chunk + 20))); + Round(c, d, e, f, g, h, a, b, 0x923f82a4 + (w6 = ReadBE32(chunk + 24))); + Round(b, c, d, e, f, g, h, a, 0xab1c5ed5 + (w7 = ReadBE32(chunk + 28))); + Round(a, b, c, d, e, f, g, h, 0xd807aa98 + (w8 = ReadBE32(chunk + 32))); + Round(h, a, b, c, d, e, f, g, 0x12835b01 + (w9 = ReadBE32(chunk + 36))); + Round(g, h, a, b, c, d, e, f, 0x243185be + (w10 = ReadBE32(chunk + 40))); + Round(f, g, h, a, b, c, d, e, 0x550c7dc3 + (w11 = ReadBE32(chunk + 44))); + Round(e, f, g, h, a, b, c, d, 0x72be5d74 + (w12 = ReadBE32(chunk + 48))); + Round(d, e, f, g, h, a, b, c, 0x80deb1fe + (w13 = ReadBE32(chunk + 52))); + Round(c, d, e, f, g, h, a, b, 0x9bdc06a7 + (w14 = ReadBE32(chunk + 56))); + Round(b, c, d, e, f, g, h, a, 0xc19bf174 + (w15 = ReadBE32(chunk + 60))); + + Round(a, b, c, d, e, f, g, h, 0xe49b69c1 + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0xefbe4786 + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x0fc19dc6 + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x240ca1cc + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x2de92c6f + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4a7484aa + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5cb0a9dc + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x76f988da + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0x983e5152 + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0xa831c66d + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0xb00327c8 + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0xbf597fc7 + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0xc6e00bf3 + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xd5a79147 + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0x06ca6351 + (w14 += sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0x14292967 + (w15 += sigma1(w13) + w8 + sigma0(w0))); + + Round(a, b, c, d, e, f, g, h, 0x27b70a85 + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x2e1b2138 + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x53380d13 + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x650a7354 + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x766a0abb + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x81c2c92e + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x92722c85 + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1 + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0xa81a664b + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0xc24b8b70 + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0xc76c51a3 + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0xd192e819 + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xd6990624 + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xf40e3585 + (w14 += sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0x106aa070 + (w15 += sigma1(w13) + w8 + sigma0(w0))); + + Round(a, b, c, d, e, f, g, h, 0x19a4c116 + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x1e376c08 + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x2748774c + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x34b0bcb5 + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x391c0cb3 + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4ed8aa4a + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5b9cca4f + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x682e6ff3 + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0x748f82ee + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0x78a5636f + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0x84c87814 + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0x8cc70208 + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0x90befffa + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xa4506ceb + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xbef9a3f7 + (w14 + sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0xc67178f2 + (w15 + sigma1(w13) + w8 + sigma0(w0))); + + s[0] += a; + s[1] += b; + s[2] += c; + s[3] += d; + s[4] += e; + s[5] += f; + s[6] += g; + s[7] += h; + chunk += 64; + } + } + + void TransformD64(unsigned char* out, const unsigned char* in) + { + // Transform 1 + uint32_t a = 0x6a09e667ul; + uint32_t b = 0xbb67ae85ul; + uint32_t c = 0x3c6ef372ul; + uint32_t d = 0xa54ff53aul; + uint32_t e = 0x510e527ful; + uint32_t f = 0x9b05688cul; + uint32_t g = 0x1f83d9abul; + uint32_t h = 0x5be0cd19ul; + + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; + + Round(a, b, c, d, e, f, g, h, 0x428a2f98ul + (w0 = ReadBE32(in + 0))); + Round(h, a, b, c, d, e, f, g, 0x71374491ul + (w1 = ReadBE32(in + 4))); + Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful + (w2 = ReadBE32(in + 8))); + Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul + (w3 = ReadBE32(in + 12))); + Round(e, f, g, h, a, b, c, d, 0x3956c25bul + (w4 = ReadBE32(in + 16))); + Round(d, e, f, g, h, a, b, c, 0x59f111f1ul + (w5 = ReadBE32(in + 20))); + Round(c, d, e, f, g, h, a, b, 0x923f82a4ul + (w6 = ReadBE32(in + 24))); + Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul + (w7 = ReadBE32(in + 28))); + Round(a, b, c, d, e, f, g, h, 0xd807aa98ul + (w8 = ReadBE32(in + 32))); + Round(h, a, b, c, d, e, f, g, 0x12835b01ul + (w9 = ReadBE32(in + 36))); + Round(g, h, a, b, c, d, e, f, 0x243185beul + (w10 = ReadBE32(in + 40))); + Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul + (w11 = ReadBE32(in + 44))); + Round(e, f, g, h, a, b, c, d, 0x72be5d74ul + (w12 = ReadBE32(in + 48))); + Round(d, e, f, g, h, a, b, c, 0x80deb1feul + (w13 = ReadBE32(in + 52))); + Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul + (w14 = ReadBE32(in + 56))); + Round(b, c, d, e, f, g, h, a, 0xc19bf174ul + (w15 = ReadBE32(in + 60))); + Round(a, b, c, d, e, f, g, h, 0xe49b69c1ul + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0xefbe4786ul + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x0fc19dc6ul + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x240ca1ccul + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x2de92c6ful + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4a7484aaul + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcul + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x76f988daul + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0x983e5152ul + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0xa831c66dul + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0xb00327c8ul + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0xbf597fc7ul + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0xc6e00bf3ul + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xd5a79147ul + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0x06ca6351ul + (w14 += sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0x14292967ul + (w15 += sigma1(w13) + w8 + sigma0(w0))); + Round(a, b, c, d, e, f, g, h, 0x27b70a85ul + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x2e1b2138ul + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x4d2c6dfcul + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x53380d13ul + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x650a7354ul + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x766a0abbul + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x81c2c92eul + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x92722c85ul + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1ul + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0xa81a664bul + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0xc24b8b70ul + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0xc76c51a3ul + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0xd192e819ul + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xd6990624ul + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xf40e3585ul + (w14 += sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0x106aa070ul + (w15 += sigma1(w13) + w8 + sigma0(w0))); + Round(a, b, c, d, e, f, g, h, 0x19a4c116ul + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x1e376c08ul + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x2748774cul + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x34b0bcb5ul + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x391c0cb3ul + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4ed8aa4aul + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5b9cca4ful + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x682e6ff3ul + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0x748f82eeul + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0x78a5636ful + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0x84c87814ul + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0x8cc70208ul + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0x90befffaul + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xa4506cebul + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xbef9a3f7ul + (w14 + sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0xc67178f2ul + (w15 + sigma1(w13) + w8 + sigma0(w0))); + + a += 0x6a09e667ul; + b += 0xbb67ae85ul; + c += 0x3c6ef372ul; + d += 0xa54ff53aul; + e += 0x510e527ful; + f += 0x9b05688cul; + g += 0x1f83d9abul; + h += 0x5be0cd19ul; + + uint32_t t0 = a, t1 = b, t2 = c, t3 = d, t4 = e, t5 = f, t6 = g, t7 = h; + + // Transform 2 + Round(a, b, c, d, e, f, g, h, 0xc28a2f98ul); + Round(h, a, b, c, d, e, f, g, 0x71374491ul); + Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful); + Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul); + Round(e, f, g, h, a, b, c, d, 0x3956c25bul); + Round(d, e, f, g, h, a, b, c, 0x59f111f1ul); + Round(c, d, e, f, g, h, a, b, 0x923f82a4ul); + Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul); + Round(a, b, c, d, e, f, g, h, 0xd807aa98ul); + Round(h, a, b, c, d, e, f, g, 0x12835b01ul); + Round(g, h, a, b, c, d, e, f, 0x243185beul); + Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul); + Round(e, f, g, h, a, b, c, d, 0x72be5d74ul); + Round(d, e, f, g, h, a, b, c, 0x80deb1feul); + Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul); + Round(b, c, d, e, f, g, h, a, 0xc19bf374ul); + Round(a, b, c, d, e, f, g, h, 0x649b69c1ul); + Round(h, a, b, c, d, e, f, g, 0xf0fe4786ul); + Round(g, h, a, b, c, d, e, f, 0x0fe1edc6ul); + Round(f, g, h, a, b, c, d, e, 0x240cf254ul); + Round(e, f, g, h, a, b, c, d, 0x4fe9346ful); + Round(d, e, f, g, h, a, b, c, 0x6cc984beul); + Round(c, d, e, f, g, h, a, b, 0x61b9411eul); + Round(b, c, d, e, f, g, h, a, 0x16f988faul); + Round(a, b, c, d, e, f, g, h, 0xf2c65152ul); + Round(h, a, b, c, d, e, f, g, 0xa88e5a6dul); + Round(g, h, a, b, c, d, e, f, 0xb019fc65ul); + Round(f, g, h, a, b, c, d, e, 0xb9d99ec7ul); + Round(e, f, g, h, a, b, c, d, 0x9a1231c3ul); + Round(d, e, f, g, h, a, b, c, 0xe70eeaa0ul); + Round(c, d, e, f, g, h, a, b, 0xfdb1232bul); + Round(b, c, d, e, f, g, h, a, 0xc7353eb0ul); + Round(a, b, c, d, e, f, g, h, 0x3069bad5ul); + Round(h, a, b, c, d, e, f, g, 0xcb976d5ful); + Round(g, h, a, b, c, d, e, f, 0x5a0f118ful); + Round(f, g, h, a, b, c, d, e, 0xdc1eeefdul); + Round(e, f, g, h, a, b, c, d, 0x0a35b689ul); + Round(d, e, f, g, h, a, b, c, 0xde0b7a04ul); + Round(c, d, e, f, g, h, a, b, 0x58f4ca9dul); + Round(b, c, d, e, f, g, h, a, 0xe15d5b16ul); + Round(a, b, c, d, e, f, g, h, 0x007f3e86ul); + Round(h, a, b, c, d, e, f, g, 0x37088980ul); + Round(g, h, a, b, c, d, e, f, 0xa507ea32ul); + Round(f, g, h, a, b, c, d, e, 0x6fab9537ul); + Round(e, f, g, h, a, b, c, d, 0x17406110ul); + Round(d, e, f, g, h, a, b, c, 0x0d8cd6f1ul); + Round(c, d, e, f, g, h, a, b, 0xcdaa3b6dul); + Round(b, c, d, e, f, g, h, a, 0xc0bbbe37ul); + Round(a, b, c, d, e, f, g, h, 0x83613bdaul); + Round(h, a, b, c, d, e, f, g, 0xdb48a363ul); + Round(g, h, a, b, c, d, e, f, 0x0b02e931ul); + Round(f, g, h, a, b, c, d, e, 0x6fd15ca7ul); + Round(e, f, g, h, a, b, c, d, 0x521afacaul); + Round(d, e, f, g, h, a, b, c, 0x31338431ul); + Round(c, d, e, f, g, h, a, b, 0x6ed41a95ul); + Round(b, c, d, e, f, g, h, a, 0x6d437890ul); + Round(a, b, c, d, e, f, g, h, 0xc39c91f2ul); + Round(h, a, b, c, d, e, f, g, 0x9eccabbdul); + Round(g, h, a, b, c, d, e, f, 0xb5c9a0e6ul); + Round(f, g, h, a, b, c, d, e, 0x532fb63cul); + Round(e, f, g, h, a, b, c, d, 0xd2c741c6ul); + Round(d, e, f, g, h, a, b, c, 0x07237ea3ul); + Round(c, d, e, f, g, h, a, b, 0xa4954b68ul); + Round(b, c, d, e, f, g, h, a, 0x4c191d76ul); + + w0 = t0 + a; + w1 = t1 + b; + w2 = t2 + c; + w3 = t3 + d; + w4 = t4 + e; + w5 = t5 + f; + w6 = t6 + g; + w7 = t7 + h; + + // Transform 3 + a = 0x6a09e667ul; + b = 0xbb67ae85ul; + c = 0x3c6ef372ul; + d = 0xa54ff53aul; + e = 0x510e527ful; + f = 0x9b05688cul; + g = 0x1f83d9abul; + h = 0x5be0cd19ul; + + Round(a, b, c, d, e, f, g, h, 0x428a2f98ul + w0); + Round(h, a, b, c, d, e, f, g, 0x71374491ul + w1); + Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful + w2); + Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul + w3); + Round(e, f, g, h, a, b, c, d, 0x3956c25bul + w4); + Round(d, e, f, g, h, a, b, c, 0x59f111f1ul + w5); + Round(c, d, e, f, g, h, a, b, 0x923f82a4ul + w6); + Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul + w7); + Round(a, b, c, d, e, f, g, h, 0x5807aa98ul); + Round(h, a, b, c, d, e, f, g, 0x12835b01ul); + Round(g, h, a, b, c, d, e, f, 0x243185beul); + Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul); + Round(e, f, g, h, a, b, c, d, 0x72be5d74ul); + Round(d, e, f, g, h, a, b, c, 0x80deb1feul); + Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul); + Round(b, c, d, e, f, g, h, a, 0xc19bf274ul); + Round(a, b, c, d, e, f, g, h, 0xe49b69c1ul + (w0 += sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0xefbe4786ul + (w1 += 0xa00000ul + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x0fc19dc6ul + (w2 += sigma1(w0) + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x240ca1ccul + (w3 += sigma1(w1) + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x2de92c6ful + (w4 += sigma1(w2) + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4a7484aaul + (w5 += sigma1(w3) + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcul + (w6 += sigma1(w4) + 0x100ul + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x76f988daul + (w7 += sigma1(w5) + w0 + 0x11002000ul)); + Round(a, b, c, d, e, f, g, h, 0x983e5152ul + (w8 = 0x80000000ul + sigma1(w6) + w1)); + Round(h, a, b, c, d, e, f, g, 0xa831c66dul + (w9 = sigma1(w7) + w2)); + Round(g, h, a, b, c, d, e, f, 0xb00327c8ul + (w10 = sigma1(w8) + w3)); + Round(f, g, h, a, b, c, d, e, 0xbf597fc7ul + (w11 = sigma1(w9) + w4)); + Round(e, f, g, h, a, b, c, d, 0xc6e00bf3ul + (w12 = sigma1(w10) + w5)); + Round(d, e, f, g, h, a, b, c, 0xd5a79147ul + (w13 = sigma1(w11) + w6)); + Round(c, d, e, f, g, h, a, b, 0x06ca6351ul + (w14 = sigma1(w12) + w7 + 0x400022ul)); + Round(b, c, d, e, f, g, h, a, 0x14292967ul + (w15 = 0x100ul + sigma1(w13) + w8 + sigma0(w0))); + Round(a, b, c, d, e, f, g, h, 0x27b70a85ul + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x2e1b2138ul + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x4d2c6dfcul + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x53380d13ul + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x650a7354ul + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x766a0abbul + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x81c2c92eul + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x92722c85ul + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1ul + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0xa81a664bul + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0xc24b8b70ul + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0xc76c51a3ul + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0xd192e819ul + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xd6990624ul + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xf40e3585ul + (w14 += sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0x106aa070ul + (w15 += sigma1(w13) + w8 + sigma0(w0))); + Round(a, b, c, d, e, f, g, h, 0x19a4c116ul + (w0 += sigma1(w14) + w9 + sigma0(w1))); + Round(h, a, b, c, d, e, f, g, 0x1e376c08ul + (w1 += sigma1(w15) + w10 + sigma0(w2))); + Round(g, h, a, b, c, d, e, f, 0x2748774cul + (w2 += sigma1(w0) + w11 + sigma0(w3))); + Round(f, g, h, a, b, c, d, e, 0x34b0bcb5ul + (w3 += sigma1(w1) + w12 + sigma0(w4))); + Round(e, f, g, h, a, b, c, d, 0x391c0cb3ul + (w4 += sigma1(w2) + w13 + sigma0(w5))); + Round(d, e, f, g, h, a, b, c, 0x4ed8aa4aul + (w5 += sigma1(w3) + w14 + sigma0(w6))); + Round(c, d, e, f, g, h, a, b, 0x5b9cca4ful + (w6 += sigma1(w4) + w15 + sigma0(w7))); + Round(b, c, d, e, f, g, h, a, 0x682e6ff3ul + (w7 += sigma1(w5) + w0 + sigma0(w8))); + Round(a, b, c, d, e, f, g, h, 0x748f82eeul + (w8 += sigma1(w6) + w1 + sigma0(w9))); + Round(h, a, b, c, d, e, f, g, 0x78a5636ful + (w9 += sigma1(w7) + w2 + sigma0(w10))); + Round(g, h, a, b, c, d, e, f, 0x84c87814ul + (w10 += sigma1(w8) + w3 + sigma0(w11))); + Round(f, g, h, a, b, c, d, e, 0x8cc70208ul + (w11 += sigma1(w9) + w4 + sigma0(w12))); + Round(e, f, g, h, a, b, c, d, 0x90befffaul + (w12 += sigma1(w10) + w5 + sigma0(w13))); + Round(d, e, f, g, h, a, b, c, 0xa4506cebul + (w13 += sigma1(w11) + w6 + sigma0(w14))); + Round(c, d, e, f, g, h, a, b, 0xbef9a3f7ul + (w14 + sigma1(w12) + w7 + sigma0(w15))); + Round(b, c, d, e, f, g, h, a, 0xc67178f2ul + (w15 + sigma1(w13) + w8 + sigma0(w0))); + + // Output + WriteBE32(out + 0, a + 0x6a09e667ul); + WriteBE32(out + 4, b + 0xbb67ae85ul); + WriteBE32(out + 8, c + 0x3c6ef372ul); + WriteBE32(out + 12, d + 0xa54ff53aul); + WriteBE32(out + 16, e + 0x510e527ful); + WriteBE32(out + 20, f + 0x9b05688cul); + WriteBE32(out + 24, g + 0x1f83d9abul); + WriteBE32(out + 28, h + 0x5be0cd19ul); + } + + } // namespace sha256 + + typedef void(*TransformType)(uint32_t*, const unsigned char*, size_t); + typedef void(*TransformD64Type)(unsigned char*, const unsigned char*); + + template + void TransformD64Wrapper(unsigned char* out, const unsigned char* in) + { + uint32_t s[8]; + static const unsigned char padding1[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0 + }; + unsigned char buffer2[64] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 + }; + sha256::Initialize(s); + tr(s, in, 1); + tr(s, padding1, 1); + WriteBE32(buffer2 + 0, s[0]); + WriteBE32(buffer2 + 4, s[1]); + WriteBE32(buffer2 + 8, s[2]); + WriteBE32(buffer2 + 12, s[3]); + WriteBE32(buffer2 + 16, s[4]); + WriteBE32(buffer2 + 20, s[5]); + WriteBE32(buffer2 + 24, s[6]); + WriteBE32(buffer2 + 28, s[7]); + sha256::Initialize(s); + tr(s, buffer2, 1); + WriteBE32(out + 0, s[0]); + WriteBE32(out + 4, s[1]); + WriteBE32(out + 8, s[2]); + WriteBE32(out + 12, s[3]); + WriteBE32(out + 16, s[4]); + WriteBE32(out + 20, s[5]); + WriteBE32(out + 24, s[6]); + WriteBE32(out + 28, s[7]); + } + + TransformType Transform = sha256::Transform; + TransformD64Type TransformD64 = sha256::TransformD64; + TransformD64Type TransformD64_2way = nullptr; + TransformD64Type TransformD64_4way = nullptr; + TransformD64Type TransformD64_8way = nullptr; + + bool SelfTest() { + // Input state (equal to the initial SHA256 state) + static const uint32_t init[8] = { + 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul + }; + // Some random input data to test with + static const unsigned char data[641] = "-" // Intentionally not aligned + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + "eiusmod tempor incididunt ut labore et dolore magna aliqua. Et m" + "olestie ac feugiat sed lectus vestibulum mattis ullamcorper. Mor" + "bi blandit cursus risus at ultrices mi tempus imperdiet nulla. N" + "unc congue nisi vita suscipit tellus mauris. Imperdiet proin fer" + "mentum leo vel orci. Massa tempor nec feugiat nisl pretium fusce" + " id velit. Telus in metus vulputate eu scelerisque felis. Mi tem" + "pus imperdiet nulla malesuada pellentesque. Tristique magna sit."; + // Expected output state for hashing the i*64 first input bytes above (excluding SHA256 padding). + static const uint32_t result[9][8] = { + { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, + { 0x91f8ec6bul, 0x4da10fe3ul, 0x1c9c292cul, 0x45e18185ul, 0x435cc111ul, 0x3ca26f09ul, 0xeb954caeul, 0x402a7069ul }, + { 0xcabea5acul, 0x374fb97cul, 0x182ad996ul, 0x7bd69cbful, 0x450ff900ul, 0xc1d2be8aul, 0x6a41d505ul, 0xe6212dc3ul }, + { 0xbcff09d6ul, 0x3e76f36eul, 0x3ecb2501ul, 0x78866e97ul, 0xe1c1e2fdul, 0x32f4eafful, 0x8aa6c4e5ul, 0xdfc024bcul }, + { 0xa08c5d94ul, 0x0a862f93ul, 0x6b7f2f40ul, 0x8f9fae76ul, 0x6d40439ful, 0x79dcee0cul, 0x3e39ff3aul, 0xdc3bdbb1ul }, + { 0x216a0895ul, 0x9f1a3662ul, 0xe99946f9ul, 0x87ba4364ul, 0x0fb5db2cul, 0x12bed3d3ul, 0x6689c0c7ul, 0x292f1b04ul }, + { 0xca3067f8ul, 0xbc8c2656ul, 0x37cb7e0dul, 0x9b6b8b0ful, 0x46dc380bul, 0xf1287f57ul, 0xc42e4b23ul, 0x3fefe94dul }, + { 0x3e4c4039ul, 0xbb6fca8cul, 0x6f27d2f7ul, 0x301e44a4ul, 0x8352ba14ul, 0x5769ce37ul, 0x48a1155ful, 0xc0e1c4c6ul }, + { 0xfe2fa9ddul, 0x69d0862bul, 0x1ae0db23ul, 0x471f9244ul, 0xf55c0145ul, 0xc30f9c3bul, 0x40a84ea0ul, 0x5b8a266cul }, + }; + // Expected output for each of the individual 8 64-byte messages under full double SHA256 (including padding). + static const unsigned char result_d64[256] = { + 0x09, 0x3a, 0xc4, 0xd0, 0x0f, 0xf7, 0x57, 0xe1, 0x72, 0x85, 0x79, 0x42, 0xfe, 0xe7, 0xe0, 0xa0, + 0xfc, 0x52, 0xd7, 0xdb, 0x07, 0x63, 0x45, 0xfb, 0x53, 0x14, 0x7d, 0x17, 0x22, 0x86, 0xf0, 0x52, + 0x48, 0xb6, 0x11, 0x9e, 0x6e, 0x48, 0x81, 0x6d, 0xcc, 0x57, 0x1f, 0xb2, 0x97, 0xa8, 0xd5, 0x25, + 0x9b, 0x82, 0xaa, 0x89, 0xe2, 0xfd, 0x2d, 0x56, 0xe8, 0x28, 0x83, 0x0b, 0xe2, 0xfa, 0x53, 0xb7, + 0xd6, 0x6b, 0x07, 0x85, 0x83, 0xb0, 0x10, 0xa2, 0xf5, 0x51, 0x3c, 0xf9, 0x60, 0x03, 0xab, 0x45, + 0x6c, 0x15, 0x6e, 0xef, 0xb5, 0xac, 0x3e, 0x6c, 0xdf, 0xb4, 0x92, 0x22, 0x2d, 0xce, 0xbf, 0x3e, + 0xe9, 0xe5, 0xf6, 0x29, 0x0e, 0x01, 0x4f, 0xd2, 0xd4, 0x45, 0x65, 0xb3, 0xbb, 0xf2, 0x4c, 0x16, + 0x37, 0x50, 0x3c, 0x6e, 0x49, 0x8c, 0x5a, 0x89, 0x2b, 0x1b, 0xab, 0xc4, 0x37, 0xd1, 0x46, 0xe9, + 0x3d, 0x0e, 0x85, 0xa2, 0x50, 0x73, 0xa1, 0x5e, 0x54, 0x37, 0xd7, 0x94, 0x17, 0x56, 0xc2, 0xd8, + 0xe5, 0x9f, 0xed, 0x4e, 0xae, 0x15, 0x42, 0x06, 0x0d, 0x74, 0x74, 0x5e, 0x24, 0x30, 0xce, 0xd1, + 0x9e, 0x50, 0xa3, 0x9a, 0xb8, 0xf0, 0x4a, 0x57, 0x69, 0x78, 0x67, 0x12, 0x84, 0x58, 0xbe, 0xc7, + 0x36, 0xaa, 0xee, 0x7c, 0x64, 0xa3, 0x76, 0xec, 0xff, 0x55, 0x41, 0x00, 0x2a, 0x44, 0x68, 0x4d, + 0xb6, 0x53, 0x9e, 0x1c, 0x95, 0xb7, 0xca, 0xdc, 0x7f, 0x7d, 0x74, 0x27, 0x5c, 0x8e, 0xa6, 0x84, + 0xb5, 0xac, 0x87, 0xa9, 0xf3, 0xff, 0x75, 0xf2, 0x34, 0xcd, 0x1a, 0x3b, 0x82, 0x2c, 0x2b, 0x4e, + 0x6a, 0x46, 0x30, 0xa6, 0x89, 0x86, 0x23, 0xac, 0xf8, 0xa5, 0x15, 0xe9, 0x0a, 0xaa, 0x1e, 0x9a, + 0xd7, 0x93, 0x6b, 0x28, 0xe4, 0x3b, 0xfd, 0x59, 0xc6, 0xed, 0x7c, 0x5f, 0xa5, 0x41, 0xcb, 0x51 + }; + + + // Test Transform() for 0 through 8 transformations. + for (size_t i = 0; i <= 8; ++i) { + uint32_t state[8]; + std::copy(init, init + 8, state); + Transform(state, data + 1, i); + if (!std::equal(state, state + 8, result[i])) return false; + } + + // Test TransformD64 + unsigned char out[32]; + TransformD64(out, data + 1); + if (!std::equal(out, out + 32, result_d64)) return false; + + // Test TransformD64_2way, if available. + if (TransformD64_2way) { + unsigned char out[64]; + TransformD64_2way(out, data + 1); + if (!std::equal(out, out + 64, result_d64)) return false; + } + + // Test TransformD64_4way, if available. + if (TransformD64_4way) { + unsigned char out[128]; + TransformD64_4way(out, data + 1); + if (!std::equal(out, out + 128, result_d64)) return false; + } + + // Test TransformD64_8way, if available. + if (TransformD64_8way) { + unsigned char out[256]; + TransformD64_8way(out, data + 1); + if (!std::equal(out, out + 256, result_d64)) return false; + } + + return true; + } + +#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__)) + /** Check whether the OS has enabled AVX registers. */ + bool AVXEnabled() + { + uint32_t a, d; + __asm__("xgetbv" : "=a"(a), "=d"(d) : "c"(0)); + return (a & 6) == 6; + } +#endif +} // namespace + + +std::string SHA256AutoDetect() +{ + std::string ret = "standard"; +#if defined(USE_ASM) && defined(HAVE_GETCPUID) + bool have_sse4 = false; + bool have_xsave = false; + bool have_avx = false; + bool have_avx2 = false; + bool have_shani = false; + bool enabled_avx = false; + + (void)AVXEnabled; + (void)have_sse4; + (void)have_avx; + (void)have_xsave; + (void)have_avx2; + (void)have_shani; + (void)enabled_avx; + + uint32_t eax, ebx, ecx, edx; + GetCPUID(1, 0, eax, ebx, ecx, edx); + have_sse4 = (ecx >> 19) & 1; + have_xsave = (ecx >> 27) & 1; + have_avx = (ecx >> 28) & 1; + if (have_xsave && have_avx) { + enabled_avx = AVXEnabled(); + } + if (have_sse4) { + GetCPUID(7, 0, eax, ebx, ecx, edx); + have_avx2 = (ebx >> 5) & 1; + have_shani = (ebx >> 29) & 1; + } + +#if defined(ENABLE_SHANI) && !defined(BUILD_BITCOIN_INTERNAL) + if (have_shani) { + Transform = sha256_shani::Transform; + TransformD64 = TransformD64Wrapper; + TransformD64_2way = sha256d64_shani::Transform_2way; + ret = "shani(1way,2way)"; + have_sse4 = false; // Disable SSE4/AVX2; + have_avx2 = false; + } +#endif + + if (have_sse4) { +#if defined(__x86_64__) || defined(__amd64__) + Transform = sha256_sse4::Transform; + TransformD64 = TransformD64Wrapper; + ret = "sse4(1way)"; +#endif +#if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL) + TransformD64_4way = sha256d64_sse41::Transform_4way; + ret += ",sse41(4way)"; +#endif + } + +#if defined(ENABLE_AVX2) && !defined(BUILD_BITCOIN_INTERNAL) + if (have_avx2 && have_avx && enabled_avx) { + TransformD64_8way = sha256d64_avx2::Transform_8way; + ret += ",avx2(8way)"; + } +#endif +#endif + + assert(SelfTest()); + return ret; +} + +////// SHA-256 + +CSHA256::CSHA256() : bytes(0) +{ + sha256::Initialize(s); +} + +CSHA256& CSHA256::Write(const unsigned char* data, size_t len) +{ + const unsigned char* end = data + len; + size_t bufsize = bytes % 64; + if (bufsize && bufsize + len >= 64) { + // Fill the buffer, and process it. + memcpy(buf + bufsize, data, 64 - bufsize); + bytes += 64 - bufsize; + data += 64 - bufsize; + Transform(s, buf, 1); + bufsize = 0; + } + if (end - data >= 64) { + size_t blocks = (end - data) / 64; + Transform(s, data, blocks); + data += 64 * blocks; + bytes += 64 * blocks; + } + if (end > data) { + // Fill the buffer with what remains. + memcpy(buf + bufsize, data, end - data); + bytes += end - data; + } + return *this; +} + +void CSHA256::Finalize(unsigned char hash[OUTPUT_SIZE]) +{ + static const unsigned char pad[64] = { 0x80 }; + unsigned char sizedesc[8]; + WriteBE64(sizedesc, bytes << 3); + Write(pad, 1 + ((119 - (bytes % 64)) % 64)); + Write(sizedesc, 8); + WriteBE32(hash, s[0]); + WriteBE32(hash + 4, s[1]); + WriteBE32(hash + 8, s[2]); + WriteBE32(hash + 12, s[3]); + WriteBE32(hash + 16, s[4]); + WriteBE32(hash + 20, s[5]); + WriteBE32(hash + 24, s[6]); + WriteBE32(hash + 28, s[7]); +} + +CSHA256& CSHA256::Reset() +{ + bytes = 0; + sha256::Initialize(s); + return *this; +} + +void SHA256D64(unsigned char* out, const unsigned char* in, size_t blocks) +{ + if (TransformD64_8way) { + while (blocks >= 8) { + TransformD64_8way(out, in); + out += 256; + in += 512; + blocks -= 8; + } + } + if (TransformD64_4way) { + while (blocks >= 4) { + TransformD64_4way(out, in); + out += 128; + in += 256; + blocks -= 4; + } + } + if (TransformD64_2way) { + while (blocks >= 2) { + TransformD64_2way(out, in); + out += 64; + in += 128; + blocks -= 2; + } + } + while (blocks) { + TransformD64(out, in); + out += 32; + in += 64; + --blocks; + } +} \ No newline at end of file diff --git a/src/crypto/bitcoin/sha256.h b/src/crypto/bitcoin/sha256.h new file mode 100644 index 00000000..80d3625c --- /dev/null +++ b/src/crypto/bitcoin/sha256.h @@ -0,0 +1,41 @@ +// Copyright (c) 2014-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_CRYPTO_SHA256_H +#define BITCOIN_CRYPTO_SHA256_H + +#include +#include +#include + +/** A hasher class for SHA-256. */ +class CSHA256 +{ +private: + uint32_t s[8]; + unsigned char buf[64]; + uint64_t bytes; + +public: + static const size_t OUTPUT_SIZE = 32; + + CSHA256(); + CSHA256& Write(const unsigned char* data, size_t len); + void Finalize(unsigned char hash[OUTPUT_SIZE]); + CSHA256& Reset(); +}; + +/** Autodetect the best available SHA256 implementation. +* Returns the name of the implementation. +*/ +std::string SHA256AutoDetect(); + +/** Compute multiple double-SHA256's of 64-byte blobs. +* output: pointer to a blocks*32 byte output buffer +* input: pointer to a blocks*64 byte input buffer +* blocks: the number of hashes to compute. +*/ +void SHA256D64(unsigned char* output, const unsigned char* input, size_t blocks); + +#endif // BITCOIN_CRYPTO_SHA256_H \ No newline at end of file diff --git a/src/crypto/bitcoin/sha256_helper.h b/src/crypto/bitcoin/sha256_helper.h new file mode 100644 index 00000000..87f6046b --- /dev/null +++ b/src/crypto/bitcoin/sha256_helper.h @@ -0,0 +1,29 @@ +// Copyright (c) 2020 The Zano developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#pragma once + +#include "hash.h" +#include "sha256.h" + + +namespace crypto { + + inline void sha256_hash(const void *data, std::size_t length, hash &h) + { + CSHA256 sh; + sh.Write(data, length); + sh.Finalize(h); + } + + inline hash sha256_hash(const void *data, std::size_t length) + { + hash h; + sha256_hash(data, length, reinterpret_cast(&h)); + return h; + } + +} + +POD_MAKE_HASHABLE(crypto, hash) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 03052424..e524ae2c 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4532,9 +4532,28 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); return false; } + + CHECK_AND_ASSERT_THROW_MES(scan_contex.htlc_outs.size() == 1, "htlc output not found for input, tx: " << get_transaction_hash(tx)); + const txout_htlc& related_out = *scan_contex.htlc_outs.begin(); + bool use_sha256 = !(related_out.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK); + if (use_sha256) + { + //doing sha256 hash + crypto::hash sha256 = sha256_hash(txin.hltc_origin.data(), txin.hltc_origin.size()); + CHECK_AND_ASSERT_THROW_MES(sha256 == related_out.htlc_hash, "htlc hash missmatched for tx: " << get_transaction_hash(tx) + << " calculated hash: " << sha256 << " expected hash(related_out.htlc_hash): " << related_out.htlc_hash); + } + else + { + //doing RIPEMD160 + + + } + + //TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_ch_in_get_keys_loop); - //TODO: add caludating hash + std::vector output_keys_ptrs; output_keys_ptrs.reserve(output_keys.size()); diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index f20f1a66..8e942469 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -226,7 +226,7 @@ namespace currency struct txin_to_htlc { uint64_t amount; - crypto::hash hltc_origin; + std::string hltc_origin; txout_v key_offset; crypto::key_image k_image; // double spending protection std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature @@ -265,6 +265,8 @@ namespace currency END_SERIALIZE() }; +#define CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK 0x01 // 0 - SHA256, 1 - RIPEMD160 + struct txout_htlc { crypto::hash htlc_hash; From 3c51c959410fde1e6cfe888b35b37d001aa29a21 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 4 Jan 2021 22:41:16 +0100 Subject: [PATCH 04/64] massive fixes over htlc, sha256/RIPEMD160 basic test(passing) --- src/common/crypto_stream_operators.h | 17 ++-- src/crypto/RIPEMD160_helper.cpp | 59 ++++++++++++++ src/crypto/RIPEMD160_helper.h | 24 ++---- src/crypto/bitcoin/sha256_helper.h | 10 +-- src/currency_core/blockchain_storage.cpp | 80 +++++++++++++------ src/currency_core/blockchain_storage.h | 22 ++++- src/currency_core/currency_basic.h | 9 ++- .../currency_boost_serialization.h | 19 +++++ src/currency_core/currency_format_utils.h | 1 + src/currency_core/tx_pool.h | 19 ----- tests/performance_tests/htlc_hash_tests.cpp | 32 ++++++++ tests/performance_tests/htlc_hash_tests.h | 11 +++ tests/performance_tests/main.cpp | 10 ++- 13 files changed, 226 insertions(+), 87 deletions(-) create mode 100644 src/crypto/RIPEMD160_helper.cpp create mode 100644 tests/performance_tests/htlc_hash_tests.cpp create mode 100644 tests/performance_tests/htlc_hash_tests.h diff --git a/src/common/crypto_stream_operators.h b/src/common/crypto_stream_operators.h index 5aaf545c..0201603b 100644 --- a/src/common/crypto_stream_operators.h +++ b/src/common/crypto_stream_operators.h @@ -8,15 +8,17 @@ #include "include_base_utils.h" #include "crypto/crypto.h" #include "crypto/hash.h" +#include "crypto/RIPEMD160_helper.h" bool parse_hash256(const std::string str_hash, crypto::hash& hash); template -std::ostream &print256(std::ostream &o, const T &v) +std::ostream &print_t(std::ostream &o, const T &v) { return o << "<" << epee::string_tools::pod_to_hex(v) << ">"; } + template std::ostream &print16(std::ostream &o, const T &v) { @@ -32,10 +34,11 @@ std::string print16(const T &v) namespace crypto { - inline std::ostream &operator <<(std::ostream &o, const crypto::public_key &v) { return print256(o, v); } - inline std::ostream &operator <<(std::ostream &o, const crypto::secret_key &v) { return print256(o, v); } - inline std::ostream &operator <<(std::ostream &o, const crypto::key_derivation &v) { return print256(o, v); } - inline std::ostream &operator <<(std::ostream &o, const crypto::key_image &v) { return print256(o, v); } - inline std::ostream &operator <<(std::ostream &o, const crypto::signature &v) { return print256(o, v); } - inline std::ostream &operator <<(std::ostream &o, const crypto::hash &v) { return print256(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::public_key &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::secret_key &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::key_derivation &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::key_image &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::signature &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::hash &v) { return print_t(o, v); } + inline std::ostream &operator <<(std::ostream &o, const crypto::hash160 &v) { return print_t(o, v); } } // namespace crypto diff --git a/src/crypto/RIPEMD160_helper.cpp b/src/crypto/RIPEMD160_helper.cpp new file mode 100644 index 00000000..b2ecee62 --- /dev/null +++ b/src/crypto/RIPEMD160_helper.cpp @@ -0,0 +1,59 @@ +// Copyright (c) 2020 The Zano developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#pragma once + +#include "RIPEMD160_helper.h" +#include "auto_val_init.h" +//extern "C" { +#include "RIPEMD160.h" +//} + +#define RMDsize 160 + +namespace crypto { + + void RIPEMD160_hash(const void *data, size_t length_size_t, hash160 &h) + { + + dword MDbuf[RMDsize / 32] = {0}; /* contains (A, B, C, D(, E)) */ + byte* hashcode = (byte*)&h; /* hashcode[RMDsize / 8]; /* for final hash-value */ + dword X[16] = {0}; /* current 16-word chunk */ + unsigned int i = 0; /* counter */ + dword length = static_cast(length_size_t); /* length in bytes of message */ + dword nbytes = 0; /* # of bytes not yet processed */ + byte* message = (byte*)data; + + /* initialize */ + MDinit(MDbuf); + //length = (dword)strlen((char *)message); + + /* process message in 16-word chunks */ + for (nbytes = length; nbytes > 63; nbytes -= 64) { + for (i = 0; i < 16; i++) { + X[i] = BYTES_TO_DWORD(message); + message += 4; + } + compress(MDbuf, X); + }/* length mod 64 bytes left */ + + /* finish: */ + MDfinish(MDbuf, message, length, 0); + + for (i = 0; i < RMDsize / 8; i += 4) { + hashcode[i] = (byte)MDbuf[i >> 2]; /* implicit cast to byte */ + hashcode[i + 1] = (byte)(MDbuf[i >> 2] >> 8); /* extracts the 8 least */ + hashcode[i + 2] = (byte)(MDbuf[i >> 2] >> 16); /* significant bits. */ + hashcode[i + 3] = (byte)(MDbuf[i >> 2] >> 24); + } + } + + hash160 RIPEMD160_hash(const void *data, size_t length) + { + hash160 h = AUTO_VAL_INIT(h); + RIPEMD160_hash(data, length, h); + return h; + } + +} diff --git a/src/crypto/RIPEMD160_helper.h b/src/crypto/RIPEMD160_helper.h index 290a60ea..6e923fcb 100644 --- a/src/crypto/RIPEMD160_helper.h +++ b/src/crypto/RIPEMD160_helper.h @@ -5,10 +5,6 @@ #pragma once #include "hash.h" -extern "C" { -#include "RIPEMD160.h" -} - namespace crypto { @@ -19,20 +15,12 @@ namespace crypto { }; #pragma pack(pop) - inline void RIPEMD160_hash(const void *data, std::size_t length, hash &h) - { - void MDinit(dword *MDbuf); - void compress(dword *MDbuf, dword *X); - void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen); - } - - inline hash RIPEMD160_hash(const void *data, std::size_t length) - { - hash h; - RIPEMD160_hash(data, length, reinterpret_cast(&h)); - return h; - } + void RIPEMD160_hash(const void *data, size_t length, hash160 &h); + hash160 RIPEMD160_hash(const void *data, size_t length); } -POD_MAKE_HASHABLE(crypto, hash) +POD_MAKE_HASHABLE(crypto, hash160) + + + diff --git a/src/crypto/bitcoin/sha256_helper.h b/src/crypto/bitcoin/sha256_helper.h index 87f6046b..f376913a 100644 --- a/src/crypto/bitcoin/sha256_helper.h +++ b/src/crypto/bitcoin/sha256_helper.h @@ -4,7 +4,7 @@ #pragma once -#include "hash.h" +#include "crypto/hash.h" #include "sha256.h" @@ -13,17 +13,15 @@ namespace crypto { inline void sha256_hash(const void *data, std::size_t length, hash &h) { CSHA256 sh; - sh.Write(data, length); - sh.Finalize(h); + sh.Write((const unsigned char*)data, length); + sh.Finalize((unsigned char* )&h); } inline hash sha256_hash(const void *data, std::size_t length) { hash h; - sha256_hash(data, length, reinterpret_cast(&h)); + sha256_hash(data, length, h); return h; } } - -POD_MAKE_HASHABLE(crypto, hash) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index e524ae2c..dc5d3988 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -33,6 +33,8 @@ #include "basic_pow_helpers.h" #include "version.h" #include "tx_semantic_validation.h" +#include "crypto/RIPEMD160_helper.h" +#include "crypto/bitcoin/sha256_helper.h" #undef LOG_DEFAULT_CHANNEL #define LOG_DEFAULT_CHANNEL "core" @@ -738,6 +740,11 @@ bool blockchain_storage::purge_transaction_keyimages_from_blockchain(const trans } return true; } + bool operator()(const txin_htlc& inp) const + { + //HTLC TODO + return true; + } }; for(const txin_v& in : tx.vin) @@ -3808,6 +3815,11 @@ namespace currency } return true; } + bool operator()(const txin_htlc& in) const + { + //HTLC TODO + return true; + } }; } @@ -4211,12 +4223,12 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha return false; } } - else if (txin.type() == typeid(txin_to_htlc)) + else if (txin.type() == typeid(txin_htlc)) { - const txin_to_htlc& in_ms_htlc = boost::get(txin); - if (!check_tx_input(tx, sig_index, in_ms, tx_prefix_hash, *psig, max_used_block_height)) + const txin_htlc& in_htlc = boost::get(txin); + if (!check_tx_input(tx, sig_index, in_htlc, tx_prefix_hash, *psig, max_used_block_height)) { - LOG_ERROR("Failed to validate multisig input #" << sig_index << " (ms out id: " << in_ms.multisig_out_id << ") in tx: " << tx_prefix_hash); + LOG_ERROR("Failed to validate multisig input #" << sig_index << " (ms out id: " << obj_to_json_str(in_htlc) << ") in tx: " << tx_prefix_hash); return false; } } @@ -4252,7 +4264,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, std::vector output_keys; scan_for_keys_context scan_context = AUTO_VAL_INIT(scan_context); - if(!get_output_keys_for_input_with_checks(tx, txin, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase)) + if(!get_output_keys_for_input_with_checks(tx, txin.amount, txin.key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase)) { LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); return false; @@ -4279,7 +4291,7 @@ struct outputs_visitor blockchain_storage::scan_for_keys_context& scan_context) : m_results_collector(results_collector) , m_bch(bch) - , m_source_max_unlock_time_for_pos_coinbase(source_max_unlock_time_for_pos_coinbase), + , m_source_max_unlock_time_for_pos_coinbase(source_max_unlock_time_for_pos_coinbase) , m_scan_context(scan_context) {} bool handle_output(const transaction& source_tx, const transaction& validated_tx, const tx_out& out, uint64_t out_i) @@ -4327,13 +4339,13 @@ bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction { CRITICAL_REGION_LOCAL(m_read_lock); - outputs_visitor vi(output_keys, *this, source_max_unlock_time_for_pos_coinbase); + outputs_visitor vi(output_keys, *this, source_max_unlock_time_for_pos_coinbase, scan_context); return scan_outputkeys_for_indexes(tx, amount, key_offsets, vi, max_related_block_height, scan_context); } //------------------------------------------------------------------ bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const { - scan_for_keys_context scan_context_dummy = AUTO_VAL_INIT(); + scan_for_keys_context scan_context_dummy = AUTO_VAL_INIT(scan_context_dummy); return get_output_keys_for_input_with_checks(tx, amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_context_dummy); } @@ -4341,14 +4353,27 @@ bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction // Note: this function can be used for checking to_key inputs against either main chain or alt chain, that's why it has output_keys_ptrs parameter // Doesn't check spent flags, the caller must check it. bool blockchain_storage::check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const +{ + return check_tokey_input(tx, in_index, txin.key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); +} +//------------------------------------------------------------------ +bool blockchain_storage::check_tokey_input(const transaction& tx, + size_t in_index, + const std::vector& in_key_offsets, + uint64_t in_amount, + const crypto::key_image& in_k_image, + const std::vector& in_etc_details, + const crypto::hash& tx_prefix_hash, + const std::vector& sig, + const std::vector& output_keys_ptrs) const { CRITICAL_REGION_LOCAL(m_read_lock); TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_val_sig); - if (txin.key_offsets.size() != output_keys_ptrs.size()) + if (in_key_offsets.size() != output_keys_ptrs.size()) { - LOG_PRINT_L0("Output keys for tx with amount = " << txin.amount << " and count indexes " << txin.key_offsets.size() << " returned wrong keys count " << output_keys_ptrs.size()); + LOG_PRINT_L0("Output keys for tx with amount = " << in_amount << " and count indexes " << in_key_offsets.size() << " returned wrong keys count " << output_keys_ptrs.size()); return false; } @@ -4358,13 +4383,13 @@ bool blockchain_storage::check_tokey_input(const transaction& tx, size_t in_inde if (get_tx_flags(tx) & TX_FLAG_SIGNATURE_MODE_SEPARATE) { // check attachments, mentioned directly in this input - bool r = validate_attachment_info(txin.etc_details, tx.attachment, in_index != tx.vin.size() - 1); // attachment info can be omitted for all inputs, except the last one + bool r = validate_attachment_info(in_etc_details, tx.attachment, in_index != tx.vin.size() - 1); // attachment info can be omitted for all inputs, except the last one CHECK_AND_ASSERT_MES(r, false, "Failed to validate attachments in tx " << tx_prefix_hash << ": incorrect extra_attachment_info in etc_details in input #" << in_index); } else { // make sure normal tx does not have extra_attachment_info in etc_details - CHECK_AND_ASSERT_MES(!have_type_in_variant_container(txin.etc_details), false, "Incorrect using of extra_attachment_info in etc_details in input #" << in_index << " for tx " << tx_prefix_hash); + CHECK_AND_ASSERT_MES(!have_type_in_variant_container(in_etc_details), false, "Incorrect using of extra_attachment_info in etc_details in input #" << in_index << " for tx " << tx_prefix_hash); } // check signatures @@ -4382,14 +4407,14 @@ bool blockchain_storage::check_tokey_input(const transaction& tx, size_t in_inde LOG_PRINT_L4("CHECK RING SIGNATURE: tx_prefix_hash " << tx_prefix_hash << "tx_hash_for_signature" << tx_hash_for_signature - << "txin.k_image" << txin.k_image + << "in_k_image" << in_k_image << "key_ptr:" << *output_keys_ptrs[0] << "signature:" << sig[0]); - bool r = crypto::validate_key_image(txin.k_image); - CHECK_AND_ASSERT_MES(r, false, "key image for input #" << in_index << " is invalid: " << txin.k_image); + bool r = crypto::validate_key_image(in_k_image); + CHECK_AND_ASSERT_MES(r, false, "key image for input #" << in_index << " is invalid: " << in_k_image); - r = crypto::check_ring_signature(tx_hash_for_signature, txin.k_image, output_keys_ptrs, sig.data()); - CHECK_AND_ASSERT_MES(r, false, "failed to check ring signature for input #" << in_index << ENDL << dump_ring_sig_data(tx_hash_for_signature, txin.k_image, output_keys_ptrs, sig)); + r = crypto::check_ring_signature(tx_hash_for_signature, in_k_image, output_keys_ptrs, sig.data()); + CHECK_AND_ASSERT_MES(r, false, "failed to check ring signature for input #" << in_index << ENDL << dump_ring_sig_data(tx_hash_for_signature, in_k_image, output_keys_ptrs, sig)); if (need_to_check_extra_sign) { //here we check extra signature to validate that transaction was finalized by authorized subject @@ -4518,18 +4543,19 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, #undef LOC_CHK } //------------------------------------------------------------------ -bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, const txin_to_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const +bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, const txin_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const { CRITICAL_REGION_LOCAL(m_read_lock); //TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_get_keys_loop); std::vector output_keys; - std::vector key_offsets(txin.key_offset, 1); - scan_for_keys_context scan_contex = AUTO_VAL_INIT(); - if (!get_output_keys_for_input_with_checks(tx, txin.amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_contex)) + std::vector key_offsets(1, txin.key_offset); + scan_for_keys_context scan_contex = AUTO_VAL_INIT(scan_contex); + uint64_t source_max_unlock_time_for_pos_coinbase_dummy = AUTO_VAL_INIT(source_max_unlock_time_for_pos_coinbase_dummy); + if (!get_output_keys_for_input_with_checks(tx, txin.amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase_dummy, scan_contex)) { - LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); + LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << key_offsets.size() << ")"); return false; } @@ -4539,15 +4565,17 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, if (use_sha256) { //doing sha256 hash - crypto::hash sha256 = sha256_hash(txin.hltc_origin.data(), txin.hltc_origin.size()); + crypto::hash sha256 = crypto::sha256_hash(txin.hltc_origin.data(), txin.hltc_origin.size()); CHECK_AND_ASSERT_THROW_MES(sha256 == related_out.htlc_hash, "htlc hash missmatched for tx: " << get_transaction_hash(tx) << " calculated hash: " << sha256 << " expected hash(related_out.htlc_hash): " << related_out.htlc_hash); } else { //doing RIPEMD160 - - + crypto::hash160 ripemd160 = crypto::RIPEMD160_hash(txin.hltc_origin.data(), txin.hltc_origin.size()); + crypto::hash160 expected_ripemd160 = *(crypto::hash160*)&related_out.htlc_hash; + CHECK_AND_ASSERT_THROW_MES(ripemd160 == expected_ripemd160, "htlc hash missmatched for tx: " << get_transaction_hash(tx) + << " calculated hash: " << ripemd160 << " expected hash(related_out.htlc_hash): " << expected_ripemd160); } @@ -4560,7 +4588,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, for (auto& ptr : output_keys) output_keys_ptrs.push_back(&ptr); - return check_tokey_input(tx, in_index, txin, tx_prefix_hash, sig, output_keys_ptrs); + return check_tokey_input(tx, in_index, key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); } //------------------------------------------------------------------ uint64_t blockchain_storage::get_adjusted_time() const diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 5142e72d..579692f7 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -235,9 +235,13 @@ namespace currency template - bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) { uint64_t stub = 0; return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub); } + bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) + { + uint64_t stub = 0; return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key.amount, tx_in_to_key.key_offsets, vis, stub); + } template - bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& scan_context) const ; + bool scan_outputkeys_for_indexes(const transaction &validated_tx, uint64_t amount, const std::vector& key_offsets, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const; + uint64_t get_current_blockchain_size() const; uint64_t get_top_block_height() const; @@ -278,7 +282,7 @@ namespace currency bool validate_tx_service_attachmens_in_services(const tx_service_attachment& a, size_t i, const transaction& tx)const; bool check_tx_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase)const; bool check_tx_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const; - bool check_tx_input(const transaction& tx, size_t in_index, const txin_to_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const; + bool check_tx_input(const transaction& tx, size_t in_index, const txin_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height)const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height)const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash) const; bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height, crypto::hash& max_used_block_id)const; @@ -287,6 +291,16 @@ namespace currency bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const; bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; bool check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const; + bool check_tokey_input(const transaction& tx, + size_t in_index, + const std::vector& in_key_offsets, + uint64_t in_amount, + const crypto::key_image& k_image, + const std::vector& in_etc_details, + const crypto::hash& tx_prefix_hash, + const std::vector& sig, + const std::vector& output_keys_ptrs) const; + uint64_t get_current_comulative_blocksize_limit()const; uint64_t get_current_hashrate(size_t aprox_count)const; uint64_t get_seconds_between_last_n_block(size_t n)const; @@ -452,6 +466,7 @@ namespace currency bool validate_all_aliases_for_new_median_mode(); bool print_tx_outputs_lookup(const crypto::hash& tx_id) const; uint64_t get_last_x_block_height(bool pos)const; + bool is_tx_spendtime_unlocked(uint64_t unlock_time)const; private: //-------------- DB containers -------------- @@ -580,7 +595,6 @@ namespace currency bool push_transaction_to_global_outs_index(const transaction& tx, const crypto::hash& tx_id, std::vector& global_indexes); bool pop_transaction_from_global_index(const transaction& tx, const crypto::hash& tx_id); bool add_out_to_get_random_outs(COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& result_outs, uint64_t amount, size_t i, uint64_t mix_count, bool use_only_forced_to_mix = false) const; - bool is_tx_spendtime_unlocked(uint64_t unlock_time)const; bool add_block_as_invalid(const block& bl, const crypto::hash& h); bool add_block_as_invalid(const block_extended_info& bei, const crypto::hash& h); size_t find_end_of_allowed_index(uint64_t amount)const; diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 8e942469..33459294 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -223,7 +223,7 @@ namespace currency END_SERIALIZE() }; - struct txin_to_htlc + struct txin_htlc { uint64_t amount; std::string hltc_origin; @@ -232,9 +232,10 @@ namespace currency std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature BEGIN_SERIALIZE_OBJECT() + VARINT_FIELD(amount) FIELD(hltc_origin) FIELD(key_offset) - VARINT_FIELD(k_image) + FIELD(k_image) FIELD(etc_details) END_SERIALIZE() }; @@ -282,7 +283,7 @@ namespace currency END_SERIALIZE() }; - typedef boost::variant txin_v; + typedef boost::variant txin_v; typedef boost::variant txout_target_v; @@ -801,7 +802,7 @@ SET_VARIANT_TAGS(currency::tx_receiver, 32, "receiver2"); SET_VARIANT_TAGS(currency::extra_alias_entry, 33, "alias_entry2"); //htlc -SET_VARIANT_TAGS(currency::txin_to_htlc, 34, "txin_to_htlc"); +SET_VARIANT_TAGS(currency::txin_htlc, 34, "txin_to_htlc"); SET_VARIANT_TAGS(currency::txout_htlc, 35, "txout_htlc"); diff --git a/src/currency_core/currency_boost_serialization.h b/src/currency_core/currency_boost_serialization.h index 93e240cb..4b0cb8ac 100644 --- a/src/currency_core/currency_boost_serialization.h +++ b/src/currency_core/currency_boost_serialization.h @@ -56,6 +56,15 @@ namespace boost a & x.keys; } + template + inline void serialize(Archive &a, currency::txout_htlc &x, const boost::serialization::version_type ver) + { + a & x.expiration; + a & x.flags; + a & x.htlc_hash; + a & x.pkey; + } + template inline void serialize(Archive &a, currency::txin_gen &x, const boost::serialization::version_type ver) { @@ -83,6 +92,16 @@ namespace boost a & x.etc_details; } + template + inline void serialize(Archive &a, currency::txin_htlc &x, const boost::serialization::version_type ver) + { + a & x.amount; + a & x.etc_details; + a & x.hltc_origin; + a & x.k_image; + a & x.key_offset; + } + template inline void serialize(Archive &a, currency::tx_out &x, const boost::serialization::version_type ver) { diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 22642fb8..3c5537a5 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -570,6 +570,7 @@ namespace currency size_t operator()(const txin_gen& /*txin*/) const { return 0; } size_t operator()(const txin_to_key& txin) const { return txin.key_offsets.size(); } size_t operator()(const txin_multisig& txin) const { return txin.sigs_count; } + size_t operator()(const txin_htlc& txin) const { return 1; } }; return boost::apply_visitor(txin_signature_size_visitor(), tx_in); diff --git a/src/currency_core/tx_pool.h b/src/currency_core/tx_pool.h index c468f57e..4e660a68 100644 --- a/src/currency_core/tx_pool.h +++ b/src/currency_core/tx_pool.h @@ -192,25 +192,6 @@ namespace currency key_image_cache m_key_images; mutable epee::critical_section m_remove_stuck_txs_lock; - - /************************************************************************/ - /* */ - /************************************************************************/ - class amount_visitor: public boost::static_visitor - { - public: - uint64_t operator()(const txin_to_key& tx) const - { - return tx.amount; - } - uint64_t operator()(const txin_gen& /*tx*/) const - { - CHECK_AND_ASSERT_MES(false, 0, "coinbase transaction in memory pool"); - return 0; - } - uint64_t operator()(const txin_multisig& in) const { return in.amount; } - }; - }; } diff --git a/tests/performance_tests/htlc_hash_tests.cpp b/tests/performance_tests/htlc_hash_tests.cpp new file mode 100644 index 00000000..a62d7c76 --- /dev/null +++ b/tests/performance_tests/htlc_hash_tests.cpp @@ -0,0 +1,32 @@ +// Copyright (c) 2014-2015 The Boolberry developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include + + +#include "crypto/bitcoin/sha256_helper.h" +#include "crypto/RIPEMD160_helper.h" +#include "include_base_utils.h" + +#include "currency_core/currency_core.h" + + +bool do_htlc_hash_tests() +{ + std::string test_string("some hash"); + crypto::hash res_hash = AUTO_VAL_INIT(res_hash); + res_hash = crypto::sha256_hash(test_string.data(), test_string.size()); + LOG_PRINT_L0("Sha256: " << res_hash); + + crypto::hash160 res_hash160 = AUTO_VAL_INIT(res_hash160); + res_hash160 = crypto::RIPEMD160_hash(test_string.data(), test_string.size()); + LOG_PRINT_L0("RIPEMD160: " << res_hash160); + + + return true; +} + + + diff --git a/tests/performance_tests/htlc_hash_tests.h b/tests/performance_tests/htlc_hash_tests.h new file mode 100644 index 00000000..cde02278 --- /dev/null +++ b/tests/performance_tests/htlc_hash_tests.h @@ -0,0 +1,11 @@ +// Copyright (c) 2014-2015 The Boolberry developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + + + +bool do_htlc_hash_tests(); + + + + diff --git a/tests/performance_tests/main.cpp b/tests/performance_tests/main.cpp index d4043276..df60b58e 100644 --- a/tests/performance_tests/main.cpp +++ b/tests/performance_tests/main.cpp @@ -22,6 +22,7 @@ #include "blake2_test.h" #include "print_struct_to_json.h" #include "free_space_check.h" +#include "htlc_hash_tests.h" int main(int argc, char** argv) { @@ -32,14 +33,17 @@ int main(int argc, char** argv) epee::log_space::log_singletone::get_default_log_file().c_str(), epee::log_space::log_singletone::get_default_log_folder().c_str()); + + + do_htlc_hash_tests(); //run_serialization_performance_test(); //return 1; //run_core_market_performance_tests(100000); - set_process_affinity(1); - set_thread_high_priority(); + //set_process_affinity(1); + //set_thread_high_priority(); - do_chacha_stream_performance_test(); + //do_chacha_stream_performance_test(); //test_blake2(); //free_space_check(); From b2a7423ab41fe4bd42544baf2f7020086e91ba39 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 6 Jan 2021 00:10:54 +0100 Subject: [PATCH 05/64] htlc in work: scanning for outputs and validation agains internal errors --- src/currency_core/blockchain_storage.cpp | 57 ++++++++++--------- src/currency_core/blockchain_storage.h | 45 ++++++++++----- src/currency_core/currency_basic.h | 6 +- src/currency_core/currency_format_utils.cpp | 12 ++-- src/currency_core/currency_format_utils.h | 4 +- .../currency_format_utils_transactions.h | 2 +- src/wallet/wallet2.cpp | 2 +- tests/core_tests/alias_tests.cpp | 4 +- tests/core_tests/block_validation.cpp | 4 +- tests/core_tests/chaingen.cpp | 2 +- tests/core_tests/double_spend.inl | 2 +- tests/core_tests/integer_overflow.cpp | 2 +- tests/performance_tests/multi_tx_test_base.h | 2 +- 13 files changed, 82 insertions(+), 62 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index dc5d3988..c5e5e5be 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -2560,7 +2560,7 @@ bool blockchain_storage::is_pos_allowed() const return get_top_block_height() >= m_core_runtime_config.pos_minimum_heigh; } //------------------------------------------------------------------ -bool blockchain_storage::update_spent_tx_flags_for_input(uint64_t amount, const txout_v& o, bool spent) +bool blockchain_storage::update_spent_tx_flags_for_input(uint64_t amount, const txout_ref_v& o, bool spent) { if (o.type() == typeid(ref_by_id)) return update_spent_tx_flags_for_input(boost::get(o).tx_id, boost::get(o).n, spent); @@ -3802,7 +3802,11 @@ namespace currency return true; } - + bool operator()(const txin_htlc& in) const + { + //HTLC TODO + return true; + } bool operator()(const txin_gen& in) const { return true; } bool operator()(const txin_multisig& in) const { @@ -3815,11 +3819,6 @@ namespace currency } return true; } - bool operator()(const txin_htlc& in) const - { - //HTLC TODO - return true; - } }; } @@ -4110,7 +4109,7 @@ bool blockchain_storage::print_tx_outputs_lookup(const crypto::hash& tx_id)const if(amount_it == usage_stat.end()) continue; - for (txout_v& off : txi_in_tokey.key_offsets) + for (txout_ref_v& off : txi_in_tokey.key_offsets) { if(off.type() != typeid(uint64_t)) continue; @@ -4276,7 +4275,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, for (auto& ptr : output_keys) output_keys_ptrs.push_back(&ptr); - return check_tokey_input(tx, in_index, txin, tx_prefix_hash, sig, output_keys_ptrs); + return check_input_signature(tx, in_index, txin, tx_prefix_hash, sig, output_keys_ptrs); } //---------------------------------------------------------------- struct outputs_visitor @@ -4335,31 +4334,37 @@ struct outputs_visitor // 1) source tx unlock time validity // 2) mixin restrictions // 3) general gindex/ref_by_id corectness -bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const +bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verifying_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const { CRITICAL_REGION_LOCAL(m_read_lock); outputs_visitor vi(output_keys, *this, source_max_unlock_time_for_pos_coinbase, scan_context); - return scan_outputkeys_for_indexes(tx, amount, key_offsets, vi, max_related_block_height, scan_context); + return scan_outputkeys_for_indexes(tx, verifying_input, vi, max_related_block_height, scan_context); } //------------------------------------------------------------------ -bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const +bool blockchain_storage::get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verifying_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const { scan_for_keys_context scan_context_dummy = AUTO_VAL_INIT(scan_context_dummy); - return get_output_keys_for_input_with_checks(tx, amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_context_dummy); + return get_output_keys_for_input_with_checks(tx, verifying_input, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase, scan_context_dummy); } //------------------------------------------------------------------ // Note: this function can be used for checking to_key inputs against either main chain or alt chain, that's why it has output_keys_ptrs parameter // Doesn't check spent flags, the caller must check it. -bool blockchain_storage::check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const +bool blockchain_storage::check_input_signature(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const { - return check_tokey_input(tx, in_index, txin.key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); + if (txin.key_offsets.size() != output_keys_ptrs.size()) + { + LOG_PRINT_L0("Output keys for tx with amount = " << txin.amount << " and count indexes " << txin.key_offsets.size() << " returned wrong keys count " << output_keys_ptrs.size()); + return false; + } + + return check_input_signature(tx, in_index, /*txin.key_offsets,*/ txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); } //------------------------------------------------------------------ -bool blockchain_storage::check_tokey_input(const transaction& tx, +bool blockchain_storage::check_input_signature(const transaction& tx, size_t in_index, - const std::vector& in_key_offsets, +// const std::vector& in_key_offsets, uint64_t in_amount, const crypto::key_image& in_k_image, const std::vector& in_etc_details, @@ -4370,12 +4375,6 @@ bool blockchain_storage::check_tokey_input(const transaction& tx, CRITICAL_REGION_LOCAL(m_read_lock); TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_val_sig); - - if (in_key_offsets.size() != output_keys_ptrs.size()) - { - LOG_PRINT_L0("Output keys for tx with amount = " << in_amount << " and count indexes " << in_key_offsets.size() << " returned wrong keys count " << output_keys_ptrs.size()); - return false; - } if(m_is_in_checkpoint_zone) return true; @@ -4550,10 +4549,10 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, //TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_get_keys_loop); std::vector output_keys; - std::vector key_offsets(1, txin.key_offset); + std::vector key_offsets(1, txin.key_offset); scan_for_keys_context scan_contex = AUTO_VAL_INIT(scan_contex); uint64_t source_max_unlock_time_for_pos_coinbase_dummy = AUTO_VAL_INIT(source_max_unlock_time_for_pos_coinbase_dummy); - if (!get_output_keys_for_input_with_checks(tx, txin.amount, key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase_dummy, scan_contex)) + if (!get_output_keys_for_input_with_checks(tx, txin, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase_dummy, scan_contex)) { LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << key_offsets.size() << ")"); return false; @@ -4588,7 +4587,9 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, for (auto& ptr : output_keys) output_keys_ptrs.push_back(&ptr); - return check_tokey_input(tx, in_index, key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); + CHECK_AND_ASSERT_THROW_MES(output_keys_ptrs.size() == 1, "Internal error: output_keys_ptrs.size() is not equal 1 for HTLC"); + + return check_input_signature(tx, in_index, key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); } //------------------------------------------------------------------ uint64_t blockchain_storage::get_adjusted_time() const @@ -6125,7 +6126,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s TIME_MEASURE_FINISH(ki_lookup_time); ki_lookuptime = ki_lookup_time; - std::vector abs_key_offsets = relative_output_offsets_to_absolute(input.key_offsets); + std::vector abs_key_offsets = relative_output_offsets_to_absolute(input.key_offsets); CHECK_AND_ASSERT_MES(abs_key_offsets.size() > 0 && abs_key_offsets.size() == input.key_offsets.size(), false, "internal error: abs_key_offsets.size()==" << abs_key_offsets.size() << ", input.key_offsets.size()==" << input.key_offsets.size()); // eventually we should found all public keys for all outputs this input refers to, for checking ring signature std::vector pub_keys(abs_key_offsets.size(), null_pkey); @@ -6243,7 +6244,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s } // do input checks (attachment_info, ring signature and extra signature, etc.) - r = check_tokey_input(input_tx, input_index, input, input_tx_hash, input_sigs, pub_key_pointers); + r = check_input_signature(input_tx, input_index, input, input_tx_hash, input_sigs, pub_key_pointers); CHECK_AND_ASSERT_MES(r, false, "to_key input validation failed"); // TODO: consider checking input_tx for valid extra attachment info as it's checked in check_tx_inputs() diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 579692f7..b5aa0c98 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -237,10 +237,11 @@ namespace currency template bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) { - uint64_t stub = 0; return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key.amount, tx_in_to_key.key_offsets, vis, stub); + uint64_t stub = 0; + return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub); } template - bool scan_outputkeys_for_indexes(const transaction &validated_tx, uint64_t amount, const std::vector& key_offsets, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const; + bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const; uint64_t get_current_blockchain_size() const; @@ -288,12 +289,11 @@ namespace currency bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height, crypto::hash& max_used_block_id)const; bool check_ms_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const transaction& source_tx, size_t out_n) const; bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const; - bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const; - bool get_output_keys_for_input_with_checks(const transaction& tx, uint64_t amount, const std::vector& key_offsets, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; - bool check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const; - bool check_tokey_input(const transaction& tx, + bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const; + bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; + bool check_input_signature(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const; + bool check_input_signature(const transaction& tx, size_t in_index, - const std::vector& in_key_offsets, uint64_t in_amount, const crypto::key_image& k_image, const std::vector& in_etc_details, @@ -628,7 +628,7 @@ namespace currency // bool build_stake_modifier_for_alt(const alt_chain_type& alt_chain, stake_modifier_type& sm); template bool enum_blockchain(visitor_t& v, const alt_chain_type& alt_chain = alt_chain_type(), uint64_t split_height = 0) const; - bool update_spent_tx_flags_for_input(uint64_t amount, const txout_v& o, bool spent); + bool update_spent_tx_flags_for_input(uint64_t amount, const txout_ref_v& o, bool spent); bool update_spent_tx_flags_for_input(uint64_t amount, uint64_t global_index, bool spent); bool update_spent_tx_flags_for_input(const crypto::hash& multisig_id, uint64_t spent_height); bool update_spent_tx_flags_for_input(const crypto::hash& tx_id, size_t n, bool spent); @@ -681,12 +681,31 @@ namespace currency return !keep_going; } - - //------------------------------------------------------------------ //------------------------------------------------------------------ template - bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, uint64_t amount, const std::vector& key_offsets, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const + bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const { + std::vector key_offsets_dummy; + uint64_t amount = 0; + const std::vector& key_offsets = [&] -> const std::vector& + { + if (verified_input.type() == typeid(txin_htlc)) + { + //hltc + const txin_htlc& htlc = boost::get(verified_input); + key_offsets_dummy.push_back(htlc.key_offset); + amount = htlc.amount; + return key_offsets_dummy; + } + else if (verified_input.type() == typeid(txin_to_key)) + { + //regular to key output + const txin_to_key& to_key = boost::get(verified_input); + amount = to_key.amount; + return to_key.key_offsets; + } + }; + CRITICAL_REGION_LOCAL(m_read_lock); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size); @@ -695,11 +714,11 @@ namespace currency if (!outs_count_for_amount) return false; TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute); - std::vector absolute_offsets = relative_output_offsets_to_absolute(key_offsets); + std::vector absolute_offsets = relative_output_offsets_to_absolute(key_offsets); TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop); size_t output_index = 0; - for(const txout_v& o : absolute_offsets) + for(const txout_ref_v& o : absolute_offsets) { crypto::hash tx_id = null_hash; size_t n = 0; diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 33459294..292627d0 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -191,7 +191,7 @@ namespace currency END_SERIALIZE() }; - typedef boost::variant txout_v; + typedef boost::variant txout_ref_v; struct signed_parts @@ -211,7 +211,7 @@ namespace currency struct txin_to_key { uint64_t amount; - std::vector key_offsets; + std::vector key_offsets; crypto::key_image k_image; // double spending protection std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature @@ -227,7 +227,7 @@ namespace currency { uint64_t amount; std::string hltc_origin; - txout_v key_offset; + txout_ref_v key_offset; crypto::key_image k_image; // double spending protection std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 23f82a8d..d5ab6cff 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -2049,11 +2049,11 @@ namespace currency return genesis_id; } //--------------------------------------------------------------- - std::vector relative_output_offsets_to_absolute(const std::vector& off) + std::vector relative_output_offsets_to_absolute(const std::vector& off) { //if array has both types of outs, then global index (uint64_t) should be first, and then the rest could be out_by_id - std::vector res = off; + std::vector res = off; for (size_t i = 1; i < res.size(); i++) { if (res[i].type() == typeid(ref_by_id)) @@ -2064,13 +2064,13 @@ namespace currency return res; } //--------------------------------------------------------------- - std::vector absolute_output_offsets_to_relative(const std::vector& off) + std::vector absolute_output_offsets_to_relative(const std::vector& off) { - std::vector res = off; + std::vector res = off; if (off.size() < 2) return res; - std::sort(res.begin(), res.end(), [](const txout_v& lft, const txout_v& rght) + std::sort(res.begin(), res.end(), [](const txout_ref_v& lft, const txout_ref_v& rght) { if (lft.type() == typeid(uint64_t)) { @@ -2429,7 +2429,7 @@ namespace currency txin_to_key& tk = boost::get(in); tei.ins.back().amount = tk.amount; tei.ins.back().kimage_or_ms_id = epee::string_tools::pod_to_hex(tk.k_image); - std::vector absolute_offsets = relative_output_offsets_to_absolute(tk.key_offsets); + std::vector absolute_offsets = relative_output_offsets_to_absolute(tk.key_offsets); for (auto& ao : absolute_offsets) { tei.ins.back().global_indexes.push_back(0); diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 3c5537a5..4c4dde90 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -255,8 +255,8 @@ namespace currency bool check_inputs_overflow(const transaction& tx); uint64_t get_block_height(const transaction& coinbase); uint64_t get_block_height(const block& b); - std::vector relative_output_offsets_to_absolute(const std::vector& off); - std::vector absolute_output_offsets_to_relative(const std::vector& off); + std::vector relative_output_offsets_to_absolute(const std::vector& off); + std::vector absolute_output_offsets_to_relative(const std::vector& off); // prints amount in format "3.14", "0.0" std::string print_money_brief(uint64_t amount); diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index 3c36798b..49bc3f10 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -16,7 +16,7 @@ namespace currency { struct tx_source_entry { - typedef serializable_pair output_entry; // txout_v is either global output index or ref_by_id; public_key - is output ephemeral pub key + typedef serializable_pair output_entry; // txout_v is either global output index or ref_by_id; public_key - is output ephemeral pub key std::vector outputs; //index + key uint64_t real_output; //index in outputs vector of real output_entry diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index eed0f821..005b6cd9 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1562,7 +1562,7 @@ uint64_t wallet2::get_directly_spent_transfer_id_by_input_in_tracking_wallet(con uint64_t tid = UINT64_MAX; // try to find a reference among own UTXOs - std::vector abs_key_offsets = relative_output_offsets_to_absolute(intk.key_offsets); // potential speed-up: don't convert to abs offsets as we interested only in direct spends for auditable wallets. Now it's kind a bit paranoid. + std::vector abs_key_offsets = relative_output_offsets_to_absolute(intk.key_offsets); // potential speed-up: don't convert to abs offsets as we interested only in direct spends for auditable wallets. Now it's kind a bit paranoid. for (auto v : abs_key_offsets) { if (v.type() != typeid(uint64_t)) diff --git a/tests/core_tests/alias_tests.cpp b/tests/core_tests/alias_tests.cpp index 97595c50..3aea2943 100644 --- a/tests/core_tests/alias_tests.cpp +++ b/tests/core_tests/alias_tests.cpp @@ -870,7 +870,7 @@ bool gen_alias_reg_with_locked_money::generate(std::vector& ev currency::tx_source_entry se = AUTO_VAL_INIT(se); se.amount = blk_0.miner_tx.vout[0].amount; - se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); + se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); se.real_output = 0; se.real_output_in_tx_index = 0; se.real_out_tx_key = currency::get_tx_pub_key_from_extra(blk_0.miner_tx); @@ -1140,7 +1140,7 @@ bool gen_alias_tx_no_outs::generate(std::vector& events) const currency::tx_source_entry se = AUTO_VAL_INIT(se); se.amount = blk_0.miner_tx.vout[0].amount; - se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); + se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); se.real_output = 0; se.real_output_in_tx_index = 0; se.real_out_tx_key = currency::get_tx_pub_key_from_extra(blk_0.miner_tx); diff --git a/tests/core_tests/block_validation.cpp b/tests/core_tests/block_validation.cpp index 5be9160f..5963626d 100644 --- a/tests/core_tests/block_validation.cpp +++ b/tests/core_tests/block_validation.cpp @@ -312,7 +312,7 @@ bool gen_block_miner_tx_has_2_in::generate(std::vector& events tx_source_entry se = AUTO_VAL_INIT(se); se.amount = blk_0.miner_tx.vout[0].amount; - se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); + se.outputs.push_back(make_serializable_pair(0, boost::get(blk_0.miner_tx.vout[0].target).key)); se.real_output = 0; se.real_out_tx_key = get_tx_pub_key_from_extra(blk_0.miner_tx); se.real_output_in_tx_index = 0; @@ -355,7 +355,7 @@ bool gen_block_miner_tx_with_txin_to_key::generate(std::vector tx_source_entry se = AUTO_VAL_INIT(se); se.amount = blk_1.miner_tx.vout[0].amount; - se.outputs.push_back(make_serializable_pair(0, boost::get(blk_1.miner_tx.vout[0].target).key)); + se.outputs.push_back(make_serializable_pair(0, boost::get(blk_1.miner_tx.vout[0].target).key)); se.real_output = 0; se.real_out_tx_key = get_tx_pub_key_from_extra(blk_1.miner_tx); se.real_output_in_tx_index = 0; diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp index 7270a4af..4fc551cd 100644 --- a/tests/core_tests/chaingen.cpp +++ b/tests/core_tests/chaingen.cpp @@ -1229,7 +1229,7 @@ bool fill_tx_sources(std::vector& sources, const std: { for (const auto& s_outputs_el : s.outputs) // avoid all outputs, including fake mix-ins { - txout_v sout = s_outputs_el.first; + txout_ref_v sout = s_outputs_el.first; if (sout.type().hash_code() == typeid(uint64_t).hash_code()) // output by global index { uint64_t gindex = boost::get(sout); diff --git a/tests/core_tests/double_spend.inl b/tests/core_tests/double_spend.inl index 8b50d334..db18fcf8 100644 --- a/tests/core_tests/double_spend.inl +++ b/tests/core_tests/double_spend.inl @@ -80,7 +80,7 @@ bool gen_double_spend_in_tx::generate(std::vector(global_out_index, boost::get(tx_0.vout[se.real_output_in_tx_index].target).key)); + se.outputs.push_back(make_serializable_pair(global_out_index, boost::get(tx_0.vout[se.real_output_in_tx_index].target).key)); se.real_output = 0; se.real_out_tx_key = get_tx_pub_key_from_extra(tx_0); sources.push_back(se); diff --git a/tests/core_tests/integer_overflow.cpp b/tests/core_tests/integer_overflow.cpp index 858a2fb3..e24eefa3 100644 --- a/tests/core_tests/integer_overflow.cpp +++ b/tests/core_tests/integer_overflow.cpp @@ -40,7 +40,7 @@ namespace { currency::tx_source_entry se = AUTO_VAL_INIT(se); se.amount = tx.vout[out_idx].amount; - se.outputs.push_back(make_serializable_pair(0, boost::get(tx.vout[out_idx].target).key)); + se.outputs.push_back(make_serializable_pair(0, boost::get(tx.vout[out_idx].target).key)); se.real_output = 0; se.real_out_tx_key = get_tx_pub_key_from_extra(tx); se.real_output_in_tx_index = out_idx; diff --git a/tests/performance_tests/multi_tx_test_base.h b/tests/performance_tests/multi_tx_test_base.h index b7c7e783..2fe1d97c 100644 --- a/tests/performance_tests/multi_tx_test_base.h +++ b/tests/performance_tests/multi_tx_test_base.h @@ -33,7 +33,7 @@ public: return false; txout_to_key tx_out = boost::get(m_miner_txs[i].vout[0].target); - output_entries.push_back(make_serializable_pair(i, tx_out.key)); + output_entries.push_back(make_serializable_pair(i, tx_out.key)); m_public_keys[i] = tx_out.key; m_public_key_ptrs[i] = &m_public_keys[i]; } From 93aacf3bec14bf9ad521a75671952eea2381bebd Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 6 Jan 2021 05:15:01 +0100 Subject: [PATCH 06/64] htlc in work: orderliness between htlc and to_key entities --- src/currency_core/blockchain_storage.cpp | 24 +++++++--- src/currency_core/blockchain_storage.h | 44 +++++++++++++++---- src/currency_core/currency_basic.h | 8 ++-- .../currency_boost_serialization.h | 3 +- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index c5e5e5be..3db26cfc 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4312,19 +4312,30 @@ struct outputs_visitor return false; } } - - if (out.target.type() == typeid(txout_htlc)) + if (out.target.type() == typeid(txout_to_key)) + { + crypto::public_key pk = boost::get(out.target).key; + m_results_collector.push_back(pk); + } + else if (out.target.type() == typeid(txout_htlc)) { m_scan_context.htlc_outs.push_back(boost::get(out.target)); - - }else if (out.target.type() != typeid(txout_to_key)) + crypto::public_key pk = null_pkey; + if (m_scan_context.htlc_is_expired) + { + pk = boost::get(out.target).pkey_after_expiration; + } + else + { + pk = boost::get(out.target).pkey_before_expiration; + } + m_results_collector.push_back(pk); + }else { LOG_PRINT_L0("Output have wrong type id, which=" << out.target.which()); return false; } - crypto::public_key pk = boost::get(out.target).key; - m_results_collector.push_back(pk); return true; } }; @@ -4364,7 +4375,6 @@ bool blockchain_storage::check_input_signature(const transaction& tx, size_t in_ //------------------------------------------------------------------ bool blockchain_storage::check_input_signature(const transaction& tx, size_t in_index, -// const std::vector& in_key_offsets, uint64_t in_amount, const crypto::key_image& in_k_image, const std::vector& in_etc_details, diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index b5aa0c98..66fd5a72 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -135,6 +135,7 @@ namespace currency struct scan_for_keys_context { + bool htlc_is_expired; std::list htlc_outs; }; @@ -683,7 +684,7 @@ namespace currency } //------------------------------------------------------------------ template - bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const + bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& scan_context) const { std::vector key_offsets_dummy; uint64_t amount = 0; @@ -749,15 +750,40 @@ namespace currency //check mix_attr TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_loop_find_tx); - CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false); - //explanation of this code will be provided later with public announce - patch_out_if_needed(const_cast(outtk), tx_id, n); - - - + //CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false); CHECK_AND_ASSERT_MES(key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller - bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, key_offsets.size() - 1); - CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast(outtk.mix_attr) << ", key_offsets.size = " << key_offsets.size()); + + if (tx_ptr->tx.vout[n].target.type() == typeid(txout_to_key)) + { + //HTLC input CAN'T refer to regular to_key output + CHECK_AND_ASSERT_MES(verified_input.type() != typeid(txin_htlc), false, "[TXOUT_TO_KEY]: Unexpected output type of HTLC input"); + //fix for burned money + patch_out_if_needed(const_cast(outtk), tx_id, n); + + bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, key_offsets.size() - 1); + CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast(outtk.mix_attr) << ", key_offsets.size = " << key_offsets.size()); + } + else if (tx_ptr->tx.vout[n].target.type() == typeid(txout_htlc)) + { + const txout_htlc& htlc_out = boost::get(tx_ptr->tx.vout[n].target); + if (htlc_out.expiration > get_current_blockchain_size() - tx_ptr->m_keeper_block_height) + { + //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input + CHECK_AND_ASSERT_MES(verified_input.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); + scan_context.htlc_is_expired = false; + } + else + { + //HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input + CHECK_AND_ASSERT_MES(verified_input.type() == typeid(txin_to_key), false, "[TXOUT_HTLC]: Unexpected output type of HTLC input"); + scan_context.htlc_is_expired = true; + } + }else + { + LOG_ERROR("[scan_outputkeys_for_indexes]: Wrong output type in : " << tx_ptr->tx.vout[n].target.type().name()); + return false; + } + TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop_handle_output); if (!vis.handle_output(tx_ptr->tx, validated_tx, tx_ptr->tx.vout[n], n)) diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index 292627d0..a0c16f56 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -273,13 +273,15 @@ namespace currency crypto::hash htlc_hash; uint8_t flags; //select type of the hash, may be some extra info in future uint64_t expiration; - crypto::public_key pkey; + crypto::public_key pkey_before_expiration; + crypto::public_key pkey_after_expiration; BEGIN_SERIALIZE_OBJECT() FIELD(htlc_hash) FIELD(flags) VARINT_FIELD(expiration) - FIELD(pkey) + FIELD(pkey_before_expiration) + FIELD(pkey_after_expiration) END_SERIALIZE() }; @@ -802,7 +804,7 @@ SET_VARIANT_TAGS(currency::tx_receiver, 32, "receiver2"); SET_VARIANT_TAGS(currency::extra_alias_entry, 33, "alias_entry2"); //htlc -SET_VARIANT_TAGS(currency::txin_htlc, 34, "txin_to_htlc"); +SET_VARIANT_TAGS(currency::txin_htlc, 34, "txin_htlc"); SET_VARIANT_TAGS(currency::txout_htlc, 35, "txout_htlc"); diff --git a/src/currency_core/currency_boost_serialization.h b/src/currency_core/currency_boost_serialization.h index 4b0cb8ac..ec70a988 100644 --- a/src/currency_core/currency_boost_serialization.h +++ b/src/currency_core/currency_boost_serialization.h @@ -62,7 +62,8 @@ namespace boost a & x.expiration; a & x.flags; a & x.htlc_hash; - a & x.pkey; + a & x.pkey_before_expiration; + a & x.pkey_after_expiration; } template From 0bb579769cd2f7466877e2f8c543428f524e6cbc Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 6 Jan 2021 23:16:49 +0100 Subject: [PATCH 07/64] htlc in work: refactoring of txin_htlc structure, work on altchain handling witb htlc --- src/currency_core/blockchain_storage.cpp | 56 +++++++++---------- src/currency_core/blockchain_storage.h | 26 ++------- src/currency_core/currency_basic.h | 14 +---- .../currency_boost_serialization.h | 2 +- .../currency_format_utils_abstract.h | 16 ++++++ 5 files changed, 54 insertions(+), 60 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 3db26cfc..50d45bca 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4263,7 +4263,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, std::vector output_keys; scan_for_keys_context scan_context = AUTO_VAL_INIT(scan_context); - if(!get_output_keys_for_input_with_checks(tx, txin.amount, txin.key_offsets, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase)) + if(!get_output_keys_for_input_with_checks(tx, txin, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase)) { LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); return false; @@ -4559,12 +4559,11 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, //TIME_MEASURE_START_PD(tx_check_inputs_loop_ch_in_get_keys_loop); std::vector output_keys; - std::vector key_offsets(1, txin.key_offset); scan_for_keys_context scan_contex = AUTO_VAL_INIT(scan_contex); uint64_t source_max_unlock_time_for_pos_coinbase_dummy = AUTO_VAL_INIT(source_max_unlock_time_for_pos_coinbase_dummy); if (!get_output_keys_for_input_with_checks(tx, txin, output_keys, max_related_block_height, source_max_unlock_time_for_pos_coinbase_dummy, scan_contex)) { - LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << key_offsets.size() << ")"); + LOG_PRINT_L0("Failed to get output keys for input #" << in_index << " (amount = " << print_money(txin.amount) << ", key_offset.size = " << txin.key_offsets.size() << ")"); return false; } @@ -4599,7 +4598,7 @@ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, CHECK_AND_ASSERT_THROW_MES(output_keys_ptrs.size() == 1, "Internal error: output_keys_ptrs.size() is not equal 1 for HTLC"); - return check_input_signature(tx, in_index, key_offsets, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); + return check_input_signature(tx, in_index, txin.amount, txin.k_image, txin.etc_details, tx_prefix_hash, sig, output_keys_ptrs); } //------------------------------------------------------------------ uint64_t blockchain_storage::get_adjusted_time() const @@ -6100,23 +6099,24 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s if (p_max_related_block_height != nullptr) *p_max_related_block_height = 0; - CHECK_AND_ASSERT_MES(input_index < input_tx.vin.size() && input_tx.vin[input_index].type() == typeid(txin_to_key), false, "invalid input index: " << input_index); - const txin_to_key& input = boost::get(input_tx.vin[input_index]); + CHECK_AND_ASSERT_MES(input_index < input_tx.vin.size(), false, "invalid input index: " << input_index); + const txin_v& input_v = input_tx.vin[input_index]; + const txin_to_key& input_to_key = get_to_key_input_from_txin_v(input_v); // check case b1: key_image spent status in main chain, should be either non-spent or has spent height >= split_height - auto p = m_db_spent_keys.get(input.k_image); - CHECK_AND_ASSERT_MES(p == nullptr || *p >= split_height, false, "key image " << input.k_image << " has been already spent in main chain at height " << *p << ", split height: " << split_height); + auto p = m_db_spent_keys.get(input_to_key.k_image); + CHECK_AND_ASSERT_MES(p == nullptr || *p >= split_height, false, "key image " << input_to_key.k_image << " has been already spent in main chain at height " << *p << ", split height: " << split_height); TIME_MEASURE_START(ki_lookup_time); //check key_image in altchain //check among this alt block already collected key images first - if (collected_keyimages.find(input.k_image) != collected_keyimages.end()) + if (collected_keyimages.find(input_to_key.k_image) != collected_keyimages.end()) { // cases b2, b3 - LOG_ERROR("key image " << input.k_image << " already spent in this alt block"); + LOG_ERROR("key image " << input_to_key.k_image << " already spent in this alt block"); return false; } - auto ki_it = m_altblocks_keyimages.find(input.k_image); + auto ki_it = m_altblocks_keyimages.find(input_to_key.k_image); if (ki_it != m_altblocks_keyimages.end()) { //have some entry for this key image. Check if this key image belongs to this alt chain @@ -6126,18 +6126,18 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s if (alt_chain_block_ids.find(h) != alt_chain_block_ids.end()) { // cases b2, b3 - LOG_ERROR("key image " << input.k_image << " already spent in altchain"); + LOG_ERROR("key image " << input_to_key.k_image << " already spent in altchain"); return false; } } } //update altchain with key image - collected_keyimages.insert(input.k_image); + collected_keyimages.insert(input_to_key.k_image); TIME_MEASURE_FINISH(ki_lookup_time); ki_lookuptime = ki_lookup_time; - std::vector abs_key_offsets = relative_output_offsets_to_absolute(input.key_offsets); - CHECK_AND_ASSERT_MES(abs_key_offsets.size() > 0 && abs_key_offsets.size() == input.key_offsets.size(), false, "internal error: abs_key_offsets.size()==" << abs_key_offsets.size() << ", input.key_offsets.size()==" << input.key_offsets.size()); + std::vector abs_key_offsets = relative_output_offsets_to_absolute(input_to_key.key_offsets); + CHECK_AND_ASSERT_MES(abs_key_offsets.size() > 0 && abs_key_offsets.size() == input_to_key.key_offsets.size(), false, "internal error: abs_key_offsets.size()==" << abs_key_offsets.size() << ", input_to_key.key_offsets.size()==" << input_to_key.key_offsets.size()); // eventually we should found all public keys for all outputs this input refers to, for checking ring signature std::vector pub_keys(abs_key_offsets.size(), null_pkey); @@ -6147,12 +6147,12 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s uint64_t global_outs_for_amount = 0; //figure out if this amount touched alt_chain amount's index and if it is, get bool amount_touched_altchain = false; - //auto abg_it = abei.gindex_lookup_table.find(input.amount); + //auto abg_it = abei.gindex_lookup_table.find(input_to_key.amount); //if (abg_it == abei.gindex_lookup_table.end()) if (!alt_chain.empty()) { - auto abg_it = alt_chain.back()->second.gindex_lookup_table.find(input.amount); + auto abg_it = alt_chain.back()->second.gindex_lookup_table.find(input_to_key.amount); if (abg_it != alt_chain.back()->second.gindex_lookup_table.end()) { amount_touched_altchain = true; @@ -6163,13 +6163,13 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s else { //quite easy, - global_outs_for_amount = m_db_outputs.get_item_size(input.amount); + global_outs_for_amount = m_db_outputs.get_item_size(input_to_key.amount); } } else { //quite easy, - global_outs_for_amount = m_db_outputs.get_item_size(input.amount); + global_outs_for_amount = m_db_outputs.get_item_size(input_to_key.amount); } CHECK_AND_ASSERT_MES(pub_keys.size() == abs_key_offsets.size(), false, "pub_keys.size()==" << pub_keys.size() << " != abs_key_offsets.size()==" << abs_key_offsets.size()); // just a little bit of paranoia @@ -6184,7 +6184,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s { uint64_t offset_gindex = boost::get(off); CHECK_AND_ASSERT_MES(offset_gindex < global_outs_for_amount, false, - "invalid global output index " << offset_gindex << " for amount=" << input.amount << + "invalid global output index " << offset_gindex << " for amount=" << input_to_key.amount << ", max is " << global_outs_for_amount << ", referred to by offset #" << pk_n << ", amount_touched_altchain = " << amount_touched_altchain); @@ -6193,7 +6193,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s bool found_the_key = false; for (auto alt_it = alt_chain.rbegin(); alt_it != alt_chain.rend(); alt_it++) { - auto it_aag = (*alt_it)->second.gindex_lookup_table.find(input.amount); + auto it_aag = (*alt_it)->second.gindex_lookup_table.find(input_to_key.amount); if (it_aag == (*alt_it)->second.gindex_lookup_table.end()) { CHECK_AND_ASSERT_MES(alt_it != alt_chain.rbegin(), false, "internal error: was marked as amount_touched_altchain but unable to find on first entry"); @@ -6203,11 +6203,11 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s if (offset_gindex >= it_aag->second) { //GOT IT!! - //TODO: At the moment we ignore check of mix_attr again mixing to simplify alt chain check, but in future consider it for stronger validation + //TODO: At the moment we ignore check of mix_attr against mixing to simplify alt chain check, but in future consider it for stronger validation uint64_t local_offset = offset_gindex - it_aag->second; auto& alt_keys = (*alt_it)->second.outputs_pub_keys; - CHECK_AND_ASSERT_MES(local_offset < alt_keys[input.amount].size(), false, "Internal error: local_offset=" << local_offset << " while alt_keys[" << input.amount << " ].size()=" << alt_keys.size()); - pk = alt_keys[input.amount][local_offset]; + CHECK_AND_ASSERT_MES(local_offset < alt_keys[input_to_key.amount].size(), false, "Internal error: local_offset=" << local_offset << " while alt_keys[" << input_to_key.amount << " ].size()=" << alt_keys.size()); + pk = alt_keys[input_to_key.amount][local_offset]; pub_key_pointers.push_back(&pk); found_the_key = true; break; @@ -6217,8 +6217,8 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s break; //otherwise lookup in main chain index } - auto p = m_db_outputs.get_subitem(input.amount, offset_gindex); - CHECK_AND_ASSERT_MES(p != nullptr, false, "global output was not found, amount: " << input.amount << ", gindex: " << offset_gindex << ", referred to by offset #" << pk_n); + auto p = m_db_outputs.get_subitem(input_to_key.amount, offset_gindex); + CHECK_AND_ASSERT_MES(p != nullptr, false, "global output was not found, amount: " << input_to_key.amount << ", gindex: " << offset_gindex << ", referred to by offset #" << pk_n); tx_id = p->tx_id; out_n = p->out_no; } @@ -6254,7 +6254,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s } // do input checks (attachment_info, ring signature and extra signature, etc.) - r = check_input_signature(input_tx, input_index, input, input_tx_hash, input_sigs, pub_key_pointers); + r = check_input_signature(input_tx, input_index, input_to_key, input_tx_hash, input_sigs, pub_key_pointers); CHECK_AND_ASSERT_MES(r, false, "to_key input validation failed"); // TODO: consider checking input_tx for valid extra attachment info as it's checked in check_tx_inputs() @@ -6485,7 +6485,7 @@ bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::ha CHECK_AND_ASSERT_MES(tx.signatures.size() == tx.vin.size(), false, "invalid tx: tx.signatures.size() == " << tx.signatures.size() << ", tx.vin.size() == " << tx.vin.size()); for (size_t n = 0; n < tx.vin.size(); ++n) { - if (tx.vin[n].type() == typeid(txin_to_key)) + if (tx.vin[n].type() == typeid(txin_to_key) || tx.vin[n].type() == typeid(txin_htlc)) { uint64_t ki_lookup = 0; r = validate_alt_block_input(tx, collected_keyimages, id, tx_id, n, tx.signatures[n], split_height, alt_chain, alt_chain_block_ids, ki_lookup); diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 66fd5a72..a892c1fa 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -686,26 +686,10 @@ namespace currency template bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& scan_context) const { - std::vector key_offsets_dummy; - uint64_t amount = 0; - const std::vector& key_offsets = [&] -> const std::vector& - { - if (verified_input.type() == typeid(txin_htlc)) - { - //hltc - const txin_htlc& htlc = boost::get(verified_input); - key_offsets_dummy.push_back(htlc.key_offset); - amount = htlc.amount; - return key_offsets_dummy; - } - else if (verified_input.type() == typeid(txin_to_key)) - { - //regular to key output - const txin_to_key& to_key = boost::get(verified_input); - amount = to_key.amount; - return to_key.key_offsets; - } - }; + const txin_to_key& input_to_key = get_to_key_input_from_txin_v(verified_input); + + uint64_t amount = input_to_key.amount; + const std::vector& key_offsets = input_to_key.key_offsets; CRITICAL_REGION_LOCAL(m_read_lock); TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size); @@ -757,6 +741,8 @@ namespace currency { //HTLC input CAN'T refer to regular to_key output CHECK_AND_ASSERT_MES(verified_input.type() != typeid(txin_htlc), false, "[TXOUT_TO_KEY]: Unexpected output type of HTLC input"); + + CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false); //fix for burned money patch_out_if_needed(const_cast(outtk), tx_id, n); diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index a0c16f56..cb815ade 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -223,21 +223,13 @@ namespace currency END_SERIALIZE() }; - struct txin_htlc + struct txin_htlc: public txin_to_key { - uint64_t amount; std::string hltc_origin; - txout_ref_v key_offset; - crypto::key_image k_image; // double spending protection - std::vector etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature - BEGIN_SERIALIZE_OBJECT() - VARINT_FIELD(amount) FIELD(hltc_origin) - FIELD(key_offset) - FIELD(k_image) - FIELD(etc_details) - END_SERIALIZE() + FIELDS(*static_cast(this)) + END_SERIALIZE() }; struct txin_multisig diff --git a/src/currency_core/currency_boost_serialization.h b/src/currency_core/currency_boost_serialization.h index ec70a988..25cce5e8 100644 --- a/src/currency_core/currency_boost_serialization.h +++ b/src/currency_core/currency_boost_serialization.h @@ -100,7 +100,7 @@ namespace boost a & x.etc_details; a & x.hltc_origin; a & x.k_image; - a & x.key_offset; + a & x.key_offsets; } template diff --git a/src/currency_core/currency_format_utils_abstract.h b/src/currency_core/currency_format_utils_abstract.h index 5f1c7cf6..8f562120 100644 --- a/src/currency_core/currency_format_utils_abstract.h +++ b/src/currency_core/currency_format_utils_abstract.h @@ -129,6 +129,22 @@ namespace currency } return found; } + + const txin_to_key& get_to_key_input_from_txin_v(const txin_v& in_v) + { + if (in_v.type() == typeid(txin_to_key)) + { + return boost::get(in_v); + } + else if (in_v.type() == typeid(txin_htlc)) + { + const txin_htlc& in = boost::get(in_v); + return static_cast(in); + } + else { + ASSERT_MES_AND_THROW("[get_to_key_input_from_txin_v] Wrong type " << in_v.type().name()); + } + } //--------------------------------------------------------------- template bool check_allowed_types_in_variant_container(const variant_container_t& container, const std::unordered_set& allowed_types, bool elements_must_be_unique = true) From 902d4ffd43c72917171a09dfc2a281b32c2a476c Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 7 Jan 2021 15:04:45 +0100 Subject: [PATCH 08/64] fixed scan_outputkeys_for_indexes overload --- src/currency_core/blockchain_storage.cpp | 1 + src/currency_core/blockchain_storage.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 50d45bca..d22fc074 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -6425,6 +6425,7 @@ bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::ha uint64_t height = abei.height; bool r = false; std::set alt_chain_block_ids; + alt_chain_block_ids.insert(id); // prepare data structure for output global indexes tracking within current alt chain diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index a892c1fa..334d4416 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -238,8 +238,9 @@ namespace currency template bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) { + scan_for_keys_context cntx_stub = AUTO_VAL_INIT(cntx_stub); uint64_t stub = 0; - return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub); + return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub, cntx_stub); } template bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const; From 29e291bcc1b8b200afc34623f7b11bf465a12123 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 8 Jan 2021 01:25:15 +0100 Subject: [PATCH 09/64] htlc in work: altblock tx handling refactoring in work --- src/currency_core/blockchain_storage.cpp | 87 +++++++++++++++++++++--- src/currency_core/blockchain_storage.h | 11 +-- src/currency_core/currency_basic.h | 2 +- 3 files changed, 85 insertions(+), 15 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index d22fc074..7101e714 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -6,6 +6,8 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include +#include +#include #include #include #include @@ -1577,7 +1579,7 @@ std::string blockchain_storage::print_alt_chain(alt_chain_type alt_chain) return ss.str(); } //------------------------------------------------------------------ -bool blockchain_storage::append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::set& alt_block_keyimages) +bool blockchain_storage::append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::unordered_set& alt_block_keyimages) { for (auto& ki : alt_block_keyimages) m_altblocks_keyimages[ki].push_back(block_id); @@ -1781,7 +1783,7 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: bvc.m_verification_failed = true; return false; } - std::set alt_block_keyimages; + std::unordered_set alt_block_keyimages; uint64_t ki_lookup_total = 0; if (!validate_alt_block_txs(b, id, alt_block_keyimages, abei, alt_chain, connection_height, ki_lookup_total)) { @@ -6064,8 +6066,17 @@ void blockchain_storage::calculate_local_gindex_lookup_table_for_height(uint64_t } } //------------------------------------------------------------------ -bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, std::set& collected_keyimages, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, size_t input_index, - const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain, const std::set& alt_chain_block_ids, uint64_t& ki_lookuptime, +bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, + const std::unordered_set& collected_keyimages, + const txs_by_id_and_height_altchain& alt_chain_tx_ids, + const crypto::hash& bl_id, + const crypto::hash& input_tx_hash, + size_t input_index, + const std::vector& input_sigs, + uint64_t split_height, + const alt_chain_type& alt_chain, + const std::unordered_set& alt_chain_block_ids, + uint64_t& ki_lookuptime, uint64_t* p_max_related_block_height /* = nullptr */) const { // Main and alt chain outline: @@ -6202,6 +6213,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s } if (offset_gindex >= it_aag->second) { + //source tx found in altchain //GOT IT!! //TODO: At the moment we ignore check of mix_attr against mixing to simplify alt chain check, but in future consider it for stronger validation uint64_t local_offset = offset_gindex - it_aag->second; @@ -6227,6 +6239,57 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, s auto &rbi = boost::get(off); tx_id = rbi.tx_id; out_n = rbi.n; + //look up in alt-chain transactions fist + auto it = alt_chain_tx_ids.find(tx_id); + if (it != alt_chain_tx_ids.end()) + { + //source tx found in altchain + CHECK_AND_ASSERT_MES(it->second.first.vout.size() > out_n, false, "Internal error: out_n(" << out_n << ") >= it->second.vout.size()(" << it->second.first.vout.size() << ")"); + txout_target_v out_target_v = it->second.first.vout[out_n].target; + if (out_target_v.type() == typeid(txout_htlc)) + { + //source is hltc out + const txout_htlc& htlc = boost::get(out_target_v); + uint64_t height_of_source_block = it->second.second; + uint64_t height_of_current_alt_block = alt_chain.size() ? alt_chain.back()->second.height + 1 : split_height + 1; + CHECK_AND_ASSERT_MES(height_of_current_alt_block > height_of_source_block, false, "Intenral error: height_of_current_alt_block > height_of_source_block failed"); + if (htlc.expiration > height_of_current_alt_block - height_of_source_block) + { + //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input + CHECK_AND_ASSERT_MES(input_v.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); + pk = htlc.pkey_before_expiration; + } + else + { + //HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input + CHECK_AND_ASSERT_MES(input_v.type() == typeid(txin_to_key), false, "[TXOUT_HTLC]: Unexpected output type of HTLC input"); + pk = htlc.pkey_after_expiration; + } + pub_key_pointers.push_back(&pk); + continue; + } + else if (out_target_v.type() == typeid(txout_to_key)) + { + CHECK_AND_ASSERT_MES(input_v.type() != typeid(txin_htlc), false, "Forbidden output type referenced by in tx ( input txin_htlc refered to txout_to_key )"); + //source is to_key out + pk = boost::get(out_target_v).key; + pub_key_pointers.push_back(&pk); + continue; + } + else + { + ASSERT_MES_AND_THROW("Unexpected out type for tx_in in altblock: " << out_target_v.type().name()); + } + + + //let's validate against htlc&to_key + pk = alt_keys[input_to_key.amount][local_offset]; + pub_key_pointers.push_back(&pk); + found_the_key = true; + + + } + } auto p = m_db_transactions.get(tx_id); @@ -6420,11 +6483,12 @@ bool blockchain_storage::update_alt_out_indexes_for_tx_in_block(const transactio return true; } -bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::hash& id, std::set& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const +bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::hash& id, std::unordered_set& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const { uint64_t height = abei.height; bool r = false; - std::set alt_chain_block_ids; + std::unordered_set alt_chain_block_ids; + txs_by_id_and_height_altchain alt_chain_tx_ids; alt_chain_block_ids.insert(id); @@ -6447,8 +6511,13 @@ bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::ha for (auto& ch : alt_chain) { alt_chain_block_ids.insert(get_block_hash(ch->second.bl)); + for (auto & on_board_tx : ch->second.onboard_transactions) + { + alt_chain_tx_ids.insert(txs_by_id_and_height_altchain::value_type(on_board_tx.first, txs_by_id_and_height_altchain::value_type::second_type(on_board_tx.second, ch->second.height))); + } + //TODO: consider performance optimization (get_transaction_hash might slow down deep reorganizations ) + alt_chain_tx_ids.insert(txs_by_id_and_height_altchain::value_type(get_transaction_hash(ch->second.bl.miner_tx), txs_by_id_and_height_altchain::value_type::second_type(ch->second.bl.miner_tx, ch->second.height))); } - } else { @@ -6462,7 +6531,7 @@ bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::ha CHECK_AND_ASSERT_MES(b.miner_tx.signatures.size() == 1 && b.miner_tx.vin.size() == 2, false, "invalid PoS block's miner_tx, signatures size = " << b.miner_tx.signatures.size() << ", miner_tx.vin.size() = " << b.miner_tx.vin.size()); uint64_t max_related_block_height = 0; uint64_t ki_lookup = 0; - r = validate_alt_block_input(b.miner_tx, collected_keyimages, id, get_block_hash(b), 1, b.miner_tx.signatures[0], split_height, alt_chain, alt_chain_block_ids, ki_lookup, &max_related_block_height); + r = validate_alt_block_input(b.miner_tx, collected_keyimages, alt_chain_tx_ids, id, get_block_hash(b), 1, b.miner_tx.signatures[0], split_height, alt_chain, alt_chain_block_ids, ki_lookup, &max_related_block_height); CHECK_AND_ASSERT_MES(r, false, "miner tx " << get_transaction_hash(b.miner_tx) << ": validation failed"); ki_lookup_time_total += ki_lookup; // check stake age @@ -6489,7 +6558,7 @@ bool blockchain_storage::validate_alt_block_txs(const block& b, const crypto::ha if (tx.vin[n].type() == typeid(txin_to_key) || tx.vin[n].type() == typeid(txin_htlc)) { uint64_t ki_lookup = 0; - r = validate_alt_block_input(tx, collected_keyimages, id, tx_id, n, tx.signatures[n], split_height, alt_chain, alt_chain_block_ids, ki_lookup); + r = validate_alt_block_input(tx, collected_keyimages, alt_chain_tx_ids, id, tx_id, n, tx.signatures[n], split_height, alt_chain, alt_chain_block_ids, ki_lookup); CHECK_AND_ASSERT_MES(r, false, "tx " << tx_id << ", input #" << n << ": validation failed"); ki_lookup_time_total += ki_lookup; } diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 334d4416..b0b5f826 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -167,8 +167,7 @@ namespace currency transactions_map onboard_transactions; }; typedef std::unordered_map alt_chain_container; - //typedef std::list alt_chain_type; - typedef std::vector alt_chain_type; + typedef std::vector alt_chain_type; // alternative subchain, front -> mainchain(split point), back -> alternative head typedef std::unordered_map blocks_ext_by_hash; @@ -484,6 +483,8 @@ namespace currency typedef tools::db::basic_key_value_accessor per_block_gindex_increments_container; // height => [(amount, gindex_increment), ...] //----------------------------------------- + + typedef std::unordered_map > txs_by_id_and_height_altchain; tx_memory_pool& m_tx_pool; mutable bc_attachment_services_manager m_services_mgr; @@ -584,10 +585,10 @@ namespace currency wide_difficulty_type get_x_difficulty_after_height(uint64_t height, bool is_pos); bool purge_keyimage_from_big_heap(const crypto::key_image& ki, const crypto::hash& id); bool purge_altblock_keyimages_from_big_heap(const block& b, const crypto::hash& id); - bool append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::set& alt_block_keyimages); - bool validate_alt_block_input(const transaction& input_tx, std::set& collected_keyimages, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain, const std::set& alt_chain_block_ids, uint64_t& ki_lookuptime, uint64_t* p_max_related_block_height = nullptr) const; + bool append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::unordered_set& alt_block_keyimages); + bool validate_alt_block_input(const transaction& input_tx, std::unordered_set& collected_keyimages, const txs_by_id_and_height_altchain& alt_chain_tx_ids, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain, const std::unordered_set& alt_chain_block_ids, uint64_t& ki_lookuptime, uint64_t* p_max_related_block_height = nullptr) const; bool validate_alt_block_ms_input(const transaction& input_tx, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain) const; - bool validate_alt_block_txs(const block& b, const crypto::hash& id, std::set& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const; + bool validate_alt_block_txs(const block& b, const crypto::hash& id, std::unordered_set& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const; bool update_alt_out_indexes_for_tx_in_block(const transaction& tx, alt_block_extended_info& abei)const; bool get_transaction_from_pool_or_db(const crypto::hash& tx_id, std::shared_ptr& tx_ptr, uint64_t min_allowed_block_height = 0) const; void get_last_n_x_blocks(uint64_t n, bool pos_blocks, std::list>& blocks) const; diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index cb815ade..b5b0d8d4 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -559,7 +559,7 @@ namespace currency { public: // tx version information - size_t version{}; + uint64_t version{}; //extra std::vector extra; std::vector vin; From 79040fa9b3e72b43a95e848299ebbdf3ed1338b8 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 20 Jan 2021 23:16:28 +0100 Subject: [PATCH 10/64] validate_alt_block_input deep refactoring related to htlc --- src/currency_core/blockchain_storage.cpp | 176 ++++++++++++++++++----- src/currency_core/blockchain_storage.h | 26 +++- 2 files changed, 162 insertions(+), 40 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index a98d2799..1247420e 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -6184,6 +6184,9 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, CHECK_AND_ASSERT_MES(pub_keys.size() == abs_key_offsets.size(), false, "pub_keys.size()==" << pub_keys.size() << " != abs_key_offsets.size()==" << abs_key_offsets.size()); // just a little bit of paranoia std::vector pub_key_pointers; + + uint64_t height_of_current_alt_block = alt_chain.size() ? alt_chain.back()->second.height + 1 : split_height + 1; + for (size_t pk_n = 0; pk_n < pub_keys.size(); ++pk_n) { crypto::public_key& pk = pub_keys[pk_n]; @@ -6218,7 +6221,34 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, uint64_t local_offset = offset_gindex - it_aag->second; auto& alt_keys = (*alt_it)->second.outputs_pub_keys; CHECK_AND_ASSERT_MES(local_offset < alt_keys[input_to_key.amount].size(), false, "Internal error: local_offset=" << local_offset << " while alt_keys[" << input_to_key.amount << " ].size()=" << alt_keys.size()); - pk = alt_keys[input_to_key.amount][local_offset]; + const output_key_or_htlc_v& out_in_alt = alt_keys[input_to_key.amount][local_offset]; + + /* + here we do validation against compatibility of input and output type + + TxOutput | TxInput | Allowed + ---------------------------- + HTLC | HTLC | ONLY IF HTLC NOT EXPIRED + HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED + TO_KEY | HTLC | NOT + TO_KEY | TO_KEY | YES + */ + uint64_t height_of_source_block = (*alt_it)->second.height; + CHECK_AND_ASSERT_MES(height_of_current_alt_block > height_of_source_block, false, "Intenral error: height_of_current_alt_block > height_of_source_block failed"); + bool r = is_output_allowed_for_input(out_in_alt, input_v, height_of_current_alt_block - height_of_source_block); + CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); + + if (out_in_alt.type() == typeid(crypto::public_key)) + { + pk = boost::get(out_in_alt); + } + else + { + const txout_htlc& out_htlc = boost::get(out_in_alt); + bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false:true; + pk = htlc_expired ? out_htlc.pkey_after_expiration : out_htlc.pkey_before_expiration; + //input_v + } pub_key_pointers.push_back(&pk); found_the_key = true; break; @@ -6242,34 +6272,37 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, auto it = alt_chain_tx_ids.find(tx_id); if (it != alt_chain_tx_ids.end()) { + uint64_t height_of_source_block = it->second.second; + CHECK_AND_ASSERT_MES(height_of_current_alt_block > height_of_source_block, false, "Intenral error: height_of_current_alt_block > height_of_source_block failed"); + + /* + here we do validation against compatibility of input and output type + + TxOutput | TxInput | Allowed + ---------------------------- + HTLC | HTLC | ONLY IF HTLC NOT EXPIRED + HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED + TO_KEY | HTLC | NOT + TO_KEY | TO_KEY | YES + */ + + bool r = is_output_allowed_for_input(out_target_v, input_v, height_of_current_alt_block - height_of_source_block); + CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); + //source tx found in altchain CHECK_AND_ASSERT_MES(it->second.first.vout.size() > out_n, false, "Internal error: out_n(" << out_n << ") >= it->second.vout.size()(" << it->second.first.vout.size() << ")"); txout_target_v out_target_v = it->second.first.vout[out_n].target; if (out_target_v.type() == typeid(txout_htlc)) { //source is hltc out - const txout_htlc& htlc = boost::get(out_target_v); - uint64_t height_of_source_block = it->second.second; - uint64_t height_of_current_alt_block = alt_chain.size() ? alt_chain.back()->second.height + 1 : split_height + 1; - CHECK_AND_ASSERT_MES(height_of_current_alt_block > height_of_source_block, false, "Intenral error: height_of_current_alt_block > height_of_source_block failed"); - if (htlc.expiration > height_of_current_alt_block - height_of_source_block) - { - //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input - CHECK_AND_ASSERT_MES(input_v.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); - pk = htlc.pkey_before_expiration; - } - else - { - //HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input - CHECK_AND_ASSERT_MES(input_v.type() == typeid(txin_to_key), false, "[TXOUT_HTLC]: Unexpected output type of HTLC input"); - pk = htlc.pkey_after_expiration; - } + const txout_htlc& htlc = boost::get(out_target_v); + bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false : true; + pk = htlc_expired ? htlc.pkey_after_expiration : htlc.pkey_before_expiration; pub_key_pointers.push_back(&pk); continue; } else if (out_target_v.type() == typeid(txout_to_key)) { - CHECK_AND_ASSERT_MES(input_v.type() != typeid(txin_htlc), false, "Forbidden output type referenced by in tx ( input txin_htlc refered to txout_to_key )"); //source is to_key out pk = boost::get(out_target_v).key; pub_key_pointers.push_back(&pk); @@ -6279,14 +6312,6 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, { ASSERT_MES_AND_THROW("Unexpected out type for tx_in in altblock: " << out_target_v.type().name()); } - - - //let's validate against htlc&to_key - pk = alt_keys[input_to_key.amount][local_offset]; - pub_key_pointers.push_back(&pk); - found_the_key = true; - - } } @@ -6294,11 +6319,36 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, auto p = m_db_transactions.get(tx_id); CHECK_AND_ASSERT_MES(p != nullptr && out_n < p->tx.vout.size(), false, "can't find output #" << out_n << " for tx " << tx_id << " referred by offset #" << pk_n); auto &t = p->tx.vout[out_n].target; - CHECK_AND_ASSERT_MES(t.type() == typeid(txout_to_key), false, "txin_to_key input offset #" << pk_n << " refers to incorrect output type " << t.type().name()); - auto& out_tk = boost::get(t); - pk = out_tk.key; - bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(out_tk.mix_attr, abs_key_offsets.size() - 1); - CHECK_AND_ASSERT_MES(mixattr_ok, false, "input offset #" << pk_n << " violates mixin restrictions: mix_attr = " << static_cast(out_tk.mix_attr) << ", input's key_offsets.size = " << abs_key_offsets.size()); + + /* + here we do validation against compatibility of input and output type + + TxOutput | TxInput | Allowed + ---------------------------- + HTLC | HTLC | ONLY IF HTLC NOT EXPIRED + HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED + TO_KEY | HTLC | NOT + TO_KEY | TO_KEY | YES + */ + uint64_t height_of_source_block = p->m_keeper_block_height; + bool r = is_output_allowed_for_input(t, input_v, height_of_current_alt_block - height_of_source_block); + CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); + + if (t.type() == typeid(txout_to_key)) + { + const txout_to_key& out_tk = boost::get(t); + pk = out_tk.key; + + bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(out_tk.mix_attr, abs_key_offsets.size() - 1); + CHECK_AND_ASSERT_MES(mixattr_ok, false, "input offset #" << pk_n << " violates mixin restrictions: mix_attr = " << static_cast(out_tk.mix_attr) << ", input's key_offsets.size = " << abs_key_offsets.size()); + + } + else if (t.type() == typeid(txout_htlc)) + { + const txout_htlc& htlc = boost::get(t); + bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false : true; + pk = htlc_expired ? htlc.pkey_after_expiration : htlc.pkey_before_expiration; + } // case b4 (make sure source tx in the main chain is preceding split point, otherwise this referece is invalid) CHECK_AND_ASSERT_MES(p->m_keeper_block_height < split_height, false, "input offset #" << pk_n << " refers to main chain tx " << tx_id << " at height " << p->m_keeper_block_height << " while split height is " << split_height); @@ -6324,6 +6374,58 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, return true; } //------------------------------------------------------------------ +bool blockchain_storage::is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height) +{ + + /* + TxOutput | TxInput | Allowed + ---------------------------- + HTLC | HTLC | ONLY IF HTLC NOT EXPIRED + HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED + TO_KEY | HTLC | NOT + TO_KEY | TO_KEY | YES + */ + + + if (out_v.type() == typeid(txout_to_key)) + { + return is_output_allowed_for_input(boost::get(out_v), in_v); + } + else if (out_v.type() == typeid(txout_htlc)) + { + return is_output_allowed_for_input(boost::get(out_v), in_v, top_minus_source_height); + } + else + { + LOG_ERROR("[scan_outputkeys_for_indexes]: Wrong output type in : " << out_v.type().name()); + return false; + } + return true; +} +//------------------------------------------------------------------ +bool blockchain_storage::is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height) +{ + bool htlc_expired = out_v.expiration > (top_minus_source_height) ? false : true; + if (!hltc_expired) + { + //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input + CHECK_AND_ASSERT_MES(in_v.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); + } + else + { + //HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input + CHECK_AND_ASSERT_MES(in_v.type() == typeid(txin_to_key), false, "[TXOUT_HTLC]: Unexpected output type of HTLC input"); + } + return true; +} +//------------------------------------------------------------------ +bool blockchain_storage::is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v) +{ + //HTLC input CAN'T refer to regular to_key output + CHECK_AND_ASSERT_MES(in_v.type() != typeid(txin_htlc), false, "[TXOUT_TO_KEY]: Unexpected output type of HTLC input"); + return true; +} +//------------------------------------------------------------------ bool blockchain_storage::validate_alt_block_ms_input(const transaction& input_tx, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain) const { // Main and alt chain outline: @@ -6465,7 +6567,7 @@ bool blockchain_storage::update_alt_out_indexes_for_tx_in_block(const transactio //add tx outputs to gindex_lookup_table for (auto o : tx.vout) { - if (o.target.type() == typeid(txout_to_key)) + if (o.target.type() == typeid(txout_to_key) || o.target.type() == typeid(txout_htlc)) { //LOG_PRINT_MAGENTA("ALT_OUT KEY ON H[" << abei.height << "] AMOUNT: " << o.amount, LOG_LEVEL_0); // first, look at local gindexes tables @@ -6475,7 +6577,15 @@ bool blockchain_storage::update_alt_out_indexes_for_tx_in_block(const transactio abei.gindex_lookup_table[o.amount] = m_db_outputs.get_item_size(o.amount); //LOG_PRINT_MAGENTA("FIRST TOUCH: size=" << abei.gindex_lookup_table[o.amount], LOG_LEVEL_0); } - abei.outputs_pub_keys[o.amount].push_back(boost::get(o.target).key); + if (o.target.type() == typeid(txout_to_key)) + { + abei.outputs_pub_keys[o.amount].push_back(boost::get(o.target).key); + } + else + { + abei.outputs_pub_keys[o.amount].push_back(boost::get(o.target)); + } + //TODO: At the moment we ignore check of mix_attr again mixing to simplify alt chain check, but in future consider it for stronger validation } } diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index b0b5f826..7220d3cf 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -150,7 +150,9 @@ namespace currency // retrieve gindex from local_gindex_lookup_table # there are outputs having given amount after the given height // else: // retrieve gindex from main chain gindex table # not outputs having given amount are present after the given height - // + // + + typedef boost::variant output_key_or_htlc_v; struct alt_block_extended_info: public block_extended_info { @@ -158,7 +160,7 @@ namespace currency std::map gindex_lookup_table; // {amount -> pub_keys} map of outputs' pub_keys appeared in this alt block ( index_in_vector == output_gindex - gindex_lookup_table[output_amount] ) - std::map > outputs_pub_keys; + std::map > outputs_pub_keys; //date added to alt chain storage uint64_t timestamp; @@ -641,6 +643,9 @@ namespace currency void calculate_local_gindex_lookup_table_for_height(uint64_t split_height, std::map& increments) const; void do_erase_altblock(alt_chain_container::iterator it); uint64_t get_blockchain_launch_timestamp()const; + bool is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height); + bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v); + bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height); @@ -739,11 +744,20 @@ namespace currency //CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false); CHECK_AND_ASSERT_MES(key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller + /* + TxOutput | TxInput | Allowed + ---------------------------- + HTLC | HTLC | ONLY IF HTLC NOT EXPIRED + HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED + TO_KEY | HTLC | NOT + TO_KEY | TO_KEY | YES + */ + + bool r = is_output_allowed_for_input(tx_ptr->tx.vout[n].target, verified_input, get_current_blockchain_size() - tx_ptr->m_keeper_block_height); + CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); + if (tx_ptr->tx.vout[n].target.type() == typeid(txout_to_key)) { - //HTLC input CAN'T refer to regular to_key output - CHECK_AND_ASSERT_MES(verified_input.type() != typeid(txin_htlc), false, "[TXOUT_TO_KEY]: Unexpected output type of HTLC input"); - CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false); //fix for burned money patch_out_if_needed(const_cast(outtk), tx_id, n); @@ -757,13 +771,11 @@ namespace currency if (htlc_out.expiration > get_current_blockchain_size() - tx_ptr->m_keeper_block_height) { //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input - CHECK_AND_ASSERT_MES(verified_input.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); scan_context.htlc_is_expired = false; } else { //HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input - CHECK_AND_ASSERT_MES(verified_input.type() == typeid(txin_to_key), false, "[TXOUT_HTLC]: Unexpected output type of HTLC input"); scan_context.htlc_is_expired = true; } }else From e823dab69f4959990cf32342323ec8198edb72a6 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 20 Jan 2021 23:48:42 +0100 Subject: [PATCH 11/64] fixed compilation --- src/currency_core/blockchain_storage.cpp | 36 ++++++++++++++++++------ src/currency_core/blockchain_storage.h | 20 ++++++++++--- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 1247420e..ca203bbc 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -6067,7 +6067,7 @@ void blockchain_storage::calculate_local_gindex_lookup_table_for_height(uint64_t } //------------------------------------------------------------------ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, - const std::unordered_set& collected_keyimages, + std::unordered_set& collected_keyimages, const txs_by_id_and_height_altchain& alt_chain_tx_ids, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, @@ -6245,7 +6245,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, else { const txout_htlc& out_htlc = boost::get(out_in_alt); - bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false:true; + bool htlc_expired = out_htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false:true; pk = htlc_expired ? out_htlc.pkey_after_expiration : out_htlc.pkey_before_expiration; //input_v } @@ -6286,12 +6286,14 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, TO_KEY | TO_KEY | YES */ - bool r = is_output_allowed_for_input(out_target_v, input_v, height_of_current_alt_block - height_of_source_block); - CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); - //source tx found in altchain CHECK_AND_ASSERT_MES(it->second.first.vout.size() > out_n, false, "Internal error: out_n(" << out_n << ") >= it->second.vout.size()(" << it->second.first.vout.size() << ")"); txout_target_v out_target_v = it->second.first.vout[out_n].target; + + bool r = is_output_allowed_for_input(out_target_v, input_v, height_of_current_alt_block - height_of_source_block); + CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); + + if (out_target_v.type() == typeid(txout_htlc)) { //source is hltc out @@ -6331,6 +6333,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, TO_KEY | TO_KEY | YES */ uint64_t height_of_source_block = p->m_keeper_block_height; + CHECK_AND_ASSERT_MES(height_of_current_alt_block > height_of_source_block, false, "Intenral error: height_of_current_alt_block > height_of_source_block failed"); bool r = is_output_allowed_for_input(t, input_v, height_of_current_alt_block - height_of_source_block); CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type"); @@ -6374,7 +6377,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, return true; } //------------------------------------------------------------------ -bool blockchain_storage::is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height) +bool blockchain_storage::is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const { /* @@ -6403,10 +6406,10 @@ bool blockchain_storage::is_output_allowed_for_input(const txout_target_v& out_v return true; } //------------------------------------------------------------------ -bool blockchain_storage::is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height) +bool blockchain_storage::is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const { bool htlc_expired = out_v.expiration > (top_minus_source_height) ? false : true; - if (!hltc_expired) + if (!htlc_expired) { //HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input CHECK_AND_ASSERT_MES(in_v.type() == typeid(txin_htlc), false, "[TXOUT_HTLC]: Unexpected output type of non-HTLC input"); @@ -6419,13 +6422,28 @@ bool blockchain_storage::is_output_allowed_for_input(const txout_htlc& out_v, co return true; } //------------------------------------------------------------------ -bool blockchain_storage::is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v) +bool blockchain_storage::is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v)const { //HTLC input CAN'T refer to regular to_key output CHECK_AND_ASSERT_MES(in_v.type() != typeid(txin_htlc), false, "[TXOUT_TO_KEY]: Unexpected output type of HTLC input"); return true; } //------------------------------------------------------------------ +bool blockchain_storage::is_output_allowed_for_input(const output_key_or_htlc_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const +{ + if (out_v.type() == typeid(crypto::public_key)) + { + return is_output_allowed_for_input(txout_to_key(), in_v); + } + else if (out_v.type() == typeid(txout_htlc)) + { + return is_output_allowed_for_input(boost::get(out_v), in_v, top_minus_source_height); + } + else { + ASSERT_MES_AND_THROW("Unexpected type in output_key_or_htlc_v: " << out_v.type().name()); + } +} +//------------------------------------------------------------------ bool blockchain_storage::validate_alt_block_ms_input(const transaction& input_tx, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain) const { // Main and alt chain outline: diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 7220d3cf..b20c2965 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -588,7 +588,18 @@ namespace currency bool purge_keyimage_from_big_heap(const crypto::key_image& ki, const crypto::hash& id); bool purge_altblock_keyimages_from_big_heap(const block& b, const crypto::hash& id); bool append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::unordered_set& alt_block_keyimages); - bool validate_alt_block_input(const transaction& input_tx, std::unordered_set& collected_keyimages, const txs_by_id_and_height_altchain& alt_chain_tx_ids, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain, const std::unordered_set& alt_chain_block_ids, uint64_t& ki_lookuptime, uint64_t* p_max_related_block_height = nullptr) const; + bool validate_alt_block_input(const transaction& input_tx, + std::unordered_set& collected_keyimages, + const txs_by_id_and_height_altchain& alt_chain_tx_ids, + const crypto::hash& bl_id, + const crypto::hash& input_tx_hash, + size_t input_index, + const std::vector& input_sigs, + uint64_t split_height, + const alt_chain_type& alt_chain, + const std::unordered_set& alt_chain_block_ids, + uint64_t& ki_lookuptime, + uint64_t* p_max_related_block_height = nullptr) const; bool validate_alt_block_ms_input(const transaction& input_tx, const crypto::hash& input_tx_hash, size_t input_index, const std::vector& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain) const; bool validate_alt_block_txs(const block& b, const crypto::hash& id, std::unordered_set& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const; bool update_alt_out_indexes_for_tx_in_block(const transaction& tx, alt_block_extended_info& abei)const; @@ -643,9 +654,10 @@ namespace currency void calculate_local_gindex_lookup_table_for_height(uint64_t split_height, std::map& increments) const; void do_erase_altblock(alt_chain_container::iterator it); uint64_t get_blockchain_launch_timestamp()const; - bool is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height); - bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v); - bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height); + bool is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; + bool is_output_allowed_for_input(const output_key_or_htlc_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; + bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v)const; + bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; From fca90b0146faaf76653378abaa42ea2cd07c48c0 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 24 Jan 2021 21:00:43 +0100 Subject: [PATCH 12/64] implemented tracking of htlc in wallet(creation is not implemented yet) --- src/currency_core/blockchain_storage.cpp | 6 +- src/currency_core/blockchain_storage_basic.h | 2 + src/currency_core/currency_basic.h | 8 +- .../currency_boost_serialization.h | 4 +- src/currency_core/currency_config.h | 2 +- src/currency_core/currency_format_utils.cpp | 24 ++- src/currency_core/currency_format_utils.h | 5 + src/wallet/wallet2.cpp | 149 ++++++++++++++++-- src/wallet/wallet2.h | 16 ++ 9 files changed, 193 insertions(+), 23 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index ca203bbc..37e14534 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -6246,7 +6246,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, { const txout_htlc& out_htlc = boost::get(out_in_alt); bool htlc_expired = out_htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false:true; - pk = htlc_expired ? out_htlc.pkey_after_expiration : out_htlc.pkey_before_expiration; + pk = htlc_expired ? out_htlc.pkey_refund : out_htlc.pkey_redeem; //input_v } pub_key_pointers.push_back(&pk); @@ -6299,7 +6299,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, //source is hltc out const txout_htlc& htlc = boost::get(out_target_v); bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false : true; - pk = htlc_expired ? htlc.pkey_after_expiration : htlc.pkey_before_expiration; + pk = htlc_expired ? htlc.pkey_refund : htlc.pkey_redeem; pub_key_pointers.push_back(&pk); continue; } @@ -6350,7 +6350,7 @@ bool blockchain_storage::validate_alt_block_input(const transaction& input_tx, { const txout_htlc& htlc = boost::get(t); bool htlc_expired = htlc.expiration > (height_of_current_alt_block - height_of_source_block) ? false : true; - pk = htlc_expired ? htlc.pkey_after_expiration : htlc.pkey_before_expiration; + pk = htlc_expired ? htlc.pkey_refund : htlc.pkey_redeem; } // case b4 (make sure source tx in the main chain is preceding split point, otherwise this referece is invalid) diff --git a/src/currency_core/blockchain_storage_basic.h b/src/currency_core/blockchain_storage_basic.h index 6d2a1300..8a487003 100644 --- a/src/currency_core/blockchain_storage_basic.h +++ b/src/currency_core/blockchain_storage_basic.h @@ -154,4 +154,6 @@ namespace currency transactions_map onboard_transactions; }; + + } \ No newline at end of file diff --git a/src/currency_core/currency_basic.h b/src/currency_core/currency_basic.h index b5b0d8d4..274a2f25 100644 --- a/src/currency_core/currency_basic.h +++ b/src/currency_core/currency_basic.h @@ -265,15 +265,15 @@ namespace currency crypto::hash htlc_hash; uint8_t flags; //select type of the hash, may be some extra info in future uint64_t expiration; - crypto::public_key pkey_before_expiration; - crypto::public_key pkey_after_expiration; + crypto::public_key pkey_redeem; //works before expiration + crypto::public_key pkey_refund; //works after expiration BEGIN_SERIALIZE_OBJECT() FIELD(htlc_hash) FIELD(flags) VARINT_FIELD(expiration) - FIELD(pkey_before_expiration) - FIELD(pkey_after_expiration) + FIELD(pkey_redeem) + FIELD(pkey_refund) END_SERIALIZE() }; diff --git a/src/currency_core/currency_boost_serialization.h b/src/currency_core/currency_boost_serialization.h index 25cce5e8..96f95bdc 100644 --- a/src/currency_core/currency_boost_serialization.h +++ b/src/currency_core/currency_boost_serialization.h @@ -62,8 +62,8 @@ namespace boost a & x.expiration; a & x.flags; a & x.htlc_hash; - a & x.pkey_before_expiration; - a & x.pkey_after_expiration; + a & x.pkey_redeem; + a & x.pkey_refund; } template diff --git a/src/currency_core/currency_config.h b/src/currency_core/currency_config.h index c6b106b4..8b576556 100644 --- a/src/currency_core/currency_config.h +++ b/src/currency_core/currency_config.h @@ -222,7 +222,7 @@ #define BC_OFFERS_CURRENCY_MARKET_FILENAME "market.bin" -#define WALLET_FILE_SERIALIZATION_VERSION (CURRENCY_FORMATION_VERSION+68) +#define WALLET_FILE_SERIALIZATION_VERSION (CURRENCY_FORMATION_VERSION+69) #define CURRENT_MEMPOOL_ARCHIVE_VER (CURRENCY_FORMATION_VERSION+31) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index d5ab6cff..74992272 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1674,6 +1674,12 @@ namespace currency } //--------------------------------------------------------------- bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector& outs, uint64_t& money_transfered, crypto::key_derivation& derivation) + { + std::list htlc_info_list; + return lookup_acc_outs(acc, tx, tx_pub_key, outs, money_transfered, derivation, htlc_info_list); + } + //--------------------------------------------------------------- + bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector& outs, uint64_t& money_transfered, crypto::key_derivation& derivation, std::list& htlc_info_list) { money_transfered = 0; bool r = generate_key_derivation(tx_pub_key, acc.view_secret_key, derivation); @@ -1685,7 +1691,6 @@ namespace currency return lookup_acc_outs_genesis(acc, tx, tx_pub_key, outs, money_transfered, derivation); } - if (!check_tx_derivation_hint(tx, derivation)) return true; @@ -1708,6 +1713,23 @@ namespace currency //don't count this money } } + else if (o.target.type() == typeid(txout_htlc)) + { + htlc_info hi = AUTO_VAL_INIT(hi); + const txout_htlc& htlc = boost::get(o.target); + if (is_out_to_acc(acc, htlc.pkey_redeem, derivation, i)) + { + hi.hltc_our_out_is_before_expiration = true; + htlc_info_list.push_back(hi); + outs.push_back(i); + } + else if (is_out_to_acc(acc, htlc.pkey_refund, derivation, i)) + { + hi.hltc_our_out_is_before_expiration = false; + htlc_info_list.push_back(hi); + outs.push_back(i); + } + } else { LOG_ERROR("Wrong type at lookup_acc_outs, unexpected type is: " << o.target.type().name()); diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 4c4dde90..67fc8f97 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -132,6 +132,11 @@ namespace currency END_KV_SERIALIZE_MAP() }; + struct htlc_info + { + bool hltc_our_out_is_before_expiration; + }; + //--------------------------------------------------------------- bool construct_miner_tx(size_t height, size_t median_size, const boost::multiprecision::uint128_t& already_generated_coins, diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 005b6cd9..51110bcd 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -374,6 +374,31 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t mtd.spent_indices.push_back(i); } } + else if (in.type() == typeid(currency::txin_htlc)) + { + const currency::txin_htlc& in_htlc = boost::get(in); + if (in_htlc.key_offsets.size() != 1) + { + LOG_ERROR("in_htlc.key_offsets.size() != 1, skip inout"); + continue; + } + + if (in_htlc.key_offsets[0].type() != typeid(uint64_t)) + { + LOG_ERROR("HTLC with ref_by_id is not supported by wallet yet"); + continue; + } + + auto it = m_active_htlcs.find(std::make_pair(in_htlc.amount, boost::get<>(in_htlc.key_offsets[0]))); + if (it != m_active_htlcs.end()) + { + transfer_details& td = m_transfers[it->second]; + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td->m_ptx_wallet_info->m_tx.vout.size() > td.m_internal_output_index, "Internal error: wrong index in m_transfers"); + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td->m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() > typeid(), "Internal error: wrong index in m_transfers"); + //input spend active htlc + m_transfers[it->second].m_spent_height = height; + } + } i++; } @@ -386,7 +411,8 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t //check for transaction income crypto::key_derivation derivation = AUTO_VAL_INIT(derivation); - r = lookup_acc_outs(m_account.get_keys(), tx, tx_pub_key, outs, tx_money_got_in_outs, derivation); + std::list htlc_info_list; + r = lookup_acc_outs(m_account.get_keys(), tx, tx_pub_key, outs, tx_money_got_in_outs, derivation, htlc_info_list); THROW_IF_TRUE_WALLET_EX(!r, error::acc_outs_lookup_error, tx, tx_pub_key, m_account.get_keys()); if(!outs.empty() /*&& tx_money_got_in_outs*/) @@ -408,7 +434,8 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t if (!pglobal_indexes || (pglobal_indexes->size() == 0 && tx.vout.size() != 0)) { - if (m_use_deffered_global_outputs) + //if tx contain htlc_out, then we would need global_indexes anyway, to be able later detect redeem of htlc + if (m_use_deffered_global_outputs && htlc_info_list.size() == 0) { pglobal_indexes = nullptr; } @@ -423,9 +450,32 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t { size_t o = outs[i_in_outs]; WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(o < tx.vout.size(), "wrong out in transaction: internal index=" << o << ", total_outs=" << tx.vout.size()); - if (tx.vout[o].target.type() == typeid(txout_to_key)) + if (tx.vout[o].target.type() == typeid(txout_to_key) || tx.vout[o].target.type() == typeid(txout_htlc)) { - const currency::txout_to_key& otk = boost::get(tx.vout[o].target); + bool hltc_our_out_is_before_expiration = false; + crypto::public_key out_key = null_pkey; + if (tx.vout[o].target.type() == typeid(txout_to_key)) + { + out_key = boost::get(tx.vout[o].target).key; + } + else if (tx.vout[o].target.type() == typeid(txout_htlc)) + { + THROW_IF_FALSE_WALLET_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty"); + if (htlc_info_list.front().hltc_our_out_is_before_expiration) + { + out_key = boost::get(tx.vout[o].target).pkey_redeem; + } + else + { + out_key = boost::get(tx.vout[o].target).pkey_refund; + } + htlc_info_list.pop_front(); + } + else + { + THROW_IF_FALSE_WALLET_EX(false, "Unexpected out type im wallet: " << tx.vout[o].target.type().name()); + } + //const currency::txout_to_key& otk = boost::get(tx.vout[o].target); // obtain key image for this output crypto::key_image ki = currency::null_ki; @@ -435,16 +485,16 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t { // don't have spend secret key, so we unable to calculate key image for an output // look it up in special container instead - auto it = m_pending_key_images.find(otk.key); + auto it = m_pending_key_images.find(out_key); if (it != m_pending_key_images.end()) { ki = it->second; - WLT_LOG_L1("pending key image " << ki << " was found by out pub key " << otk.key); + WLT_LOG_L1("pending key image " << ki << " was found by out pub key " << out_key); } else { ki = currency::null_ki; - WLT_LOG_L1("can't find pending key image by out pub key: " << otk.key << ", key image temporarily set to null"); + WLT_LOG_L1("can't find pending key image by out pub key: " << out_key << ", key image temporarily set to null"); } } } @@ -453,7 +503,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t // normal wallet, calculate and store key images for own outs currency::keypair in_ephemeral; currency::generate_key_image_helper(m_account.get_keys(), tx_pub_key, o, in_ephemeral, ki); - WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(in_ephemeral.pub == otk.key, "key_image generated ephemeral public key that does not match with output_key"); + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(in_ephemeral.pub == out_key, "key_image generated ephemeral public key that does not match with output_key"); } if (ki != currency::null_ki) @@ -477,11 +527,12 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t } } - if (is_auditable() && otk.mix_attr != CURRENCY_TO_KEY_OUT_FORCED_NO_MIX) + if (is_auditable() && tx.vout[o].target.type() == typeid(txout_to_key) && + boost::get(tx.vout[o].target).mix_attr != CURRENCY_TO_KEY_OUT_FORCED_NO_MIX) { std::stringstream ss; ss << "output #" << o << " from tx " << get_transaction_hash(tx) << " with amount " << print_money_brief(tx.vout[o].amount) - << " is targeted to this auditable wallet and has INCORRECT mix_attr = " << (uint64_t)otk.mix_attr << ". Output IGNORED."; + << " is targeted to this auditable wallet and has INCORRECT mix_attr = " << (uint64_t)boost::get(tx.vout[o].target).mix_attr << ". Output IGNORED."; WLT_LOG_RED(ss.str(), LOG_LEVEL_0); if (m_wcallback) m_wcallback->on_message(i_wallet2_callback::ms_red, ss.str()); @@ -517,11 +568,28 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t td.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_MINED_TRANSFER; } } + uint64_t amount = tx.vout[o].amount; + if (tx.vout[o].target.type() == typeid(txout_htlc)) + { + const txout_htlc& hltc = boost::get(tx.vout[o].target); + //mark this as spent + td.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_SPENT; + //create entry for htlc input + htlc_expiration_trigger het = AUTO_VAL_INIT(het); + het.is_wallet_owns_redeem = (out_key == hltc.pkey_redeem) ? true:false; + het.transfer_index = m_transfers.size() - 1; + uint64_t expired_if_more_then = td.m_ptx_wallet_info->m_block_height + hltc.expiration; + m_htlcs[expired_if_more_then] = het; + + //active htlc + auto amount_gindex_pair = std::make_pair(amount, td.m_global_output_index); + m_active_htlcs[amount_gindex_pair] = transfer_index; + } size_t transfer_index = m_transfers.size()-1; if (td.m_key_image != currency::null_ki) m_key_images[td.m_key_image] = transfer_index; - add_transfer_to_transfers_cache(tx.vout[o].amount, transfer_index); - uint64_t amount = tx.vout[o].amount; + + add_transfer_to_transfers_cache(amount, transfer_index); if (is_watch_only() && is_auditable()) { @@ -545,6 +613,10 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t tdb.m_internal_output_index = o; WLT_LOG_L0("Received multisig, multisig out id: " << multisig_id << ", amount: " << tdb.amount() << ", with tx: " << get_transaction_hash(tx)); } + else if (tx.vout[o].target.type() == typeid(txout_htlc)) + { + + } } } @@ -1222,6 +1294,49 @@ void wallet2::process_unconfirmed(const currency::transaction& tx, std::vector m_htlcs.rbegin()->first) + { + //there is no active htlc that at this height + CHECK_AND_ASSERT_MES(m_active_htlcs.size() == 0, void(), "Self check failed: m_active_htlcs.size() = " << m_active_htlcs.size()); + return; + } + //we have to check if there is a htlc that has to become deactivated + auto pair_of_it = m_htlcs.equal_range(height); + for (auto it = pair_of_it.first; it != pair_of_it.second; it++) + { + auto tr = m_transfers[it->second.transfer_index]; + //found contract that supposed to be deactivated and set to innactive + if (it->second.is_wallet_owns_redeem) + { + // this means that wallet received atomic as proposal but never activated it, money returned to initiator + tr.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_SPENT; //re assure that it has spent flag + tr.m_spent_height = height; + } + else + { + // this means that wallet created atomic by itself, and second part didn't redeem it, so refund money should become available + tr.m_flags &= ~(WALLET_TRANSFER_DETAIL_FLAG_SPENT); //reset spent flag + m_found_free_amounts.clear(); //reset free amounts cache + tr.m_spent_height = 0; + } + //remove it from active contracts + auto it_active_htlc = m_active_htlcs.find(std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index)); + if (it_active_htlc == m_active_htlcs.end()) + { + LOG_ERROR("Erasing htlc, but it seems to be already erased"); + } + else + { + m_active_htlcs.erase(it); + } + } +} +//---------------------------------------------------------------------------------------------------- void wallet2::process_new_blockchain_entry(const currency::block& b, const currency::block_direct_data_entry& bche, const crypto::hash& bl_id, uint64_t height) { //handle transactions from new block @@ -1229,6 +1344,9 @@ void wallet2::process_new_blockchain_entry(const currency::block& b, const curre !(height == m_minimum_height || get_blockchain_current_size() <= 1), error::wallet_internal_error, "current_index=" + std::to_string(height) + ", get_blockchain_current_height()=" + std::to_string(get_blockchain_current_size())); + process_htlc_triggers_on_block_added(height) + + //optimization: seeking only for blocks that are not older then the wallet creation time plus 1 day. 1 day is for possible user incorrect time setup const std::vector* pglobal_index = nullptr; if (b.timestamp + 60 * 60 * 24 > m_account.get_createtime()) @@ -2082,6 +2200,13 @@ void wallet2::detach_blockchain(uint64_t including_height) { WLT_LOG_BLUE("Transfer [" << i << "] spent height: " << tr.m_spent_height << " -> 0, reason: detaching blockchain", LOG_LEVEL_1); tr.m_spent_height = 0; + //check if it's hltc contract + if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target == typeid(txout_htlc)) + { + const txout_htlc& htlc = boost::get(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target); + auto amount_gindex_pair = std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index); + m_active_htlcs[amount_gindex_pair] = i; + } } } diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 37bf0b09..3ae9bcdd 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -735,6 +735,12 @@ namespace tools { wipeout_extra_if_needed(m_transfer_history); } + + if (ver < 153) + return; + + a & m_htlcs; + } void wipeout_extra_if_needed(std::vector& transfer_history); @@ -761,6 +767,7 @@ namespace tools const currency::block_direct_data_entry& bche, const crypto::hash& bl_id, uint64_t height); + void process_htlc_triggers_on_block_added(uint64_t height); bool get_pos_entries(currency::COMMAND_RPC_SCAN_POS::request& req); bool build_minted_block(const currency::COMMAND_RPC_SCAN_POS::request& req, const currency::COMMAND_RPC_SCAN_POS::response& rsp, uint64_t new_block_expected_height = UINT64_MAX); bool build_minted_block(const currency::COMMAND_RPC_SCAN_POS::request& req, const currency::COMMAND_RPC_SCAN_POS::response& rsp, const currency::account_public_address& miner_address, uint64_t new_block_expected_height = UINT64_MAX); @@ -969,6 +976,15 @@ private: std::unordered_set m_unconfirmed_multisig_transfers; std::unordered_map m_tx_keys; + //used in wallet + struct htlc_expiration_trigger + { + bool is_wallet_owns_redeem; //specify if this HTLC belong to this wallet by pkey_redeem or by pkey_refund + uint64_t transfer_index; + }; + std::multimap m_htlcs; //uint64_t -> height of expiration + amount_gindex_to_transfer_id_container m_active_htlcs; // map [amount; gindex] -> tid + std::shared_ptr m_core_proxy; std::shared_ptr m_wcallback; uint64_t m_height_of_start_sync; From 66387d2bd51bc68c6bb60a97acff68d204927ffe Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 27 Jan 2021 22:49:15 +0100 Subject: [PATCH 13/64] htlc: implemented tracking of active htlc, creating transactio with htlc --- src/currency_core/currency_format_utils.cpp | 48 +++++++++++++++-- src/currency_core/currency_format_utils.h | 4 +- .../currency_format_utils_transactions.h | 10 ++-- src/wallet/wallet2.cpp | 51 ++++++++++++++++++- src/wallet/wallet2.h | 8 ++- src/wallet/wallet_public_structs_defs.h | 14 +++++ 6 files changed, 123 insertions(+), 12 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 74992272..7a81b008 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -590,7 +590,19 @@ namespace currency // return true; // } //--------------------------------------------------------------- - bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr) + std::string generate_origin_for_htlc(cons crypto::public_key& redeem, cons crypto::public_key& refund, const account_keys& acc_keys) + { + std::string blob; + string_tools::apped_pod_to_strbuff(blob, redeem); + string_tools::apped_pod_to_strbuff(blob, refund); + string_tools::apped_pod_to_strbuff(blob, acc_keys.spend_secret_key); + crypto::hash origin_hs = cn_fast_hash(blob.data(), blob.size()); + std::string origin_blob; + string_tools::apped_pod_to_strbuff(origin_blob, origin_hs); + return origin_hs; + } + //--------------------------------------------------------------- + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr, const account_keys& self) { CHECK_AND_ASSERT_MES(de.addr.size() == 1 || (de.addr.size() > 1 && de.minimum_sigs <= de.addr.size()), false, "Invalid destination entry: amount: " << de.amount << " minimum_sigs: " << de.minimum_sigs << " addr.size(): " << de.addr.size()); @@ -622,10 +634,38 @@ namespace currency tx_out out; out.amount = de.amount; - if (target_keys.size() == 1) + if (de.htlc) + { + //out htlc + CHECK_AND_ASSERT_MES(target_keys.size() == 1, false, "Unexpected htl keys count = " << target_keys.size() << ", expected ==1"); + txout_htlc htlc = AUTO_VAL_INIT(htlc); + htlc.expiration = de.unlock_time; + htlc.flags = 0; //0 - SHA256, 1 - RIPEMD160, by default leave SHA256 + //receiver key + htlc.pkey_redeem = *target_keys.begin(); + //generate refund key + crypto::key_derivation derivation = AUTO_VAL_INIT(derivation); + bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation); + CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address"); + htlc.pkey_refund = out_eph_public_key; + //we use deterministic origin, to make possible access origin on different wallets copies + std::string hltc_origin = generate_origin_for_htlc(htlc.pkey_redeem, htlc.pkey_refund, self); + //calculate hash + + if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) + { + htlc.htlc_hash = crypto::sha256_hash(hltc_origin.data(), hltc_origin.size()); + } + else + { + crypto::hash160 h160 = crypto::RIPEMD160_hash(hltc_origin.data(), hltc_origin.size()); + std::memcpy(&htlc.htlc_hash, &h160, sizeof(h160)); + } + } + else if (target_keys.size() == 1) { //out to key - txout_to_key tk; + txout_to_key tk = AUTO_VAL_INIT(tk); tk.key = target_keys.back(); if (de.addr.front().is_auditable()) // check only the first address because there's only one in this branch @@ -1178,7 +1218,7 @@ namespace currency for(const tx_destination_entry& dst_entr : shuffled_dsts) { CHECK_AND_ASSERT_MES(dst_entr.amount > 0, false, "Destination with wrong amount: " << dst_entr.amount); - bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, tx_outs_attr); + bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, tx_outs_attr, sender_account_keys.account_address); CHECK_AND_ASSERT_MES(r, false, "Failed to construc tx out"); output_index++; summary_outs_money += dst_entr.amount; diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 67fc8f97..aa90549b 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -163,7 +163,7 @@ namespace currency //--------------------------------------------------------------- uint64_t get_string_uint64_hash(const std::string& str); - bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED); + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED, const account_public_address& self = account_public_address()); bool validate_alias_name(const std::string& al); bool validate_password(const std::string& password); void get_attachment_extra_info_details(const std::vector& attachment, extra_attachment_info& eai); @@ -298,7 +298,7 @@ namespace currency void append_per_block_increments_for_tx(const transaction& tx, std::unordered_map& gindices); std::string get_word_from_timstamp(uint64_t timestamp, bool use_password); uint64_t get_timstamp_from_word(std::string word, bool& password_used); - + std::string generate_origin_for_htlc(cons crypto::public_key& redeem, cons crypto::public_key& refund, const account_keys& acc_keys); template typename std::conditional::value, const std::vector, std::vector >::type& get_txin_etc_options(t_txin_v& in) { diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index 49bc3f10..bc94083b 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -52,11 +52,12 @@ namespace currency size_t minimum_sigs; // if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions uint64_t unlock_time; + bool htlc; //if this flag is set, then creating htlc out, unlock_time -> number of blocks that htlc proposal is active - tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0){} - tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0){} - tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut) {} - tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0){} + tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false){} + tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false){} + tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc(false){} + tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc(false){} BEGIN_SERIALIZE_OBJECT() FIELD(amount) @@ -64,6 +65,7 @@ namespace currency FIELD(minimum_sigs) FIELD(amount_to_provide) FIELD(unlock_time) + FIELD(htlc) END_SERIALIZE() }; diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 51110bcd..f222aeb9 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -584,6 +584,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t //active htlc auto amount_gindex_pair = std::make_pair(amount, td.m_global_output_index); m_active_htlcs[amount_gindex_pair] = transfer_index; + m_active_htlcs_txid[get_transaction_hash(tx)] = transfer_index; } size_t transfer_index = m_transfers.size()-1; if (td.m_key_image != currency::null_ki) @@ -1328,11 +1329,21 @@ void wallet2::process_htlc_triggers_on_block_added(uint64_t height) auto it_active_htlc = m_active_htlcs.find(std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index)); if (it_active_htlc == m_active_htlcs.end()) { - LOG_ERROR("Erasing htlc, but it seems to be already erased"); + LOG_ERROR("Erasing active htlc(m_active_htlcs), but it seems to be already erased"); } else { + const transfer_details& td = m_transfers[it->second]; m_active_htlcs.erase(it); + auto it_tx = m_active_htlcs_txid.find(td.tx_hash()); + if (it_tx == m_active_htlcs_txid.end()) + { + LOG_ERROR("Erasing active htlc(;), but it seems to be already erased"); + } + else + { + m_active_htlcs_txid.erase(it_tx); + } } } } @@ -2206,6 +2217,7 @@ void wallet2::detach_blockchain(uint64_t including_height) const txout_htlc& htlc = boost::get(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target); auto amount_gindex_pair = std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index); m_active_htlcs[amount_gindex_pair] = i; + m_active_htlcs_txid[tr.tx_hash()] = i; } } } @@ -3993,6 +4005,43 @@ void wallet2::send_escrow_proposal(const bc_services::contract_private_details& add_sent_tx_detailed_info(tx, ftp.prepared_destinations, ftp.selected_transfers); print_tx_sent_message(tx, "(from multisig)", fee); +} +//---------------------------------------------------------------------------------------------------- +void wallet2::create_htlc_proposal(uint64_t amount, account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx) +{ + std::vector extra; + std::vector attachments; + + std::vector dst; + dst.resize(1); + dst.back().addr.push_back(addr); + dst.back().amount = amount; + dst.back().htlc = true; + dst.back().unlock_time = 740; //about 12 hours + + transaction result_tx = AUTO_VAL_INIT(result_tx); + this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); +} +//---------------------------------------------------------------------------------------------------- +void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs) +{ + for (auto htlc_entry : m_active_htlcs_txid) + { + htlc_entry_info entry = AUTO_VAL_INIT(entry); + entry.tx_id = htlc_entry.first; + const transfer_details& td = m_transfers[htlc_entry.second]; + entry.amount = td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].amount; + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), + "[get_list_of_active_htlc]Internal error: unexpected type of out"); + const txout_htlc& htlc = boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target); + entry.sha256_hash = htlc.htlc_hash; + htlcs.push_back(entry); + } +} +//---------------------------------------------------------------------------------------------------- +void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin) +{ + } //---------------------------------------------------------------------------------------------------- bool wallet2::prepare_tx_sources_for_packing(uint64_t items_to_pack, size_t fake_outputs_count, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 3ae9bcdd..bb3f05ea 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -740,6 +740,7 @@ namespace tools return; a & m_htlcs; + a & m_active_htlcs; } @@ -815,6 +816,10 @@ namespace tools uint64_t get_sync_progress(); uint64_t get_wallet_file_size()const; void set_use_deffered_global_outputs(bool use); + void create_htlc_proposal(uint64_t amount, account_public_address& addr, uint64_t lock_blocks_count, + account_public_address& addr, currency::transaction &tx); + void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); + void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); private: @@ -983,7 +988,8 @@ private: uint64_t transfer_index; }; std::multimap m_htlcs; //uint64_t -> height of expiration - amount_gindex_to_transfer_id_container m_active_htlcs; // map [amount; gindex] -> tid + amount_gindex_to_transfer_id_container m_active_htlcs; // map [amount; gindex] -> transfer index + std::unordered_map m_active_htlcs_txid; // map [txid] -> transfer index, limitation: 1 transactiom -> 1 htlc std::shared_ptr m_core_proxy; std::shared_ptr m_wcallback; diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 7b0c344e..dc12e5ea 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -974,6 +974,20 @@ namespace wallet_public }; }; + struct htlc_entry_info + { + crypto::hash sha256_hash; + crypto::hash tx_id; + uint64_t amount; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(amount) + KV_SERIALIZE(sha256_hash) + KV_SERIALIZE(tx_id) + END_KV_SERIALIZE_MAP() + }; + + inline std::string get_escrow_contract_state_name(uint32_t state) From dc3f5882ef19f9ffd1a0857a0de27a1970ddcf99 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 31 Jan 2021 18:05:26 +0100 Subject: [PATCH 14/64] receiving list of htlc --- src/wallet/wallet2.cpp | 13 ++++++++++++- src/wallet/wallet2.h | 4 +++- src/wallet/wallet_public_structs_defs.h | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index f222aeb9..e19452c6 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -581,6 +581,11 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t uint64_t expired_if_more_then = td.m_ptx_wallet_info->m_block_height + hltc.expiration; m_htlcs[expired_if_more_then] = het; + if (het.is_wallet_owns_redeem) + { + td.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM; + } + //active htlc auto amount_gindex_pair = std::make_pair(amount, td.m_global_output_index); m_active_htlcs[amount_gindex_pair] = transfer_index; @@ -2212,8 +2217,9 @@ void wallet2::detach_blockchain(uint64_t including_height) WLT_LOG_BLUE("Transfer [" << i << "] spent height: " << tr.m_spent_height << " -> 0, reason: detaching blockchain", LOG_LEVEL_1); tr.m_spent_height = 0; //check if it's hltc contract - if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target == typeid(txout_htlc)) + if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target == typeid(txout_htlc) && tr.m_flags & WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM) { + //only if htlc was spent as a redeem, then we put htlc back as active const txout_htlc& htlc = boost::get(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target); auto amount_gindex_pair = std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index); m_active_htlcs[amount_gindex_pair] = i; @@ -4027,6 +4033,10 @@ void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target); entry.sha256_hash = htlc.htlc_hash; + entry.is_redeem = td.m_flags&WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM ? true : false; htlcs.push_back(entry); } } diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index bb3f05ea..1629953e 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -53,6 +53,7 @@ #define WALLET_TRANSFER_DETAIL_FLAG_ESCROW_PROPOSAL_RESERVATION uint32_t(1 << 2) #define WALLET_TRANSFER_DETAIL_FLAG_MINED_TRANSFER uint32_t(1 << 3) #define WALLET_TRANSFER_DETAIL_FLAG_COLD_SIG_RESERVATION uint32_t(1 << 4) // transfer is reserved for cold-signing (unsigned tx was created and passed for signing) +#define WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM uint32_t(1 << 5) // for htlc keeps info if this htlc belong as redeem or as refund const uint64_t WALLET_MINIMUM_HEIGHT_UNSET_CONST = std::numeric_limits::max(); @@ -741,6 +742,7 @@ namespace tools a & m_htlcs; a & m_active_htlcs; + a & m_active_htlcs_txid; } @@ -987,7 +989,7 @@ private: bool is_wallet_owns_redeem; //specify if this HTLC belong to this wallet by pkey_redeem or by pkey_refund uint64_t transfer_index; }; - std::multimap m_htlcs; //uint64_t -> height of expiration + std::multimap m_htlcs; //map [expired_if_more_then] -> height of expiration amount_gindex_to_transfer_id_container m_active_htlcs; // map [amount; gindex] -> transfer index std::unordered_map m_active_htlcs_txid; // map [txid] -> transfer index, limitation: 1 transactiom -> 1 htlc diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index dc12e5ea..55498c7b 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -979,11 +979,13 @@ namespace wallet_public crypto::hash sha256_hash; crypto::hash tx_id; uint64_t amount; + bool is_redeem; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) KV_SERIALIZE(sha256_hash) KV_SERIALIZE(tx_id) + KV_SERIALIZE(is_redeem) END_KV_SERIALIZE_MAP() }; From cccb0e209f276c85513297cb942ef1f4468d4720 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 31 Jan 2021 19:42:02 +0100 Subject: [PATCH 15/64] multiple fixes over wallet --- src/currency_core/currency_format_utils.cpp | 8 +++-- src/currency_core/currency_format_utils.h | 3 +- src/wallet/wallet2.cpp | 33 ++++++++++----------- src/wallet/wallet2.h | 26 +++++++++------- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 7a81b008..17b6749a 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -29,6 +29,7 @@ using namespace epee; #include "genesis.h" #include "genesis_acc.h" #include "common/mnemonic-encoding.h" +#include "crypto/bitcoin/sha256_helper.h" namespace currency { @@ -590,16 +591,16 @@ namespace currency // return true; // } //--------------------------------------------------------------- - std::string generate_origin_for_htlc(cons crypto::public_key& redeem, cons crypto::public_key& refund, const account_keys& acc_keys) + std::string generate_origin_for_htlc(const crypto::public_key& redeem, const crypto::public_key& refund, const account_keys& acc_keys) { std::string blob; string_tools::apped_pod_to_strbuff(blob, redeem); string_tools::apped_pod_to_strbuff(blob, refund); string_tools::apped_pod_to_strbuff(blob, acc_keys.spend_secret_key); - crypto::hash origin_hs = cn_fast_hash(blob.data(), blob.size()); + crypto::hash origin_hs = crypto::cn_fast_hash(blob.data(), blob.size()); std::string origin_blob; string_tools::apped_pod_to_strbuff(origin_blob, origin_hs); - return origin_hs; + return origin_blob; } //--------------------------------------------------------------- bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr, const account_keys& self) @@ -645,6 +646,7 @@ namespace currency htlc.pkey_redeem = *target_keys.begin(); //generate refund key crypto::key_derivation derivation = AUTO_VAL_INIT(derivation); + crypto::public_key out_eph_public_key = AUTO_VAL_INIT(out_eph_public_key); bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation); CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address"); htlc.pkey_refund = out_eph_public_key; diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index aa90549b..0210d3e4 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -215,6 +215,7 @@ namespace currency bool is_out_to_acc(const account_keys& acc, const txout_to_key& out_key, const crypto::key_derivation& derivation, size_t output_index); bool is_out_to_acc(const account_keys& acc, const txout_multisig& out_multisig, const crypto::key_derivation& derivation, size_t output_index); bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector& outs, uint64_t& money_transfered, crypto::key_derivation& derivation); + bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector& outs, uint64_t& money_transfered, crypto::key_derivation& derivation, std::list& htlc_info_list); bool lookup_acc_outs(const account_keys& acc, const transaction& tx, std::vector& outs, uint64_t& money_transfered, crypto::key_derivation& derivation); bool get_tx_fee(const transaction& tx, uint64_t & fee); uint64_t get_tx_fee(const transaction& tx); @@ -298,7 +299,7 @@ namespace currency void append_per_block_increments_for_tx(const transaction& tx, std::unordered_map& gindices); std::string get_word_from_timstamp(uint64_t timestamp, bool use_password); uint64_t get_timstamp_from_word(std::string word, bool& password_used); - std::string generate_origin_for_htlc(cons crypto::public_key& redeem, cons crypto::public_key& refund, const account_keys& acc_keys); + std::string generate_origin_for_htlc(const crypto::public_key& redeem, const crypto::public_key& refund, const account_keys& acc_keys); template typename std::conditional::value, const std::vector, std::vector >::type& get_txin_etc_options(t_txin_v& in) { diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index e19452c6..85dba890 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -389,12 +389,12 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t continue; } - auto it = m_active_htlcs.find(std::make_pair(in_htlc.amount, boost::get<>(in_htlc.key_offsets[0]))); + auto it = m_active_htlcs.find(std::make_pair(in_htlc.amount, boost::get(in_htlc.key_offsets[0]))); if (it != m_active_htlcs.end()) { transfer_details& td = m_transfers[it->second]; - WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td->m_ptx_wallet_info->m_tx.vout.size() > td.m_internal_output_index, "Internal error: wrong index in m_transfers"); - WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td->m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() > typeid(), "Internal error: wrong index in m_transfers"); + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout.size() > td.m_internal_output_index, "Internal error: wrong index in m_transfers"); + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), "Internal error: wrong index in m_transfers"); //input spend active htlc m_transfers[it->second].m_spent_height = height; } @@ -460,7 +460,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t } else if (tx.vout[o].target.type() == typeid(txout_htlc)) { - THROW_IF_FALSE_WALLET_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty"); + THROW_IF_TRUE_WALLET_INT_ERR_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty"); if (htlc_info_list.front().hltc_our_out_is_before_expiration) { out_key = boost::get(tx.vout[o].target).pkey_redeem; @@ -473,7 +473,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t } else { - THROW_IF_FALSE_WALLET_EX(false, "Unexpected out type im wallet: " << tx.vout[o].target.type().name()); + THROW_IF_TRUE_WALLET_INT_ERR_EX(false, "Unexpected out type im wallet: " << tx.vout[o].target.type().name()); } //const currency::txout_to_key& otk = boost::get(tx.vout[o].target); @@ -569,6 +569,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t } } uint64_t amount = tx.vout[o].amount; + size_t transfer_index = m_transfers.size() - 1; if (tx.vout[o].target.type() == typeid(txout_htlc)) { const txout_htlc& hltc = boost::get(tx.vout[o].target); @@ -577,9 +578,9 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t //create entry for htlc input htlc_expiration_trigger het = AUTO_VAL_INIT(het); het.is_wallet_owns_redeem = (out_key == hltc.pkey_redeem) ? true:false; - het.transfer_index = m_transfers.size() - 1; + het.transfer_index = transfer_index; uint64_t expired_if_more_then = td.m_ptx_wallet_info->m_block_height + hltc.expiration; - m_htlcs[expired_if_more_then] = het; + m_htlcs.insert(std::make_pair(expired_if_more_then, het)); if (het.is_wallet_owns_redeem) { @@ -591,7 +592,6 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t m_active_htlcs[amount_gindex_pair] = transfer_index; m_active_htlcs_txid[get_transaction_hash(tx)] = transfer_index; } - size_t transfer_index = m_transfers.size()-1; if (td.m_key_image != currency::null_ki) m_key_images[td.m_key_image] = transfer_index; @@ -1338,9 +1338,8 @@ void wallet2::process_htlc_triggers_on_block_added(uint64_t height) } else { - const transfer_details& td = m_transfers[it->second]; - m_active_htlcs.erase(it); - auto it_tx = m_active_htlcs_txid.find(td.tx_hash()); + m_active_htlcs.erase(it_active_htlc); + auto it_tx = m_active_htlcs_txid.find(tr.tx_hash()); if (it_tx == m_active_htlcs_txid.end()) { LOG_ERROR("Erasing active htlc(;), but it seems to be already erased"); @@ -1360,7 +1359,7 @@ void wallet2::process_new_blockchain_entry(const currency::block& b, const curre !(height == m_minimum_height || get_blockchain_current_size() <= 1), error::wallet_internal_error, "current_index=" + std::to_string(height) + ", get_blockchain_current_height()=" + std::to_string(get_blockchain_current_size())); - process_htlc_triggers_on_block_added(height) + process_htlc_triggers_on_block_added(height); //optimization: seeking only for blocks that are not older then the wallet creation time plus 1 day. 1 day is for possible user incorrect time setup @@ -2217,7 +2216,7 @@ void wallet2::detach_blockchain(uint64_t including_height) WLT_LOG_BLUE("Transfer [" << i << "] spent height: " << tr.m_spent_height << " -> 0, reason: detaching blockchain", LOG_LEVEL_1); tr.m_spent_height = 0; //check if it's hltc contract - if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target == typeid(txout_htlc) && tr.m_flags & WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM) + if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target.type() == typeid(txout_htlc) && tr.m_flags & WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM) { //only if htlc was spent as a redeem, then we put htlc back as active const txout_htlc& htlc = boost::get(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target); @@ -4013,7 +4012,7 @@ void wallet2::send_escrow_proposal(const bc_services::contract_private_details& print_tx_sent_message(tx, "(from multisig)", fee); } //---------------------------------------------------------------------------------------------------- -void wallet2::create_htlc_proposal(uint64_t amount, account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx) +void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx) { std::vector extra; std::vector attachments; @@ -4029,17 +4028,17 @@ void wallet2::create_htlc_proposal(uint64_t amount, account_public_address& addr this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); } //---------------------------------------------------------------------------------------------------- -void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs) +void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs) { for (auto htlc_entry : m_active_htlcs_txid) { + const transfer_details& td = m_transfers[htlc_entry.second]; if (only_redeem_txs && !(td.m_flags&WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM)) { continue; } - htlc_entry_info entry = AUTO_VAL_INIT(entry); + wallet_public::htlc_entry_info entry = AUTO_VAL_INIT(entry); entry.tx_id = htlc_entry.first; - const transfer_details& td = m_transfers[htlc_entry.second]; entry.amount = td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].amount; WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), "[get_list_of_active_htlc]Internal error: unexpected type of out"); diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 1629953e..e5d58067 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -398,7 +398,12 @@ namespace tools END_KV_SERIALIZE_MAP() }; - + //used in wallet + struct htlc_expiration_trigger + { + bool is_wallet_owns_redeem; //specify if this HTLC belong to this wallet by pkey_redeem or by pkey_refund + uint64_t transfer_index; + }; struct payment_details @@ -818,9 +823,9 @@ namespace tools uint64_t get_sync_progress(); uint64_t get_wallet_file_size()const; void set_use_deffered_global_outputs(bool use); - void create_htlc_proposal(uint64_t amount, account_public_address& addr, uint64_t lock_blocks_count, - account_public_address& addr, currency::transaction &tx); - void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); + void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, + currency::transaction &tx); + void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); private: @@ -983,12 +988,6 @@ private: std::unordered_set m_unconfirmed_multisig_transfers; std::unordered_map m_tx_keys; - //used in wallet - struct htlc_expiration_trigger - { - bool is_wallet_owns_redeem; //specify if this HTLC belong to this wallet by pkey_redeem or by pkey_refund - uint64_t transfer_index; - }; std::multimap m_htlcs; //map [expired_if_more_then] -> height of expiration amount_gindex_to_transfer_id_container m_active_htlcs; // map [amount; gindex] -> transfer index std::unordered_map m_active_htlcs_txid; // map [txid] -> transfer index, limitation: 1 transactiom -> 1 htlc @@ -1051,7 +1050,12 @@ namespace boost a & static_cast(x); } - + template + inline void serialize(Archive &a, tools::wallet2::htlc_expiration_trigger &x, const boost::serialization::version_type ver) + { + a & x.is_wallet_owns_redeem; + a & x.transfer_index; + } template inline void serialize(Archive& a, tools::wallet2::payment_details& x, const boost::serialization::version_type ver) From 0b8e651ce2554b04e33cdcede64f2943a4973641 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 31 Jan 2021 23:07:06 +0100 Subject: [PATCH 16/64] redeem_htlc - in work --- src/currency_core/currency_format_utils.cpp | 23 +++++++++++------ .../currency_format_utils_transactions.h | 10 +++++--- src/wallet/wallet2.cpp | 11 ++++++-- src/wallet/wallet2.h | 11 +++++++- src/wallet/wallet_errors.h | 25 ++++++++++++++++++- 5 files changed, 65 insertions(+), 15 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 17b6749a..e8272e50 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -650,19 +650,28 @@ namespace currency bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation); CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address"); htlc.pkey_refund = out_eph_public_key; - //we use deterministic origin, to make possible access origin on different wallets copies - std::string hltc_origin = generate_origin_for_htlc(htlc.pkey_redeem, htlc.pkey_refund, self); - //calculate hash - if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) + if (de.htlc_hash == null_hash) { - htlc.htlc_hash = crypto::sha256_hash(hltc_origin.data(), hltc_origin.size()); + //we use deterministic origin, to make possible access origin on different wallets copies + std::string hltc_origin = generate_origin_for_htlc(htlc.pkey_redeem, htlc.pkey_refund, self); + + //calculate hash + if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) + { + htlc.htlc_hash = crypto::sha256_hash(hltc_origin.data(), hltc_origin.size()); + } + else + { + crypto::hash160 h160 = crypto::RIPEMD160_hash(hltc_origin.data(), hltc_origin.size()); + std::memcpy(&htlc.htlc_hash, &h160, sizeof(h160)); + } } else { - crypto::hash160 h160 = crypto::RIPEMD160_hash(hltc_origin.data(), hltc_origin.size()); - std::memcpy(&htlc.htlc_hash, &h160, sizeof(h160)); + htlc.htlc_hash = de.htlc_hash; } + } else if (target_keys.size() == 1) { diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index bc94083b..9028d0cc 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -53,11 +53,12 @@ namespace currency uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions uint64_t unlock_time; bool htlc; //if this flag is set, then creating htlc out, unlock_time -> number of blocks that htlc proposal is active + crypto::hash htlc_hash; - tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false){} - tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false){} - tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc(false){} - tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc(false){} + tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash){} + tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash) {} + tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc(false), htlc_hash(null_hash) {} + tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash) {} BEGIN_SERIALIZE_OBJECT() FIELD(amount) @@ -66,6 +67,7 @@ namespace currency FIELD(amount_to_provide) FIELD(unlock_time) FIELD(htlc) + FIELD(htlc_hash) END_SERIALIZE() }; diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 85dba890..01eb6486 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -4012,7 +4012,7 @@ void wallet2::send_escrow_proposal(const bc_services::contract_private_details& print_tx_sent_message(tx, "(from multisig)", fee); } //---------------------------------------------------------------------------------------------------- -void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx) +void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, const crypto::hash& htlc_hash) { std::vector extra; std::vector attachments; @@ -4022,6 +4022,7 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ dst.back().addr.push_back(addr); dst.back().amount = amount; dst.back().htlc = true; + dst.back().htlc_hash = htlc_hash; dst.back().unlock_time = 740; //about 12 hours transaction result_tx = AUTO_VAL_INIT(result_tx); @@ -4051,7 +4052,13 @@ void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); diff --git a/src/wallet/wallet_errors.h b/src/wallet/wallet_errors.h index fe79adf4..4e8fa6cd 100644 --- a/src/wallet/wallet_errors.h +++ b/src/wallet/wallet_errors.h @@ -64,7 +64,7 @@ namespace tools std::string to_string() const { std::ostringstream ss; - ss << m_loc << ':' << typeid(*this).name() << ": " << Base::what(); + ss << m_loc << ':' << typeid(*this).name() << "[" << m_error_code << "]: " << Base::what(); return ss.str(); } @@ -74,6 +74,13 @@ namespace tools return m_what.c_str(); } + wallet_error_base(std::string&& loc, const std::string& message, const std::string& error_code) + : Base(message) + , m_loc(loc) + , m_error_code(error_code) + { + } + protected: wallet_error_base(std::string&& loc, const std::string& message) : Base(message) @@ -81,8 +88,10 @@ namespace tools { } + private: std::string m_loc; + std::string m_error_code; mutable std::string m_what; }; //---------------------------------------------------------------------------------------------------- @@ -662,6 +671,20 @@ if (!(cond)) tools::error::throw_wallet_ex(std::string(__FILE__ ":" STRINGIZE(__LINE__)), ## __VA_ARGS__); \ } + + +//#define THROW_IF_FALSE_WALLET_EX_MES(cond, err_type, mess, ...) +#define WLT_THROW_IF_FALSE_WITH_CODE(cond, mess, error_code) \ +if (!(cond)) \ +{ \ + exception_handler(); \ + std::stringstream ss; \ + ss << std::endl << mess; \ + LOG_ERROR(#cond << ". THROW EXCEPTION: " << error_code << ss.str()); \ + tools::error::throw_wallet_ex(std::string(__FILE__ ":" STRINGIZE(__LINE__)), ss.str(), error_code); \ +} + + #define THROW_IF_FALSE_WALLET_EX_MES(cond, err_type, mess, ...) \ if (!(cond)) \ { \ From a31670f22598d0c99fa0ba67ba6149863ee9733f Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Tue, 2 Feb 2021 19:02:28 +0100 Subject: [PATCH 17/64] in the middle of prepare_tx_sources_htlc --- src/common/error_codes.h | 1 + src/crypto/RIPEMD160_helper.cpp | 8 ++ src/crypto/RIPEMD160_helper.h | 1 + src/currency_core/currency_format_utils.cpp | 17 +-- src/currency_core/currency_format_utils.h | 2 +- .../currency_format_utils_transactions.h | 48 +++++-- src/wallet/wallet2.cpp | 120 ++++++++++++++++-- src/wallet/wallet2.h | 6 +- 8 files changed, 166 insertions(+), 37 deletions(-) diff --git a/src/common/error_codes.h b/src/common/error_codes.h index a9644517..648bd6fd 100644 --- a/src/common/error_codes.h +++ b/src/common/error_codes.h @@ -39,3 +39,4 @@ #define API_RETURN_CODE_UNINITIALIZED "UNINITIALIZED" #define API_RETURN_CODE_TX_IS_TOO_BIG "TX_IS_TOO_BIG" #define API_RETURN_CODE_TX_REJECTED "TX_REJECTED" +#define API_RETURN_CODE_HTLC_ORIGIN_HASH_MISSMATCHED "HTLC_ORIGIN_HASH_MISSMATCHED" diff --git a/src/crypto/RIPEMD160_helper.cpp b/src/crypto/RIPEMD160_helper.cpp index b2ecee62..68419195 100644 --- a/src/crypto/RIPEMD160_helper.cpp +++ b/src/crypto/RIPEMD160_helper.cpp @@ -56,4 +56,12 @@ namespace crypto { return h; } + hash RIPEMD160_hash_256(const void *data, size_t length) + { + hash160 h = RIPEMD160_hash(data, length); + hash h256 = AUTO_VAL_INIT(h256); + memcpy(&h256, &h, sizeof(h)); + return h256; + } + } diff --git a/src/crypto/RIPEMD160_helper.h b/src/crypto/RIPEMD160_helper.h index 6e923fcb..2257e2bb 100644 --- a/src/crypto/RIPEMD160_helper.h +++ b/src/crypto/RIPEMD160_helper.h @@ -17,6 +17,7 @@ namespace crypto { void RIPEMD160_hash(const void *data, size_t length, hash160 &h); hash160 RIPEMD160_hash(const void *data, size_t length); + hash RIPEMD160_hash_256(const void *data, size_t length); } diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index e8272e50..3673425b 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -591,11 +591,11 @@ namespace currency // return true; // } //--------------------------------------------------------------- - std::string generate_origin_for_htlc(const crypto::public_key& redeem, const crypto::public_key& refund, const account_keys& acc_keys) + std::string generate_origin_for_htlc(const txout_htlc& htlc, const account_keys& acc_keys) { std::string blob; - string_tools::apped_pod_to_strbuff(blob, redeem); - string_tools::apped_pod_to_strbuff(blob, refund); + string_tools::apped_pod_to_strbuff(blob, htlc.pkey_redeem); + string_tools::apped_pod_to_strbuff(blob, htlc.pkey_refund); string_tools::apped_pod_to_strbuff(blob, acc_keys.spend_secret_key); crypto::hash origin_hs = crypto::cn_fast_hash(blob.data(), blob.size()); std::string origin_blob; @@ -635,12 +635,13 @@ namespace currency tx_out out; out.amount = de.amount; - if (de.htlc) + if (de.additional_options.type() == typeid(destination_option_htlc_out)) { + const destination_option_htlc_out& htlc_dest = boost::get(de.additional_options); //out htlc CHECK_AND_ASSERT_MES(target_keys.size() == 1, false, "Unexpected htl keys count = " << target_keys.size() << ", expected ==1"); txout_htlc htlc = AUTO_VAL_INIT(htlc); - htlc.expiration = de.unlock_time; + htlc.expiration = htlc_dest.expiration; htlc.flags = 0; //0 - SHA256, 1 - RIPEMD160, by default leave SHA256 //receiver key htlc.pkey_redeem = *target_keys.begin(); @@ -651,10 +652,10 @@ namespace currency CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address"); htlc.pkey_refund = out_eph_public_key; - if (de.htlc_hash == null_hash) + if (htlc_dest.htlc_hash == null_hash) { //we use deterministic origin, to make possible access origin on different wallets copies - std::string hltc_origin = generate_origin_for_htlc(htlc.pkey_redeem, htlc.pkey_refund, self); + std::string hltc_origin = generate_origin_for_htlc(htlc, self); //calculate hash if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) @@ -669,7 +670,7 @@ namespace currency } else { - htlc.htlc_hash = de.htlc_hash; + htlc.htlc_hash = htlc_dest.htlc_hash; } } diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 0210d3e4..deb20f94 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -299,7 +299,7 @@ namespace currency void append_per_block_increments_for_tx(const transaction& tx, std::unordered_map& gindices); std::string get_word_from_timstamp(uint64_t timestamp, bool use_password); uint64_t get_timstamp_from_word(std::string word, bool& password_used); - std::string generate_origin_for_htlc(const crypto::public_key& redeem, const crypto::public_key& refund, const account_keys& acc_keys); + std::string generate_origin_for_htlc(const txout_htlc& htlc, const account_keys& acc_keys); template typename std::conditional::value, const std::vector, std::vector >::type& get_txin_etc_options(t_txin_v& in) { diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index 9028d0cc..881aae98 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -28,6 +28,7 @@ namespace currency size_t ms_sigs_count; //if txin_multisig: must be equal to output's minimum_sigs size_t ms_keys_count; //if txin_multisig: must be equal to size of output's keys container bool separately_signed_tx_complete; //for separately signed tx only: denotes the last source entry in complete tx to explicitly mark the final step of tx creation + std::string htlc_origin; //for htlc, specify origin bool is_multisig() const { return ms_sigs_count > 0; } @@ -42,23 +43,43 @@ namespace currency FIELD(ms_sigs_count) FIELD(ms_keys_count) FIELD(separately_signed_tx_complete) - END_SERIALIZE() + FIELD(htlc_origin) + END_SERIALIZE() }; + struct destination_option_void + { + BEGIN_SERIALIZE_OBJECT() + END_SERIALIZE() + }; + + //if this struct is present, then creating htlc out, expiration -> number of blocks that htlc proposal is active + struct destination_option_htlc_out + { + uint64_t expiration; + crypto::hash htlc_hash; + BEGIN_SERIALIZE_OBJECT() + FIELD(transfer) + FIELD(origin) + END_SERIALIZE() + }; + + typedef boost::variant destination_option_v; + struct tx_destination_entry { - uint64_t amount; //money - std::list addr; //destination address, in case of 1 address - txout_to_key, in case of more - txout_multisig - size_t minimum_sigs; // if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used - uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions + uint64_t amount; //money + std::list addr; //destination address, in case of 1 address - txout_to_key, in case of more - txout_multisig + size_t minimum_sigs; //if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used + uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions uint64_t unlock_time; - bool htlc; //if this flag is set, then creating htlc out, unlock_time -> number of blocks that htlc proposal is active - crypto::hash htlc_hash; - - tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash){} - tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash) {} - tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc(false), htlc_hash(null_hash) {} - tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc(false), htlc_hash(null_hash) {} + destination_option_v additional_options; //additional options + + + tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()){} + tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()) {} + tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), additional_options(destination_option_void()) {} + tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()) {} BEGIN_SERIALIZE_OBJECT() FIELD(amount) @@ -66,8 +87,7 @@ namespace currency FIELD(minimum_sigs) FIELD(amount_to_provide) FIELD(unlock_time) - FIELD(htlc) - FIELD(htlc_hash) + FIELD(additional_options) END_SERIALIZE() }; diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 01eb6486..6feb5b07 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -4021,9 +4021,10 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ dst.resize(1); dst.back().addr.push_back(addr); dst.back().amount = amount; - dst.back().htlc = true; - dst.back().htlc_hash = htlc_hash; - dst.back().unlock_time = 740; //about 12 hours + destination_option_htlc_out htlc_option = AUTO_VAL_INIT(htlc_option); + htlc_option.expiration = 740; //about 12 hours + htlc_option.htlc_hash = htlc_hash; + dst.back().additional_options = htlc_option; transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); @@ -4050,15 +4051,45 @@ void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list dst; + dst.resize(1); + dst.back().addr.push_back(m_account.get_keys().account_address); + dst.back().amount = 0; + + + construct_tx_param ctp = get_default_construct_tx_param(); + ctp.fee = TX_DEFAULT_FEE; + ctp.htlc_tx_id = htlc_tx_id; + ctp.htlc_origin = origin; + + /* + struct destination_option_htlc_in { - WLT_THROW_IF_FALSE_WITH_CODE(false, - "htlc not found with tx_id = " << htlc_tx_id, API_RETURN_CODE_NOT_FOUND); - } + uint64_t transfer; + std::string origin; + BEGIN_SERIALIZE_OBJECT() + FIELD(transfer) + FIELD(origin) + END_SERIALIZE() + }; + transfer(const construct_tx_param& ctp, + currency::transaction &tx, + bool send_to_network, + std::string* p_unsigned_filename_or_tx_blob_str); + + + */ + + + currency::transaction result_tx = AUTO_VAL_INIT(tx); + transaction result_tx = AUTO_VAL_INIT(result_tx); + this->transfer(ctp, result_tx, true, nullptr); + + + } //---------------------------------------------------------------------------------------------------- bool wallet2::prepare_tx_sources_for_packing(uint64_t items_to_pack, size_t fake_outputs_count, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money) @@ -4232,6 +4263,55 @@ bool wallet2::prepare_tx_sources(crypto::hash multisig_id, std::vector& sources, uint64_t& found_money) +{ + //lets figure out, if we have active htlc for this htlc + auto it = m_active_htlcs_txid.find(htlc_tx_id); + if (it == m_active_htlcs_txid.end()) + { + WLT_THROW_IF_FALSE_WITH_CODE(false, + "htlc not found with tx_id = " << htlc_tx_id, API_RETURN_CODE_NOT_FOUND); + } + + WLT_THROW_IF_FALSE_WITH_CODE(m_transfers.size() > it->second, + "Internal error: index in m_active_htlcs_txid <" << it->second << "> is bigger then size of m_transfers <" << m_transfers.size() << ">", API_RETURN_CODE_INTERNAL_ERROR); + + const transfer_details& td = m_transfers[it->second]; + WLT_THROW_IF_FALSE_WITH_CODE(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), + "Unexpected type in active htlc", API_RETURN_CODE_INTERNAL_ERROR); + + const txout_htlc& htlc_out = boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target); + bool use_sha256 = !(htlc_out.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK); + + //check origin + WLT_THROW_IF_FALSE_WITH_CODE(origin.size() != 0, + "Origin for htlc is empty", API_RETURN_CODE_BAD_ARG); + + crypto::hash htlc_calculated_hash = currency::null_hash; + if (use_sha256) + { + htlc_calculated_hash = crypto::sha256_hash(origin.data(), origin.size()); + } + else + { + htlc_calculated_hash = crypto::RIPEMD160_hash_256(origin.data(), origin.size()); + } + WLT_THROW_IF_FALSE_WITH_CODE(htlc_calculated_hash == htlc_out.htlc_hash, + "Origin hash is missmatched with txout_htlc", API_RETURN_CODE_HTLC_ORIGIN_HASH_MISSMATCHED); + + sources.push_back(AUTO_VAL_INIT(currency::tx_source_entry())); + currency::tx_source_entry& src = sources.back(); + src.amount = found_money = td.amount(); + src.real_output_in_tx_index = td.m_internal_output_index; + src.real_out_tx_key = get_tx_pub_key_from_extra(td.m_ptx_wallet_info->m_tx); + src.htlc_origin = origin; + //src.multisig_id = multisig_id; + //src.ms_sigs_count = ms_out.minimum_sigs; + //src.ms_keys_count = ms_out.keys.size(); + return true; + +} +//---------------------------------------------------------------------------------------------------------------- uint64_t wallet2::get_needed_money(uint64_t fee, const std::vector& dsts) { uint64_t needed_money = fee; @@ -4247,6 +4327,7 @@ uint64_t wallet2::get_needed_money(uint64_t fee, const std::vector extra; @@ -835,7 +838,7 @@ namespace tools void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, const crypto::hash& htlc_hash = currency::null_hash); void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); - void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); + void redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin); private: @@ -895,6 +898,7 @@ private: bool prepare_tx_sources(uint64_t needed_money, size_t fake_outputs_count, uint64_t dust_threshold, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money); bool prepare_tx_sources(size_t fake_outputs_count, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money); bool prepare_tx_sources(crypto::hash multisig_id, std::vector& sources, uint64_t& found_money); + bool prepare_tx_sources_htlc(crypto::hash htlc_tx_id, const std::string& origin, std::vector& sources, uint64_t& found_money); bool prepare_tx_sources_for_packing(uint64_t items_to_pack, size_t fake_outputs_count, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money); void prefetch_global_indicies_if_needed(std::vector& selected_indicies); uint64_t get_needed_money(uint64_t fee, const std::vector& dsts); From ae24efa5e3519535e3a4eb66b43d3a097ae7456b Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Tue, 2 Feb 2021 22:14:34 +0100 Subject: [PATCH 18/64] first draft of wallet atomics workflow is done(no tests created yet) --- src/currency_core/currency_format_utils.cpp | 96 +++++++++++++++++---- src/wallet/wallet2.cpp | 10 ++- 2 files changed, 84 insertions(+), 22 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 3673425b..1f5054ef 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1171,8 +1171,56 @@ namespace currency for (const tx_source_entry& src_entr : sources) { in_contexts.push_back(input_generation_context_data()); - if (!src_entr.is_multisig()) + if(src_entr.is_multisig()) + {//multisig input + txin_multisig input_multisig = AUTO_VAL_INIT(input_multisig); + summary_inputs_money += input_multisig.amount = src_entr.amount; + input_multisig.multisig_out_id = src_entr.multisig_id; + input_multisig.sigs_count = src_entr.ms_sigs_count; + tx.vin.push_back(input_multisig); + } + else if (src_entr.htlc_origin.size()) { + //htlc redeem + keypair& in_ephemeral = in_contexts.back().in_ephemeral; + //txin_to_key + if(src_entr.outputs.size() != 1) + { + LOG_ERROR("htlc in: wrong output src_entr.outputs.size() = " << src_entr.outputs.size()); + return false; + } + summary_inputs_money += src_entr.amount; + + //key_derivation recv_derivation; + crypto::key_image img; + if (!generate_key_image_helper(sender_account_keys, src_entr.real_out_tx_key, src_entr.real_output_in_tx_index, in_ephemeral, img)) + return false; + + //check that derivated key is equal with real output key + if (!(in_ephemeral.pub == src_entr.outputs[src_entr.real_output].second)) + { + LOG_ERROR("derived public key missmatch with output public key! " << ENDL << "derived_key:" + << string_tools::pod_to_hex(in_ephemeral.pub) << ENDL << "real output_public_key:" + << string_tools::pod_to_hex(src_entr.outputs[src_entr.real_output].second)); + return false; + } + + //put key image into tx input + txin_htlc input_to_key; + input_to_key.amount = src_entr.amount; + input_to_key.k_image = img; + input_to_key.hltc_origin = src_entr.htlc_origin; + + //fill outputs array and use relative offsets + BOOST_FOREACH(const tx_source_entry::output_entry& out_entry, src_entr.outputs) + input_to_key.key_offsets.push_back(out_entry.first); + + input_to_key.key_offsets = absolute_output_offsets_to_relative(input_to_key.key_offsets); + tx.vin.push_back(input_to_key); + } + else + { + //regular to key out keypair& in_ephemeral = in_contexts.back().in_ephemeral; //txin_to_key if (src_entr.real_output >= src_entr.outputs.size()) @@ -1197,7 +1245,26 @@ namespace currency } //put key image into tx input - txin_to_key input_to_key; + txin_v in_v; + txin_to_key* ptokey = nullptr; + if (src_entr.htlc_origin.size()) + { + //add txin_htlc + txin_htlc in_htlc = AUTO_VAL_INIT(inp_htlc); + in_htlc.hltc_origin = src_entr.htlc_origin; + in_v = in_htlc; + txin_htlc& in_v_ref = boost::get(in_v); + ptokey = static_cast(&in_v_ref); + } + else + { + in_v = txin_to_key(); + txin_to_key& in_v_ref = boost::get(in_v); + ptokey = &in_v_ref; + } + txin_to_key& input_to_key = *ptokey; + + input_to_key.amount = src_entr.amount; input_to_key.k_image = img; @@ -1206,16 +1273,9 @@ namespace currency input_to_key.key_offsets.push_back(out_entry.first); input_to_key.key_offsets = absolute_output_offsets_to_relative(input_to_key.key_offsets); - tx.vin.push_back(input_to_key); - } - else - {//multisig input - txin_multisig input_multisig = AUTO_VAL_INIT(input_multisig); - summary_inputs_money += input_multisig.amount = src_entr.amount; - input_multisig.multisig_out_id = src_entr.multisig_id; - input_multisig.sigs_count = src_entr.ms_sigs_count; - tx.vin.push_back(input_multisig); + tx.vin.push_back(in_v); } + } // "Shuffle" outs @@ -1302,9 +1362,14 @@ namespace currency tx.signatures.push_back(std::vector()); std::vector& sigs = tx.signatures.back(); - if (!src_entr.is_multisig()) + if(src_entr.is_multisig()) { - // txin_to_key + // txin_multisig -- don't sign anything here (see also sign_multisig_input_in_tx()) + sigs.resize(src_entr.ms_keys_count, null_sig); // just reserve keys.size() null signatures (NOTE: not minimum_sigs!) + } + else + { + // regular txin_to_key or htlc ss_ring_s << "input #" << input_index << ", pub_keys:" << ENDL; std::vector keys_ptrs; BOOST_FOREACH(const tx_source_entry::output_entry& o, src_entr.outputs) @@ -1321,11 +1386,6 @@ namespace currency std::for_each(sigs.begin(), sigs.end(), [&ss_ring_s](const crypto::signature& s) { ss_ring_s << s << ENDL; }); ss_ring_s << "prefix_hash: " << tx_prefix_hash << ENDL << "in_ephemeral_key: " << in_contexts[in_context_index].in_ephemeral.sec << ENDL << "real_output: " << src_entr.real_output << ENDL; } - else - { - // txin_multisig -- don't sign anything here (see also sign_multisig_input_in_tx()) - sigs.resize(src_entr.ms_keys_count, null_sig); // just reserve keys.size() null signatures (NOTE: not minimum_sigs!) - } if (src_entr.separately_signed_tx_complete) { // if separately signed tx is complete, put one more signature to the last bunch using tx secret key, which confirms that transaction has been generated by authorized subject diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 6feb5b07..f355e55c 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -4301,13 +4301,15 @@ bool wallet2::prepare_tx_sources_htlc(crypto::hash htlc_tx_id, const std::string sources.push_back(AUTO_VAL_INIT(currency::tx_source_entry())); currency::tx_source_entry& src = sources.back(); + currency::tx_output_entry real_oe = AUTO_VAL_INIT(real_oe); + real_oe.first = td.m_global_output_index; // TODO: use ref_by_id when necessary + real_oe.second = htlc_out.pkey_redeem; + src.outputs.push_back(real_oe); //m_global_output_index should be prefetched src.amount = found_money = td.amount(); src.real_output_in_tx_index = td.m_internal_output_index; + src.real_output = 0;//no mixins supposed to be in htlc src.real_out_tx_key = get_tx_pub_key_from_extra(td.m_ptx_wallet_info->m_tx); src.htlc_origin = origin; - //src.multisig_id = multisig_id; - //src.ms_sigs_count = ms_out.minimum_sigs; - //src.ms_keys_count = ms_out.keys.size(); return true; } @@ -4880,7 +4882,7 @@ void wallet2::prepare_transaction(const construct_tx_param& ctp, finalize_tx_par else if (ctp.htlc_tx_id != currency::null_hash) { //htlc - bool prepare_tx_sources_htlc(htlc_tx_id, ctp.htlc_origin, sources, found_money); + prepare_tx_sources_htlc(htlc_tx_id, ctp.htlc_origin, sources, found_money); } else if (ctp.multisig_id != currency::null_hash) { From d5c0e873ef0aa82dcd16489f1500bd5453e6fd26 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 3 Feb 2021 00:13:44 +0100 Subject: [PATCH 19/64] htlc: fixes here and there --- src/currency_core/blockchain_storage.cpp | 4 +- src/currency_core/currency_format_utils.cpp | 6 +-- .../currency_format_utils_abstract.h | 2 +- .../currency_format_utils_transactions.h | 23 ++++---- src/wallet/wallet2.cpp | 54 ++++++++----------- src/wallet/wallet2.h | 4 +- 6 files changed, 38 insertions(+), 55 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 37e14534..901bdfa0 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4325,11 +4325,11 @@ struct outputs_visitor crypto::public_key pk = null_pkey; if (m_scan_context.htlc_is_expired) { - pk = boost::get(out.target).pkey_after_expiration; + pk = boost::get(out.target).pkey_refund; } else { - pk = boost::get(out.target).pkey_before_expiration; + pk = boost::get(out.target).pkey_redeem; } m_results_collector.push_back(pk); }else diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 1f5054ef..f6aebcc6 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -635,9 +635,9 @@ namespace currency tx_out out; out.amount = de.amount; - if (de.additional_options.type() == typeid(destination_option_htlc_out)) + if (de.htlc_options.htlc_hash != null_hash) { - const destination_option_htlc_out& htlc_dest = boost::get(de.additional_options); + const destination_option_htlc_out& htlc_dest = de.htlc_options; //out htlc CHECK_AND_ASSERT_MES(target_keys.size() == 1, false, "Unexpected htl keys count = " << target_keys.size() << ", expected ==1"); txout_htlc htlc = AUTO_VAL_INIT(htlc); @@ -1250,7 +1250,7 @@ namespace currency if (src_entr.htlc_origin.size()) { //add txin_htlc - txin_htlc in_htlc = AUTO_VAL_INIT(inp_htlc); + txin_htlc in_htlc = AUTO_VAL_INIT(in_htlc); in_htlc.hltc_origin = src_entr.htlc_origin; in_v = in_htlc; txin_htlc& in_v_ref = boost::get(in_v); diff --git a/src/currency_core/currency_format_utils_abstract.h b/src/currency_core/currency_format_utils_abstract.h index 8f562120..451b46e3 100644 --- a/src/currency_core/currency_format_utils_abstract.h +++ b/src/currency_core/currency_format_utils_abstract.h @@ -129,7 +129,7 @@ namespace currency } return found; } - + inline const txin_to_key& get_to_key_input_from_txin_v(const txin_v& in_v) { if (in_v.type() == typeid(txin_to_key)) diff --git a/src/currency_core/currency_format_utils_transactions.h b/src/currency_core/currency_format_utils_transactions.h index 881aae98..337d40d7 100644 --- a/src/currency_core/currency_format_utils_transactions.h +++ b/src/currency_core/currency_format_utils_transactions.h @@ -47,24 +47,19 @@ namespace currency END_SERIALIZE() }; - struct destination_option_void - { - BEGIN_SERIALIZE_OBJECT() - END_SERIALIZE() - }; //if this struct is present, then creating htlc out, expiration -> number of blocks that htlc proposal is active struct destination_option_htlc_out { uint64_t expiration; crypto::hash htlc_hash; + BEGIN_SERIALIZE_OBJECT() - FIELD(transfer) - FIELD(origin) + FIELD(expiration) + FIELD(htlc_hash) END_SERIALIZE() }; - typedef boost::variant destination_option_v; struct tx_destination_entry { @@ -73,13 +68,13 @@ namespace currency size_t minimum_sigs; //if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions uint64_t unlock_time; - destination_option_v additional_options; //additional options + destination_option_htlc_out htlc_options; //htlc options - tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()){} - tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()) {} - tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), additional_options(destination_option_void()) {} - tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), additional_options(destination_option_void()) {} + tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()){} + tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()) {} + tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc_options(destination_option_htlc_out()) {} + tx_destination_entry(uint64_t a, const std::list& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()) {} BEGIN_SERIALIZE_OBJECT() FIELD(amount) @@ -87,7 +82,7 @@ namespace currency FIELD(minimum_sigs) FIELD(amount_to_provide) FIELD(unlock_time) - FIELD(additional_options) + FIELD(htlc_options) END_SERIALIZE() }; diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index f355e55c..e05d063d 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -29,6 +29,7 @@ using namespace epee; #include "currency_core/bc_payments_id_service.h" #include "version.h" #include "common/encryption_filter.h" +#include "crypto/bitcoin/sha256_helper.h" using namespace currency; #define MINIMUM_REQUIRED_WALLET_FREE_SPACE_BYTES (100*1024*1024) // 100 MB @@ -4021,10 +4022,10 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ dst.resize(1); dst.back().addr.push_back(addr); dst.back().amount = amount; - destination_option_htlc_out htlc_option = AUTO_VAL_INIT(htlc_option); + destination_option_htlc_out& htlc_option = dst.back().htlc_options; htlc_option.expiration = 740; //about 12 hours htlc_option.htlc_hash = htlc_hash; - dst.back().additional_options = htlc_option; + transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); @@ -4053,39 +4054,16 @@ void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list dst; - dst.resize(1); - dst.back().addr.push_back(m_account.get_keys().account_address); - dst.back().amount = 0; - construct_tx_param ctp = get_default_construct_tx_param(); ctp.fee = TX_DEFAULT_FEE; ctp.htlc_tx_id = htlc_tx_id; ctp.htlc_origin = origin; + ctp.dsts.resize(1); + ctp.dsts.back().addr.push_back(m_account.get_keys().account_address); + ctp.dsts.back().amount = 0; - /* - struct destination_option_htlc_in - { - uint64_t transfer; - std::string origin; - BEGIN_SERIALIZE_OBJECT() - FIELD(transfer) - FIELD(origin) - END_SERIALIZE() - }; - transfer(const construct_tx_param& ctp, - currency::transaction &tx, - bool send_to_network, - std::string* p_unsigned_filename_or_tx_blob_str); - - - */ - - - currency::transaction result_tx = AUTO_VAL_INIT(tx); - transaction result_tx = AUTO_VAL_INIT(result_tx); + currency::transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(ctp, result_tx, true, nullptr); @@ -4265,6 +4243,7 @@ bool wallet2::prepare_tx_sources(crypto::hash multisig_id, std::vector& sources, uint64_t& found_money) { + typedef currency::tx_source_entry::output_entry tx_output_entry; //lets figure out, if we have active htlc for this htlc auto it = m_active_htlcs_txid.find(htlc_tx_id); if (it == m_active_htlcs_txid.end()) @@ -4301,7 +4280,7 @@ bool wallet2::prepare_tx_sources_htlc(crypto::hash htlc_tx_id, const std::string sources.push_back(AUTO_VAL_INIT(currency::tx_source_entry())); currency::tx_source_entry& src = sources.back(); - currency::tx_output_entry real_oe = AUTO_VAL_INIT(real_oe); + tx_output_entry real_oe = AUTO_VAL_INIT(real_oe); real_oe.first = td.m_global_output_index; // TODO: use ref_by_id when necessary real_oe.second = htlc_out.pkey_redeem; src.outputs.push_back(real_oe); //m_global_output_index should be prefetched @@ -4861,7 +4840,7 @@ void wallet2::prepare_tx_destinations(uint64_t needed_money, } } //---------------------------------------------------------------------------------------------------- -void wallet2::prepare_transaction(const construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate /* = currency::transaction() */) +void wallet2::prepare_transaction(construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate /* = currency::transaction() */) { TIME_MEASURE_START_MS(get_needed_money_time); uint64_t needed_money = get_needed_money(ctp.fee, ctp.dsts); @@ -4882,7 +4861,16 @@ void wallet2::prepare_transaction(const construct_tx_param& ctp, finalize_tx_par else if (ctp.htlc_tx_id != currency::null_hash) { //htlc - prepare_tx_sources_htlc(htlc_tx_id, ctp.htlc_origin, sources, found_money); + prepare_tx_sources_htlc(ctp.htlc_tx_id, ctp.htlc_origin, ftp.sources, found_money); + WLT_THROW_IF_FALSE_WITH_CODE(ctp.dsts.size() == 1, + "htlc: unexpected ctp.dsts.size() =" << ctp.dsts.size(), API_RETURN_CODE_INTERNAL_ERROR); + + WLT_THROW_IF_FALSE_WITH_CODE(found_money > ctp.fee, + "htlc: found money less then fee", API_RETURN_CODE_INTERNAL_ERROR); + + //fill amount + ctp.dsts.begin()->amount = found_money - ctp.fee; + } else if (ctp.multisig_id != currency::null_hash) { @@ -5104,7 +5092,7 @@ void wallet2::check_and_throw_if_self_directed_tx_with_payment_id_requested(cons WLT_THROW_IF_FALSE_WALLET_CMN_ERR_EX(!has_payment_id, "sending funds to yourself with payment id is not allowed"); } //---------------------------------------------------------------------------------------------------- -void wallet2::transfer(const construct_tx_param& ctp, +void wallet2::transfer(construct_tx_param& ctp, currency::transaction &tx, bool send_to_network, std::string* p_unsigned_filename_or_tx_blob_str) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 91b129db..7a15354d 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -576,7 +576,7 @@ namespace tools const std::vector& attachments, currency::transaction& tx); - void transfer(const construct_tx_param& ctp, + void transfer(construct_tx_param& ctp, currency::transaction &tx, bool send_to_network, std::string* p_unsigned_filename_or_tx_blob_str); @@ -820,7 +820,7 @@ namespace tools const std::list& get_expiration_entries() const { return m_money_expirations; }; bool get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key) const; - void prepare_transaction(const construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate = currency::transaction()); + void prepare_transaction(construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate = currency::transaction()); void finalize_transaction(const finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key = true); std::string get_log_prefix() const { return m_log_prefix; } From 447d11e02d357fc3e0b6f7bff9920efed6a03363 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 3 Feb 2021 18:37:57 +0100 Subject: [PATCH 20/64] htlc: fixes here and there2 --- src/currency_core/currency_format_utils.cpp | 6 +++--- src/currency_core/currency_format_utils.h | 2 +- tests/core_tests/chaingen.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index f6aebcc6..501c595e 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -206,7 +206,7 @@ namespace currency std::set deriv_cache; for (auto& d : destinations) { - bool r = construct_tx_out(d, txkey.sec, no, tx, deriv_cache); + bool r = construct_tx_out(d, txkey.sec, no, tx, deriv_cache, account_keys()); CHECK_AND_ASSERT_MES(r, false, "Failed to contruct miner tx out"); no++; } @@ -603,7 +603,7 @@ namespace currency return origin_blob; } //--------------------------------------------------------------- - bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr, const account_keys& self) + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, uint8_t tx_outs_attr) { CHECK_AND_ASSERT_MES(de.addr.size() == 1 || (de.addr.size() > 1 && de.minimum_sigs <= de.addr.size()), false, "Invalid destination entry: amount: " << de.amount << " minimum_sigs: " << de.minimum_sigs << " addr.size(): " << de.addr.size()); @@ -1290,7 +1290,7 @@ namespace currency for(const tx_destination_entry& dst_entr : shuffled_dsts) { CHECK_AND_ASSERT_MES(dst_entr.amount > 0, false, "Destination with wrong amount: " << dst_entr.amount); - bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, tx_outs_attr, sender_account_keys.account_address); + bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, sender_account_keys, tx_outs_attr); CHECK_AND_ASSERT_MES(r, false, "Failed to construc tx out"); output_index++; summary_outs_money += dst_entr.amount; diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index deb20f94..d7d1664e 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -163,7 +163,7 @@ namespace currency //--------------------------------------------------------------- uint64_t get_string_uint64_hash(const std::string& str); - bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED, const account_public_address& self = account_public_address()); + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED); bool validate_alias_name(const std::string& al); bool validate_password(const std::string& password); void get_attachment_extra_info_details(const std::vector& attachment, extra_attachment_info& eai); diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h index c5731018..8a012d12 100644 --- a/tests/core_tests/chaingen.h +++ b/tests/core_tests/chaingen.h @@ -798,7 +798,7 @@ bool construct_broken_tx(const currency::account_keys& sender_account_keys, cons BOOST_FOREACH(const currency::tx_destination_entry& dst_entr, shuffled_dsts) { CHECK_AND_ASSERT_MES(dst_entr.amount > 0, false, "Destination with wrong amount: " << dst_entr.amount); - bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, der_hints, tx_outs_attr); + bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, der_hints, sender_account_keys, tx_outs_attr); CHECK_AND_ASSERT_MES(r, false, "Failed to construc tx out"); output_index++; summary_outs_money += dst_entr.amount; From 41ca8cff4163ac74f7d59d712372de9950ba8342 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 4 Feb 2021 01:49:38 +0100 Subject: [PATCH 21/64] atomics: started to work on tests + light refactoring --- src/currency_core/blockchain_storage.cpp | 16 +-- src/currency_core/currency_format_utils.cpp | 54 +++++++- src/currency_core/currency_format_utils.h | 60 ++++++++- src/wallet/wallet2.cpp | 106 +++++++-------- src/wallet/wallet2.h | 108 +++++++++------- tests/core_tests/atomic_tests.cpp | 136 ++++++++++++++++++++ tests/core_tests/atomic_tests.h | 19 +++ tests/core_tests/chaingen_main.cpp | 2 + tests/core_tests/chaingen_tests_list.h | 1 + 9 files changed, 386 insertions(+), 116 deletions(-) create mode 100644 tests/core_tests/atomic_tests.cpp create mode 100644 tests/core_tests/atomic_tests.h diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 901bdfa0..7c39c5f9 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -3121,7 +3121,7 @@ bool blockchain_storage::get_est_height_from_date(uint64_t date, uint64_t& res_h uint64_t iteration_coun = 0; uint64_t current_low_boundary = 0; - uint64_t current_hight_boundary = m_db_blocks.size() - 1; + uint64_t current_height_boundary = m_db_blocks.size() - 1; while (true) { iteration_coun++; @@ -3135,10 +3135,10 @@ bool blockchain_storage::get_est_height_from_date(uint64_t date, uint64_t& res_h { //we moved too much forward - current_hight_boundary = calculated_estimated_height; - CHECK_AND_ASSERT_MES(current_hight_boundary > current_low_boundary, true, - "Internal error: current_hight_boundary(" << current_hight_boundary << ") > current_low_boundary("<< current_low_boundary << ")"); - uint64_t offset = (current_hight_boundary - current_low_boundary)/2; + current_height_boundary = calculated_estimated_height; + CHECK_AND_ASSERT_MES(current_height_boundary > current_low_boundary, true, + "Internal error: current_hight_boundary(" << current_height_boundary << ") > current_low_boundary("<< current_low_boundary << ")"); + uint64_t offset = (current_height_boundary - current_low_boundary)/2; if (offset <= 2) { //something really wrong with distribution of blocks, just use current_low_boundary to be sure that we didn't mess any transactions @@ -3154,9 +3154,9 @@ bool blockchain_storage::get_est_height_from_date(uint64_t date, uint64_t& res_h { //we too much in past current_low_boundary = calculated_estimated_height; - CHECK_AND_ASSERT_MES(current_hight_boundary > current_low_boundary, true, - "Internal error: current_hight_boundary(" << current_hight_boundary << ") > current_low_boundary(" << current_low_boundary << ")"); - uint64_t offset = (current_hight_boundary - current_low_boundary) / 2; + CHECK_AND_ASSERT_MES(current_height_boundary > current_low_boundary, true, + "Internal error: current_hight_boundary(" << current_height_boundary << ") > current_low_boundary(" << current_low_boundary << ")"); + uint64_t offset = (current_height_boundary - current_low_boundary) / 2; if (offset <= 2) { //something really wrong with distribution of blocks, just use current_low_boundary to be sure that we didn't mess any transactions diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 501c595e..771d6c5e 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -604,6 +604,12 @@ namespace currency } //--------------------------------------------------------------- bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, uint8_t tx_outs_attr) + { + finalized_tx result = AUTO_VAL_INIT(result); + return construct_tx_out(de, tx_sec_key, output_index, tx, deriv_cache, self, result, tx_outs_attr); + } + //--------------------------------------------------------------- + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, finalized_tx& result, uint8_t tx_outs_attr) { CHECK_AND_ASSERT_MES(de.addr.size() == 1 || (de.addr.size() > 1 && de.minimum_sigs <= de.addr.size()), false, "Invalid destination entry: amount: " << de.amount << " minimum_sigs: " << de.minimum_sigs << " addr.size(): " << de.addr.size()); @@ -655,16 +661,17 @@ namespace currency if (htlc_dest.htlc_hash == null_hash) { //we use deterministic origin, to make possible access origin on different wallets copies - std::string hltc_origin = generate_origin_for_htlc(htlc, self); + + result.htlc_origin = generate_origin_for_htlc(htlc, self); //calculate hash if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) { - htlc.htlc_hash = crypto::sha256_hash(hltc_origin.data(), hltc_origin.size()); + htlc.htlc_hash = crypto::sha256_hash(result.htlc_origin.data(), result.htlc_origin.size()); } else { - crypto::hash160 h160 = crypto::RIPEMD160_hash(hltc_origin.data(), hltc_origin.size()); + crypto::hash160 h160 = crypto::RIPEMD160_hash(result.htlc_origin.data(), result.htlc_origin.size()); std::memcpy(&htlc.htlc_hash, &h160, sizeof(h160)); } } @@ -1076,7 +1083,7 @@ namespace currency shuffle, flags); } - + //--------------------------------------------------------------- bool construct_tx(const account_keys& sender_account_keys, const std::vector& sources, const std::vector& destinations, const std::vector& extra, @@ -1090,6 +1097,43 @@ namespace currency bool shuffle, uint64_t flags) { + //extra copy operation, but creating transaction is not sensitive to this + finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + ftp.sources = sources; + ftp.prepared_destinations = destinations; + ftp.extra = extra; + ftp.attachments = attachments; + ftp.unlock_time = unlock_time; + ftp.crypt_address = crypt_destination_addr; + ftp.expiration_time = 0; + ftp.tx_outs_attr = tx_outs_attr; + ftp.shuffle = shuffle; + ftp.flags = flags; + + finalized_tx ft = AUTO_VAL_INIT(ft); + bool r = construct_tx(sender_account_keys, ftp, ft); + tx = ft.tx; + one_time_secret_key = ft.one_time_key; + return r; + } + //--------------------------------------------------------------- + bool construct_tx(const account_keys& sender_account_keys, const finalize_tx_param& ftp, finalized_tx& result) + { + const std::vector& sources = ftp.sources; + const std::vector& destinations = ftp.prepared_destinations; + const std::vector& extra = ftp.extra; + const std::vector& attachments = ftp.attachments; + const uint64_t& unlock_time = ftp.unlock_time; + const account_public_address& crypt_destination_addr = ftp.crypt_address; + const uint64_t& expiration_time = ftp.expiration_time; + const uint8_t& tx_outs_attr = ftp.tx_outs_attr; + const bool& shuffle = ftp.shuffle; + const uint64_t& flags = ftp.flags; + + transaction& tx = result.tx; + crypto::secret_key& one_time_secret_key = result.one_time_key; + + result.ftp = ftp; CHECK_AND_ASSERT_MES(destinations.size() <= CURRENCY_TX_MAX_ALLOWED_OUTS, false, "Too many outs (" << destinations.size() << ")! Tx can't be constructed."); bool watch_only_mode = sender_account_keys.spend_secret_key == null_skey; @@ -1290,7 +1334,7 @@ namespace currency for(const tx_destination_entry& dst_entr : shuffled_dsts) { CHECK_AND_ASSERT_MES(dst_entr.amount > 0, false, "Destination with wrong amount: " << dst_entr.amount); - bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, sender_account_keys, tx_outs_attr); + bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, sender_account_keys, result, tx_outs_attr); CHECK_AND_ASSERT_MES(r, false, "Failed to construc tx out"); output_index++; summary_outs_money += dst_entr.amount; diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index d7d1664e..0c8ba27a 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -132,9 +132,60 @@ namespace currency END_KV_SERIALIZE_MAP() }; - struct htlc_info + struct htlc_info + { + bool hltc_our_out_is_before_expiration; + }; + + + struct finalize_tx_param { - bool hltc_our_out_is_before_expiration; + uint64_t unlock_time; + std::vector extra; + std::vector attachments; + currency::account_public_address crypt_address; + uint8_t tx_outs_attr; + bool shuffle; + uint8_t flags; + crypto::hash multisig_id; + std::vector sources; + std::vector selected_transfers; + std::vector prepared_destinations; + uint64_t expiration_time; + crypto::public_key spend_pub_key; // only for validations + + BEGIN_SERIALIZE_OBJECT() + FIELD(unlock_time) + FIELD(extra) + FIELD(attachments) + FIELD(crypt_address) + FIELD(tx_outs_attr) + FIELD(shuffle) + FIELD(flags) + FIELD(multisig_id) + FIELD(sources) + FIELD(selected_transfers) + FIELD(prepared_destinations) + FIELD(expiration_time) + FIELD(spend_pub_key) + END_SERIALIZE() + }; + + struct finalized_tx + { + currency::transaction tx; + crypto::secret_key one_time_key; + finalize_tx_param ftp; + std::string htlc_origin; + std::vector> outs_key_images; // pairs (out_index, key_image) for each change output + + BEGIN_SERIALIZE_OBJECT() + FIELD(tx) + FIELD(one_time_key) + FIELD(ftp) + FIELD(htlc_origin) + FIELD(outs_key_images) + END_SERIALIZE() }; @@ -163,6 +214,7 @@ namespace currency //--------------------------------------------------------------- uint64_t get_string_uint64_hash(const std::string& str); + bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, finalized_tx& result, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED); bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set& deriv_cache, const account_keys& self, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED); bool validate_alias_name(const std::string& al); bool validate_password(const std::string& password); @@ -186,6 +238,7 @@ namespace currency uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED, bool shuffle = true, uint64_t flags = 0); + bool construct_tx(const account_keys& sender_account_keys, const std::vector& sources, const std::vector& destinations, @@ -200,6 +253,9 @@ namespace currency bool shuffle = true, uint64_t flags = 0); + bool construct_tx(const account_keys& sender_account_keys, const finalize_tx_param& param, finalized_tx& result); + + bool sign_multisig_input_in_tx(currency::transaction& tx, size_t ms_input_index, const currency::account_keys& keys, const currency::transaction& source_tx, bool *p_is_input_fully_signed = nullptr); bool sign_extra_alias_entry(extra_alias_entry& ai, const crypto::public_key& pkey, const crypto::secret_key& skey); diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index e05d063d..91115f5f 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -800,7 +800,7 @@ void wallet2::accept_proposal(const crypto::hash& contract_id, uint64_t b_accept construct_param.extra.push_back(tsa); //build transaction - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(construct_param, ftp, tx); mark_transfers_as_spent(ftp.selected_transfers, std::string("contract <") + epee::string_tools::pod_to_hex(contract_id) + "> has been accepted with tx <" + epee::string_tools::pod_to_hex(get_transaction_hash(tx)) + ">"); @@ -930,7 +930,7 @@ void wallet2::request_cancel_contract(const crypto::hash& contract_id, uint64_t construct_param.crypt_address = contr_it->second.private_detailes.b_addr; construct_param.split_strategy_id = detail::ssi_digit; - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(construct_param, ftp); currency::transaction tx = AUTO_VAL_INIT(tx); crypto::secret_key sk = AUTO_VAL_INIT(sk); @@ -2891,7 +2891,7 @@ void wallet2::sign_transfer(const std::string& tx_sources_blob, std::string& sig std::string decrypted_src_blob = crypto::chacha_crypt(tx_sources_blob, m_account.get_keys().view_secret_key); // deserialize args - finalized_tx ft = AUTO_VAL_INIT(ft); + currency::finalized_tx ft = AUTO_VAL_INIT(ft); bool r = t_unserializable_object_from_blob(ft.ftp, decrypted_src_blob); THROW_IF_FALSE_WALLET_EX(r, error::wallet_common_error, "Failed to decrypt tx sources blob"); @@ -2973,7 +2973,7 @@ void wallet2::submit_transfer(const std::string& signed_tx_blob, currency::trans std::string decrypted_src_blob = crypto::chacha_crypt(signed_tx_blob, m_account.get_keys().view_secret_key); // deserialize tx data - finalized_tx ft = AUTO_VAL_INIT(ft); + currency::finalized_tx ft = AUTO_VAL_INIT(ft); bool r = t_unserializable_object_from_blob(ft, decrypted_src_blob); THROW_IF_FALSE_WALLET_EX(r, error::wallet_common_error, "Failed to decrypt signed tx data"); tx = ft.tx; @@ -3741,7 +3741,7 @@ void wallet2::build_escrow_release_templates(crypto::hash multisig_id, tsa.instruction = BC_ESCROW_SERVICE_INSTRUCTION_RELEASE_NORMAL; construct_params.extra.push_back(tsa); { - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(construct_params, ftp); crypto::secret_key sk = AUTO_VAL_INIT(sk); finalize_transaction(ftp, tx_release_template, sk, false); @@ -3757,7 +3757,7 @@ void wallet2::build_escrow_release_templates(crypto::hash multisig_id, tsa.instruction = BC_ESCROW_SERVICE_INSTRUCTION_RELEASE_BURN; construct_params.extra.push_back(tsa); { - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(construct_params, ftp); crypto::secret_key sk = AUTO_VAL_INIT(sk); finalize_transaction(ftp, tx_burn_template, sk, false); @@ -3777,7 +3777,7 @@ void wallet2::build_escrow_cancel_template(crypto::hash multisig_id, "multisig id out amount no more than escrow total amount"); construct_tx_param construct_params = AUTO_VAL_INIT(construct_params); - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); construct_params.fee = it->second.amount() - (ecrow_details.amount_a_pledge + ecrow_details.amount_to_pay + ecrow_details.amount_b_pledge); construct_params.multisig_id = multisig_id; construct_params.split_strategy_id = detail::ssi_digit; @@ -3859,7 +3859,7 @@ void wallet2::build_escrow_template(const bc_services::contract_private_details& ctp.attachments.push_back(att); } - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(ctp, ftp, tx); selected_transfers = ftp.selected_transfers; @@ -3991,7 +3991,7 @@ void wallet2::send_escrow_proposal(const bc_services::contract_private_details& ctp.tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED; ctp.unlock_time = unlock_time; - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); try { prepare_transaction(ctp, ftp); @@ -4013,22 +4013,20 @@ void wallet2::send_escrow_proposal(const bc_services::contract_private_details& print_tx_sent_message(tx, "(from multisig)", fee); } //---------------------------------------------------------------------------------------------------- -void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, const crypto::hash& htlc_hash) +void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, std::string &origin) { - std::vector extra; - std::vector attachments; - - std::vector dst; - dst.resize(1); - dst.back().addr.push_back(addr); - dst.back().amount = amount; - destination_option_htlc_out& htlc_option = dst.back().htlc_options; + construct_tx_param ctp = get_default_construct_tx_param(); + ctp.fee = TX_DEFAULT_FEE; + ctp.dsts.resize(1); + ctp.dsts.back().addr.push_back(addr); + ctp.dsts.back().amount = amount; + destination_option_htlc_out& htlc_option = ctp.dsts.back().htlc_options; htlc_option.expiration = 740; //about 12 hours - htlc_option.htlc_hash = htlc_hash; - + htlc_option.htlc_hash = null_hash; - transaction result_tx = AUTO_VAL_INIT(result_tx); - this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); + finalized_tx ft = AUTO_VAL_INIT(ft); + this->transfer(ctp, ft, true, nullptr); + origin = ft.htlc_origin; } //---------------------------------------------------------------------------------------------------- void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs) @@ -4840,7 +4838,7 @@ void wallet2::prepare_tx_destinations(uint64_t needed_money, } } //---------------------------------------------------------------------------------------------------- -void wallet2::prepare_transaction(construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate /* = currency::transaction() */) +void wallet2::prepare_transaction(construct_tx_param& ctp, currency::finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate /* = currency::transaction() */) { TIME_MEASURE_START_MS(get_needed_money_time); uint64_t needed_money = get_needed_money(ctp.fee, ctp.dsts); @@ -4911,7 +4909,15 @@ void wallet2::prepare_transaction(construct_tx_param& ctp, finalize_tx_param& ft LOG_LEVEL_0);*/ } //---------------------------------------------------------------------------------------------------- -void wallet2::finalize_transaction(const finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key /* = true */) +void wallet2::finalize_transaction(const currency::finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key /* = true */) +{ + currency::finalized_tx result = AUTO_VAL_INIT(result); + finalize_transaction(ftp, result, broadcast_tx, store_tx_secret_key); + tx = result.tx; + tx_key = result.one_time_key; +} +//---------------------------------------------------------------------------------------------------- +void wallet2::finalize_transaction(const currency::finalize_tx_param& ftp, currency::finalized_tx& result, bool broadcast_tx, bool store_tx_secret_key /* = true */) { // NOTE: if broadcast_tx == true callback rise_on_transfer2() may be called at the end of this function. // That callback may call balance(), so it's important to have all used/spending transfers @@ -4922,18 +4928,7 @@ void wallet2::finalize_transaction(const finalize_tx_param& ftp, currency::trans //TIME_MEASURE_START_MS(construct_tx_time); bool r = currency::construct_tx(m_account.get_keys(), - ftp.sources, - ftp.prepared_destinations, - ftp.extra, - ftp.attachments, - tx, - tx_key, - ftp.unlock_time, - ftp.crypt_address, - 0, // expiration time - ftp.tx_outs_attr, - ftp.shuffle, - ftp.flags); + ftp, result); //TIME_MEASURE_FINISH_MS(construct_tx_time); THROW_IF_FALSE_WALLET_EX(r, error::tx_not_constructed, ftp.sources, ftp.prepared_destinations, ftp.unlock_time); @@ -4946,24 +4941,24 @@ void wallet2::finalize_transaction(const finalize_tx_param& ftp, currency::trans WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(it != m_multisig_transfers.end(), "can't find multisig_id: " << ftp.multisig_id); const currency::transaction& ms_source_tx = it->second.m_ptx_wallet_info->m_tx; bool is_tx_input_fully_signed = false; - r = sign_multisig_input_in_tx(tx, 0, m_account.get_keys(), ms_source_tx, &is_tx_input_fully_signed); // it's assumed that ms input is the first one (index 0) + r = sign_multisig_input_in_tx(result.tx, 0, m_account.get_keys(), ms_source_tx, &is_tx_input_fully_signed); // it's assumed that ms input is the first one (index 0) WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(r && !is_tx_input_fully_signed, "sign_multisig_input_in_tx failed: r = " << r << ", is_tx_input_fully_signed = " << is_tx_input_fully_signed); } //TIME_MEASURE_FINISH_MS(sign_ms_input_time); - THROW_IF_FALSE_WALLET_EX(get_object_blobsize(tx) < CURRENCY_MAX_TRANSACTION_BLOB_SIZE, error::tx_too_big, tx, m_upper_transaction_size_limit); + THROW_IF_FALSE_WALLET_EX(get_object_blobsize(result.tx) < CURRENCY_MAX_TRANSACTION_BLOB_SIZE, error::tx_too_big, result.tx, m_upper_transaction_size_limit); if (store_tx_secret_key) - m_tx_keys.insert(std::make_pair(get_transaction_hash(tx), tx_key)); + m_tx_keys.insert(std::make_pair(get_transaction_hash(result.tx), result.one_time_key)); //TIME_MEASURE_START(send_transaction_to_network_time); if (broadcast_tx) - send_transaction_to_network(tx); + send_transaction_to_network(result.tx); //TIME_MEASURE_FINISH(send_transaction_to_network_time); //TIME_MEASURE_START(add_sent_tx_detailed_info_time); if (broadcast_tx) - add_sent_tx_detailed_info(tx, ftp.prepared_destinations, ftp.selected_transfers); + add_sent_tx_detailed_info(result.tx, ftp.prepared_destinations, ftp.selected_transfers); //TIME_MEASURE_FINISH(add_sent_tx_detailed_info_time); /* TODO @@ -5035,7 +5030,7 @@ const construct_tx_param& wallet2::get_default_construct_tx_param() return ctp; } //---------------------------------------------------------------------------------------------------- -bool wallet2::store_unsigned_tx_to_file_and_reserve_transfers(const finalize_tx_param& ftp, const std::string& filename, std::string* p_unsigned_tx_blob_str /* = nullptr */) +bool wallet2::store_unsigned_tx_to_file_and_reserve_transfers(const currency::finalize_tx_param& ftp, const std::string& filename, std::string* p_unsigned_tx_blob_str /* = nullptr */) { TIME_MEASURE_START(store_unsigned_tx_time); blobdata bl = t_serializable_object_to_blob(ftp); @@ -5096,13 +5091,23 @@ void wallet2::transfer(construct_tx_param& ctp, currency::transaction &tx, bool send_to_network, std::string* p_unsigned_filename_or_tx_blob_str) +{ + currency::finalized_tx result = AUTO_VAL_INIT(result); + transfer(ctp, result, send_to_network, p_unsigned_filename_or_tx_blob_str); + tx = result.tx; +} +//---------------------------------------------------------------------------------------------------- +void wallet2::transfer(construct_tx_param& ctp, + currency::finalized_tx& result, + bool send_to_network, + std::string* p_unsigned_filename_or_tx_blob_str) { WLT_THROW_IF_FALSE_WALLET_CMN_ERR_EX(!is_auditable() || !is_watch_only(), "You can't initiate coins transfer using an auditable watch-only wallet."); // btw, watch-only wallets can call transfer() within cold-signing process check_and_throw_if_self_directed_tx_with_payment_id_requested(ctp); TIME_MEASURE_START(prepare_transaction_time); - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); prepare_transaction(ctp, ftp); TIME_MEASURE_FINISH(prepare_transaction_time); @@ -5115,18 +5120,17 @@ void wallet2::transfer(construct_tx_param& ctp, } TIME_MEASURE_START(mark_transfers_as_spent_time); - mark_transfers_as_spent(ftp.selected_transfers, std::string("money transfer, tx: ") + epee::string_tools::pod_to_hex(get_transaction_hash(tx))); + mark_transfers_as_spent(ftp.selected_transfers, std::string("money transfer, tx: ") + epee::string_tools::pod_to_hex(get_transaction_hash(result.tx))); TIME_MEASURE_FINISH(mark_transfers_as_spent_time); TIME_MEASURE_START(finalize_transaction_time); try { - crypto::secret_key sk = AUTO_VAL_INIT(sk); - finalize_transaction(ftp, tx, sk, send_to_network); + finalize_transaction(ftp, result, send_to_network); } catch (...) { - clear_transfers_from_flag(ftp.selected_transfers, WALLET_TRANSFER_DETAIL_FLAG_SPENT, std::string("exception on money transfer, tx: ") + epee::string_tools::pod_to_hex(get_transaction_hash(tx))); + clear_transfers_from_flag(ftp.selected_transfers, WALLET_TRANSFER_DETAIL_FLAG_SPENT, std::string("exception on money transfer, tx: ") + epee::string_tools::pod_to_hex(get_transaction_hash(result.tx))); throw; } TIME_MEASURE_FINISH(finalize_transaction_time); @@ -5139,7 +5143,7 @@ void wallet2::transfer(construct_tx_param& ctp, << ", mark_transfers_as_spent_time: " << print_fixed_decimal_point(mark_transfers_as_spent_time, 3) , LOG_LEVEL_0); - print_tx_sent_message(tx, std::string() + "(transfer)", ctp.fee); + print_tx_sent_message(result.tx, std::string() + "(transfer)", ctp.fee); } //---------------------------------------------------------------------------------------------------- void wallet2::sweep_below(size_t fake_outs_count, const currency::account_public_address& destination_addr, uint64_t threshold_amount, const currency::payment_id_t& payment_id, @@ -5209,7 +5213,7 @@ void wallet2::sweep_below(size_t fake_outs_count, const currency::account_public THROW_IF_FALSE_WALLET_EX(scanty_outs.empty(), error::not_enough_outs_to_mix, scanty_outs, fake_outs_count); } - finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); if (!payment_id.empty()) set_payment_id_to_tx(ftp.attachments, payment_id); // put encrypted payer info into the extra @@ -5232,7 +5236,7 @@ void wallet2::sweep_below(size_t fake_outs_count, const currency::account_public { return t == rc_ok ? "rc_ok" : t == rc_too_few_outputs ? "rc_too_few_outputs" : t == rc_too_many_outputs ? "rc_too_many_outputs" : t == rc_create_tx_failed ? "rc_create_tx_failed" : "unknown"; }; auto try_construct_tx = [this, &selected_transfers, &rpc_get_random_outs_resp, &fake_outs_count, &fee, &destination_addr] - (size_t st_index_upper_boundary, finalize_tx_param& ftp, uint64_t& amount_swept) -> try_construct_result_t + (size_t st_index_upper_boundary, currency::finalize_tx_param& ftp, uint64_t& amount_swept) -> try_construct_result_t { // prepare inputs amount_swept = 0; @@ -5319,7 +5323,7 @@ void wallet2::sweep_below(size_t fake_outs_count, const currency::account_public WLT_LOG_L1("sweep_below: first try of try_construct_tx(" << st_index_upper_boundary << ") returned " << get_result_t_str(res)); size_t low_bound = 0; size_t high_bound = st_index_upper_boundary; - finalize_tx_param ftp_ok = ftp; + currency::finalize_tx_param ftp_ok = ftp; for (;;) { if (low_bound + 1 >= high_bound) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 7a15354d..ce272372 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -286,52 +286,52 @@ namespace tools bool perform_packing; }; - struct finalize_tx_param - { - uint64_t unlock_time; - std::vector extra; - std::vector attachments; - currency::account_public_address crypt_address; - uint8_t tx_outs_attr; - bool shuffle; - uint8_t flags; - crypto::hash multisig_id; - std::vector sources; - std::vector selected_transfers; - std::vector prepared_destinations; - - crypto::public_key spend_pub_key; // only for validations - - BEGIN_SERIALIZE_OBJECT() - FIELD(unlock_time) - FIELD(extra) - FIELD(attachments) - FIELD(crypt_address) - FIELD(tx_outs_attr) - FIELD(shuffle) - FIELD(flags) - FIELD(multisig_id) - FIELD(sources) - FIELD(selected_transfers) - FIELD(prepared_destinations) - FIELD(spend_pub_key) - END_SERIALIZE() - }; - - struct finalized_tx - { - currency::transaction tx; - crypto::secret_key one_time_key; - finalize_tx_param ftp; - std::vector> outs_key_images; // pairs (out_index, key_image) for each change output - - BEGIN_SERIALIZE_OBJECT() - FIELD(tx) - FIELD(one_time_key) - FIELD(ftp) - FIELD(outs_key_images) - END_SERIALIZE() - }; +// struct currency::finalize_tx_param +// { +// uint64_t unlock_time; +// std::vector extra; +// std::vector attachments; +// currency::account_public_address crypt_address; +// uint8_t tx_outs_attr; +// bool shuffle; +// uint8_t flags; +// crypto::hash multisig_id; +// std::vector sources; +// std::vector selected_transfers; +// std::vector prepared_destinations; +// +// crypto::public_key spend_pub_key; // only for validations +// +// BEGIN_SERIALIZE_OBJECT() +// FIELD(unlock_time) +// FIELD(extra) +// FIELD(attachments) +// FIELD(crypt_address) +// FIELD(tx_outs_attr) +// FIELD(shuffle) +// FIELD(flags) +// FIELD(multisig_id) +// FIELD(sources) +// FIELD(selected_transfers) +// FIELD(prepared_destinations) +// FIELD(spend_pub_key) +// END_SERIALIZE() +// }; +// +// struct currency::finalized_tx +// { +// currency::transaction tx; +// crypto::secret_key one_time_key; +// currency::finalize_tx_param ftp; +// std::vector> outs_key_images; // pairs (out_index, key_image) for each change output +// +// BEGIN_SERIALIZE_OBJECT() +// FIELD(tx) +// FIELD(one_time_key) +// FIELD(ftp) +// FIELD(outs_key_images) +// END_SERIALIZE() +// }; class wallet2 { @@ -580,6 +580,12 @@ namespace tools currency::transaction &tx, bool send_to_network, std::string* p_unsigned_filename_or_tx_blob_str); + + void transfer(construct_tx_param& ctp, + currency::finalized_tx& result, + bool send_to_network, + std::string* p_unsigned_filename_or_tx_blob_str); + template void transfer_from_contract( @@ -820,8 +826,10 @@ namespace tools const std::list& get_expiration_entries() const { return m_money_expirations; }; bool get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key) const; - void prepare_transaction(construct_tx_param& ctp, finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate = currency::transaction()); - void finalize_transaction(const finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key = true); + void prepare_transaction(construct_tx_param& ctp, currency::finalize_tx_param& ftp, const currency::transaction& tx_for_mode_separate = currency::transaction()); + + void finalize_transaction(const currency::finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key = true); + void finalize_transaction(const currency::finalize_tx_param& ftp, currency::finalized_tx& result, bool broadcast_tx, bool store_tx_secret_key = true ); std::string get_log_prefix() const { return m_log_prefix; } static uint64_t get_max_unlock_time_from_receive_indices(const currency::transaction& tx, const money_transfer2_details& td); @@ -836,7 +844,7 @@ namespace tools opener-hash will be given by other side */ void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, - currency::transaction &tx, const crypto::hash& htlc_hash = currency::null_hash); + currency::transaction &tx, std::string &origin); void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); void redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin); @@ -960,7 +968,7 @@ private: void exception_handler() const; uint64_t get_minimum_allowed_fee_for_contract(const crypto::hash& ms_id); bool generate_packing_transaction_if_needed(currency::transaction& tx, uint64_t fake_outputs_number); - bool store_unsigned_tx_to_file_and_reserve_transfers(const finalize_tx_param& ftp, const std::string& filename, std::string* p_unsigned_tx_blob_str = nullptr); + bool store_unsigned_tx_to_file_and_reserve_transfers(const currency::finalize_tx_param& ftp, const std::string& filename, std::string* p_unsigned_tx_blob_str = nullptr); void check_and_throw_if_self_directed_tx_with_payment_id_requested(const construct_tx_param& ctp); void push_new_block_id(const crypto::hash& id, uint64_t height); bool lookup_item_around(uint64_t i, std::pair& result); diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp new file mode 100644 index 00000000..d45d5581 --- /dev/null +++ b/tests/core_tests/atomic_tests.cpp @@ -0,0 +1,136 @@ +// Copyright (c) 2014-2021 Zano Project +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "chaingen.h" +#include "escrow_wallet_tests.h" +#include "random_helper.h" +#include "chaingen_helpers.h" +#include "atomic_tests.h" + +using namespace epee; +using namespace crypto; +using namespace currency; + +//============================================================================================================================== + +struct wallet_tests_callback_handler : public tools::i_wallet2_callback +{ + virtual void on_transfer2(const tools::wallet_public::wallet_transfer_info& wti, uint64_t balance, uint64_t unlocked_balance, uint64_t total_mined) + { + all_wtis.push_back(wti); + } + + std::vector all_wtis; +}; + +atomic_simple_test::atomic_simple_test() +{ + REGISTER_CALLBACK_METHOD(atomic_simple_test, c1); +} + +bool atomic_simple_test::generate(std::vector& events) const +{ + epee::debug::get_set_enable_assert(true, true); + + currency::account_base genesis_acc; + genesis_acc.generate(); + m_mining_accunt.generate(); + + + block blk_0 = AUTO_VAL_INIT(blk_0); + generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); + events.push_back(blk_0); + + REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); + + DO_CALLBACK(events, "c1"); + epee::debug::get_set_enable_assert(true, false); + return true; +} + + + +bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vector& events) +{ + epee::debug::get_set_enable_assert(true, true); + misc_utils::auto_scope_leave_caller scope_exit_handler = misc_utils::create_scope_leave_handler([&](){epee::debug::get_set_enable_assert(true, false); }); + + + /* + let's pretend that we have two different blockchains: A and B + Alice and Bob want to have atomic swap via htlc, both has wallets in blockchain A and B + Steps are following: + 1. Alice initiate swap by sending to Bob HTLC in blockchain A + 2. Bob see HTLC to his address in blockchain A and create HTLC with + the same hash addressed to Alice in blockchain B + 3. Alice see HTLC addressed to her in blockchain B and creates there redeem transaction, which reveals HTLC origin + 4. Bob observe origin revealed by Alice in blockchain B and create redeem transaction in blockchain A + 5. Everybody check balances and celebrate successful atomic swap + + */ + + currency::account_base accunt_alice_blockchain_a; + currency::account_base accunt_alice_blockchain_b; + currency::account_base accunt_bob_blockchain_a; + currency::account_base accunt_bob_blockchain_b; + accunt_alice_blockchain_a.generate(); + accunt_alice_blockchain_b.generate(); + accunt_bob_blockchain_a.generate(); + accunt_bob_blockchain_b.generate(); + + LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0); + LOG_PRINT_MAGENTA("Alice [A] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_a.get_public_address()), LOG_LEVEL_0); + LOG_PRINT_MAGENTA("Alice [B] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_b.get_public_address()), LOG_LEVEL_0); + LOG_PRINT_MAGENTA("Bob [A] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_a.get_public_address()), LOG_LEVEL_0); + LOG_PRINT_MAGENTA("Bob [B] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_b.get_public_address()), LOG_LEVEL_0); + +#define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) + + std::shared_ptr miner_wlt = init_playtime_test_wallet(events, c, m_mining_accunt); + + size_t blocks_fetched = 0; + bool received_money = false; + std::atomic atomic_false = ATOMIC_VAR_INIT(false); + miner_wlt->refresh(blocks_fetched, received_money, atomic_false); + CHECK_AND_FORCE_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); + + uint64_t transfer_amount = AMOUNT_TO_TRANSFER_HTLC + TESTS_DEFAULT_FEE; + miner_wlt->transfer(transfer_amount, accunt_alice_blockchain_a.get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); + + miner_wlt->transfer(transfer_amount, accunt_bob_blockchain_a.get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Bob A: " << transfer_amount, LOG_LEVEL_0); + + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + //create wallet instances and calculate balances + std::shared_ptr alice_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_a); + std::shared_ptr alice_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_b); + std::shared_ptr bob_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_a); + std::shared_ptr bob_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_b); +// std::shared_ptr backend_mock(new wallet_tests_callback_handler()); +// alice_a_wlt_instance->callback(backend_mock); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); + + CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(bob_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); + + + std::string alice_origin; //will be deterministically generated by Alice's A wallet + currency::transaction res_tx = AUTO_VAL_INIT(res_tx); + alice_a_wlt_instance->create_htlc_proposal(transfer_amount, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, alice_origin); + + + + return r; +} + + +//------------------------------------------------------------------------------ + diff --git a/tests/core_tests/atomic_tests.h b/tests/core_tests/atomic_tests.h new file mode 100644 index 00000000..4c8c93fe --- /dev/null +++ b/tests/core_tests/atomic_tests.h @@ -0,0 +1,19 @@ +// Copyright (c) 2014-2021 Zano Project +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#pragma once +#include "chaingen.h" +#include "wallet_tests_basic.h" + + +struct atomic_simple_test : public wallet_test +{ + atomic_simple_test(); + bool generate(std::vector& events) const; + bool c1(currency::core& c, size_t ev_index, const std::vector& events); +private: + mutable currency::account_base m_mining_accunt; + +}; + diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp index c61c8986..96f485e0 100644 --- a/tests/core_tests/chaingen_main.cpp +++ b/tests/core_tests/chaingen_main.cpp @@ -1020,6 +1020,8 @@ int main(int argc, char* argv[]) GENERATE_AND_PLAY(hard_fork_2_incorrect_alias_update); GENERATE_AND_PLAY(hard_fork_2_incorrect_alias_update); + // atomics + GENERATE_AND_PLAY(atomic_simple_test); // GENERATE_AND_PLAY(gen_block_reward); // END OF TESTS */ diff --git a/tests/core_tests/chaingen_tests_list.h b/tests/core_tests/chaingen_tests_list.h index bccf06ee..2a419569 100644 --- a/tests/core_tests/chaingen_tests_list.h +++ b/tests/core_tests/chaingen_tests_list.h @@ -38,3 +38,4 @@ #include "hard_fork_1_bad_pos_source.h" #include "hard_fork_1.h" #include "hard_fork_2.h" +#include "atomic_tests.h" From e3ef3dc7040befaf298e334d89e85c4399123534 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 4 Feb 2021 21:28:53 +0100 Subject: [PATCH 22/64] fixed chain_switching_when_out_spent_in_alt_chain_ref_id --- src/currency_core/blockchain_storage.cpp | 28 ++++++++++++++++++++++ tests/core_tests/chain_switch_1.cpp | 10 +++++++- tests/core_tests/chaingen.cpp | 10 +++++++- tests/core_tests/chaingen_main.cpp | 2 +- tests/core_tests/multisig_wallet_tests.cpp | 2 +- 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 7c39c5f9..5e21bd02 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -1720,6 +1720,34 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: alt_block_extended_info abei = AUTO_VAL_INIT(abei); abei.bl = b; abei.onboard_transactions.swap(bvc.m_onboard_transactions); + //for altblocks we should be sure that all transactions kept in onboard_transactions + for (auto& h: abei.bl.tx_hashes) + { + if (abei.onboard_transactions.count(h) == 0) + { + //need to take if from pool + transaction tx = AUTO_VAL_INIT(tx); + bool r = m_tx_pool.get_transaction(h, tx); + if (!r) + { + //transaction could be in main chain + auto tx_ptr = m_db_transactions.find(h); + if (!tx_ptr) + { + LOG_ERROR("Transaction " << h << " for altblock " << get_block_hash(abei.bl) << " not found"); + } + else + { + abei.onboard_transactions[h] = tx_ptr->tx; + } + } + else + { + abei.onboard_transactions[h] = tx; + } + } + } + abei.timestamp = m_core_runtime_config.get_core_time(); abei.height = alt_chain.size() ? it_prev->second.height + 1 : *ptr_main_prev + 1; CHECK_AND_ASSERT_MES_CUSTOM(coinbase_height == abei.height, false, bvc.m_verification_failed = true, "block coinbase height doesn't match with altchain height, declined"); diff --git a/tests/core_tests/chain_switch_1.cpp b/tests/core_tests/chain_switch_1.cpp index 0bb66a66..cc53a658 100644 --- a/tests/core_tests/chain_switch_1.cpp +++ b/tests/core_tests/chain_switch_1.cpp @@ -685,11 +685,19 @@ bool chain_switching_when_out_spent_in_alt_chain_mixin::generate(std::vector& events) const { + random_state_test_restorer::reset_random(0); // to make the test deterministic + uint64_t ts = 1450000000; + test_core_time::adjust(ts); + // Test idea: make sure tx can spend (using ref_by_id) an output from another tx when both txs are in an altchain. bool r = false; - GENERATE_ACCOUNT(miner_acc); + GENERATE_ACCOUNT(miner_acc); GENERATE_ACCOUNT(alice_acc); GENERATE_ACCOUNT(bob_acc); + miner_acc.set_createtime(ts); + alice_acc.set_createtime(ts); + bob_acc.set_createtime(ts); + MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, test_core_time::get_time()); MAKE_NEXT_BLOCK(events, blk_1, blk_0, miner_acc); REWIND_BLOCKS_N(events, blk_1r, blk_1, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp index 3af55b49..5bd82551 100644 --- a/tests/core_tests/chaingen.cpp +++ b/tests/core_tests/chaingen.cpp @@ -159,7 +159,15 @@ void test_generator::add_block(const currency::block& blk, get_block_reward(is_pos_block(blk), misc_utils::median(block_sizes), block_size, already_generated_coins, block_reward, currency::get_block_height(blk)); m_blocks_info[get_block_hash(blk)] = block_info(blk, already_generated_coins + block_reward, block_size, cum_diff, tx_list, ks_hash); - LOG_PRINT_MAGENTA("ADDED_BLOCK[" << get_block_hash(blk) << "][" << (is_pos_block(blk)? "PoS":"PoW") <<"][" << get_block_height(blk) << "][cumul_diff:" << cum_diff << "]", LOG_LEVEL_0); + + + std::stringstream ss_tx_hashes; + for (auto& h : blk.tx_hashes) + { + ss_tx_hashes << " [tx]: " << h << ENDL; + } + + LOG_PRINT_MAGENTA("ADDED_BLOCK[" << get_block_hash(blk) << "][" << (is_pos_block(blk)? "PoS":"PoW") <<"][" << get_block_height(blk) << "][cumul_diff:" << cum_diff << "]" << ENDL << ss_tx_hashes.str(), LOG_LEVEL_0); } void test_generator::add_block_info(const block_info& bi) diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp index 96f485e0..0c49e02a 100644 --- a/tests/core_tests/chaingen_main.cpp +++ b/tests/core_tests/chaingen_main.cpp @@ -900,7 +900,7 @@ int main(int argc, char* argv[]) GENERATE_AND_PLAY(alt_blocks_validation_and_same_new_amount_in_two_txs); GENERATE_AND_PLAY(alt_blocks_with_the_same_txs); GENERATE_AND_PLAY(chain_switching_when_out_spent_in_alt_chain_mixin); - // GENERATE_AND_PLAY(chain_switching_when_out_spent_in_alt_chain_ref_id); + GENERATE_AND_PLAY(chain_switching_when_out_spent_in_alt_chain_ref_id); // miscellaneous tests diff --git a/tests/core_tests/multisig_wallet_tests.cpp b/tests/core_tests/multisig_wallet_tests.cpp index 88c86b24..32e7468d 100644 --- a/tests/core_tests/multisig_wallet_tests.cpp +++ b/tests/core_tests/multisig_wallet_tests.cpp @@ -47,7 +47,7 @@ void transfer_multisig(tools::wallet2& w, // prepare transaction will sign ms input partially with wallet's keys - it needed to be signed fully with the others tools::construct_tx_param ctp = AUTO_VAL_INIT(ctp); - tools::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); + currency::finalize_tx_param ftp = AUTO_VAL_INIT(ftp); ctp.attachments = attachments; ctp.crypt_address = crypt_address; ctp.dsts = dsts; From b4a3a404b4f9b249e280941db9518f8085ee7d02 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 6 Feb 2021 00:02:48 +0100 Subject: [PATCH 23/64] atomics: bugfixing --- src/currency_core/blockchain_storage.cpp | 19 +++++++++++++++---- src/currency_core/currency_format_utils.cpp | 14 +++++++++++--- src/wallet/wallet2.h | 5 +++++ tests/core_tests/atomic_tests.cpp | 8 +++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 5e21bd02..558997da 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -2475,6 +2475,11 @@ bool blockchain_storage::add_out_to_get_random_outs(COMMAND_RPC_GET_RANDOM_OUTPU << out_ptr->out_no << " more than transaction outputs = " << tx_ptr->tx.vout.size() << ", for tx id = " << out_ptr->tx_id); const transaction& tx = tx_ptr->tx; + if (tx.vout[out_ptr->out_no].target.type() == typeid(txout_htlc)) + { + //silently return false, it's ok + return false; + } CHECK_AND_ASSERT_MES(tx.vout[out_ptr->out_no].target.type() == typeid(txout_to_key), false, "unknown tx out type"); const txout_to_key& otk = boost::get(tx.vout[out_ptr->out_no].target); @@ -3323,7 +3328,7 @@ bool blockchain_storage::push_transaction_to_global_outs_index(const transaction size_t i = 0; BOOST_FOREACH(const auto& ot, tx.vout) { - if (ot.target.type() == typeid(txout_to_key)) + if (ot.target.type() == typeid(txout_to_key) || ot.target.type() == typeid(txout_htlc)) { m_db_outputs.push_back_item(ot.amount, global_output_entry::construct(tx_id, i)); global_indexes.push_back(m_db_outputs.get_item_size(ot.amount) - 1); @@ -3364,8 +3369,14 @@ bool blockchain_storage::get_outs(uint64_t amount, std::list auto tx_ptr = m_db_transactions.find(out_entry_ptr->tx_id); CHECK_AND_ASSERT_MES(tx_ptr, false, "transactions outs global index consistency broken: can't find tx " << out_entry_ptr->tx_id << " in DB, for amount: " << amount << ", gindex: " << i); CHECK_AND_ASSERT_MES(tx_ptr->tx.vout.size() > out_entry_ptr->out_no, false, "transactions outs global index consistency broken: index in tx_outx == " << out_entry_ptr->out_no << " is greather than tx.vout size == " << tx_ptr->tx.vout.size() << ", for amount: " << amount << ", gindex: " << i); - CHECK_AND_ASSERT_MES(tx_ptr->tx.vout[out_entry_ptr->out_no].target.type() == typeid(txout_to_key), false, "transactions outs global index consistency broken: out #" << out_entry_ptr->out_no << " in tx " << out_entry_ptr->tx_id << " has wrong type, for amount: " << amount << ", gindex: " << i); - pkeys.push_back(boost::get(tx_ptr->tx.vout[out_entry_ptr->out_no].target).key); + //CHECK_AND_ASSERT_MES(tx_ptr->tx.vout[out_entry_ptr->out_no].target.type() == typeid(txout_to_key), false, "transactions outs global index consistency broken: out #" << out_entry_ptr->out_no << " in tx " << out_entry_ptr->tx_id << " has wrong type, for amount: " << amount << ", gindex: " << i); + if (tx_ptr->tx.vout[out_entry_ptr->out_no].target.type() == typeid(txout_to_key)) + { + pkeys.push_back(boost::get(tx_ptr->tx.vout[out_entry_ptr->out_no].target).key); + }else if(tx_ptr->tx.vout[out_entry_ptr->out_no].target.type() == typeid(txout_htlc)) + { + pkeys.push_back(boost::get(tx_ptr->tx.vout[out_entry_ptr->out_no].target).pkey_redeem); + } } return true; @@ -3377,7 +3388,7 @@ bool blockchain_storage::pop_transaction_from_global_index(const transaction& tx size_t i = tx.vout.size()-1; BOOST_REVERSE_FOREACH(const auto& ot, tx.vout) { - if (ot.target.type() == typeid(txout_to_key)) + if (ot.target.type() == typeid(txout_to_key) || ot.target.type() == typeid(txout_htlc)) { uint64_t sz= m_db_outputs.get_item_size(ot.amount); CHECK_AND_ASSERT_MES(sz, false, "transactions outs global index: empty index for amount: " << ot.amount); diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 771d6c5e..9c96f225 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -641,7 +641,7 @@ namespace currency tx_out out; out.amount = de.amount; - if (de.htlc_options.htlc_hash != null_hash) + if (de.htlc_options.expiration != 0) { const destination_option_htlc_out& htlc_dest = de.htlc_options; //out htlc @@ -665,7 +665,7 @@ namespace currency result.htlc_origin = generate_origin_for_htlc(htlc, self); //calculate hash - if (htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) + if (!htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK) { htlc.htlc_hash = crypto::sha256_hash(result.htlc_origin.data(), result.htlc_origin.size()); } @@ -679,7 +679,7 @@ namespace currency { htlc.htlc_hash = htlc_dest.htlc_hash; } - + out.target = htlc; } else if (target_keys.size() == 1) { @@ -1679,6 +1679,14 @@ namespace currency if (!check_key(boost::get(out.target).key)) return false; } + else if (out.target.type() == typeid(txout_htlc)) + { + const txout_htlc& htlc = boost::get(out.target); + if (!check_key(htlc.pkey_redeem)) + return false; + if (!check_key(htlc.pkey_refund)) + return false; + } else if (out.target.type() == typeid(txout_multisig)) { const txout_multisig& ms = boost::get(out.target); diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index ce272372..21a2e43b 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -172,6 +172,11 @@ namespace tools //for multisig we don't split splitted_dsts.push_back(de); } + else if (de.htlc_options.expiration != 0) + { + //for htlc we don't do split + splitted_dsts.push_back(de); + } else { currency::decompose_amount_into_digits(de.amount, dust_threshold, diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index d45d5581..f94941e5 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -124,9 +124,11 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto std::string alice_origin; //will be deterministically generated by Alice's A wallet currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - alice_a_wlt_instance->create_htlc_proposal(transfer_amount, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, alice_origin); - - + alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, alice_origin); + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + alice_a_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); return r; } From 7b3082377404cc5fdd0e977f5c512be2c78f3172 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 6 Feb 2021 23:46:53 +0100 Subject: [PATCH 24/64] atomic: bugfixes --- src/currency_core/currency_format_utils.cpp | 16 +++++++++++++++- src/currency_core/tx_semantic_validation.cpp | 6 ++++++ src/wallet/wallet2.cpp | 17 ++++++++++------- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 9c96f225..a14bcdcd 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -657,6 +657,14 @@ namespace currency bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation); CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address"); htlc.pkey_refund = out_eph_public_key; + //add derivation hint for refund address + uint16_t hint = get_derivation_hint(derivation); + if (deriv_cache.count(hint) == 0) + { + tx.extra.push_back(make_tx_derivation_hint_from_uint16(hint)); + deriv_cache.insert(hint); + } + if (htlc_dest.htlc_hash == null_hash) { @@ -2594,6 +2602,12 @@ namespace currency } tei.outs.back().minimum_sigs = otm.minimum_sigs; } + else if (out.target.type() == typeid(txout_htlc)) + { + const txout_htlc& otk = boost::get(out.target); + tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_redeem) + "(htlc_pkey_redeem)"); + tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_refund) + "(htlc_pkey_refund)"); + } ++i; } @@ -2697,7 +2711,7 @@ namespace currency { for (size_t n = 0; n < tx.vout.size(); ++n) { - if (tx.vout[n].target.type() == typeid(txout_to_key)) + if (tx.vout[n].target.type() == typeid(txout_to_key) || tx.vout[n].target.type() == typeid(txout_htlc)) { uint64_t amount = tx.vout[n].amount; gindices[amount] += 1; diff --git a/src/currency_core/tx_semantic_validation.cpp b/src/currency_core/tx_semantic_validation.cpp index 91b700b5..252c60be 100644 --- a/src/currency_core/tx_semantic_validation.cpp +++ b/src/currency_core/tx_semantic_validation.cpp @@ -30,6 +30,12 @@ namespace currency if (!ki.insert(tokey_in.k_image).second) return false; } + else if (in.type() == typeid(txin_htlc)) + { + CHECKED_GET_SPECIFIC_VARIANT(in, const txin_htlc, htlc_in, false); + if (!ki.insert(htlc_in.k_image).second) + return false; + } } return true; } diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 91115f5f..95348f24 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -461,7 +461,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t } else if (tx.vout[o].target.type() == typeid(txout_htlc)) { - THROW_IF_TRUE_WALLET_INT_ERR_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty"); + THROW_IF_FALSE_WALLET_INT_ERR_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty"); if (htlc_info_list.front().hltc_our_out_is_before_expiration) { out_key = boost::get(tx.vout[o].target).pkey_redeem; @@ -502,7 +502,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t else { // normal wallet, calculate and store key images for own outs - currency::keypair in_ephemeral; + currency::keypair in_ephemeral = AUTO_VAL_INIT(in_ephemeral); currency::generate_key_image_helper(m_account.get_keys(), tx_pub_key, o, in_ephemeral, ki); WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(in_ephemeral.pub == out_key, "key_image generated ephemeral public key that does not match with output_key"); } @@ -609,7 +609,14 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t if (max_out_unlock_time < get_tx_unlock_time(tx, o)) max_out_unlock_time = get_tx_unlock_time(tx, o); - WLT_LOG_L0("Received money, transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height); + if (tx.vout[o].target.type() == typeid(txout_to_key)) + { + WLT_LOG_L0("Received money, transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height); + } + else if (tx.vout[o].target.type() == typeid(txout_htlc)) + { + WLT_LOG_L0("Detected HTLC[" << (td.m_flags&WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM ? "REDEEM":"REFUND") << "], transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height); + } } else if (tx.vout[o].target.type() == typeid(txout_multisig)) { @@ -620,10 +627,6 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t tdb.m_internal_output_index = o; WLT_LOG_L0("Received multisig, multisig out id: " << multisig_id << ", amount: " << tdb.amount() << ", with tx: " << get_transaction_hash(tx)); } - else if (tx.vout[o].target.type() == typeid(txout_htlc)) - { - - } } } From 52c5c1250f36aede4139bbab0338b923b1006915 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 8 Feb 2021 21:31:46 +0100 Subject: [PATCH 25/64] atomic: wallet improvements --- .../serialization/keyvalue_serialization.h | 14 ++++++ src/currency_core/currency_format_utils.cpp | 50 +++++++++++++++++-- src/currency_core/currency_format_utils.h | 5 ++ src/wallet/wallet2.cpp | 10 ++-- src/wallet/wallet2.h | 14 ------ src/wallet/wallet_public_structs_defs.h | 4 ++ 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/contrib/epee/include/serialization/keyvalue_serialization.h b/contrib/epee/include/serialization/keyvalue_serialization.h index 88605b78..31a4fb8b 100644 --- a/contrib/epee/include/serialization/keyvalue_serialization.h +++ b/contrib/epee/include/serialization/keyvalue_serialization.h @@ -109,6 +109,20 @@ public: \ + template + struct uint_mask_selector + { + template + inline static bool get_value_of_flag_by_mask(const t_uint& given_flags) + { + return given_flags&mask == 0 ? false : true; + } + }; + + +#define KV_SERIALIZE_EPHEMERAL_BOOL_FROM_FLAG_N(var, mask, val_name) \ + KV_SERIALIZE_EPHEMERAL_N(bool, uint_mask_selector::get_value_of_flag_by_mask, val_name) + diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index a14bcdcd..bda19214 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -994,7 +994,29 @@ namespace currency } } //--------------------------------------------------------------- - uint64_t get_tx_type(const transaction& tx) + void load_wallet_transfer_info_flags(tools::wallet_public::wallet_transfer_info& x) + { + x.is_service = currency::is_service_tx(x.tx); + x.is_mixing = currency::is_mixin_tx(x.tx); + x.is_mining = currency::is_coinbase(x.tx); + if (!x.is_mining) + x.fee = currency::get_tx_fee(x.tx); + else + x.fee = 0; + x.show_sender = currency::is_showing_sender_addres(x.tx); + tx_out htlc_out = AUTO_VAL_INIT(htlc_out); + txin_htlc htlc_in = AUTO_VAL_INIT(htlc_in); + + x.tx_type = get_tx_type_ex(x.tx, htlc_out, htlc_in); + if(x.tx_type == GUI_TX_TYPE_HTLC_DEPOSIT && x.is_income == true) + { + //need to correct amount + x.amount = htlc_out.amount; + } + } + + //--------------------------------------------------------------- + uint64_t get_tx_type_ex(const transaction& tx, tx_out& htlc_out, txin_htlc& htlc_in) { if (is_coinbase(tx)) return GUI_TX_TYPE_COIN_BASE; @@ -1009,7 +1031,7 @@ namespace currency else return GUI_TX_TYPE_NEW_ALIAS; } - + // offers tx_service_attachment a = AUTO_VAL_INIT(a); if (get_type_in_variant_container(tx.attachment, a)) @@ -1024,7 +1046,7 @@ namespace currency return GUI_TX_TYPE_CANCEL_OFFER; } } - + // escrow tx_service_attachment tsa = AUTO_VAL_INIT(tsa); if (bc_services::get_first_service_attachment_by_id(tx, BC_ESCROW_SERVICE_ID, BC_ESCROW_SERVICE_INSTRUCTION_RELEASE_TEMPLATES, tsa)) @@ -1040,9 +1062,31 @@ namespace currency if (bc_services::get_first_service_attachment_by_id(tx, BC_ESCROW_SERVICE_ID, BC_ESCROW_SERVICE_INSTRUCTION_CANCEL_PROPOSAL, tsa)) return GUI_TX_TYPE_ESCROW_CANCEL_PROPOSAL; + for (auto o : tx.vout) + { + if (o.target.type() == typeid(txout_htlc)) + { + htlc_out = o; + return GUI_TX_TYPE_HTLC_DEPOSIT; + } + } + + if (get_type_in_variant_container(tx.vin, htlc_in)) + { + return GUI_TX_TYPE_HTLC_REDEEM; + } + + return GUI_TX_TYPE_NORMAL; } //--------------------------------------------------------------- + uint64_t get_tx_type(const transaction& tx) + { + tx_out htlc_out = AUTO_VAL_INIT(htlc_out); + txin_htlc htlc_in = AUTO_VAL_INIT(htlc_in); + return get_tx_type_ex(tx, htlc_out, htlc_in); + } + //--------------------------------------------------------------- size_t get_multisig_out_index(const std::vector& outs) { size_t n = 0; diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 0c8ba27a..1d8b6b8d 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -28,6 +28,7 @@ #include "currency_format_utils_blocks.h" #include "currency_format_utils_transactions.h" #include "core_runtime_config.h" +#include "wallet/wallet_public_structs_defs.h" // ------ get_tx_type_definition ------------- @@ -44,6 +45,8 @@ #define GUI_TX_TYPE_ESCROW_RELEASE_BURN 10 #define GUI_TX_TYPE_ESCROW_CANCEL_PROPOSAL 11 #define GUI_TX_TYPE_ESCROW_RELEASE_CANCEL 12 +#define GUI_TX_TYPE_HTLC_DEPOSIT 13 +#define GUI_TX_TYPE_HTLC_REDEEM 14 @@ -285,7 +288,9 @@ namespace currency bool decrypt_payload_items(bool is_income, const transaction& tx, const account_keys& acc_keys, std::vector& decrypted_items); void encrypt_attachments(transaction& tx, const account_keys& sender_keys, const account_public_address& destination_addr, const keypair& tx_random_key); bool is_derivation_used_to_encrypt(const transaction& tx, const crypto::key_derivation& derivation); + void load_wallet_transfer_info_flags(tools::wallet_public::wallet_transfer_info& x); uint64_t get_tx_type(const transaction& tx); + uint64_t get_tx_type_ex(const transaction& tx, tx_out& htlc_out, txin_htlc& htlc_in); size_t get_multisig_out_index(const std::vector& outs); size_t get_multisig_in_index(const std::vector& inputs); diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 95348f24..7727d3e5 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1215,13 +1215,9 @@ void wallet2::prepare_wti(wallet_public::wallet_transfer_info& wti, uint64_t hei fill_transfer_details(tx, td, wti.td); wti.unlock_time = get_max_unlock_time_from_receive_indices(tx, td); wti.timestamp = timestamp; - wti.fee = currency::is_coinbase(tx) ? 0:currency::get_tx_fee(tx); wti.tx_blob_size = static_cast(currency::get_object_blobsize(wti.tx)); wti.tx_hash = currency::get_transaction_hash(tx); - wti.is_service = currency::is_service_tx(tx); - wti.is_mixing = currency::is_mixin_tx(tx); - wti.is_mining = currency::is_coinbase(tx); - wti.tx_type = get_tx_type(tx); + load_wallet_transfer_info_flags(wti); bc_services::extract_market_instructions(wti.srv_attachments, tx.attachment); // escrow transactions, which are built with TX_FLAG_SIGNATURE_MODE_SEPARATE flag actually encrypt attachments @@ -3090,10 +3086,11 @@ void wallet2::get_recent_transfers_history(std::vectoris_mining) + if(is_mixin_tx(it->tx)) continue; } trs.push_back(*it); + load_wallet_transfer_info_flags(trs.back()); last_item_index = it - m_transfer_history.rbegin(); if (trs.size() >= count) @@ -4410,6 +4407,7 @@ void wallet2::mark_transfers_as_spent(const std::vector& selected_tran bool wallet2::extract_offers_from_transfer_entry(size_t i, std::unordered_map& offers_local) { //TODO: this code supports only one market(offer) instruction per transaction + load_wallet_transfer_info_flags(m_transfer_history[i]); switch (m_transfer_history[i].tx_type) { case GUI_TX_TYPE_PUSH_OFFER: diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 21a2e43b..f70f16ba 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -1119,20 +1119,6 @@ namespace boost a & x.selected_indicies; a & x.srv_attachments; a & x.unlock_time; - //do not store this items in the file since it's quite easy to restore it from original tx - if (Archive::is_loading::value) - { - - x.is_service = currency::is_service_tx(x.tx); - x.is_mixing = currency::is_mixin_tx(x.tx); - x.is_mining = currency::is_coinbase(x.tx); - if (!x.is_mining) - x.fee = currency::get_tx_fee(x.tx); - else - x.fee = 0; - x.show_sender = currency::is_showing_sender_addres(x.tx); - x.tx_type = get_tx_type(x.tx); - } } template diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 55498c7b..60ae06be 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -84,6 +84,9 @@ namespace wallet_public }; +#define WALLET_TRANSFER_INFO_FLAGS_HTLC_DEPOSIT static_cast(1 << 0) + + struct wallet_transfer_info { uint64_t amount; @@ -106,6 +109,7 @@ namespace wallet_public uint64_t fee; bool show_sender; std::vector contract; + uint16_t extra_flags; //not included in kv serialization map currency::transaction tx; From 82d0e335e6dc3f2e52b1ef2750f58df429724b7c Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 13 Feb 2021 00:57:24 +0100 Subject: [PATCH 26/64] added double spend protection in htlc(great that i've thought about it now), wallet loading optimization --- src/currency_core/blockchain_storage.cpp | 6 +- src/currency_core/blockchain_storage.h | 5 ++ src/currency_core/currency_format_utils.cpp | 6 +- src/currency_core/currency_format_utils.h | 2 +- src/wallet/wallet2.cpp | 12 ++-- tests/core_tests/atomic_tests.cpp | 67 +++++++++++++++++++-- 6 files changed, 78 insertions(+), 20 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 558997da..a04a7c63 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -744,8 +744,7 @@ bool blockchain_storage::purge_transaction_keyimages_from_blockchain(const trans } bool operator()(const txin_htlc& inp) const { - //HTLC TODO - return true; + return this->operator()(static_cast(inp)); } }; @@ -3845,8 +3844,7 @@ namespace currency } bool operator()(const txin_htlc& in) const { - //HTLC TODO - return true; + return this->operator()(static_cast(in)); } bool operator()(const txin_gen& in) const { return true; } bool operator()(const txin_multisig& in) const diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index b20c2965..bb3dd331 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -779,6 +779,11 @@ namespace currency } else if (tx_ptr->tx.vout[n].target.type() == typeid(txout_htlc)) { + //check for spend flags + CHECK_AND_ASSERT_MES(tx_ptr->m_spent_flags.size() > n, false, + "Internal error: tx_ptr->m_spent_flags.size(){" << tx_ptr->m_spent_flags.size() << "} > n{" << n << "}"); + CHECK_AND_ASSERT_MES(tx_ptr->m_spent_flags[n] == false, false, "HTLC out already spent, double spent attempt detected"); + const txout_htlc& htlc_out = boost::get(tx_ptr->tx.vout[n].target); if (htlc_out.expiration > get_current_blockchain_size() - tx_ptr->m_keeper_block_height) { diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index bda19214..2a01891f 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -997,7 +997,7 @@ namespace currency void load_wallet_transfer_info_flags(tools::wallet_public::wallet_transfer_info& x) { x.is_service = currency::is_service_tx(x.tx); - x.is_mixing = currency::is_mixin_tx(x.tx); + x.is_mixing = currency::does_tx_have_only_mixin_inputs(x.tx); x.is_mining = currency::is_coinbase(x.tx); if (!x.is_mining) x.fee = currency::get_tx_fee(x.tx); @@ -1010,7 +1010,7 @@ namespace currency x.tx_type = get_tx_type_ex(x.tx, htlc_out, htlc_in); if(x.tx_type == GUI_TX_TYPE_HTLC_DEPOSIT && x.is_income == true) { - //need to correct amount + //need to override amount x.amount = htlc_out.amount; } } @@ -2366,7 +2366,7 @@ namespace currency return have_type_in_variant_container(tx.attachment) || have_type_in_variant_container(tx.attachment); } //--------------------------------------------------------------- - bool is_mixin_tx(const transaction& tx) + bool does_tx_have_only_mixin_inputs(const transaction& tx) { for (const auto& e : tx.vin) { diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 1d8b6b8d..00240e6c 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -334,7 +334,7 @@ namespace currency bool set_payment_id_to_tx(std::vector& att, const std::string& payment_id); bool add_padding_to_tx(transaction& tx, size_t count); bool is_service_tx(const transaction& tx); - bool is_mixin_tx(const transaction& tx); + bool does_tx_have_only_mixin_inputs(const transaction& tx); bool is_showing_sender_addres(const transaction& tx); uint64_t get_amount_for_zero_pubkeys(const transaction& tx); //std::string get_comment_from_tx(const transaction& tx); diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 7727d3e5..2d78bfe4 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2245,8 +2245,6 @@ void wallet2::detach_blockchain(uint64_t including_height) // skip coinbase txs as they are not expected to go into the pool if (is_coinbase(it->tx)) { - if (!it->is_mining) - WLT_LOG_ERROR("is_mining flag is not consistent for tx " << it ->tx_hash); continue; } @@ -3086,7 +3084,7 @@ void wallet2::get_recent_transfers_history(std::vectortx)) + if(currency::is_coinbase(it->tx)) continue; } trs.push_back(*it); @@ -3424,7 +3422,7 @@ void wallet2::get_unconfirmed_transfers(std::vectortransfer(ctp, ft, true, nullptr); diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index f94941e5..fea9167c 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -99,8 +99,8 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto miner_wlt->transfer(transfer_amount, accunt_alice_blockchain_a.get_public_address()); LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); - miner_wlt->transfer(transfer_amount, accunt_bob_blockchain_a.get_public_address()); - LOG_PRINT_MAGENTA("Transaction sent to Bob A: " << transfer_amount, LOG_LEVEL_0); + miner_wlt->transfer(transfer_amount, accunt_bob_blockchain_b.get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Bob B: " << transfer_amount, LOG_LEVEL_0); bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); @@ -116,19 +116,76 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); bob_a_wlt_instance->refresh(); - bob_a_wlt_instance->refresh(); + bob_b_wlt_instance->refresh(); CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); - CHECK_AND_FORCE_ASSERT_MES(bob_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); std::string alice_origin; //will be deterministically generated by Alice's A wallet currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, alice_origin); + alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, currency::null_hash, alice_origin); r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); bob_a_wlt_instance->refresh(); + bob_b_wlt_instance->refresh(); + + std::list htlcs_alice_a; + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_alice_a, false); + CHECK_AND_ASSERT_MES(htlcs_alice_a.size() == 1, false, "htlcs_alice.size() == 1 failed"); + + std::list htlcs_bob_a; + bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a, false); + CHECK_AND_ASSERT_MES(htlcs_bob_a.size() == 1, false, "htlcs_bob.size() == 1 failed"); + + const wallet_public::htlc_entry_info& hei_bob = *htlcs_bob_a.begin(); + CHECK_AND_ASSERT_MES(hei_bob.is_redeem == true, false, "hei_bob.is_redeem == true failed"); + + + const wallet_public::htlc_entry_info& hei_alice = *htlcs_alice_a.begin(); + CHECK_AND_ASSERT_MES(hei_alice.is_redeem == false, false, "hei_alice.is_redeem == false failed"); + + CHECK_AND_ASSERT_MES(hei_alice.amount == hei_bob.amount + && hei_alice.sha256_hash == hei_bob.sha256_hash + && hei_alice.tx_id == hei_bob.tx_id, false, "hei_alice !=hei_bob "); + + + //std::string bob_origin; + currency::transaction res_bob_tx = AUTO_VAL_INIT(res_tx); + std::string dummy_origin; + bob_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, + alice_b_wlt_instance->get_account().get_public_address(), + 20, + res_tx, hei_bob.sha256_hash, dummy_origin); + + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); + bob_b_wlt_instance->refresh(); + + + std::list htlcs_alice_b; + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false); + CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 1, false, "htlcs_alice_b.size() == 1 failed"); + + std::list htlcs_bob_b; + bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); + CHECK_AND_ASSERT_MES(htlcs_bob_b.size() == 1, false, "htlcs_bob_b.size() == 1 failed"); + + const wallet_public::htlc_entry_info& hei_bob_b = *htlcs_bob_b.begin(); + CHECK_AND_ASSERT_MES(hei_bob_b.is_redeem == true, false, "hei_bob.is_redeem == true failed"); + + + const wallet_public::htlc_entry_info& hei_alice_b = *htlcs_alice_b.begin(); + CHECK_AND_ASSERT_MES(hei_alice_b.is_redeem == false, false, "hei_alice.is_redeem == false failed"); + + CHECK_AND_ASSERT_MES(hei_alice_b.amount == hei_bob_b.amount + && hei_alice_b.sha256_hash == hei_bob_b.sha256_hash + && hei_alice_b.tx_id == hei_bob_b.tx_id, false, "hei_alice !=hei_bob "); return r; } From 06ca6e035da08c259065415d6c8ef9c918d5e51f Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 14 Feb 2021 00:28:39 +0100 Subject: [PATCH 27/64] implemented taking origin from redeemed tx --- src/currency_core/currency_format_utils.h | 27 +++++++++++----- src/wallet/wallet2.cpp | 23 ++++++++++++-- src/wallet/wallet2.h | 14 ++++++++- tests/core_tests/atomic_tests.cpp | 38 +++++++++++++++++++++-- 4 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 00240e6c..872df0fa 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -501,16 +501,29 @@ namespace currency return true; } //--------------------------------------------------------------- + template + extra_t& get_or_add_field_to_variant_vector(container_type& container) + { + for (auto& ev : container) + { + if (ev.type() == typeid(exadd_type_ttra_t)) + return boost::get(ev); + } + container.push_back(add_type_t()); + return boost::get(container.back()); + } + //--------------------------------------------------------------- template extra_t& get_or_add_field_to_extra(std::vector& extra) { - for (auto& ev : extra) - { - if (ev.type() == typeid(extra_t)) - return boost::get(ev); - } - extra.push_back(extra_t()); - return boost::get(extra.back()); +// for (auto& ev : extra) +// { +// if (ev.type() == typeid(extra_t)) +// return boost::get(ev); +// } +// extra.push_back(extra_t()); +// return boost::get(extra.back()); + return get_or_add_field_to_variant_vector(extra); } //--------------------------------------------------------------- template diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 2d78bfe4..5cf45e0e 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -397,7 +397,9 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout.size() > td.m_internal_output_index, "Internal error: wrong index in m_transfers"); WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), "Internal error: wrong index in m_transfers"); //input spend active htlc - m_transfers[it->second].m_spent_height = height; + m_transfers[it->second].m_spent_height = height; + transfer_details_extra_option_htlc_info& tdeohi = get_or_add_field_to_variant_vector(); + tdeohi.origin = in_htlc.hltc_origin; } } i++; @@ -4061,9 +4063,26 @@ void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin) currency::transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(ctp, result_tx, true, nullptr); +} +//---------------------------------------------------------------------------------------------------- +bool wallet2::check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin) +{ + auto it = m_active_htlcs_txid.find(htlc_tx_id); + WLT_THROW_IF_FALSE_WITH_CODE(it != m_active_htlcs_txid.end(), + "htlc not found with tx_id = " << htlc_tx_id, API_RETURN_CODE_NOT_FOUND); - + transfer_details_extra_option_htlc_info htlc_options = AUTO_VAL_INIT(htlc_options); + if (!currency::get_type_in_variant_container(m_transfers[it->second].varian_options, htlc_options)) + { + return false; + } + if (htlc_options.origin.size()) + { + origin = htlc_options.origin; + return true; + } + return false; } //---------------------------------------------------------------------------------------------------- bool wallet2::prepare_tx_sources_for_packing(uint64_t items_to_pack, size_t fake_outputs_count, std::vector& sources, std::vector& selected_indicies, uint64_t& found_money) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index f70f16ba..92313c20 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -397,10 +397,18 @@ namespace tools }; + struct transfer_details_extra_option_htlc_info + { + std::string origin; //this field filled only if htlc had been redeemed + } + + typedef boost::variant transfer_details_extra_options_v; + struct transfer_details : public transfer_details_base { uint64_t m_global_output_index; crypto::key_image m_key_image; //TODO: key_image stored twice :( + transfer_details_extra_options_v varian_options; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(m_global_output_index) @@ -852,6 +860,7 @@ namespace tools currency::transaction &tx, std::string &origin); void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); void redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin); + bool check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin); private: @@ -1044,7 +1053,7 @@ private: BOOST_CLASS_VERSION(tools::wallet2, WALLET_FILE_SERIALIZATION_VERSION) BOOST_CLASS_VERSION(tools::wallet_public::wallet_transfer_info, 9) -BOOST_CLASS_VERSION(tools::wallet2::transfer_details, 2) +BOOST_CLASS_VERSION(tools::wallet2::transfer_details, 3) namespace boost @@ -1074,6 +1083,9 @@ namespace boost a & x.m_global_output_index; a & x.m_key_image; a & static_cast(x); + if (ver < 3) + return; + a & x.varian_options; } template diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index fea9167c..c9eb5395 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -173,20 +173,52 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 1, false, "htlcs_alice_b.size() == 1 failed"); std::list htlcs_bob_b; - bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); + bob_b_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); CHECK_AND_ASSERT_MES(htlcs_bob_b.size() == 1, false, "htlcs_bob_b.size() == 1 failed"); const wallet_public::htlc_entry_info& hei_bob_b = *htlcs_bob_b.begin(); - CHECK_AND_ASSERT_MES(hei_bob_b.is_redeem == true, false, "hei_bob.is_redeem == true failed"); + CHECK_AND_ASSERT_MES(hei_bob_b.is_redeem == true, false, "hei_bob_b.is_redeem == true failed"); const wallet_public::htlc_entry_info& hei_alice_b = *htlcs_alice_b.begin(); - CHECK_AND_ASSERT_MES(hei_alice_b.is_redeem == false, false, "hei_alice.is_redeem == false failed"); + CHECK_AND_ASSERT_MES(hei_alice_b.is_redeem == false, false, "hei_alice_b.is_redeem == false failed"); CHECK_AND_ASSERT_MES(hei_alice_b.amount == hei_bob_b.amount && hei_alice_b.sha256_hash == hei_bob_b.sha256_hash && hei_alice_b.tx_id == hei_bob_b.tx_id, false, "hei_alice !=hei_bob "); + //now alice redeem her contract in blockchain B + alice_b_wlt_instance->redeem_htlc(hei_alice_b.tx_id, alice_origin); + + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); + bob_b_wlt_instance->refresh(); + + //htlcs_alice_b.clear(); + //alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false); + //CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 0, false, "htlcs_alice_b.size() == 1 failed"); + + //htlcs_bob_b.clear(); + //bob_b_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); + //CHECK_AND_ASSERT_MES(htlcs_bob_b.size() == 0, false, "htlcs_bob_b.size() == 1 failed"); + std::string bob_detected_origin; + r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); + CHECK_AND_ASSERT_MES(r, false, "bob_a_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); returned false"); + + CHECK_AND_ASSERT_MES(bob_detected_origin == alice_origin, false, "bob_detected_origin == alice_origin failed"); + bob_b_wlt_instance->redeem_htlc(hei_bob.tx_id, bob_detected_origin); + + + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + bob_a_wlt_instance->refresh(); + bob_b_wlt_instance->refresh(); + return r; } From d8f276b30b4fd7f908c78abe3526b56eeb98799b Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 15 Feb 2021 02:17:59 +0100 Subject: [PATCH 28/64] multiple fixes over atomics --- src/currency_core/blockchain_storage.cpp | 23 +++++---- src/currency_core/currency_format_utils.cpp | 28 +++++++---- src/currency_core/currency_format_utils.h | 10 +++- .../currency_format_utils_transactions.cpp | 6 +-- src/rpc/core_rpc_server_commands_defs.h | 2 + src/wallet/wallet2.cpp | 11 +++-- src/wallet/wallet2.h | 17 +++++-- tests/core_tests/atomic_tests.cpp | 48 +++++++++++-------- 8 files changed, 96 insertions(+), 49 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index a04a7c63..bc20ffda 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -1630,9 +1630,9 @@ bool blockchain_storage::purge_altblock_keyimages_from_big_heap(const block& b, transaction& tx = *tx_ptr; for (size_t n = 0; n < tx.vin.size(); ++n) { - if (tx.vin[n].type() == typeid(txin_to_key)) + if (tx.vin[n].type() == typeid(txin_to_key) || tx.vin[n].type() == typeid(txin_htlc)) { - purge_keyimage_from_big_heap(boost::get(tx.vin[n]).k_image, id); + purge_keyimage_from_big_heap(get_to_key_input_from_txin_v(tx.vin[n]).k_image, id); } } } @@ -4185,13 +4185,12 @@ bool blockchain_storage::have_tx_keyimges_as_spent(const transaction &tx) const // check all tx's inputs for being already spent for (const txin_v& in : tx.vin) { - if (in.type() == typeid(txin_to_key)) + if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc)) { - if (have_tx_keyimg_as_spent(boost::get(in).k_image)) + if (have_tx_keyimg_as_spent(get_to_key_input_from_txin_v(in).k_image)) { return true; - } - + } } else if (in.type() == typeid(txin_multisig)) { @@ -4264,6 +4263,14 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha else if (txin.type() == typeid(txin_htlc)) { const txin_htlc& in_htlc = boost::get(txin); + CHECK_AND_ASSERT_MES(in_htlc.key_offsets.size(), false, "Empty in_to_key.key_offsets for input #" << sig_index << " tx: " << tx_prefix_hash); + TIME_MEASURE_START_PD(tx_check_inputs_loop_kimage_check); + if (have_tx_keyimg_as_spent(in_htlc.k_image)) + { + LOG_ERROR("Key image was already spent in blockchain: " << string_tools::pod_to_hex(in_htlc.k_image) << " for input #" << sig_index << " tx: " << tx_prefix_hash); + return false; + } + TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_kimage_check); if (!check_tx_input(tx, sig_index, in_htlc, tx_prefix_hash, *psig, max_used_block_height)) { LOG_ERROR("Failed to validate multisig input #" << sig_index << " (ms out id: " << obj_to_json_str(in_htlc) << ") in tx: " << tx_prefix_hash); @@ -4763,9 +4770,9 @@ std::shared_ptr blockchain_storage::find_key_imag } for (auto& in : tx_chain_entry->tx.vin) { - if (in.type() == typeid(txin_to_key)) + if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc)) { - if (boost::get(in).k_image == ki) + if (get_to_key_input_from_txin_v(in).k_image == ki) { id_result = get_transaction_hash(tx_chain_entry->tx); return tx_chain_entry; diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 2a01891f..1a780ce7 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1476,8 +1476,8 @@ namespace currency sigs.resize(src_entr.outputs.size()); if (!watch_only_mode) - crypto::generate_ring_signature(tx_hash_for_signature, boost::get(tx.vin[input_index]).k_image, keys_ptrs, in_contexts[in_context_index].in_ephemeral.sec, src_entr.real_output, sigs.data()); - + crypto::generate_ring_signature(tx_hash_for_signature, get_to_key_input_from_txin_v(tx.vin[input_index]).k_image, keys_ptrs, in_contexts[in_context_index].in_ephemeral.sec, src_entr.real_output, sigs.data()); + ss_ring_s << "signatures:" << ENDL; std::for_each(sigs.begin(), sigs.end(), [&ss_ring_s](const crypto::signature& s) { ss_ring_s << s << ENDL; }); ss_ring_s << "prefix_hash: " << tx_prefix_hash << ENDL << "in_ephemeral_key: " << in_contexts[in_context_index].in_ephemeral.sec << ENDL << "real_output: " << src_entr.real_output << ENDL; @@ -1657,8 +1657,8 @@ namespace currency { for(const auto& in : tx.vin) { - CHECK_AND_ASSERT_MES(in.type() == typeid(txin_to_key) || in.type() == typeid(txin_multisig), false, "wrong variant type: " - << in.type().name() << ", expected " << typeid(txin_to_key).name() + CHECK_AND_ASSERT_MES(in.type() == typeid(txin_to_key) || in.type() == typeid(txin_multisig) || in.type() == typeid(txin_htlc), false, "wrong variant type: " + << in.type().name() << ", in transaction id=" << get_transaction_hash(tx)); } @@ -1775,8 +1775,13 @@ namespace currency } else if (in.type() == typeid(txin_multisig)) { - CHECKED_GET_SPECIFIC_VARIANT(in, const txin_multisig, tokey_in, false); - this_amount = tokey_in.amount; + CHECKED_GET_SPECIFIC_VARIANT(in, const txin_multisig, ms_in, false); + this_amount = ms_in.amount; + } + else if (in.type() == typeid(txin_htlc)) + { + CHECKED_GET_SPECIFIC_VARIANT(in, const txin_htlc, htlc_in, false); + this_amount = htlc_in.amount; } else { @@ -2370,7 +2375,7 @@ namespace currency { for (const auto& e : tx.vin) { - if (e.type() != typeid(txin_to_key)) + if (e.type() != typeid(txin_to_key) || e.type() != typeid(txin_multisig) || e.type() != typeid(txin_htlc)) return false; if (boost::get(e).key_offsets.size() < 2) return false; @@ -2668,9 +2673,10 @@ namespace currency { tei.ins.back().amount = 0; } - else if (in.type() == typeid(txin_to_key)) + else if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc)) { - txin_to_key& tk = boost::get(in); + //TODO: add htlc info + const txin_to_key& tk = get_to_key_input_from_txin_v(in); tei.ins.back().amount = tk.amount; tei.ins.back().kimage_or_ms_id = epee::string_tools::pod_to_hex(tk.k_image); std::vector absolute_offsets = relative_output_offsets_to_absolute(tk.key_offsets); @@ -2687,6 +2693,10 @@ namespace currency tei.ins.back().global_indexes.back() = std::numeric_limits::max(); } } + if (in.type() == typeid(txin_htlc)) + { + tei.ins.back().htlc_origin = epee::string_tools::buff_to_hex_nodelimer(boost::get(in).hltc_origin); + } //tk.etc_details -> visualize it may be later } else if (in.type() == typeid(txin_multisig)) diff --git a/src/currency_core/currency_format_utils.h b/src/currency_core/currency_format_utils.h index 872df0fa..42ba6942 100644 --- a/src/currency_core/currency_format_utils.h +++ b/src/currency_core/currency_format_utils.h @@ -371,6 +371,8 @@ namespace currency if (in.type() == typeid(txin_to_key)) return boost::get(in).etc_details; + else if (in.type() == typeid(txin_htlc)) + return boost::get(in).etc_details; else if (in.type() == typeid(txin_multisig)) return boost::get(in).etc_details; else @@ -502,11 +504,11 @@ namespace currency } //--------------------------------------------------------------- template - extra_t& get_or_add_field_to_variant_vector(container_type& container) + add_type_t& get_or_add_field_to_variant_vector(container_type& container) { for (auto& ev : container) { - if (ev.type() == typeid(exadd_type_ttra_t)) + if (ev.type() == typeid(add_type_t)) return boost::get(ev); } container.push_back(add_type_t()); @@ -660,6 +662,8 @@ namespace currency { if (in.type().hash_code() == typeid(txin_to_key).hash_code()) return &boost::get(in).etc_details; + if (in.type().hash_code() == typeid(txin_htlc).hash_code()) + return &boost::get(in).etc_details; if (in.type().hash_code() == typeid(txin_multisig).hash_code()) return &boost::get(in).etc_details; return nullptr; @@ -669,6 +673,8 @@ namespace currency { if (in.type().hash_code() == typeid(txin_to_key).hash_code()) return &boost::get(in).etc_details; + if (in.type().hash_code() == typeid(txin_htlc).hash_code()) + return &boost::get(in).etc_details; if (in.type().hash_code() == typeid(txin_multisig).hash_code()) return &boost::get(in).etc_details; return nullptr; diff --git a/src/currency_core/currency_format_utils_transactions.cpp b/src/currency_core/currency_format_utils_transactions.cpp index 6e84961a..264f604e 100644 --- a/src/currency_core/currency_format_utils_transactions.cpp +++ b/src/currency_core/currency_format_utils_transactions.cpp @@ -262,10 +262,10 @@ namespace currency std::unordered_set ki; BOOST_FOREACH(const auto& in, tx.vin) { - if (in.type() == typeid(txin_to_key)) + if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc)) { - CHECKED_GET_SPECIFIC_VARIANT(in, const txin_to_key, tokey_in, false); - if (!ki.insert(tokey_in.k_image).second) + + if (!ki.insert(get_to_key_input_from_txin_v(in).k_image).second) return false; } } diff --git a/src/rpc/core_rpc_server_commands_defs.h b/src/rpc/core_rpc_server_commands_defs.h index a362a15c..2ef811ac 100644 --- a/src/rpc/core_rpc_server_commands_defs.h +++ b/src/rpc/core_rpc_server_commands_defs.h @@ -1198,10 +1198,12 @@ namespace currency { uint64_t amount; uint64_t multisig_count; + std::string htlc_origin; std::string kimage_or_ms_id; std::vector global_indexes; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) + KV_SERIALIZE(htlc_origin) KV_SERIALIZE(kimage_or_ms_id) KV_SERIALIZE(global_indexes) KV_SERIALIZE(multisig_count) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 5cf45e0e..f89a2f7a 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -398,7 +398,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc), "Internal error: wrong index in m_transfers"); //input spend active htlc m_transfers[it->second].m_spent_height = height; - transfer_details_extra_option_htlc_info& tdeohi = get_or_add_field_to_variant_vector(); + transfer_details_extra_option_htlc_info& tdeohi = get_or_add_field_to_variant_vector(td.varian_options); tdeohi.origin = in_htlc.hltc_origin; } } @@ -4029,7 +4029,7 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ origin = ft.htlc_origin; } //---------------------------------------------------------------------------------------------------- -void wallet2::get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs) +void wallet2::get_list_of_active_htlc(std::list& htlcs, bool only_redeem_txs) { for (auto htlc_entry : m_active_htlcs_txid) { @@ -4059,7 +4059,12 @@ void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin) ctp.htlc_origin = origin; ctp.dsts.resize(1); ctp.dsts.back().addr.push_back(m_account.get_keys().account_address); - ctp.dsts.back().amount = 0; + + auto it = m_active_htlcs_txid.find(htlc_tx_id); + WLT_THROW_IF_FALSE_WITH_CODE(it != m_active_htlcs_txid.end(), + "htlc not found with tx_id = " << htlc_tx_id, API_RETURN_CODE_NOT_FOUND); + + ctp.dsts.back().amount = m_transfers[it->second].amount() - ctp.fee; currency::transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(ctp, result_tx, true, nullptr); diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 92313c20..3d815d69 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -400,7 +400,7 @@ namespace tools struct transfer_details_extra_option_htlc_info { std::string origin; //this field filled only if htlc had been redeemed - } + }; typedef boost::variant transfer_details_extra_options_v; @@ -408,7 +408,7 @@ namespace tools { uint64_t m_global_output_index; crypto::key_image m_key_image; //TODO: key_image stored twice :( - transfer_details_extra_options_v varian_options; + std::vector varian_options; BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(m_global_output_index) @@ -856,9 +856,8 @@ namespace tools we use deterministic origin, if given some particular htlc_hash, then we use this hash, and this means that opener-hash will be given by other side */ - void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, - currency::transaction &tx, std::string &origin); - void get_list_of_active_htlc(bool only_redeem_txs, std::list& htlcs); + void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, const crypto::hash& htlc_hash, std::string &origin); + void get_list_of_active_htlc(std::list& htlcs, bool only_redeem_txs); void redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin); bool check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin); @@ -1077,6 +1076,14 @@ namespace boost a & x.m_spent_height; } + + template + inline void serialize(Archive &a, tools::wallet2::transfer_details_extra_option_htlc_info &x, const boost::serialization::version_type ver) + { + a & x.origin; + } + + template inline void serialize(Archive &a, tools::wallet2::transfer_details &x, const boost::serialization::version_type ver) { diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index c9eb5395..4ecfc044 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -124,7 +124,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto std::string alice_origin; //will be deterministically generated by Alice's A wallet currency::transaction res_tx = AUTO_VAL_INIT(res_tx); - alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 20, res_tx, currency::null_hash, alice_origin); + alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 100, res_tx, currency::null_hash, alice_origin); r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); @@ -132,19 +132,19 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); - std::list htlcs_alice_a; + std::list htlcs_alice_a; alice_a_wlt_instance->get_list_of_active_htlc(htlcs_alice_a, false); CHECK_AND_ASSERT_MES(htlcs_alice_a.size() == 1, false, "htlcs_alice.size() == 1 failed"); - std::list htlcs_bob_a; + std::list htlcs_bob_a; bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a, false); CHECK_AND_ASSERT_MES(htlcs_bob_a.size() == 1, false, "htlcs_bob.size() == 1 failed"); - const wallet_public::htlc_entry_info& hei_bob = *htlcs_bob_a.begin(); + const tools::wallet_public::htlc_entry_info& hei_bob = *htlcs_bob_a.begin(); CHECK_AND_ASSERT_MES(hei_bob.is_redeem == true, false, "hei_bob.is_redeem == true failed"); - const wallet_public::htlc_entry_info& hei_alice = *htlcs_alice_a.begin(); + const tools::wallet_public::htlc_entry_info& hei_alice = *htlcs_alice_a.begin(); CHECK_AND_ASSERT_MES(hei_alice.is_redeem == false, false, "hei_alice.is_redeem == false failed"); CHECK_AND_ASSERT_MES(hei_alice.amount == hei_bob.amount @@ -157,7 +157,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto std::string dummy_origin; bob_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_b_wlt_instance->get_account().get_public_address(), - 20, + 100, res_tx, hei_bob.sha256_hash, dummy_origin); r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); @@ -168,20 +168,25 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_b_wlt_instance->refresh(); - std::list htlcs_alice_b; + std::list htlcs_alice_b; alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false); CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 1, false, "htlcs_alice_b.size() == 1 failed"); - std::list htlcs_bob_b; + std::list htlcs_bob_b; bob_b_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); CHECK_AND_ASSERT_MES(htlcs_bob_b.size() == 1, false, "htlcs_bob_b.size() == 1 failed"); - const wallet_public::htlc_entry_info& hei_bob_b = *htlcs_bob_b.begin(); - CHECK_AND_ASSERT_MES(hei_bob_b.is_redeem == true, false, "hei_bob_b.is_redeem == true failed"); + std::list htlcs_bob_a_2; + bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a_2, false); + CHECK_AND_ASSERT_MES(htlcs_bob_a_2.size() == 1, false, "htlcs_bob_a.size() == 1 failed"); - const wallet_public::htlc_entry_info& hei_alice_b = *htlcs_alice_b.begin(); - CHECK_AND_ASSERT_MES(hei_alice_b.is_redeem == false, false, "hei_alice_b.is_redeem == false failed"); + const tools::wallet_public::htlc_entry_info& hei_bob_b = *htlcs_bob_b.begin(); + CHECK_AND_ASSERT_MES(hei_bob_b.is_redeem == false, false, "hei_bob_b.is_redeem == true failed"); + + + const tools::wallet_public::htlc_entry_info& hei_alice_b = *htlcs_alice_b.begin(); + CHECK_AND_ASSERT_MES(hei_alice_b.is_redeem == true, false, "hei_alice_b.is_redeem == false failed"); CHECK_AND_ASSERT_MES(hei_alice_b.amount == hei_bob_b.amount && hei_alice_b.sha256_hash == hei_bob_b.sha256_hash @@ -197,19 +202,17 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); - //htlcs_alice_b.clear(); - //alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false); - //CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 0, false, "htlcs_alice_b.size() == 1 failed"); + std::list htlcs_bob_a_3; + bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a_3, false); + CHECK_AND_ASSERT_MES(htlcs_bob_a_3.size() == 1, false, "htlcs_bob_a.size() == 1 failed"); + - //htlcs_bob_b.clear(); - //bob_b_wlt_instance->get_list_of_active_htlc(htlcs_bob_b, false); - //CHECK_AND_ASSERT_MES(htlcs_bob_b.size() == 0, false, "htlcs_bob_b.size() == 1 failed"); std::string bob_detected_origin; r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); CHECK_AND_ASSERT_MES(r, false, "bob_a_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); returned false"); CHECK_AND_ASSERT_MES(bob_detected_origin == alice_origin, false, "bob_detected_origin == alice_origin failed"); - bob_b_wlt_instance->redeem_htlc(hei_bob.tx_id, bob_detected_origin); + bob_a_wlt_instance->redeem_htlc(hei_bob.tx_id, bob_detected_origin); r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); @@ -219,6 +222,13 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + //now we have to check if all balances to make sure that atomic swap passed properly + CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == 0, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == 0, false, "Incorrect balance"); + + CHECK_AND_FORCE_ASSERT_MES(alice_b_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(bob_a_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); + return r; } From 367a7866427a65f2419b4aad1a6c2a526fbdd408 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Tue, 16 Feb 2021 17:45:20 +0100 Subject: [PATCH 29/64] fixed last issues with redeem atomics, worked first time ever --- src/wallet/wallet2.cpp | 6 +++++- tests/core_tests/atomic_tests.cpp | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index f89a2f7a..673c3eb4 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2020,7 +2020,11 @@ bool wallet2::scan_unconfirmed_outdate_tx() { auto& t = m_transfers[i]; - if (t.m_flags&WALLET_TRANSFER_DETAIL_FLAG_SPENT && !t.m_spent_height && !static_cast(t.m_flags&WALLET_TRANSFER_DETAIL_FLAG_ESCROW_PROPOSAL_RESERVATION)) + if (t.m_flags&WALLET_TRANSFER_DETAIL_FLAG_SPENT + && !t.m_spent_height + && !static_cast(t.m_flags&WALLET_TRANSFER_DETAIL_FLAG_ESCROW_PROPOSAL_RESERVATION) + && t.m_ptx_wallet_info->m_tx.vout[t.m_internal_output_index].target.type() != typeid(txout_htlc) + ) { //check if there is unconfirmed for this transfer is no longer exist? if (!ki_in_unconfirmed.count((t.m_key_image))) diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 4ecfc044..e556215e 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -226,8 +226,8 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == 0, false, "Incorrect balance"); CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == 0, false, "Incorrect balance"); - CHECK_AND_FORCE_ASSERT_MES(alice_b_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); - CHECK_AND_FORCE_ASSERT_MES(bob_a_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(alice_b_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE*2 , false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(bob_a_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE*2, false, "Incorrect balance"); return r; } From 38f342b62c8b9c461ec337cc3d1e036499f16c92 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 17 Feb 2021 00:40:24 +0100 Subject: [PATCH 30/64] extended test for refund validation(fails so far) --- tests/core_tests/atomic_tests.cpp | 92 +++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index e556215e..2fce9f96 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -70,20 +70,21 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto */ - currency::account_base accunt_alice_blockchain_a; - currency::account_base accunt_alice_blockchain_b; - currency::account_base accunt_bob_blockchain_a; - currency::account_base accunt_bob_blockchain_b; - accunt_alice_blockchain_a.generate(); - accunt_alice_blockchain_b.generate(); - accunt_bob_blockchain_a.generate(); - accunt_bob_blockchain_b.generate(); - LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0); - LOG_PRINT_MAGENTA("Alice [A] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_a.get_public_address()), LOG_LEVEL_0); - LOG_PRINT_MAGENTA("Alice [B] Address: " << currency::get_account_address_as_str(accunt_alice_blockchain_b.get_public_address()), LOG_LEVEL_0); - LOG_PRINT_MAGENTA("Bob [A] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_a.get_public_address()), LOG_LEVEL_0); - LOG_PRINT_MAGENTA("Bob [B] Address: " << currency::get_account_address_as_str(accunt_bob_blockchain_b.get_public_address()), LOG_LEVEL_0); + +#define INIT_RUNTIME_WALLET(instance_name) \ + currency::account_base instance_name##acc_base; \ + instance_name##acc_base.generate(); \ + LOG_PRINT_MAGENTA(": " << currency::get_account_address_as_str(instance_name##acc_base.get_public_address()), LOG_LEVEL_0); \ + std::shared_ptr instance_name = init_playtime_test_wallet(events, c, instance_name##acc_base); + + //create wallet instances and calculate balances + INIT_RUNTIME_WALLET(alice_a_wlt_instance); + INIT_RUNTIME_WALLET(alice_b_wlt_instance); + INIT_RUNTIME_WALLET(bob_a_wlt_instance); + INIT_RUNTIME_WALLET(bob_b_wlt_instance); + INIT_RUNTIME_WALLET(refund_test_instance); + INIT_RUNTIME_WALLET(refund_test_instance2); #define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) @@ -96,42 +97,59 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto CHECK_AND_FORCE_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); uint64_t transfer_amount = AMOUNT_TO_TRANSFER_HTLC + TESTS_DEFAULT_FEE; - miner_wlt->transfer(transfer_amount, accunt_alice_blockchain_a.get_public_address()); + miner_wlt->transfer(transfer_amount, alice_a_wlt_instance->get_account().get_public_address()); LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); - miner_wlt->transfer(transfer_amount, accunt_bob_blockchain_b.get_public_address()); + miner_wlt->transfer(transfer_amount, bob_b_wlt_instance->get_account().get_public_address()); LOG_PRINT_MAGENTA("Transaction sent to Bob B: " << transfer_amount, LOG_LEVEL_0); + miner_wlt->transfer(transfer_amount, refund_test_instance->get_account().get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Refund test: " << transfer_amount, LOG_LEVEL_0); + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); - //create wallet instances and calculate balances - std::shared_ptr alice_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_a); - std::shared_ptr alice_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_alice_blockchain_b); - std::shared_ptr bob_a_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_a); - std::shared_ptr bob_b_wlt_instance = init_playtime_test_wallet(events, c, accunt_bob_blockchain_b); -// std::shared_ptr backend_mock(new wallet_tests_callback_handler()); -// alice_a_wlt_instance->callback(backend_mock); alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + refund_test_instance->refresh(); + refund_test_instance2->refresh(); + CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == transfer_amount, false, "Incorrect balance"); + CHECK_AND_FORCE_ASSERT_MES(refund_test_instance->balance() == transfer_amount, false, "Incorrect balance"); + //============= phase 1 ============= + //----------- preparation ----------- + //a) basic full atomic process test std::string alice_origin; //will be deterministically generated by Alice's A wallet currency::transaction res_tx = AUTO_VAL_INIT(res_tx); alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, bob_a_wlt_instance->get_account().get_public_address(), 100, res_tx, currency::null_hash, alice_origin); + + //b) htlc refund test + std::string refund_origin; //will be deterministically generated by Alice's A wallet + currency::transaction refund_res_tx = AUTO_VAL_INIT(refund_res_tx); + refund_test_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, miner_wlt->get_account().get_public_address(), 18, refund_res_tx, currency::null_hash, refund_origin); + + + //----------- rewinding ----------- r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + refund_test_instance->refresh(); + refund_test_instance2->refresh(); + + + //----------- checks ----------- + //a) basic full atomic process test std::list htlcs_alice_a; alice_a_wlt_instance->get_list_of_active_htlc(htlcs_alice_a, false); CHECK_AND_ASSERT_MES(htlcs_alice_a.size() == 1, false, "htlcs_alice.size() == 1 failed"); @@ -151,23 +169,37 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto && hei_alice.sha256_hash == hei_bob.sha256_hash && hei_alice.tx_id == hei_bob.tx_id, false, "hei_alice !=hei_bob "); + //b) htlc refund test + //money at refund_test_instance should be released as refunded, and balance should get to transfer_amount - TESTS_DEFAULT_FEE + CHECK_AND_ASSERT_MES(refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE failed"); - //std::string bob_origin; + //============= phase 2 ============= + //----------- preparation ----------- + //a) basic full atomic process test currency::transaction res_bob_tx = AUTO_VAL_INIT(res_tx); std::string dummy_origin; bob_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_b_wlt_instance->get_account().get_public_address(), 100, res_tx, hei_bob.sha256_hash, dummy_origin); + + //b) htlc refund test + //try to spend refunded money to make sure it's spendable + refund_test_instance->transfer(transfer_amount - TESTS_DEFAULT_FEE * 2, refund_test_instance2->get_account().get_public_address()); + //----------- rewinding ----------- r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + refund_test_instance->refresh(); + refund_test_instance2->refresh(); + //----------- checks ----------- + //a) basic full atomic process test std::list htlcs_alice_b; alice_b_wlt_instance->get_list_of_active_htlc(htlcs_alice_b, false); CHECK_AND_ASSERT_MES(htlcs_alice_b.size() == 1, false, "htlcs_alice_b.size() == 1 failed"); @@ -191,10 +223,18 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto CHECK_AND_ASSERT_MES(hei_alice_b.amount == hei_bob_b.amount && hei_alice_b.sha256_hash == hei_bob_b.sha256_hash && hei_alice_b.tx_id == hei_bob_b.tx_id, false, "hei_alice !=hei_bob "); + + //b) htlc refund test + CHECK_AND_ASSERT_MES(refund_test_instance->balance() == 0, false, "refund_test_instance->balance() == 0 failed"); + CHECK_AND_ASSERT_MES(refund_test_instance2->balance() == transfer_amount - TESTS_DEFAULT_FEE * 2, false, "refund_test_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE * 2 failed"); + + //============= phase 3 ============= + //----------- preparation ----------- //now alice redeem her contract in blockchain B alice_b_wlt_instance->redeem_htlc(hei_alice_b.tx_id, alice_origin); + //----------- rewinding ----------- r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); @@ -202,11 +242,14 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + //----------- checks ----------- std::list htlcs_bob_a_3; bob_a_wlt_instance->get_list_of_active_htlc(htlcs_bob_a_3, false); CHECK_AND_ASSERT_MES(htlcs_bob_a_3.size() == 1, false, "htlcs_bob_a.size() == 1 failed"); + //============= phase 4 ============= + //----------- preparation ----------- std::string bob_detected_origin; r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); CHECK_AND_ASSERT_MES(r, false, "bob_a_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); returned false"); @@ -214,7 +257,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto CHECK_AND_ASSERT_MES(bob_detected_origin == alice_origin, false, "bob_detected_origin == alice_origin failed"); bob_a_wlt_instance->redeem_htlc(hei_bob.tx_id, bob_detected_origin); - + //----------- rewinding ----------- r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); alice_a_wlt_instance->refresh(); @@ -222,6 +265,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto bob_a_wlt_instance->refresh(); bob_b_wlt_instance->refresh(); + //----------- checks ----------- //now we have to check if all balances to make sure that atomic swap passed properly CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == 0, false, "Incorrect balance"); CHECK_AND_FORCE_ASSERT_MES(bob_b_wlt_instance->balance() == 0, false, "Incorrect balance"); From 7f902f27c1a3b6ee9140169975ff592537fb248a Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 19 Feb 2021 20:18:37 +0100 Subject: [PATCH 31/64] htlc: refund process fixed --- src/wallet/wallet2.cpp | 30 ++++++++++++++++++++++++++---- tests/core_tests/atomic_tests.cpp | 2 +- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 673c3eb4..e6ad07b2 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1317,7 +1317,7 @@ void wallet2::process_htlc_triggers_on_block_added(uint64_t height) auto pair_of_it = m_htlcs.equal_range(height); for (auto it = pair_of_it.first; it != pair_of_it.second; it++) { - auto tr = m_transfers[it->second.transfer_index]; + auto& tr = m_transfers[it->second.transfer_index]; //found contract that supposed to be deactivated and set to innactive if (it->second.is_wallet_owns_redeem) { @@ -4232,7 +4232,21 @@ bool wallet2::prepare_tx_sources(size_t fake_outputs_count, std::vector(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target).key; + if (td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_to_key)) + { + real_oe.second = boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target).key; + } + else if (td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc)) + { + real_oe.second = boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target).pkey_refund; + } + else + { + WLT_THROW_IF_FALSE_WITH_CODE(false, + "Internal error: unexpected type of target: " << td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type().name(), + API_RETURN_CODE_INTERNAL_ERROR); + } + auto interted_it = src.outputs.insert(it_to_insert, real_oe); src.real_out_tx_key = get_tx_pub_key_from_extra(td.m_ptx_wallet_info->m_tx); src.real_output = interted_it - src.outputs.begin(); @@ -4613,8 +4627,16 @@ bool wallet2::is_transfer_able_to_go(const transfer_details& td, uint64_t fake_o if (!td.is_spendable()) return false; - if (!currency::is_mixattr_applicable_for_fake_outs_counter(boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target).mix_attr, fake_outputs_count)) - return false; + if (td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target.type() == typeid(txout_htlc)) + { + if (fake_outputs_count != 0) + return false; + } + else + { + if (!currency::is_mixattr_applicable_for_fake_outs_counter(boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target).mix_attr, fake_outputs_count)) + return false; + } return true; } diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 2fce9f96..3c29da03 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -133,7 +133,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto //b) htlc refund test std::string refund_origin; //will be deterministically generated by Alice's A wallet currency::transaction refund_res_tx = AUTO_VAL_INIT(refund_res_tx); - refund_test_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, miner_wlt->get_account().get_public_address(), 18, refund_res_tx, currency::null_hash, refund_origin); + refund_test_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, miner_wlt->get_account().get_public_address(), 8, refund_res_tx, currency::null_hash, refund_origin); //----------- rewinding ----------- From 71708ca673c7a4094c7a7f94b70edc4b8f775fa1 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 20 Feb 2021 15:54:58 +0100 Subject: [PATCH 32/64] htlc: added test for validating before and after expiration conditions --- src/wallet/wallet2.cpp | 20 ++-- src/wallet/wallet2.h | 4 +- tests/core_tests/atomic_tests.cpp | 136 +++++++++++++++++++++++++++- tests/core_tests/atomic_tests.h | 11 ++- tests/core_tests/chaingen_helpers.h | 5 + tests/core_tests/chaingen_main.cpp | 1 + 6 files changed, 164 insertions(+), 13 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index e6ad07b2..bebc1c62 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1633,7 +1633,7 @@ void wallet2::refresh(std::atomic& stop) refresh(n, f, stop); } //---------------------------------------------------------------------------------------------------- -void wallet2::transfer(uint64_t amount, const currency::account_public_address& acc) +void wallet2::transfer(uint64_t amount, const currency::account_public_address& acc, currency::transaction& result_tx) { std::vector extra; std::vector attachments; @@ -1642,9 +1642,13 @@ void wallet2::transfer(uint64_t amount, const currency::account_public_address& dst.resize(1); dst.back().addr.push_back(acc); dst.back().amount = amount; - transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(dst, 0, 0, TX_DEFAULT_FEE, extra, attachments, tools::detail::ssi_digit, tools::tx_dust_policy(DEFAULT_DUST_THRESHOLD), result_tx); - +} +//---------------------------------------------------------------------------------------------------- +void wallet2::transfer(uint64_t amount, const currency::account_public_address& acc) +{ + transaction result_tx = AUTO_VAL_INIT(result_tx); + this->transfer(amount, acc, result_tx); } //---------------------------------------------------------------------------------------------------- void wallet2::reset_creation_time(uint64_t timestamp) @@ -4054,7 +4058,13 @@ void wallet2::get_list_of_active_htlc(std::list& } } //---------------------------------------------------------------------------------------------------- -void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin) +void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin) +{ + currency::transaction result_tx = AUTO_VAL_INIT(result_tx); + return redeem_htlc(htlc_tx_id, origin, result_tx); +} +//---------------------------------------------------------------------------------------------------- +void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin, currency::transaction& result_tx) { construct_tx_param ctp = get_default_construct_tx_param(); @@ -4069,8 +4079,6 @@ void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin) "htlc not found with tx_id = " << htlc_tx_id, API_RETURN_CODE_NOT_FOUND); ctp.dsts.back().amount = m_transfers[it->second].amount() - ctp.fee; - - currency::transaction result_tx = AUTO_VAL_INIT(result_tx); this->transfer(ctp, result_tx, true, nullptr); } //---------------------------------------------------------------------------------------------------- diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 3d815d69..733bf554 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -549,6 +549,7 @@ namespace tools uint64_t unlocked_balance() const; void transfer(uint64_t amount, const currency::account_public_address& acc); + void transfer(uint64_t amount, const currency::account_public_address& acc, currency::transaction& result_tx); void transfer(const std::vector& dsts, size_t fake_outputs_count, @@ -858,7 +859,8 @@ namespace tools */ void create_htlc_proposal(uint64_t amount, const currency::account_public_address& addr, uint64_t lock_blocks_count, currency::transaction &tx, const crypto::hash& htlc_hash, std::string &origin); void get_list_of_active_htlc(std::list& htlcs, bool only_redeem_txs); - void redeem_htlc(const crypto::hash& htlc_tx_id, std::string origin); + void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin, currency::transaction& result_tx); + void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); bool check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin); private: diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 3c29da03..3ffdc4fc 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -12,6 +12,13 @@ using namespace epee; using namespace crypto; using namespace currency; +#define INIT_RUNTIME_WALLET(instance_name) \ + currency::account_base instance_name##acc_base; \ + instance_name##acc_base.generate(); \ + LOG_PRINT_MAGENTA(": " << currency::get_account_address_as_str(instance_name##acc_base.get_public_address()), LOG_LEVEL_0); \ + std::shared_ptr instance_name = init_playtime_test_wallet(events, c, instance_name##acc_base); + + //============================================================================================================================== struct wallet_tests_callback_handler : public tools::i_wallet2_callback @@ -72,11 +79,6 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0); -#define INIT_RUNTIME_WALLET(instance_name) \ - currency::account_base instance_name##acc_base; \ - instance_name##acc_base.generate(); \ - LOG_PRINT_MAGENTA(": " << currency::get_account_address_as_str(instance_name##acc_base.get_public_address()), LOG_LEVEL_0); \ - std::shared_ptr instance_name = init_playtime_test_wallet(events, c, instance_name##acc_base); //create wallet instances and calculate balances INIT_RUNTIME_WALLET(alice_a_wlt_instance); @@ -278,4 +280,128 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto //------------------------------------------------------------------------------ +//============================================================================== +//============================================================================== +//============================================================================== +atomic_test_wrong_redeem_wrong_refund::atomic_test_wrong_redeem_wrong_refund() +{ + REGISTER_CALLBACK_METHOD(atomic_test_wrong_redeem_wrong_refund, c1); +} + +bool atomic_test_wrong_redeem_wrong_refund::generate(std::vector& events) const +{ + epee::debug::get_set_enable_assert(true, true); + + currency::account_base genesis_acc; + genesis_acc.generate(); + m_mining_accunt.generate(); + + + block blk_0 = AUTO_VAL_INIT(blk_0); + generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); + events.push_back(blk_0); + + REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); + + DO_CALLBACK(events, "c1"); + epee::debug::get_set_enable_assert(true, false); + return true; +} + + + +bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_index, const std::vector& events) +{ + /* + we create two HTLC and then we make attempt to spend it: + 1. spend it as refund when it supposed to be redeem + 2. spend it as redeem when it supposed to be refund + + */ + + LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0); + + //create wallet instances and calculate balances + INIT_RUNTIME_WALLET(alice_a_wlt_instance); + INIT_RUNTIME_WALLET(alice_b_wlt_instance); + INIT_RUNTIME_WALLET(alice_c_wlt_instance); + +#define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) + + std::shared_ptr miner_wlt = init_playtime_test_wallet(events, c, m_mining_accunt); + + size_t blocks_fetched = 0; + bool received_money = false; + std::atomic atomic_false = ATOMIC_VAR_INIT(false); + miner_wlt->refresh(blocks_fetched, received_money, atomic_false); + CHECK_AND_FORCE_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); + + + uint64_t transfer_amount = AMOUNT_TO_TRANSFER_HTLC + TESTS_DEFAULT_FEE; + miner_wlt->transfer(transfer_amount, alice_a_wlt_instance->get_account().get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); + + miner_wlt->transfer(transfer_amount, alice_b_wlt_instance->get_account().get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); + + + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + alice_c_wlt_instance->refresh(); + + std::string alice_origin; //will be deterministically generated by Alice's A wallet + currency::transaction res_tx = AUTO_VAL_INIT(res_tx); + alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_b_wlt_instance->get_account().get_public_address(), 9, res_tx, currency::null_hash, alice_origin); + + std::string alice_origin_b; //will be deterministically generated by Alice's A wallet + currency::transaction res_tx_b = AUTO_VAL_INIT(res_tx_b); + alice_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_c_wlt_instance->get_account().get_public_address(), 12, res_tx, currency::null_hash, alice_origin_b); + + + //forward blockchain to create redeem transaction + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + alice_c_wlt_instance->refresh(); + + CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); + + //create refund tx + currency::transaction refund_tx = AUTO_VAL_INIT(refund_tx); + alice_a_wlt_instance->transfer(transfer_amount - TESTS_DEFAULT_FEE*2, alice_b_wlt_instance->get_account().get_public_address(), refund_tx); + + //create redeem tx + std::list htlcs; + alice_c_wlt_instance->get_list_of_active_htlc(htlcs, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs.size() == 1, false, "Epected htlc not found"); + currency::transaction result_redeem_tx = AUTO_VAL_INIT(result_redeem_tx); + alice_c_wlt_instance->redeem_htlc(htlcs.front().tx_id, alice_origin_b, result_redeem_tx); + + c.get_blockchain_storage().truncate_blockchain(c.get_blockchain_storage().get_current_blockchain_size() - 8); + + //try to submit wrong transaction that do refund before expiration + std::vector txs; + txs.push_back(refund_tx); + r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs); + CHECK_AND_FORCE_ASSERT_MES(!r, false, "Blo k with wrong refund tx accepted"); + + //forward blockchain and try to submit wrong tx that do redeem after expiration + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + std::vector txs2; + txs2.push_back(result_redeem_tx); + r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs2); + CHECK_AND_FORCE_ASSERT_MES(!r, false, "Blo k with wrong refund tx accepted"); + + + return true; +} + +//try to do double spend!!!! (redeem and refund), check if wallet see redeemed tx and don't let it be spent \ No newline at end of file diff --git a/tests/core_tests/atomic_tests.h b/tests/core_tests/atomic_tests.h index 4c8c93fe..74a283a5 100644 --- a/tests/core_tests/atomic_tests.h +++ b/tests/core_tests/atomic_tests.h @@ -14,6 +14,15 @@ struct atomic_simple_test : public wallet_test bool c1(currency::core& c, size_t ev_index, const std::vector& events); private: mutable currency::account_base m_mining_accunt; - +}; + + +struct atomic_test_wrong_redeem_wrong_refund : public wallet_test +{ + atomic_test_wrong_redeem_wrong_refund(); + bool generate(std::vector& events) const; + bool c1(currency::core& c, size_t ev_index, const std::vector& events); +private: + mutable currency::account_base m_mining_accunt; }; diff --git a/tests/core_tests/chaingen_helpers.h b/tests/core_tests/chaingen_helpers.h index 56cf4696..dacef62c 100644 --- a/tests/core_tests/chaingen_helpers.h +++ b/tests/core_tests/chaingen_helpers.h @@ -109,6 +109,11 @@ inline bool mine_next_pow_block_in_playtime_with_given_txs(const currency::accou CHECK_AND_ASSERT_MES(r, false, "find_nonce_for_given_block failed"); currency::block_verification_context bvc = AUTO_VAL_INIT(bvc); + for (auto& tx : txs) + { + crypto::hash tx_id = currency::get_transaction_hash(tx); + bvc.m_onboard_transactions[tx_id] = tx; + } c.handle_incoming_block(t_serializable_object_to_blob(b), bvc); CHECK_AND_NO_ASSERT_MES(!bvc.m_verification_failed && !bvc.m_marked_as_orphaned && !bvc.m_already_exists, false, "block verification context check failed"); diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp index 0c49e02a..54ad220c 100644 --- a/tests/core_tests/chaingen_main.cpp +++ b/tests/core_tests/chaingen_main.cpp @@ -1022,6 +1022,7 @@ int main(int argc, char* argv[]) // atomics GENERATE_AND_PLAY(atomic_simple_test); + GENERATE_AND_PLAY(atomic_test_wrong_redeem_wrong_refund); // GENERATE_AND_PLAY(gen_block_reward); // END OF TESTS */ From ef2f523bf11bdf431a7d6de0df80bc7418f3b91f Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 20 Feb 2021 21:51:35 +0100 Subject: [PATCH 33/64] fixed test for proper creating wrong tx(redeem after expiration) --- tests/core_tests/atomic_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 3ffdc4fc..34081d5c 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -382,7 +382,7 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde CHECK_AND_FORCE_ASSERT_MES(htlcs.size() == 1, false, "Epected htlc not found"); currency::transaction result_redeem_tx = AUTO_VAL_INIT(result_redeem_tx); alice_c_wlt_instance->redeem_htlc(htlcs.front().tx_id, alice_origin_b, result_redeem_tx); - + c.get_tx_pool().clear(); c.get_blockchain_storage().truncate_blockchain(c.get_blockchain_storage().get_current_blockchain_size() - 8); //try to submit wrong transaction that do refund before expiration From 8fe41c8df2637607ce7c9d3b631ba7c751473db3 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 21 Feb 2021 17:56:53 +0100 Subject: [PATCH 34/64] htlc: added tests for double spend(redeem and then refund after) --- tests/core_tests/atomic_tests.cpp | 63 +++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 34081d5c..22ce50c5 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -88,6 +88,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto INIT_RUNTIME_WALLET(refund_test_instance); INIT_RUNTIME_WALLET(refund_test_instance2); + #define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) std::shared_ptr miner_wlt = init_playtime_test_wallet(events, c, m_mining_accunt); @@ -108,6 +109,7 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto miner_wlt->transfer(transfer_amount, refund_test_instance->get_account().get_public_address()); LOG_PRINT_MAGENTA("Transaction sent to Refund test: " << transfer_amount, LOG_LEVEL_0); + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); @@ -137,7 +139,6 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto currency::transaction refund_res_tx = AUTO_VAL_INIT(refund_res_tx); refund_test_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, miner_wlt->get_account().get_public_address(), 8, refund_res_tx, currency::null_hash, refund_origin); - //----------- rewinding ----------- r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); @@ -326,6 +327,9 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde INIT_RUNTIME_WALLET(alice_a_wlt_instance); INIT_RUNTIME_WALLET(alice_b_wlt_instance); INIT_RUNTIME_WALLET(alice_c_wlt_instance); + INIT_RUNTIME_WALLET(double_spend_test_instance_1); + INIT_RUNTIME_WALLET(double_spend_test_instance_2); + #define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) @@ -345,6 +349,11 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde miner_wlt->transfer(transfer_amount, alice_b_wlt_instance->get_account().get_public_address()); LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); + miner_wlt->transfer(transfer_amount, double_spend_test_instance_1->get_account().get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Double spend test: " << transfer_amount, LOG_LEVEL_0); + + + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); @@ -352,6 +361,9 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); alice_c_wlt_instance->refresh(); + double_spend_test_instance_1->refresh(); + double_spend_test_instance_2->refresh(); + std::string alice_origin; //will be deterministically generated by Alice's A wallet currency::transaction res_tx = AUTO_VAL_INIT(res_tx); @@ -361,6 +373,11 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde currency::transaction res_tx_b = AUTO_VAL_INIT(res_tx_b); alice_b_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_c_wlt_instance->get_account().get_public_address(), 12, res_tx, currency::null_hash, alice_origin_b); + //c) htlc double spend test + std::string double_spend_origin; //will be deterministically generated by Alice's A wallet + currency::transaction double_spend_res_tx = AUTO_VAL_INIT(double_spend_res_tx); + double_spend_test_instance_1->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, double_spend_test_instance_2->get_account().get_public_address(), 9, double_spend_res_tx, currency::null_hash, double_spend_origin); + //forward blockchain to create redeem transaction r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); @@ -369,6 +386,7 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); alice_c_wlt_instance->refresh(); + double_spend_test_instance_1->refresh(); CHECK_AND_FORCE_ASSERT_MES(alice_a_wlt_instance->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); @@ -376,32 +394,63 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde currency::transaction refund_tx = AUTO_VAL_INIT(refund_tx); alice_a_wlt_instance->transfer(transfer_amount - TESTS_DEFAULT_FEE*2, alice_b_wlt_instance->get_account().get_public_address(), refund_tx); + //create double spend refund tx + currency::transaction ds_refund_tx = AUTO_VAL_INIT(refund_tx); + CHECK_AND_FORCE_ASSERT_MES(double_spend_test_instance_1->balance() == transfer_amount - TESTS_DEFAULT_FEE, false, "Incorrect balance"); + double_spend_test_instance_1->transfer(transfer_amount - TESTS_DEFAULT_FEE * 2, double_spend_test_instance_2->get_account().get_public_address(), ds_refund_tx); + + //create redeem tx std::list htlcs; alice_c_wlt_instance->get_list_of_active_htlc(htlcs, true); CHECK_AND_FORCE_ASSERT_MES(htlcs.size() == 1, false, "Epected htlc not found"); currency::transaction result_redeem_tx = AUTO_VAL_INIT(result_redeem_tx); alice_c_wlt_instance->redeem_htlc(htlcs.front().tx_id, alice_origin_b, result_redeem_tx); + + //truncte blockchain c.get_tx_pool().clear(); c.get_blockchain_storage().truncate_blockchain(c.get_blockchain_storage().get_current_blockchain_size() - 8); + + + double_spend_test_instance_2->refresh(); + //create redeem tx for ds + std::list htlcs_ds; + double_spend_test_instance_2->get_list_of_active_htlc(htlcs_ds, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_ds.size() == 1, false, "Epected htlc not found"); + currency::transaction result_redeem_tx_ds = AUTO_VAL_INIT(result_redeem_tx_ds); + double_spend_test_instance_2->redeem_htlc(htlcs_ds.front().tx_id, double_spend_origin, result_redeem_tx_ds); + + //try to submit wrong transaction that do refund before expiration std::vector txs; txs.push_back(refund_tx); r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs); - CHECK_AND_FORCE_ASSERT_MES(!r, false, "Blo k with wrong refund tx accepted"); + CHECK_AND_FORCE_ASSERT_MES(!r, false, "Block with wrong refund tx accepted"); + + txs.clear(); + txs.push_back(result_redeem_tx_ds); + r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs); + CHECK_AND_FORCE_ASSERT_MES(r, false, "Block with wrong refund tx accepted"); + //forward blockchain and try to submit wrong tx that do redeem after expiration r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); - std::vector txs2; - txs2.push_back(result_redeem_tx); - r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs2); + //try to put wrong redeem tx (after expiration) + txs.clear(); + txs.push_back(result_redeem_tx); + r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs); CHECK_AND_FORCE_ASSERT_MES(!r, false, "Blo k with wrong refund tx accepted"); + //try to put wrong refund tx (double spend) + txs.clear(); + txs.push_back(ds_refund_tx); + r = mine_next_pow_block_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), c, txs); + CHECK_AND_FORCE_ASSERT_MES(!r, false, "Blo k with wrong refund tx accepted"); + + return true; } - -//try to do double spend!!!! (redeem and refund), check if wallet see redeemed tx and don't let it be spent \ No newline at end of file From f05bd7a3fbbd98e17d56439b6397447238e500a9 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 28 Feb 2021 23:36:38 +0100 Subject: [PATCH 35/64] atomics: tests for altchain switching --- src/wallet/wallet2.cpp | 79 ++++++++++-- src/wallet/wallet2.h | 1 + tests/core_tests/atomic_tests.cpp | 192 ++++++++++++++++++++++++++++ tests/core_tests/atomic_tests.h | 9 ++ tests/core_tests/chaingen_helpers.h | 21 +++ tests/core_tests/chaingen_main.cpp | 1 + 6 files changed, 294 insertions(+), 9 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index bebc1c62..a0aae121 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1302,6 +1302,68 @@ void wallet2::process_unconfirmed(const currency::transaction& tx, std::vector m_htlcs.rbegin()->first) + { + //there is no active htlc that at this height + CHECK_AND_ASSERT_MES(m_active_htlcs.size() == 0, void(), "Self check failed: m_active_htlcs.size() = " << m_active_htlcs.size()); + return; + } + //we have to check if there is a htlc that has to become deactivated + auto pair_of_it = m_htlcs.equal_range(height); + for (auto it = pair_of_it.first; it != pair_of_it.second; it++) + { + auto& tr = m_transfers[it->second.transfer_index]; + //found contract that supposed to be re-activated and set to active + if (it->second.is_wallet_owns_redeem) + { + // this means that wallet received atomic as proposal but never activated it, and now we back to phase where out can be activated + //but we keep spend flag anyway + tr.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_SPENT; //re assure that it has spent flag + tr.m_spent_height = 0; + } + else + { + // this means that wallet created atomic by itself, and second part didn't redeem it, + // so refund money became available, and now we back again to unavailable state + tr.m_flags |= WALLET_TRANSFER_DETAIL_FLAG_SPENT; //reset spent flag + m_found_free_amounts.clear(); //reset free amounts cache + tr.m_spent_height = 0; + } + //re-add to active contracts + auto pair_key = std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index); + auto it_active_htlc = m_active_htlcs.find(pair_key); + if (it_active_htlc != m_active_htlcs.end()) + { + LOG_ERROR("Error at putting back htlc: already exist?"); + it_active_htlc->second = it->second.transfer_index; + + } + else + { + m_active_htlcs[pair_key] = it->second.transfer_index; + m_active_htlcs_txid[tr.tx_hash()] = it->second.transfer_index; + } + + const crypto::hash tx_id = tr.tx_hash(); + auto tx_id_it = m_active_htlcs_txid.find(tx_id); + if (tx_id_it != m_active_htlcs_txid.end()) + { + LOG_ERROR("Error at putting back htlc_txid: already exist?"); + tx_id_it->second = it->second.transfer_index; + + } + else + { + m_active_htlcs_txid[tx_id] = it->second.transfer_index; + } + } +} void wallet2::process_htlc_triggers_on_block_added(uint64_t height) { if (!m_htlcs.size()) @@ -1361,7 +1423,7 @@ void wallet2::process_new_blockchain_entry(const currency::block& b, const curre !(height == m_minimum_height || get_blockchain_current_size() <= 1), error::wallet_internal_error, "current_index=" + std::to_string(height) + ", get_blockchain_current_height()=" + std::to_string(get_blockchain_current_size())); - process_htlc_triggers_on_block_added(height); + //optimization: seeking only for blocks that are not older then the wallet creation time plus 1 day. 1 day is for possible user incorrect time setup @@ -1393,6 +1455,8 @@ void wallet2::process_new_blockchain_entry(const currency::block& b, const curre if (!is_pos_block(b)) m_last_pow_block_h = height; + + process_htlc_triggers_on_block_added(height); m_wcallback->on_new_block(height, b); } //---------------------------------------------------------------------------------------------------- @@ -2213,6 +2277,10 @@ void wallet2::detach_blockchain(uint64_t including_height) } } + for (uint64_t i = get_top_block_height(); i != including_height - 1 && i != 0; i--) + { + unprocess_htlc_triggers_on_block_removed(i); + } size_t blocks_detached = detach_from_block_ids(including_height); //rollback spends @@ -2226,14 +2294,6 @@ void wallet2::detach_blockchain(uint64_t including_height) WLT_LOG_BLUE("Transfer [" << i << "] spent height: " << tr.m_spent_height << " -> 0, reason: detaching blockchain", LOG_LEVEL_1); tr.m_spent_height = 0; //check if it's hltc contract - if (tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target.type() == typeid(txout_htlc) && tr.m_flags & WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM) - { - //only if htlc was spent as a redeem, then we put htlc back as active - const txout_htlc& htlc = boost::get(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].target); - auto amount_gindex_pair = std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index); - m_active_htlcs[amount_gindex_pair] = i; - m_active_htlcs_txid[tr.tx_hash()] = i; - } } } @@ -4035,6 +4095,7 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ finalized_tx ft = AUTO_VAL_INIT(ft); this->transfer(ctp, ft, true, nullptr); origin = ft.htlc_origin; + tx = ft.tx; } //---------------------------------------------------------------------------------------------------- void wallet2::get_list_of_active_htlc(std::list& htlcs, bool only_redeem_txs) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 733bf554..203fd272 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -802,6 +802,7 @@ namespace tools const crypto::hash& bl_id, uint64_t height); void process_htlc_triggers_on_block_added(uint64_t height); + void unprocess_htlc_triggers_on_block_removed(uint64_t height); bool get_pos_entries(currency::COMMAND_RPC_SCAN_POS::request& req); bool build_minted_block(const currency::COMMAND_RPC_SCAN_POS::request& req, const currency::COMMAND_RPC_SCAN_POS::response& rsp, uint64_t new_block_expected_height = UINT64_MAX); bool build_minted_block(const currency::COMMAND_RPC_SCAN_POS::request& req, const currency::COMMAND_RPC_SCAN_POS::response& rsp, const currency::account_public_address& miner_address, uint64_t new_block_expected_height = UINT64_MAX); diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 22ce50c5..fc8fdcc5 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -454,3 +454,195 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde return true; } + + +//------------------------------------------------------------------------------ +//============================================================================== +//============================================================================== +//============================================================================== + +atomic_test_altchain_simple::atomic_test_altchain_simple() +{ + REGISTER_CALLBACK_METHOD(atomic_test_altchain_simple, c1); +} + +bool atomic_test_altchain_simple::generate(std::vector& events) const +{ + epee::debug::get_set_enable_assert(true, true); + + currency::account_base genesis_acc; + genesis_acc.generate(); + m_mining_accunt.generate(); + + + block blk_0 = AUTO_VAL_INIT(blk_0); + generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); + events.push_back(blk_0); + + REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); + + DO_CALLBACK(events, "c1"); + epee::debug::get_set_enable_assert(true, false); + return true; +} + + + +bool atomic_test_altchain_simple::c1(currency::core& c, size_t ev_index, const std::vector& events) +{ + /* + 1. Create HTLC proposal + 2. Do switch to altchain to the point before HTLC proposal creation (core and wallet) + 3. Do redeem in altchain + 4. Do switch to altchain to the point before HTLC redeem (core and wallet) + 5. Do redeem in altchain + 6. Validate correct state of core and wallet + 7. Do redeem in altchain + 8. Validate state + + TODO: play with expirations + TODO: do refund, and then redeem in altchain + */ + + LOG_PRINT_MAGENTA("Mining Address: " << currency::get_account_address_as_str(m_mining_accunt.get_public_address()), LOG_LEVEL_0); + + //create wallet instances and calculate balances + INIT_RUNTIME_WALLET(alice_a_wlt_instance); + INIT_RUNTIME_WALLET(alice_b_wlt_instance); + + +#define AMOUNT_TO_TRANSFER_HTLC (TESTS_DEFAULT_FEE*10) + + std::shared_ptr miner_wlt = init_playtime_test_wallet(events, c, m_mining_accunt); + + size_t blocks_fetched = 0; + bool received_money = false; + std::atomic atomic_false = ATOMIC_VAR_INIT(false); + miner_wlt->refresh(blocks_fetched, received_money, atomic_false); + CHECK_AND_FORCE_ASSERT_MES(c.get_pool_transactions_count() == 0, false, "Incorrect txs count in the pool"); + + + uint64_t transfer_amount = AMOUNT_TO_TRANSFER_HTLC + TESTS_DEFAULT_FEE; + miner_wlt->transfer(transfer_amount, alice_a_wlt_instance->get_account().get_public_address()); + LOG_PRINT_MAGENTA("Transaction sent to Alice A: " << transfer_amount, LOG_LEVEL_0); + + bool r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + std::string alice_origin; //will be deterministically generated by Alice's A wallet + currency::transaction htlc_proposal_tx = AUTO_VAL_INIT(htlc_proposal_tx); + alice_a_wlt_instance->create_htlc_proposal(transfer_amount - TESTS_DEFAULT_FEE, alice_b_wlt_instance->get_account().get_public_address(), 12, htlc_proposal_tx, currency::null_hash, alice_origin); + + crypto::hash split_id = c.get_blockchain_storage().get_top_block_id(); + uint64_t split_height = c.get_blockchain_storage().get_top_block_height(); + + //forward blockchain to create redeem transaction + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, 3); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + //memorize block id at split height before split to make sure split happened + crypto::hash id_first_splited_block = c.get_blockchain_storage().get_block_id_by_height(split_height + 1); + + + //validate state of a + std::list htlcs_a; + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_a, false); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.back().is_redeem == false, false, "type of htlc mismatched"); + + //validate state of b + std::list htlcs_b; + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_b, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.back().is_redeem == true, false, "type of htlc mismatched"); + + //create altchain + std::vector txs; + txs.push_back(htlc_proposal_tx); + r = mine_next_pow_blocks_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), txs, c, 10, split_id); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + //make sure reorganize happened + crypto::hash id_new_chain = c.get_blockchain_storage().get_block_id_by_height(split_height + 1); + CHECK_AND_ASSERT_MES(id_new_chain != id_first_splited_block, false, "Reorganize didn't happen"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + htlcs_a.clear(); + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_a, false); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.back().is_redeem == false, false, "type of htlc mismatched"); + + //validate state of b + htlcs_b.clear(); + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_b, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.back().is_redeem == true, false, "type of htlc mismatched"); + + currency::transaction result_redeem_tx = AUTO_VAL_INIT(result_redeem_tx); + alice_b_wlt_instance->redeem_htlc(htlcs_b.front().tx_id, alice_origin, result_redeem_tx); + + crypto::hash split_id_2 = c.get_blockchain_storage().get_top_block_id(); + uint64_t split_height_2 = c.get_blockchain_storage().get_top_block_height(); + + //forward blockchain + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, 3); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + + //memorize block id at split height before split to make sure split happened + crypto::hash id_first_splited_block_2 = c.get_blockchain_storage().get_block_id_by_height(split_height_2 + 1); + + txs.clear(); + txs.push_back(result_redeem_tx); + r = mine_next_pow_blocks_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), txs, c, 10, split_id_2); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + //make sure reorganize happened + crypto::hash id_new_chain_2 = c.get_blockchain_storage().get_block_id_by_height(split_height_2 + 1); + CHECK_AND_ASSERT_MES(id_new_chain_2 != id_first_splited_block_2, false, "Reorganize didn't happen"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + htlcs_a.clear(); + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_a, false); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.back().is_redeem == false, false, "type of htlc mismatched"); + + //validate state of b + htlcs_b.clear(); + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_b, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.size() == 1, false, "Epected htlc not found"); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.back().is_redeem == true, false, "type of htlc mismatched"); + + //forward blockchain + r = mine_next_pow_blocks_in_playtime(m_mining_accunt.get_public_address(), c, 3); + CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + + alice_a_wlt_instance->refresh(); + alice_b_wlt_instance->refresh(); + + htlcs_a.clear(); + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_a, false); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.size() == 0, false, "htlc contracts count is wrong"); + + //validate state of b + htlcs_b.clear(); + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_b, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.size() == 0, false, "htlc contracts count is wrong"); + + + return true; +} + diff --git a/tests/core_tests/atomic_tests.h b/tests/core_tests/atomic_tests.h index 74a283a5..39caca07 100644 --- a/tests/core_tests/atomic_tests.h +++ b/tests/core_tests/atomic_tests.h @@ -26,3 +26,12 @@ private: mutable currency::account_base m_mining_accunt; }; + +struct atomic_test_altchain_simple : public wallet_test +{ + atomic_test_altchain_simple(); + bool generate(std::vector& events) const; + bool c1(currency::core& c, size_t ev_index, const std::vector& events); +private: + mutable currency::account_base m_mining_accunt; +}; diff --git a/tests/core_tests/chaingen_helpers.h b/tests/core_tests/chaingen_helpers.h index dacef62c..0fc0879e 100644 --- a/tests/core_tests/chaingen_helpers.h +++ b/tests/core_tests/chaingen_helpers.h @@ -137,6 +137,27 @@ inline bool mine_next_pow_blocks_in_playtime(const currency::account_public_addr return true; } +inline bool mine_next_pow_blocks_in_playtime_with_given_txs(const currency::account_public_address& miner_addr, const std::vector& txs, currency::core& c, size_t blocks_count, const crypto::hash& prev_id) +{ + std::vector txs_local = txs; + + crypto::hash prev_id_internal = prev_id; + currency::block prv_block = AUTO_VAL_INIT(prv_block); + bool r = c.get_blockchain_storage().get_block_by_hash(prev_id, prv_block); + CHECK_AND_ASSERT_MES(r, false, "block with id " << prev_id << " not found"); + + for (size_t i = 0; i != blocks_count; i++) + { + if (!mine_next_pow_block_in_playtime_with_given_txs(miner_addr, c, txs_local, prev_id_internal, currency::get_block_height(prv_block)+1, &prv_block)) + return false; + prev_id_internal = get_block_hash(prv_block); + txs_local.clear(); + } + return true; +} + + + // NOTE: stake coins return back to the wallet, newly generated coins go to miner_address (by default they are the same destinations) inline bool mine_next_pos_block_in_playtime_with_wallet(tools::wallet2& w, const currency::account_public_address& miner_address, size_t& pos_entries_count) { diff --git a/tests/core_tests/chaingen_main.cpp b/tests/core_tests/chaingen_main.cpp index 54ad220c..82ecd9c8 100644 --- a/tests/core_tests/chaingen_main.cpp +++ b/tests/core_tests/chaingen_main.cpp @@ -1023,6 +1023,7 @@ int main(int argc, char* argv[]) // atomics GENERATE_AND_PLAY(atomic_simple_test); GENERATE_AND_PLAY(atomic_test_wrong_redeem_wrong_refund); + GENERATE_AND_PLAY(atomic_test_altchain_simple); // GENERATE_AND_PLAY(gen_block_reward); // END OF TESTS */ From 2e18f85c2eb7a15c0b6a8b35d645e46c958c2fd8 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sun, 7 Mar 2021 23:18:19 +0300 Subject: [PATCH 36/64] htlc: atomic_test_altchain_simple --- src/wallet/wallet2.cpp | 22 +++++++++++++++++++++- tests/core_tests/atomic_tests.cpp | 14 +++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index a0aae121..06546edc 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1347,7 +1347,6 @@ void wallet2::unprocess_htlc_triggers_on_block_removed(uint64_t height) else { m_active_htlcs[pair_key] = it->second.transfer_index; - m_active_htlcs_txid[tr.tx_hash()] = it->second.transfer_index; } const crypto::hash tx_id = tr.tx_hash(); @@ -2263,6 +2262,27 @@ void wallet2::detach_blockchain(uint64_t including_height) for (size_t i = i_start; i != m_transfers.size(); i++) { + //check for htlc + if (m_transfers[i].m_ptx_wallet_info->m_tx.vout[m_transfers[i].m_internal_output_index].target.type() == typeid(txout_htlc)) + { + //need to find an entry in m_htlc and remove it + const txout_htlc& hltc = boost::get(m_transfers[i].m_ptx_wallet_info->m_tx.vout[m_transfers[i].m_internal_output_index].target); + uint64_t expiration_height = m_transfers[i].m_ptx_wallet_info->m_block_height + hltc.expiration; + auto pair_of_it = m_htlcs.equal_range(expiration_height); + bool found = false; + for (auto it = pair_of_it.first; it != pair_of_it.second; it++) + { + if (it->second.transfer_index == i) + { + found = true; + m_htlcs.erase(it); + break; + } + } + WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(found, "Internal error: not found record in m_htlcs during rollback"); + } + + if (!(m_transfers[i].m_key_image == null_ki && is_watch_only())) { auto it_ki = m_key_images.find(m_transfers[i].m_key_image); diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index fc8fdcc5..93174070 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -599,15 +599,27 @@ bool atomic_test_altchain_simple::c1(currency::core& c, size_t ev_index, const s alice_a_wlt_instance->refresh(); alice_b_wlt_instance->refresh(); + //here should be zero + htlcs_a.clear(); + alice_a_wlt_instance->get_list_of_active_htlc(htlcs_a, false); + CHECK_AND_FORCE_ASSERT_MES(htlcs_a.size() == 0, false, "Epected htlc not found"); + + //validate state of b + htlcs_b.clear(); + alice_b_wlt_instance->get_list_of_active_htlc(htlcs_b, true); + CHECK_AND_FORCE_ASSERT_MES(htlcs_b.size() == 0, false, "Epected htlc not found"); + //memorize block id at split height before split to make sure split happened crypto::hash id_first_splited_block_2 = c.get_blockchain_storage().get_block_id_by_height(split_height_2 + 1); txs.clear(); txs.push_back(result_redeem_tx); - r = mine_next_pow_blocks_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), txs, c, 10, split_id_2); + r = mine_next_pow_blocks_in_playtime_with_given_txs(m_mining_accunt.get_public_address(), txs, c, 4, split_id_2); CHECK_AND_ASSERT_MES(r, false, "mine_next_pow_blocks_in_playtime failed"); + c.get_blockchain_storage().truncate_blockchain(c.get_top_block_height() - 2); + //make sure reorganize happened crypto::hash id_new_chain_2 = c.get_blockchain_storage().get_block_id_by_height(split_height_2 + 1); CHECK_AND_ASSERT_MES(id_new_chain_2 != id_first_splited_block_2, false, "Reorganize didn't happen"); From f0e41e1980a4455f0d0b2e89f0e0ecebe6915a46 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 8 Mar 2021 02:09:08 +0300 Subject: [PATCH 37/64] htlc: added hardfork2 rules, improved core tests for atomics --- src/currency_core/blockchain_storage.cpp | 69 ++++++++++- src/currency_core/blockchain_storage.h | 2 + src/currency_core/currency_config.h | 4 +- src/currency_core/currency_format_utils.cpp | 1 - src/currency_core/tx_pool.cpp | 8 ++ src/wallet/wallet2.cpp | 6 +- tests/core_tests/atomic_tests.cpp | 131 +++++++++++++------- tests/core_tests/atomic_tests.h | 23 ++-- 8 files changed, 186 insertions(+), 58 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index bc20ffda..624cdfb8 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -3331,6 +3331,11 @@ bool blockchain_storage::push_transaction_to_global_outs_index(const transaction { m_db_outputs.push_back_item(ot.amount, global_output_entry::construct(tx_id, i)); global_indexes.push_back(m_db_outputs.get_item_size(ot.amount) - 1); + if (ot.target.type() == typeid(txout_htlc) && !is_in_hardfork_2_zone()) + { + LOG_ERROR("Error: Transaction with txout_htlc before is_in_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height <<")"); + return false; + } } else if (ot.target.type() == typeid(txout_multisig)) { @@ -3844,6 +3849,11 @@ namespace currency } bool operator()(const txin_htlc& in) const { + if (!m_bcs.is_in_hardfork_2_zone()) + { + LOG_ERROR("Error: Transaction with txin_htlc before is_in_hardfork_2_zone(before height " << m_bcs.get_core_runtime_config().hard_fork_02_starts_after_height << ")"); + return false; + } return this->operator()(static_cast(in)); } bool operator()(const txin_gen& in) const { return true; } @@ -4262,6 +4272,12 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha } else if (txin.type() == typeid(txin_htlc)) { + if (!is_in_hardfork_2_zone()) + { + LOG_ERROR("Error: Transaction with txin_htlc before is_in_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height << ")"); + return false; + } + const txin_htlc& in_htlc = boost::get(txin); CHECK_AND_ASSERT_MES(in_htlc.key_offsets.size(), false, "Empty in_to_key.key_offsets for input #" << sig_index << " tx: " << tx_prefix_hash); TIME_MEASURE_START_PD(tx_check_inputs_loop_kimage_check); @@ -4299,7 +4315,29 @@ bool blockchain_storage::is_tx_spendtime_unlocked(uint64_t unlock_time) const { return currency::is_tx_spendtime_unlocked(unlock_time, get_current_blockchain_size(), m_core_runtime_config.get_core_time()); } - +//------------------------------------------------------------------ +bool blockchain_storage::check_tx_fit_hardfork(const transaction& tx) +{ + //inputs + for (const auto in : tx.vin) + { + if (in.type() == typeid(txin_htlc)) + { + if (!is_in_hardfork_2_zone()) + return false; + } + } + //outputs + for (const auto out : tx.vout) + { + if (out.target.type() == typeid(txout_htlc)) + { + if (!is_in_hardfork_2_zone()) + return false; + } + } + return true; +} //------------------------------------------------------------------ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const { @@ -5686,16 +5724,43 @@ bool blockchain_storage::update_next_comulative_size_limit() return true; } //------------------------------------------------------------------ +bool blockchain_storage::is_in_hardfork_2_zone()const +{ + if (m_db_blocks.size() > m_core_runtime_config.hard_fork_02_starts_after_height) + return true; + return false; +} +//------------------------------------------------------------------ bool blockchain_storage::prevalidate_block(const block& bl) { if (bl.major_version == BLOCK_MAJOR_VERSION_INITAL && get_block_height(bl) <= m_core_runtime_config.hard_fork_01_starts_after_height) return true; - if (bl.major_version != CURRENT_BLOCK_MAJOR_VERSION) + + if (bl.major_version == HF1_BLOCK_MAJOR_VERSION + && get_block_height(bl) > m_core_runtime_config.hard_fork_01_starts_after_height + && get_block_height(bl) <= m_core_runtime_config.hard_fork_02_starts_after_height + ) + { + return true; + } + + if (bl.major_version > CURRENT_BLOCK_MAJOR_VERSION) { LOG_ERROR("prevalidation failed for block " << get_block_hash(bl) << ": major block version " << static_cast(bl.major_version) << " is incorrect, " << CURRENT_BLOCK_MAJOR_VERSION << " is expected" << ENDL << obj_to_json_str(bl)); return false; } + + if (is_in_hardfork_2_zone() && bl.minor_version > CURRENT_BLOCK_MINOR_VERSION) + { + //this means that binary block is compatible, but semantics got changed due to hardfork, daemon should be updated + LOG_PRINT_MAGENTA("Block's MINOR_VERSION is: " << bl.minor_version + << ", while current build supports not bigger then " << CURRENT_BLOCK_MINOR_VERSION + << ", please make sure you using latest version.", LOG_LEVEL_0 + ); + return false; + } + return true; } //------------------------------------------------------------------ diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index bb3dd331..8db91a00 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -470,6 +470,7 @@ namespace currency bool print_tx_outputs_lookup(const crypto::hash& tx_id) const; uint64_t get_last_x_block_height(bool pos)const; bool is_tx_spendtime_unlocked(uint64_t unlock_time)const; + bool check_tx_fit_hardfork(const transaction& tx); private: //-------------- DB containers -------------- @@ -658,6 +659,7 @@ namespace currency bool is_output_allowed_for_input(const output_key_or_htlc_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v)const; bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; + bool is_in_hardfork_2_zone()const; diff --git a/src/currency_core/currency_config.h b/src/currency_core/currency_config.h index 8b576556..22c20002 100644 --- a/src/currency_core/currency_config.h +++ b/src/currency_core/currency_config.h @@ -27,7 +27,9 @@ #define CURRENCY_PUBLIC_AUDITABLE_INTEG_ADDRESS_BASE58_PREFIX 0x8a49 // auditable integrated addresses start with 'aiZX' #define CURRENCY_MINED_MONEY_UNLOCK_WINDOW 10 #define CURRENT_TRANSACTION_VERSION 1 -#define CURRENT_BLOCK_MAJOR_VERSION 1 +#define HF1_BLOCK_MAJOR_VERSION 1 +#define CURRENT_BLOCK_MAJOR_VERSION 2 + #define CURRENT_BLOCK_MINOR_VERSION 0 #define CURRENCY_BLOCK_FUTURE_TIME_LIMIT 60*60*2 #define CURRENCY_POS_BLOCK_FUTURE_TIME_LIMIT 60*20 diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 1a780ce7..1a7fcb72 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1660,7 +1660,6 @@ namespace currency CHECK_AND_ASSERT_MES(in.type() == typeid(txin_to_key) || in.type() == typeid(txin_multisig) || in.type() == typeid(txin_htlc), false, "wrong variant type: " << in.type().name() << ", in transaction id=" << get_transaction_hash(tx)); - } return true; } diff --git a/src/currency_core/tx_pool.cpp b/src/currency_core/tx_pool.cpp index 81ce88b6..d7a5c17d 100644 --- a/src/currency_core/tx_pool.cpp +++ b/src/currency_core/tx_pool.cpp @@ -102,6 +102,14 @@ namespace currency return false; } + if (!m_blockchain.check_tx_fit_hardfork(tx)) + { + // + LOG_ERROR("Transaction " << id <<" doesn't fit current hardfork"); + tvc.m_verification_failed = true; + return false; + } + TIME_MEASURE_START_PD(tx_processing_time); TIME_MEASURE_START_PD(check_inputs_types_supported_time); if(!check_inputs_types_supported(tx)) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 06546edc..13a8a0bf 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -1392,7 +1392,11 @@ void wallet2::process_htlc_triggers_on_block_added(uint64_t height) tr.m_flags &= ~(WALLET_TRANSFER_DETAIL_FLAG_SPENT); //reset spent flag m_found_free_amounts.clear(); //reset free amounts cache tr.m_spent_height = 0; - } + } + + //reset cache + m_found_free_amounts.clear(); + //remove it from active contracts auto it_active_htlc = m_active_htlcs.find(std::make_pair(tr.m_ptx_wallet_info->m_tx.vout[tr.m_internal_output_index].amount, tr.m_global_output_index)); if (it_active_htlc == m_active_htlcs.end()) diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 93174070..472007eb 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -31,12 +31,16 @@ struct wallet_tests_callback_handler : public tools::i_wallet2_callback std::vector all_wtis; }; -atomic_simple_test::atomic_simple_test() +////////////////////////////////////////////////////////////////////////// + + +atomic_base_test::atomic_base_test() { - REGISTER_CALLBACK_METHOD(atomic_simple_test, c1); + REGISTER_CALLBACK_METHOD(atomic_base_test, c1); + REGISTER_CALLBACK_METHOD(atomic_base_test, configure_core); } -bool atomic_simple_test::generate(std::vector& events) const +bool atomic_base_test::generate(std::vector& events) const { epee::debug::get_set_enable_assert(true, true); @@ -48,7 +52,7 @@ bool atomic_simple_test::generate(std::vector& events) const block blk_0 = AUTO_VAL_INIT(blk_0); generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); events.push_back(blk_0); - + DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); DO_CALLBACK(events, "c1"); @@ -56,6 +60,45 @@ bool atomic_simple_test::generate(std::vector& events) const return true; } +bool atomic_base_test::configure_core(currency::core& c, size_t ev_index, const std::vector& events) +{ + currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config(); + pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; //four blocks + pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; //four blocks + pc.hard_fork_01_starts_after_height = 10; + pc.hard_fork_01_starts_after_height = 12; + c.get_blockchain_storage().set_core_runtime_config(pc); + return true; +} +/************************************************************************/ +/* */ +/************************************************************************/ + +atomic_simple_test::atomic_simple_test() +{ + //REGISTER_CALLBACK_METHOD(atomic_simple_test, c1); +} + +// bool atomic_simple_test::generate(std::vector& events) const +// { +// epee::debug::get_set_enable_assert(true, true); +// +// currency::account_base genesis_acc; +// genesis_acc.generate(); +// m_mining_accunt.generate(); +// +// +// block blk_0 = AUTO_VAL_INIT(blk_0); +// generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); +// events.push_back(blk_0); +// +// REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); +// +// DO_CALLBACK(events, "c1"); +// epee::debug::get_set_enable_assert(true, false); +// return true; +// } + bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vector& events) @@ -287,28 +330,28 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto atomic_test_wrong_redeem_wrong_refund::atomic_test_wrong_redeem_wrong_refund() { - REGISTER_CALLBACK_METHOD(atomic_test_wrong_redeem_wrong_refund, c1); + //REGISTER_CALLBACK_METHOD(atomic_test_wrong_redeem_wrong_refund, c1); } -bool atomic_test_wrong_redeem_wrong_refund::generate(std::vector& events) const -{ - epee::debug::get_set_enable_assert(true, true); - - currency::account_base genesis_acc; - genesis_acc.generate(); - m_mining_accunt.generate(); - - - block blk_0 = AUTO_VAL_INIT(blk_0); - generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); - events.push_back(blk_0); - - REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); - - DO_CALLBACK(events, "c1"); - epee::debug::get_set_enable_assert(true, false); - return true; -} +// bool atomic_test_wrong_redeem_wrong_refund::generate(std::vector& events) const +// { +// epee::debug::get_set_enable_assert(true, true); +// +// currency::account_base genesis_acc; +// genesis_acc.generate(); +// m_mining_accunt.generate(); +// +// +// block blk_0 = AUTO_VAL_INIT(blk_0); +// generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); +// events.push_back(blk_0); +// +// REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); +// +// DO_CALLBACK(events, "c1"); +// epee::debug::get_set_enable_assert(true, false); +// return true; +// } @@ -463,28 +506,28 @@ bool atomic_test_wrong_redeem_wrong_refund::c1(currency::core& c, size_t ev_inde atomic_test_altchain_simple::atomic_test_altchain_simple() { - REGISTER_CALLBACK_METHOD(atomic_test_altchain_simple, c1); + //REGISTER_CALLBACK_METHOD(atomic_test_altchain_simple, c1); } -bool atomic_test_altchain_simple::generate(std::vector& events) const -{ - epee::debug::get_set_enable_assert(true, true); - - currency::account_base genesis_acc; - genesis_acc.generate(); - m_mining_accunt.generate(); - - - block blk_0 = AUTO_VAL_INIT(blk_0); - generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); - events.push_back(blk_0); - - REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); - - DO_CALLBACK(events, "c1"); - epee::debug::get_set_enable_assert(true, false); - return true; -} +// bool atomic_test_altchain_simple::generate(std::vector& events) const +// { +// epee::debug::get_set_enable_assert(true, true); +// +// currency::account_base genesis_acc; +// genesis_acc.generate(); +// m_mining_accunt.generate(); +// +// +// block blk_0 = AUTO_VAL_INIT(blk_0); +// generator.construct_genesis_block(blk_0, genesis_acc, test_core_time::get_time()); +// events.push_back(blk_0); +// +// REWIND_BLOCKS_N(events, blk_0r, blk_0, m_mining_accunt, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 5); +// +// DO_CALLBACK(events, "c1"); +// epee::debug::get_set_enable_assert(true, false); +// return true; +// } diff --git a/tests/core_tests/atomic_tests.h b/tests/core_tests/atomic_tests.h index 39caca07..78fa0b14 100644 --- a/tests/core_tests/atomic_tests.h +++ b/tests/core_tests/atomic_tests.h @@ -7,31 +7,36 @@ #include "wallet_tests_basic.h" -struct atomic_simple_test : public wallet_test +struct atomic_base_test : public wallet_test +{ + atomic_base_test(); + bool generate(std::vector& events) const; + virtual bool c1(currency::core& c, size_t ev_index, const std::vector& events)=0; + bool configure_core(currency::core& c, size_t ev_index, const std::vector& events); +private: + mutable currency::account_base m_mining_accunt; +}; + + +struct atomic_simple_test : public atomic_base_test { atomic_simple_test(); - bool generate(std::vector& events) const; bool c1(currency::core& c, size_t ev_index, const std::vector& events); private: - mutable currency::account_base m_mining_accunt; }; -struct atomic_test_wrong_redeem_wrong_refund : public wallet_test +struct atomic_test_wrong_redeem_wrong_refund : public atomic_base_test { atomic_test_wrong_redeem_wrong_refund(); - bool generate(std::vector& events) const; bool c1(currency::core& c, size_t ev_index, const std::vector& events); private: - mutable currency::account_base m_mining_accunt; }; -struct atomic_test_altchain_simple : public wallet_test +struct atomic_test_altchain_simple : public atomic_base_test { atomic_test_altchain_simple(); - bool generate(std::vector& events) const; bool c1(currency::core& c, size_t ev_index, const std::vector& events); private: - mutable currency::account_base m_mining_accunt; }; From 9dac595b83623436b069c042d114282676684e61 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 10 Mar 2021 03:23:54 +0300 Subject: [PATCH 38/64] fixed bug with finalize_transaction params(escrow work was totaly broken) --- src/wallet/wallet2.cpp | 2 ++ tests/core_tests/atomic_tests.cpp | 2 +- tests/core_tests/atomic_tests.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 13a8a0bf..2c44dcd7 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -5054,6 +5054,8 @@ void wallet2::prepare_transaction(construct_tx_param& ctp, currency::finalize_tx void wallet2::finalize_transaction(const currency::finalize_tx_param& ftp, currency::transaction& tx, crypto::secret_key& tx_key, bool broadcast_tx, bool store_tx_secret_key /* = true */) { currency::finalized_tx result = AUTO_VAL_INIT(result); + result.tx = tx; + result.one_time_key = tx_key; finalize_transaction(ftp, result, broadcast_tx, store_tx_secret_key); tx = result.tx; tx_key = result.one_time_key; diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 472007eb..68c7a82f 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -66,7 +66,7 @@ bool atomic_base_test::configure_core(currency::core& c, size_t ev_index, const pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; //four blocks pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; //four blocks pc.hard_fork_01_starts_after_height = 10; - pc.hard_fork_01_starts_after_height = 12; + pc.hard_fork_02_starts_after_height = 12; c.get_blockchain_storage().set_core_runtime_config(pc); return true; } diff --git a/tests/core_tests/atomic_tests.h b/tests/core_tests/atomic_tests.h index 78fa0b14..a04929ed 100644 --- a/tests/core_tests/atomic_tests.h +++ b/tests/core_tests/atomic_tests.h @@ -13,7 +13,7 @@ struct atomic_base_test : public wallet_test bool generate(std::vector& events) const; virtual bool c1(currency::core& c, size_t ev_index, const std::vector& events)=0; bool configure_core(currency::core& c, size_t ev_index, const std::vector& events); -private: +protected: mutable currency::account_base m_mining_accunt; }; From 3962e6153d443c18a624f82f024e245260e3f1e3 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 10 Mar 2021 22:35:34 +0300 Subject: [PATCH 39/64] fixed multiple bugs related to recent refactoring --- src/currency_core/blockchain_storage.cpp | 160 +++++++++++++------- src/currency_core/blockchain_storage.h | 7 +- src/currency_core/currency_format_utils.cpp | 4 +- src/currency_core/tx_pool.cpp | 2 +- 4 files changed, 114 insertions(+), 59 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 624cdfb8..3eae004a 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -3331,9 +3331,9 @@ bool blockchain_storage::push_transaction_to_global_outs_index(const transaction { m_db_outputs.push_back_item(ot.amount, global_output_entry::construct(tx_id, i)); global_indexes.push_back(m_db_outputs.get_item_size(ot.amount) - 1); - if (ot.target.type() == typeid(txout_htlc) && !is_in_hardfork_2_zone()) + if (ot.target.type() == typeid(txout_htlc) && !is_after_hardfork_2_zone()) { - LOG_ERROR("Error: Transaction with txout_htlc before is_in_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height <<")"); + LOG_ERROR("Error: Transaction with txout_htlc before is_after_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height <<")"); return false; } } @@ -3849,9 +3849,9 @@ namespace currency } bool operator()(const txin_htlc& in) const { - if (!m_bcs.is_in_hardfork_2_zone()) + if (!m_bcs.is_after_hardfork_2_zone()) { - LOG_ERROR("Error: Transaction with txin_htlc before is_in_hardfork_2_zone(before height " << m_bcs.get_core_runtime_config().hard_fork_02_starts_after_height << ")"); + LOG_ERROR("Error: Transaction with txin_htlc before is_after_hardfork_2_zone(before height " << m_bcs.get_core_runtime_config().hard_fork_02_starts_after_height << ")"); return false; } return this->operator()(static_cast(in)); @@ -4272,9 +4272,9 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha } else if (txin.type() == typeid(txin_htlc)) { - if (!is_in_hardfork_2_zone()) + if (!is_after_hardfork_2_zone()) { - LOG_ERROR("Error: Transaction with txin_htlc before is_in_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height << ")"); + LOG_ERROR("Error: Transaction with txin_htlc before is_after_hardfork_2_zone(before height " << m_core_runtime_config.hard_fork_02_starts_after_height << ")"); return false; } @@ -4316,29 +4316,6 @@ bool blockchain_storage::is_tx_spendtime_unlocked(uint64_t unlock_time) const return currency::is_tx_spendtime_unlocked(unlock_time, get_current_blockchain_size(), m_core_runtime_config.get_core_time()); } //------------------------------------------------------------------ -bool blockchain_storage::check_tx_fit_hardfork(const transaction& tx) -{ - //inputs - for (const auto in : tx.vin) - { - if (in.type() == typeid(txin_htlc)) - { - if (!is_in_hardfork_2_zone()) - return false; - } - } - //outputs - for (const auto out : tx.vout) - { - if (out.target.type() == typeid(txout_htlc)) - { - if (!is_in_hardfork_2_zone()) - return false; - } - } - return true; -} -//------------------------------------------------------------------ bool blockchain_storage::check_tx_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const { CRITICAL_REGION_LOCAL(m_read_lock); @@ -4942,37 +4919,93 @@ void blockchain_storage::get_pos_mining_estimate(uint64_t amount_coins, estimate_result = current_amount; } //------------------------------------------------------------------ +// bool check_tx_fit_hardfork(const transaction& tx); + +/* +//------------------------------------------------------------------ +bool blockchain_storage::check_tx_fit_hardfork(const transaction& tx) +{ + //inputs + for (const auto in : tx.vin) + { + if (in.type() == typeid(txin_htlc)) + { + if (!is_after_hardfork_2_zone()) + return false; + } + } + //outputs + for (const auto out : tx.vout) + { + if (out.target.type() == typeid(txout_htlc)) + { + if (!is_after_hardfork_2_zone()) + return false; + } + } + return true; +} +*/ +//------------------------------------------------------------------ +bool blockchain_storage::validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id) const +{ + uint64_t block_height = m_db_blocks.size(); + return validate_tx_for_hardfork_specific_terms(tx, tx_id, block_height); +} +//------------------------------------------------------------------ bool blockchain_storage::validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const { - if (block_height <= m_core_runtime_config.hard_fork_01_starts_after_height) - { - // before hardfork 1 - for (const auto& el : tx.extra) - { - // etc_tx_details_unlock_time2 is not allowed in txs in blocks prior to hardfork 1 - CHECK_AND_ASSERT_MES(el.type() != typeid(etc_tx_details_unlock_time2), false, "tx " << tx_id << " contains etc_tx_details_unlock_time2 which is not allowed on height " << block_height); - } + auto is_allowed_before_hardfork2 = [&](const payload_items_v& el) -> bool + { + CHECK_AND_ASSERT_MES(el.type() != typeid(tx_payer), false, "tx " << tx_id << " contains tx_payer which is not allowed on height " << block_height); + CHECK_AND_ASSERT_MES(el.type() != typeid(tx_receiver), false, "tx " << tx_id << " contains tx_receiver which is not allowed on height " << block_height); + CHECK_AND_ASSERT_MES(el.type() != typeid(extra_alias_entry), false, "tx " << tx_id << " contains extra_alias_entry which is not allowed on height " << block_height); return true; + }; + + auto is_allowed_before_hardfork1 = [&](const payload_items_v& el) -> bool + { + CHECK_AND_ASSERT_MES(el.type() != typeid(etc_tx_details_unlock_time2), false, "tx " << tx_id << " contains etc_tx_details_unlock_time2 which is not allowed on height " << block_height); + return true; + }; + + bool var_is_after_hardfork_1_zone = is_after_hardfork_1_zone(block_height); + bool var_is_after_hardfork_2_zone = is_after_hardfork_2_zone(block_height); + + //inputs + for (const auto in : tx.vin) + { + if (in.type() == typeid(txin_htlc)) + { + if (!var_is_after_hardfork_2_zone) + return false; + } + } + //outputs + for (const auto out : tx.vout) + { + if (out.target.type() == typeid(txout_htlc)) + { + if (!var_is_after_hardfork_2_zone) + return false; + } } - if (block_height <= m_core_runtime_config.hard_fork_02_starts_after_height) + //extra + for (const auto el : tx.extra) { - // before hardfork 2 + if (!var_is_after_hardfork_1_zone && !is_allowed_before_hardfork1(el)) + return false; + if (!var_is_after_hardfork_2_zone && !is_allowed_before_hardfork2(el)) + return false; + } - auto check_lambda = [&](const std::vector& container) -> bool - { - for (const auto& el : container) - { - const auto& type = el.type(); - CHECK_AND_ASSERT_MES(type != typeid(tx_payer), false, "tx " << tx_id << " contains tx_payer which is not allowed on height " << block_height); - CHECK_AND_ASSERT_MES(type != typeid(tx_receiver), false, "tx " << tx_id << " contains tx_receiver which is not allowed on height " << block_height); - CHECK_AND_ASSERT_MES(type != typeid(extra_alias_entry), false, "tx " << tx_id << " contains extra_alias_entry which is not allowed on height " << block_height); - } - return true; - }; - - return check_lambda(tx.extra) && check_lambda(tx.attachment); + //attachments + for (const auto el : tx.attachment) + { + if (!var_is_after_hardfork_2_zone && !is_allowed_before_hardfork2(el)) + return false; } @@ -5724,9 +5757,26 @@ bool blockchain_storage::update_next_comulative_size_limit() return true; } //------------------------------------------------------------------ -bool blockchain_storage::is_in_hardfork_2_zone()const +bool blockchain_storage::is_after_hardfork_1_zone()const { - if (m_db_blocks.size() > m_core_runtime_config.hard_fork_02_starts_after_height) + return is_after_hardfork_1_zone(m_db_blocks.size()); +} +//------------------------------------------------------------------ +bool blockchain_storage::is_after_hardfork_1_zone(uint64_t height)const +{ + if (height > m_core_runtime_config.hard_fork_01_starts_after_height) + return true; + return false; +} +//------------------------------------------------------------------ +bool blockchain_storage::is_after_hardfork_2_zone()const +{ + return is_after_hardfork_2_zone(m_db_blocks.size()); +} +//------------------------------------------------------------------ +bool blockchain_storage::is_after_hardfork_2_zone(uint64_t height)const +{ + if (height > m_core_runtime_config.hard_fork_02_starts_after_height) return true; return false; } @@ -5751,7 +5801,7 @@ bool blockchain_storage::prevalidate_block(const block& bl) return false; } - if (is_in_hardfork_2_zone() && bl.minor_version > CURRENT_BLOCK_MINOR_VERSION) + if (is_after_hardfork_2_zone() && bl.minor_version > CURRENT_BLOCK_MINOR_VERSION) { //this means that binary block is compatible, but semantics got changed due to hardfork, daemon should be updated LOG_PRINT_MAGENTA("Block's MINOR_VERSION is: " << bl.minor_version diff --git a/src/currency_core/blockchain_storage.h b/src/currency_core/blockchain_storage.h index 8db91a00..d750fe59 100644 --- a/src/currency_core/blockchain_storage.h +++ b/src/currency_core/blockchain_storage.h @@ -292,6 +292,7 @@ namespace currency bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height, crypto::hash& max_used_block_id)const; bool check_ms_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const transaction& source_tx, size_t out_n) const; bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const; + bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id) const; bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const; bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const; bool check_input_signature(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector& sig, const std::vector& output_keys_ptrs) const; @@ -470,7 +471,6 @@ namespace currency bool print_tx_outputs_lookup(const crypto::hash& tx_id) const; uint64_t get_last_x_block_height(bool pos)const; bool is_tx_spendtime_unlocked(uint64_t unlock_time)const; - bool check_tx_fit_hardfork(const transaction& tx); private: //-------------- DB containers -------------- @@ -659,7 +659,10 @@ namespace currency bool is_output_allowed_for_input(const output_key_or_htlc_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v)const; bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const; - bool is_in_hardfork_2_zone()const; + bool is_after_hardfork_1_zone()const; + bool is_after_hardfork_1_zone(uint64_t height)const; + bool is_after_hardfork_2_zone()const; + bool is_after_hardfork_2_zone(uint64_t height)const; diff --git a/src/currency_core/currency_format_utils.cpp b/src/currency_core/currency_format_utils.cpp index 1a7fcb72..7c014f2a 100644 --- a/src/currency_core/currency_format_utils.cpp +++ b/src/currency_core/currency_format_utils.cpp @@ -1157,12 +1157,14 @@ namespace currency ftp.attachments = attachments; ftp.unlock_time = unlock_time; ftp.crypt_address = crypt_destination_addr; - ftp.expiration_time = 0; + ftp.expiration_time = expiration_time; ftp.tx_outs_attr = tx_outs_attr; ftp.shuffle = shuffle; ftp.flags = flags; finalized_tx ft = AUTO_VAL_INIT(ft); + ft.tx = tx; + ft.one_time_key = one_time_secret_key; bool r = construct_tx(sender_account_keys, ftp, ft); tx = ft.tx; one_time_secret_key = ft.one_time_key; diff --git a/src/currency_core/tx_pool.cpp b/src/currency_core/tx_pool.cpp index d7a5c17d..7a65990e 100644 --- a/src/currency_core/tx_pool.cpp +++ b/src/currency_core/tx_pool.cpp @@ -102,7 +102,7 @@ namespace currency return false; } - if (!m_blockchain.check_tx_fit_hardfork(tx)) + if (!m_blockchain.validate_tx_for_hardfork_specific_terms(tx, id)) { // LOG_ERROR("Transaction " << id <<" doesn't fit current hardfork"); From 74f30a8c5ff6b7b5f3fe1ceb67b396977bb55eed Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 11 Mar 2021 01:34:21 +0300 Subject: [PATCH 40/64] validate_tx_for_hardfork_specific_terms: added old code in comments --- src/currency_core/blockchain_storage.cpp | 33 +++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index 3eae004a..0b511f6b 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -4955,6 +4955,37 @@ bool blockchain_storage::validate_tx_for_hardfork_specific_terms(const transacti //------------------------------------------------------------------ bool blockchain_storage::validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const { +// if (block_height <= m_core_runtime_config.hard_fork_01_starts_after_height) +// { +// // before hardfork 1 +// +// for (const auto& el : tx.extra) +// { +// // etc_tx_details_unlock_time2 is not allowed in txs in blocks prior to hardfork 1 +// CHECK_AND_ASSERT_MES(el.type() != typeid(etc_tx_details_unlock_time2), false, "tx " << tx_id << " contains etc_tx_details_unlock_time2 which is not allowed on height " << block_height); +// } +// return true; +// } +// +// if (block_height <= m_core_runtime_config.hard_fork_02_starts_after_height) +// { +// // before hardfork 2 +// +// auto check_lambda = [&](const std::vector& container) -> bool +// { +// for (const auto& el : container) +// { +// const auto& type = el.type(); +// CHECK_AND_ASSERT_MES(type != typeid(tx_payer), false, "tx " << tx_id << " contains tx_payer which is not allowed on height " << block_height); +// CHECK_AND_ASSERT_MES(type != typeid(tx_receiver), false, "tx " << tx_id << " contains tx_receiver which is not allowed on height " << block_height); +// CHECK_AND_ASSERT_MES(type != typeid(extra_alias_entry), false, "tx " << tx_id << " contains extra_alias_entry which is not allowed on height " << block_height); +// } +// return true; +// }; +// +// return check_lambda(tx.extra) && check_lambda(tx.attachment); +// } + auto is_allowed_before_hardfork2 = [&](const payload_items_v& el) -> bool { @@ -5007,7 +5038,7 @@ bool blockchain_storage::validate_tx_for_hardfork_specific_terms(const transacti if (!var_is_after_hardfork_2_zone && !is_allowed_before_hardfork2(el)) return false; } - + return true; } From 4bf6a5e2d108454764dadd62797aa23966a8ea06 Mon Sep 17 00:00:00 2001 From: sowle Date: Thu, 11 Mar 2021 06:48:43 +0300 Subject: [PATCH 41/64] compilation fixes --- src/CMakeLists.txt | 2 +- src/crypto/RIPEMD160_helper.cpp | 4 ++-- src/stratum/stratum_helpers.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4a794344..ef5ce6e3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,7 +55,7 @@ ENDMACRO(ENABLE_SHARED_PCH_EXECUTABLE) file(GLOB_RECURSE PCH pch/*) file(GLOB_RECURSE COMMON common/*) -file(GLOB CRYPTO crypto/*.*) +file(GLOB_RECURSE CRYPTO crypto/*) file(GLOB_RECURSE CURRENCY_CORE currency_core/*) file(GLOB_RECURSE CURRENCY_PROTOCOL currency_protocol/*) file(GLOB_RECURSE DAEMON daemon/*) diff --git a/src/crypto/RIPEMD160_helper.cpp b/src/crypto/RIPEMD160_helper.cpp index 68419195..1386540a 100644 --- a/src/crypto/RIPEMD160_helper.cpp +++ b/src/crypto/RIPEMD160_helper.cpp @@ -6,9 +6,9 @@ #include "RIPEMD160_helper.h" #include "auto_val_init.h" -//extern "C" { +extern "C" { #include "RIPEMD160.h" -//} +} #define RMDsize 160 diff --git a/src/stratum/stratum_helpers.h b/src/stratum/stratum_helpers.h index fc4e680a..6eacd377 100644 --- a/src/stratum/stratum_helpers.h +++ b/src/stratum/stratum_helpers.h @@ -245,4 +245,4 @@ namespace stratum } // namespace stratum -inline std::ostream &operator <<(std::ostream &o, const ethash_hash256 &v) { return print256(o, v); } +inline std::ostream &operator <<(std::ostream &o, const ethash_hash256 &v) { return print_t(o, v); } From e3dfa2ca67b9d53c22c1598b1e62b6cc046d0953 Mon Sep 17 00:00:00 2001 From: sowle Date: Thu, 11 Mar 2021 19:43:39 +0300 Subject: [PATCH 42/64] coretests: many tests fixed due to more strict rule for extra_alias_entry and HF2 --- tests/core_tests/alias_tests.cpp | 171 +++++++++++++++++------------ tests/core_tests/chaingen.cpp | 10 ++ tests/core_tests/chaingen.h | 4 + tests/core_tests/tx_validation.cpp | 18 +++ tests/core_tests/tx_validation.h | 2 + tests/core_tests/wallet_tests.cpp | 9 ++ 6 files changed, 146 insertions(+), 68 deletions(-) diff --git a/tests/core_tests/alias_tests.cpp b/tests/core_tests/alias_tests.cpp index 3aea2943..ffc16bff 100644 --- a/tests/core_tests/alias_tests.cpp +++ b/tests/core_tests/alias_tests.cpp @@ -93,52 +93,69 @@ gen_alias_tests::gen_alias_tests() REGISTER_CALLBACK_METHOD(gen_alias_tests, check_height_not_changed); REGISTER_CALLBACK_METHOD(gen_alias_tests, check_height_changed); REGISTER_CALLBACK_METHOD(gen_alias_tests, check_too_many_aliases_registration); + + //REGISTER_CALLBACK_METHOD(gen_alias_tests, configure_core); + m_hardfork_01_height = 0; + m_hardfork_02_height = 0; } +/*bool gen_alias_tests::configure_core(currency::core& c, size_t ev_index, const std::vector& events) +{ + currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config(); + pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; + pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; + pc.hard_fork_01_starts_after_height = m_hardfork_01_height; + pc.hard_fork_02_starts_after_height = m_hardfork_02_height; + c.get_blockchain_storage().set_core_runtime_config(pc); + return true; +}*/ + bool gen_alias_tests::generate(std::vector& events) const { GENERATE_ACCOUNT(preminer_account); GENERATE_ACCOUNT(miner_account); // event index m_accounts.push_back(miner_account); MAKE_GENESIS_BLOCK(events, blk_0, preminer_account, test_core_time::get_time()); // 0 - MAKE_ACCOUNT(events, first_acc); // 1 - MAKE_ACCOUNT(events, second_acc); // 2 - MAKE_ACCOUNT(events, third_acc); // 3 - REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 2N+3 (N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW) + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); // 1 + MAKE_ACCOUNT(events, first_acc); // 2 + MAKE_ACCOUNT(events, second_acc); // 3 + MAKE_ACCOUNT(events, third_acc); // 4 + REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 2N+4 (N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW) size_t small_outs_to_transfer = MAX_ALIAS_PER_BLOCK + 10; transaction tx_1 = AUTO_VAL_INIT(tx_1); bool r = construct_tx_with_many_outputs(events, blk_0, preminer_account.get_keys(), miner_account.get_public_address(), small_outs_to_transfer * TESTS_DEFAULT_FEE * 11, small_outs_to_transfer, TESTS_DEFAULT_FEE, tx_1); CHECK_AND_ASSERT_MES(r, false, "construct_tx_with_many_outputs failed"); - events.push_back(tx_1); // 4N+4 - MAKE_NEXT_BLOCK_TX1(events, blk_a, blk_0r, miner_account, tx_1); // 4N+5 + events.push_back(tx_1); // 2N+5 + MAKE_NEXT_BLOCK_TX1(events, blk_a, blk_0r, miner_account, tx_1); // 2N+6 - REWIND_BLOCKS_N_WITH_TIME(events, blk_ar, blk_a, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 4N+5 + REWIND_BLOCKS_N_WITH_TIME(events, blk_ar, blk_a, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 4N+6 - MAKE_NEXT_BLOCK(events, blk_1, blk_ar, miner_account); // 4N+6 + MAKE_NEXT_BLOCK(events, blk_1, blk_ar, miner_account); // 4N+7 currency::extra_alias_entry ai = AUTO_VAL_INIT(ai); ai.m_alias = FIRST_ALIAS_NAME; ai.m_text_comment = "first@first.com blablabla"; ai.m_address = first_acc.get_keys().account_address; - MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_2, blk_1, miner_account, ai); // 4N+7,4N+8 - DO_CALLBACK(events, "check_first_alias_added"); // 4N+9 + MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_2, blk_1, miner_account, ai); // 4N+8,4N+9 + DO_CALLBACK(events, "check_first_alias_added"); // 4N+10 ai.m_alias = SECOND_ALIAS_NAME; ai.m_text_comment = "second@second.com blablabla"; ai.m_address = second_acc.get_keys().account_address; - MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_3, blk_2, miner_account, ai); // 4N+10,4N+11 - DO_CALLBACK(events, "check_second_alias_added"); // 4N+12 + MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_3, blk_2, miner_account, ai); // 4N+11,4N+12 + DO_CALLBACK(events, "check_second_alias_added"); // 4N+13 //check split with remove alias - MAKE_NEXT_BLOCK(events, blk_2_split, blk_1, miner_account); // 4N+13 - MAKE_NEXT_BLOCK(events, blk_3_split, blk_2_split, miner_account); // 4N+14 - MAKE_NEXT_BLOCK(events, blk_4_split, blk_3_split, miner_account); // 4N+15 - DO_CALLBACK(events, "check_aliases_removed"); // 4N+16 + MAKE_NEXT_BLOCK(events, blk_2_split, blk_1, miner_account); // 4N+14 + MAKE_NEXT_BLOCK(events, blk_3_split, blk_2_split, miner_account); // 4N+15 + MAKE_NEXT_BLOCK(events, blk_4_split, blk_3_split, miner_account); // 4N+16 + DO_CALLBACK(events, "check_aliases_removed"); // 4N+17 //make back split to original and try update alias - MAKE_NEXT_BLOCK(events, blk_4, blk_3, miner_account); // 4N+17 - MAKE_NEXT_BLOCK(events, blk_5, blk_4, miner_account); // 4N+18 - DO_CALLBACK(events, "check_splitted_back"); // 4N+19 + MAKE_NEXT_BLOCK(events, blk_4, blk_3, miner_account); // 4N+18 + MAKE_NEXT_BLOCK(events, blk_5, blk_4, miner_account); // 4N+19 + DO_CALLBACK(events, "check_splitted_back"); // 4N+20 currency::extra_alias_entry ai_upd = AUTO_VAL_INIT(ai_upd); @@ -147,8 +164,8 @@ bool gen_alias_tests::generate(std::vector& events) const ai_upd.m_text_comment = "changed alias haha"; r = sign_extra_alias_entry(ai_upd, first_acc.get_keys().account_address.spend_public_key, first_acc.get_keys().spend_secret_key); CHECK_AND_ASSERT_MES(r, false, "failed to sign update_alias"); - MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_6, blk_5, miner_account, ai_upd); // 4N+20,N+21 - DO_CALLBACK(events, "check_alias_changed"); // 4N+22 + MAKE_BLOCK_WITH_ALIAS_INFO_IN_TX(events, blk_6, blk_5, miner_account, ai_upd); // 4N+21,N+22 + DO_CALLBACK(events, "check_alias_changed"); // 4N+23 //try to make fake alias change currency::extra_alias_entry ai_upd_fake = AUTO_VAL_INIT(ai_upd_fake); @@ -159,74 +176,74 @@ bool gen_alias_tests::generate(std::vector& events) const CHECK_AND_ASSERT_MES(r, false, "failed to sign update_alias"); ai_upd_fake.m_text_comment = "changed alias haha - fake"; // changed text, signature became wrong std::list tx_list; - r = put_alias_via_tx_to_list(events, tx_list, blk_6, miner_account, ai_upd_fake, generator); // 4N+23 + r = put_alias_via_tx_to_list(events, tx_list, blk_6, miner_account, ai_upd_fake, generator); // 4N+24 CHECK_AND_ASSERT_MES(r, false, "put_alias_via_tx_to_list"); - DO_CALLBACK(events, "mark_invalid_block"); // 4N+24 + DO_CALLBACK(events, "mark_invalid_block"); // 4N+25 // EXPECTED: blk_7 is rejected as containing incorrect tx (wrong alias sig) - MAKE_NEXT_BLOCK_TX_LIST(events, blk_7, blk_6, miner_account, tx_list); // 4N+25 - DO_CALLBACK(events, "check_alias_not_changed"); // 4N+26 + MAKE_NEXT_BLOCK_TX_LIST(events, blk_7, blk_6, miner_account, tx_list); // 4N+26 + DO_CALLBACK(events, "check_alias_not_changed"); // 4N+27 account_base someone; someone.generate(); block blk_8; - r = put_next_block_with_alias_in_tx(events, blk_8, blk_6, THIRD_ALIAS_NAME, miner_account, someone, generator); // 4N+27,4N+28 + r = put_next_block_with_alias_in_tx(events, blk_8, blk_6, THIRD_ALIAS_NAME, miner_account, someone, generator); // 4N+28,4N+29 CHECK_AND_ASSERT_MES(r, false, "put_next_block_with_alias_in_tx failed"); - MAKE_NEXT_BLOCK(events, blk_9, blk_8, miner_account); // 4N+29 - DO_CALLBACK(events, "check_alias_added_in_tx"); // 4N+30 + MAKE_NEXT_BLOCK(events, blk_9, blk_8, miner_account); // 4N+30 + DO_CALLBACK(events, "check_alias_added_in_tx"); // 4N+31 // lets try to register same name ai = AUTO_VAL_INIT(ai); ai.m_alias = THIRD_ALIAS_NAME; ai.m_address = miner_account.get_public_address(); tx_list.clear(); - DO_CALLBACK(events, "mark_invalid_tx"); // 4N+31 + DO_CALLBACK(events, "mark_invalid_tx"); // 4N+32 // EXPECTED: tx is rejected, because alias is already registered - r = put_alias_via_tx_to_list(events, tx_list, blk_9, miner_account, ai, generator); // 4N+32 + r = put_alias_via_tx_to_list(events, tx_list, blk_9, miner_account, ai, generator); // 4N+33 CHECK_AND_ASSERT_MES(r, false, "put_alias_via_tx_to_list"); - DO_CALLBACK(events, "check_alias_not_changed"); // 4N+33 + DO_CALLBACK(events, "check_alias_not_changed"); // 4N+34 - DO_CALLBACK(events, "check_height_not_changed"); // 4N+34 + DO_CALLBACK(events, "check_height_not_changed"); // 4N+35 //check notmal tx in tx pool - MAKE_TX_LIST_START(events, txs_0, miner_account, miner_account, MK_TEST_COINS(1), blk_9); // 4N+35 + MAKE_TX_LIST_START(events, txs_0, miner_account, miner_account, MK_TEST_COINS(1), blk_9); // 4N+36 - if (!put_alias_via_tx_to_list(events, txs_0, blk_9, FOURTH_NAME, miner_account, miner_account, generator)) // 4N+36 + if (!put_alias_via_tx_to_list(events, txs_0, blk_9, FOURTH_NAME, miner_account, miner_account, generator)) // 4N+37 return false; someone.generate(); - if (!put_alias_via_tx_to_list(events, txs_0, blk_9, FIFTH_NAME, miner_account, someone, generator)) // 4N+37 + if (!put_alias_via_tx_to_list(events, txs_0, blk_9, FIFTH_NAME, miner_account, someone, generator)) // 4N+38 return false; - MAKE_NEXT_BLOCK_TX_LIST(events, blk_13, blk_9, miner_account, txs_0); // 4N+38 - DO_CALLBACK(events, "check_height_changed"); // 4N+39 + MAKE_NEXT_BLOCK_TX_LIST(events, blk_13, blk_9, miner_account, txs_0); // 4N+39 + DO_CALLBACK(events, "check_height_changed"); // 4N+40 // //check duplicate tx in tx pool - MAKE_TX_LIST_START(events, txs_2, miner_account, miner_account, MK_TEST_COINS(1), blk_13); // 4N+40 + MAKE_TX_LIST_START(events, txs_2, miner_account, miner_account, MK_TEST_COINS(1), blk_13); // 4N+41 someone.generate(); - if (!put_alias_via_tx_to_list(events, txs_2, blk_13, SIX_NAME, miner_account, someone, generator)) // 4N+41 + if (!put_alias_via_tx_to_list(events, txs_2, blk_13, SIX_NAME, miner_account, someone, generator)) // 4N+42 return false; - DO_CALLBACK(events, "mark_invalid_tx"); // 4N+42 + DO_CALLBACK(events, "mark_invalid_tx"); // 4N+43 // EXPECTED: the next tx is rejected, because alias is already registered - if (!put_alias_via_tx_to_list(events, txs_2, blk_13, SIX_NAME, miner_account, miner_account, generator)) // 4N+43 + if (!put_alias_via_tx_to_list(events, txs_2, blk_13, SIX_NAME, miner_account, miner_account, generator)) // 4N+44 return false; - DO_CALLBACK(events, "mark_invalid_block"); // 4N+44 + DO_CALLBACK(events, "mark_invalid_block"); // 4N+45 // EXPECTED: block is rejected as containing invalid tx - MAKE_NEXT_BLOCK_TX_LIST(events, blk_14, blk_13, miner_account, txs_2); // 4N+45 + MAKE_NEXT_BLOCK_TX_LIST(events, blk_14, blk_13, miner_account, txs_2); // 4N+46 - DO_CALLBACK(events, "check_height_not_changed"); // 4N+46 + DO_CALLBACK(events, "check_height_not_changed"); // 4N+47 - DO_CALLBACK(events, "clear_tx_pool"); // 4N+47 - DO_CALLBACK(events, "check_too_many_aliases_registration"); // 4N+48 + DO_CALLBACK(events, "clear_tx_pool"); // 4N+48 + DO_CALLBACK(events, "check_too_many_aliases_registration"); // 4N+49 return true; } bool gen_alias_tests::check_first_alias_added(currency::core& c, size_t ev_index, const std::vector& events) { - const currency::account_base& first_acc = boost::get(events[1]); + const currency::account_base& first_acc = boost::get(events[2]); currency::extra_alias_entry_base ai = AUTO_VAL_INIT(ai); bool r = c.get_blockchain_storage().get_alias_info(FIRST_ALIAS_NAME, ai); @@ -237,7 +254,7 @@ bool gen_alias_tests::check_first_alias_added(currency::core& c, size_t ev_index } bool gen_alias_tests::check_second_alias_added(currency::core& c, size_t ev_index, const std::vector& events) { - const currency::account_base& second_acc = boost::get(events[2]); + const currency::account_base& second_acc = boost::get(events[3]); currency::extra_alias_entry_base ai = AUTO_VAL_INIT(ai); bool r = c.get_blockchain_storage().get_alias_info(SECOND_ALIAS_NAME, ai); @@ -295,7 +312,7 @@ bool gen_alias_tests::check_splitted_back(currency::core& c, size_t ev_index, co bool gen_alias_tests::check_alias_changed(currency::core& c, size_t ev_index, const std::vector& events) { - const currency::account_base& third_acc = boost::get(events[3]); + const currency::account_base& third_acc = boost::get(events[4]); currency::extra_alias_entry_base ai = AUTO_VAL_INIT(ai); bool r = c.get_blockchain_storage().get_alias_info(FIRST_ALIAS_NAME, ai); @@ -384,6 +401,8 @@ bool gen_alias_strange_data::generate(std::vector& events) con GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts_start); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 3); std::list tx_list; @@ -458,6 +477,8 @@ bool gen_alias_concurrency_with_switch::generate(std::vector& GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // two txs with concurrent alias registration: 1st @@ -519,6 +540,8 @@ bool gen_alias_same_alias_in_tx_pool::generate(std::vector& ev GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 4); @@ -587,6 +610,8 @@ bool gen_alias_switch_and_tx_pool::generate(std::vector& event GENERATE_ACCOUNT(alice); GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); events.push_back(alice); REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); @@ -652,7 +677,7 @@ bool gen_alias_switch_and_tx_pool::generate(std::vector& event bool gen_alias_switch_and_tx_pool::check_alias(currency::core& c, size_t ev_index, const std::vector& events) { const std::string& alias_name = boost::get(events[ev_index]).callback_params; - const currency::account_base& alice = boost::get(events[1]); + const currency::account_base& alice = boost::get(events[2]); currency::extra_alias_entry_base ai; bool r = c.get_blockchain_storage().get_alias_info(alias_name, ai); CHECK_AND_ASSERT_MES(r, false, "get_alias_info failed"); @@ -914,8 +939,10 @@ bool gen_alias_too_much_reward::generate(std::vector& events) GENERATE_ACCOUNT(miner_acc); // event index MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); // 0 - events.push_back(miner_acc); // 1 - REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // N+1 + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); // 1 + events.push_back(miner_acc); // 2 + REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // N+3 uint64_t premine = get_outs_money_amount(blk_0.miner_tx); extra_alias_entry ai = AUTO_VAL_INIT(ai); @@ -938,7 +965,7 @@ bool gen_alias_too_much_reward::generate(std::vector& events) bool gen_alias_too_much_reward::check_alias(currency::core& c, size_t ev_index, const std::vector& events) { - const currency::account_base& miner_acc = boost::get(events[1]); + const currency::account_base& miner_acc = boost::get(events[2]); currency::extra_alias_entry_base ai; bool r = c.get_blockchain_storage().get_alias_info(std::string(ALIAS_MINIMUM_PUBLIC_SHORT_NAME_ALLOWED, 'a'), ai); CHECK_AND_ASSERT_MES(r, false, "get_alias_info failed"); @@ -1004,7 +1031,9 @@ bool gen_alias_too_small_reward::generate(std::vector& events) m_accounts.resize(TOTAL_ACCS_COUNT); account_base& miner_acc = m_accounts[MINER_ACC_IDX]; miner_acc.generate(); - MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); DO_CALLBACK(events, "init_runtime_config"); REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); @@ -1190,21 +1219,23 @@ bool gen_alias_switch_and_check_block_template::generate(std::vector extra(1, ai); - MAKE_TX_FEE_MIX_ATTR_EXTRA(events, tx_0, miner_acc, miner_acc, 1, TESTS_DEFAULT_FEE, 0, blk_2, CURRENCY_TO_KEY_OUT_RELAXED, extra, true); // 2N+6 - MAKE_NEXT_BLOCK_TX1(events, blk_3, blk_2, miner_acc, tx_0); // 2N+7 + MAKE_TX_FEE_MIX_ATTR_EXTRA(events, tx_0, miner_acc, miner_acc, 1, TESTS_DEFAULT_FEE, 0, blk_2, CURRENCY_TO_KEY_OUT_RELAXED, extra, true); // 2N+7 + MAKE_NEXT_BLOCK_TX1(events, blk_3, blk_2, miner_acc, tx_0); // 2N+8 // split the chain - MAKE_NEXT_BLOCK(events, blk_4, blk_1, miner_acc); // 2N+8 - MAKE_NEXT_BLOCK(events, blk_5, blk_4, miner_acc); // 2N+9 + MAKE_NEXT_BLOCK(events, blk_4, blk_1, miner_acc); // 2N+9 + MAKE_NEXT_BLOCK(events, blk_5, blk_4, miner_acc); // 2N+10 // switch to altchain - MAKE_NEXT_BLOCK(events, blk_6, blk_5, miner_acc); // 2N+10 + MAKE_NEXT_BLOCK(events, blk_6, blk_5, miner_acc); // 2N+11 // try to create and add block from template - DO_CALLBACK_PARAMS_STR(events, "add_block_from_template", ai.m_alias); // 2N+11 + DO_CALLBACK_PARAMS_STR(events, "add_block_from_template", ai.m_alias); // 2N+12 return true; } @@ -1250,7 +1281,7 @@ bool gen_alias_switch_and_check_block_template::add_block_from_template(currency // check that alias was successfully registered const std::string& alias_name = boost::get(events[ev_index]).callback_params; - const currency::account_base& alice_acc = boost::get(events[1]); + const currency::account_base& alice_acc = boost::get(events[2]); extra_alias_entry ai = AUTO_VAL_INIT(ai); r = c.get_blockchain_storage().get_alias_info(alias_name, ai); @@ -1378,7 +1409,9 @@ bool gen_alias_update_for_free::generate(std::vector& events) GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); // 0 - REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 2N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); // 1 + REWIND_BLOCKS_N_WITH_TIME(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); // 2N+1, 2N = CURRENCY_MINED_MONEY_UNLOCK_WINDOW // registrate an alias - pay as usual extra_alias_entry ai = AUTO_VAL_INIT(ai); @@ -1435,6 +1468,8 @@ bool gen_alias_in_coinbase::generate(std::vector& events) cons uint64_t ts = 145000000; GENERATE_ACCOUNT(miner_acc); MAKE_GENESIS_BLOCK(events, blk_0, miner_acc, ts); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); // reg an alias using coinbase diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp index 5bd82551..111b7f03 100644 --- a/tests/core_tests/chaingen.cpp +++ b/tests/core_tests/chaingen.cpp @@ -2073,6 +2073,8 @@ test_chain_unit_enchanced::test_chain_unit_enchanced() , m_orphan_block_index(std::numeric_limits::max()) , m_invalid_tx_index(std::numeric_limits::max()) , m_unverifiable_tx_index(std::numeric_limits::max()) + , m_hardfork_01_height(CURRENCY_MAX_BLOCK_NUMBER) + , m_hardfork_02_height(CURRENCY_MAX_BLOCK_NUMBER) { REGISTER_CALLBACK_METHOD(test_chain_unit_enchanced, configure_core); REGISTER_CALLBACK_METHOD(test_chain_unit_enchanced, mark_invalid_tx); @@ -2093,11 +2095,19 @@ bool test_chain_unit_enchanced::configure_core(currency::core& c, size_t ev_inde currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config(); pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; + pc.hard_fork_01_starts_after_height = m_hardfork_01_height; + pc.hard_fork_02_starts_after_height = m_hardfork_02_height; c.get_blockchain_storage().set_core_runtime_config(pc); return true; } +void test_chain_unit_enchanced::set_hard_fork_heights_to_generator(test_generator& generator) const +{ + generator.set_hardfork_height(1, m_hardfork_01_height); + generator.set_hardfork_height(2, m_hardfork_02_height); +} + bool test_chain_unit_enchanced::check_top_block(currency::core& c, size_t ev_index, const std::vector& events) { params_top_block ptb = AUTO_VAL_INIT(ptb); diff --git a/tests/core_tests/chaingen.h b/tests/core_tests/chaingen.h index 8a012d12..f6b8385b 100644 --- a/tests/core_tests/chaingen.h +++ b/tests/core_tests/chaingen.h @@ -299,6 +299,7 @@ public: return true; } + void set_hard_fork_heights_to_generator(test_generator& generator) const; bool configure_core(currency::core& c, size_t ev_index, const std::vector& events); bool check_top_block(currency::core& c, size_t ev_index, const std::vector& events); bool clear_tx_pool(currency::core& c, size_t ev_index, const std::vector& events); @@ -320,6 +321,9 @@ protected: size_t m_invalid_tx_index; size_t m_unverifiable_tx_index; size_t m_orphan_block_index; + + uint64_t m_hardfork_01_height; + uint64_t m_hardfork_02_height; }; struct wallet_test_core_proxy; diff --git a/tests/core_tests/tx_validation.cpp b/tests/core_tests/tx_validation.cpp index bd23fdf0..87837bc7 100644 --- a/tests/core_tests/tx_validation.cpp +++ b/tests/core_tests/tx_validation.cpp @@ -974,6 +974,21 @@ bool gen_crypted_attachments::check_crypted_tx(currency::core& c, size_t ev_inde return true; } +gen_tx_extra_double_entry::gen_tx_extra_double_entry() +{ + REGISTER_CALLBACK_METHOD(gen_tx_extra_double_entry, configure_core); +} + +bool gen_tx_extra_double_entry::configure_core(currency::core& c, size_t ev_index, const std::vector& events) +{ + currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config(); + pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; + pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; + pc.hard_fork_01_starts_after_height = 0; + pc.hard_fork_02_starts_after_height = 0; + c.get_blockchain_storage().set_core_runtime_config(pc); + return true; +} bool gen_tx_extra_double_entry::generate(std::vector& events) const { @@ -982,6 +997,9 @@ bool gen_tx_extra_double_entry::generate(std::vector& events) GENERATE_ACCOUNT(miner_account); MAKE_GENESIS_BLOCK(events, blk_0, miner_account, ts_start); + generator.set_hardfork_height(0, 0); + generator.set_hardfork_height(1, 0); // extra_alias_entry is only allowed after HF2, so switch it on here + DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N(events, blk_0r, blk_0, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 2); std::vector sources; diff --git a/tests/core_tests/tx_validation.h b/tests/core_tests/tx_validation.h index c72ac866..15a5d0ad 100644 --- a/tests/core_tests/tx_validation.h +++ b/tests/core_tests/tx_validation.h @@ -123,7 +123,9 @@ struct gen_crypted_attachments : test_chain_unit_enchanced struct gen_tx_extra_double_entry : test_chain_unit_enchanced { + gen_tx_extra_double_entry(); bool generate(std::vector& events) const; + bool gen_tx_extra_double_entry::configure_core(currency::core& c, size_t ev_index, const std::vector& events); }; struct gen_tx_double_key_image : test_chain_unit_enchanced diff --git a/tests/core_tests/wallet_tests.cpp b/tests/core_tests/wallet_tests.cpp index de118309..35f8dc52 100644 --- a/tests/core_tests/wallet_tests.cpp +++ b/tests/core_tests/wallet_tests.cpp @@ -1557,6 +1557,9 @@ void gen_wallet_decrypted_attachments::on_transfer2(const tools::wallet_public:: gen_wallet_alias_and_unconfirmed_txs::gen_wallet_alias_and_unconfirmed_txs() { + m_hardfork_01_height = 0; + m_hardfork_02_height = 0; + REGISTER_CALLBACK_METHOD(gen_wallet_alias_and_unconfirmed_txs, c1); REGISTER_CALLBACK_METHOD(gen_wallet_alias_and_unconfirmed_txs, c2); REGISTER_CALLBACK_METHOD(gen_wallet_alias_and_unconfirmed_txs, c3); @@ -1570,6 +1573,7 @@ bool gen_wallet_alias_and_unconfirmed_txs::generate(std::vector Date: Fri, 12 Mar 2021 07:13:30 +0300 Subject: [PATCH 43/64] coretests: code cleanup --- tests/core_tests/alias_tests.cpp | 12 ------------ tests/core_tests/tx_validation.cpp | 2 ++ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/tests/core_tests/alias_tests.cpp b/tests/core_tests/alias_tests.cpp index ffc16bff..07ae4fba 100644 --- a/tests/core_tests/alias_tests.cpp +++ b/tests/core_tests/alias_tests.cpp @@ -94,22 +94,10 @@ gen_alias_tests::gen_alias_tests() REGISTER_CALLBACK_METHOD(gen_alias_tests, check_height_changed); REGISTER_CALLBACK_METHOD(gen_alias_tests, check_too_many_aliases_registration); - //REGISTER_CALLBACK_METHOD(gen_alias_tests, configure_core); m_hardfork_01_height = 0; m_hardfork_02_height = 0; } -/*bool gen_alias_tests::configure_core(currency::core& c, size_t ev_index, const std::vector& events) -{ - currency::core_runtime_config pc = c.get_blockchain_storage().get_core_runtime_config(); - pc.min_coinstake_age = TESTS_POS_CONFIG_MIN_COINSTAKE_AGE; - pc.pos_minimum_heigh = TESTS_POS_CONFIG_POS_MINIMUM_HEIGH; - pc.hard_fork_01_starts_after_height = m_hardfork_01_height; - pc.hard_fork_02_starts_after_height = m_hardfork_02_height; - c.get_blockchain_storage().set_core_runtime_config(pc); - return true; -}*/ - bool gen_alias_tests::generate(std::vector& events) const { GENERATE_ACCOUNT(preminer_account); diff --git a/tests/core_tests/tx_validation.cpp b/tests/core_tests/tx_validation.cpp index 87837bc7..bb53076e 100644 --- a/tests/core_tests/tx_validation.cpp +++ b/tests/core_tests/tx_validation.cpp @@ -765,6 +765,8 @@ bool gen_broken_attachments::generate(std::vector& events) con return true; } +//------------------------------------------------------------------------------ + gen_crypted_attachments::gen_crypted_attachments() { REGISTER_CALLBACK("check_crypted_tx", gen_crypted_attachments::check_crypted_tx); From 2271ce03b120dc0150a69775058c20469e18d87e Mon Sep 17 00:00:00 2001 From: sowle Date: Fri, 12 Mar 2021 07:14:28 +0300 Subject: [PATCH 44/64] coretests: gen_crypted_attachments, gen_tx_extra_double_entry, gen_wallet_decrypted_attachments fixed --- tests/core_tests/tx_validation.cpp | 13 ++++++++----- tests/core_tests/wallet_tests.cpp | 5 +++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/core_tests/tx_validation.cpp b/tests/core_tests/tx_validation.cpp index bb53076e..18f305bb 100644 --- a/tests/core_tests/tx_validation.cpp +++ b/tests/core_tests/tx_validation.cpp @@ -774,9 +774,10 @@ gen_crypted_attachments::gen_crypted_attachments() REGISTER_CALLBACK("set_crypted_tx_height", gen_crypted_attachments::set_crypted_tx_height); REGISTER_CALLBACK("check_offers_count_befor_cancel", gen_crypted_attachments::check_offers_count_befor_cancel); REGISTER_CALLBACK("check_offers_count_after_cancel", gen_crypted_attachments::check_offers_count_after_cancel); - -} + m_hardfork_01_height = 0; + m_hardfork_02_height = 0; // tx_payer is allowed only after HF2 +} bool gen_crypted_attachments::generate(std::vector& events) const { @@ -784,6 +785,8 @@ bool gen_crypted_attachments::generate(std::vector& events) co GENERATE_ACCOUNT(miner_account); // MAKE_GENESIS_BLOCK(events, blk_0, miner_account, ts_start); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); MAKE_ACCOUNT(events, bob_account); MAKE_NEXT_BLOCK(events, blk_1, blk_0, miner_account); @@ -926,7 +929,7 @@ bool gen_crypted_attachments::check_crypted_tx(currency::core& c, size_t ev_inde const currency::transaction& tx = boost::get(events[crypted_tx_height]); - const currency::account_base& bob_acc = boost::get(events[1]); + const currency::account_base& bob_acc = boost::get(events[2]); CHECK_EQ(c.get_current_blockchain_size(), bc_height_before+1); @@ -999,8 +1002,8 @@ bool gen_tx_extra_double_entry::generate(std::vector& events) GENERATE_ACCOUNT(miner_account); MAKE_GENESIS_BLOCK(events, blk_0, miner_account, ts_start); - generator.set_hardfork_height(0, 0); - generator.set_hardfork_height(1, 0); // extra_alias_entry is only allowed after HF2, so switch it on here + generator.set_hardfork_height(1, 0); + generator.set_hardfork_height(2, 0); // extra_alias_entry is only allowed after HF2, so switch it on here DO_CALLBACK(events, "configure_core"); REWIND_BLOCKS_N(events, blk_0r, blk_0, miner_account, CURRENCY_MINED_MONEY_UNLOCK_WINDOW + 2); diff --git a/tests/core_tests/wallet_tests.cpp b/tests/core_tests/wallet_tests.cpp index 35f8dc52..18b03b9e 100644 --- a/tests/core_tests/wallet_tests.cpp +++ b/tests/core_tests/wallet_tests.cpp @@ -1381,6 +1381,8 @@ bool gen_wallet_transfers_and_chain_switch::generate(std::vector& events) const @@ -1417,6 +1419,9 @@ bool gen_wallet_decrypted_attachments::generate(std::vector& e generator.construct_genesis_block(blk_0, miner_acc, test_core_time::get_time()); events.push_back(blk_0); + set_hard_fork_heights_to_generator(generator); + DO_CALLBACK(events, "configure_core"); + REWIND_BLOCKS_N(events, blk_0r, blk_0, miner_acc, CURRENCY_MINED_MONEY_UNLOCK_WINDOW); CREATE_TEST_WALLET(alice_wlt, alice_acc, blk_0); From 91648cbcf2273ed20631a2480f971a0d813ec09d Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 12 Mar 2021 16:29:26 +0300 Subject: [PATCH 45/64] fixed hard_fork_1_unlock_time_2_in_normal_tx --- tests/core_tests/hard_fork_1.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/core_tests/hard_fork_1.cpp b/tests/core_tests/hard_fork_1.cpp index 9a6ff10a..6116fdd9 100644 --- a/tests/core_tests/hard_fork_1.cpp +++ b/tests/core_tests/hard_fork_1.cpp @@ -80,29 +80,31 @@ bool hard_fork_1_unlock_time_2_in_normal_tx::generate(std::vector(1)); + DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(0)); DO_CALLBACK(events, "mark_invalid_block"); MAKE_NEXT_BLOCK_TX1(events, blk_1_bad, blk_0r, miner_acc, tx_0); - DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(1)); + DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(0)); DO_CALLBACK(events, "clear_tx_pool"); // make another tx with the same inputs and extra (tx_0 was rejected so inputs can be reused) transaction tx_0a = AUTO_VAL_INIT(tx_0a); r = construct_tx(miner_acc.get_keys(), sources, destinations, extra, empty_attachment, tx_0a, tx_sec_key, 0 /* unlock time 1 is zero and thus will not be set */); CHECK_AND_ASSERT_MES(r, false, "construct_tx failed"); - // tx_0a should be accepted as well + // tx_0a shouldn't be accepted as well + DO_CALLBACK(events, "mark_invalid_tx"); events.push_back(tx_0a); // make an alternative block with it and make sure it is rejected MAKE_NEXT_BLOCK(events, blk_1, blk_0r, miner_acc); - DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(1)); + DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(0)); DO_CALLBACK(events, "mark_invalid_block"); MAKE_NEXT_BLOCK_TX1(events, blk_1_alt_bad, blk_0r, miner_acc, tx_0a); // this alt block should be rejected because of tx_0a - DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(1)); + DO_CALLBACK_PARAMS(events, "check_tx_pool_count", static_cast(0)); DO_CALLBACK(events, "clear_tx_pool"); From a3ca1edcd68d802ae0804a261fd4aec146bd01cc Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 12 Mar 2021 17:20:11 +0300 Subject: [PATCH 46/64] fixed hard_fork_2_no_new_structures_before_hf --- tests/core_tests/hard_fork_2.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/core_tests/hard_fork_2.cpp b/tests/core_tests/hard_fork_2.cpp index 8dc0ac06..2b58530e 100644 --- a/tests/core_tests/hard_fork_2.cpp +++ b/tests/core_tests/hard_fork_2.cpp @@ -754,6 +754,7 @@ bool hard_fork_2_no_new_structures_before_hf::generate(std::vector tx_set; + DO_CALLBACK(events, "mark_invalid_tx"); r = put_alias_via_tx_to_list(events, tx_set, blk_2, miner_acc, alias_entry, generator); CHECK_AND_ASSERT_MES(r, false, "put_alias_via_tx_to_list failed"); transaction tx_2 = tx_set.front(); @@ -824,6 +827,10 @@ bool hard_fork_2_no_new_structures_before_hf::generate(std::vector Date: Sat, 13 Mar 2021 16:13:03 +0300 Subject: [PATCH 47/64] testnet restarted (in atomics branch yet) --- src/currency_core/currency_config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/currency_core/currency_config.h b/src/currency_core/currency_config.h index 22c20002..e7b9f2f6 100644 --- a/src/currency_core/currency_config.h +++ b/src/currency_core/currency_config.h @@ -10,7 +10,7 @@ #ifndef TESTNET #define CURRENCY_FORMATION_VERSION 84 #else -#define CURRENCY_FORMATION_VERSION 86 +#define CURRENCY_FORMATION_VERSION 87 #endif #define CURRENCY_GENESIS_NONCE (CURRENCY_FORMATION_VERSION + 101011010121) //bender's nightmare @@ -238,7 +238,7 @@ #define ZANO_HARDFORK_02_AFTER_HEIGHT 999999 #else #define ZANO_HARDFORK_01_AFTER_HEIGHT 1440 -#define ZANO_HARDFORK_02_AFTER_HEIGHT 999999 +#define ZANO_HARDFORK_02_AFTER_HEIGHT 1800 #endif From c6572a213a04c50d53dcc52bf3af2c51b1a6d23e Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 13 Mar 2021 16:23:34 +0300 Subject: [PATCH 48/64] fixed gcc compilation issue with RIPEMD-160 --- src/crypto/RIPEMD160.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crypto/RIPEMD160.h b/src/crypto/RIPEMD160.h index 94dc0ceb..f0ea97ef 100644 --- a/src/crypto/RIPEMD160.h +++ b/src/crypto/RIPEMD160.h @@ -37,12 +37,12 @@ #define RMD160H /********************************************************************/ - +#include /* typedef 8 and 32 bit types, resp. */ /* adapt these, if necessary, for your operating system and compiler */ typedef unsigned char byte; -typedef unsigned long dword; +typedef uint32_t dword; /* if this line causes a compiler error, adapt the defintion of dword above */ From 6efae359829e7c33c7ef28f7fdf4767378d35af1 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 13 Mar 2021 17:05:08 +0300 Subject: [PATCH 49/64] disabled_predownload for testnet --- src/common/pre_download.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/pre_download.h b/src/common/pre_download.h index cc2a5412..508bc3fe 100644 --- a/src/common/pre_download.h +++ b/src/common/pre_download.h @@ -24,8 +24,8 @@ namespace tools static constexpr pre_download_entry c_pre_download_mdbx = { "http://95.217.43.225/pre-download/zano_mdbx_95_900000.pak", "1c748d0f90fb1ed0af0ffe59d4b8f6046b2d0f92a8b8fe21932208829733f053", 1097493715, 2147450880 }; static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_lmdb_95_900000.pak", "f2d498ed7abf641824eca4ce584c756d6138d670980c1abdddcdf07343f10bfc", 1406827811, 2079617024 }; #else - static constexpr pre_download_entry c_pre_download_mdbx = { "http://95.217.43.225/pre-download/zano_testnet_mdbx_97_700000.pak", "499b4294bbfedccea98bebd369c1fb7c676de0226e9f52657daab45dac908050", 491920310, 1073725440 }; - static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_testnet_lmdb_97_700000.pak", "a8d5fc57a69576fdd9d538f37af7f1abe3a33c721a597d4a86aa198dcc1d1e0e", 669535639, 1020039168 }; + static constexpr pre_download_entry c_pre_download_mdbx = { "", "", 0, 0 }; + static constexpr pre_download_entry c_pre_download_lmdb = { "", "", 0, 0 }; #endif static constexpr uint64_t pre_download_min_size_difference = 512 * 1024 * 1024; // minimum difference in size between local DB and the downloadable one to start downloading From 72c6d886f41d188bb6ff72ee07e0460fdee161bf Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Sat, 13 Mar 2021 17:32:56 +0300 Subject: [PATCH 50/64] disabled predownload even better --- src/common/pre_download.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/pre_download.h b/src/common/pre_download.h index 508bc3fe..27ec9f84 100644 --- a/src/common/pre_download.h +++ b/src/common/pre_download.h @@ -50,7 +50,7 @@ namespace tools boost::system::error_code ec; uint64_t sz = boost::filesystem::file_size(db_main_file_path, ec); - if (!(ec || (pre_download.unpacked_size > sz && pre_download.unpacked_size - sz > pre_download_min_size_difference) || command_line::has_arg(vm, command_line::arg_force_predownload)) ) + if (pre_download.unpacked_size == 0 || !(ec || (pre_download.unpacked_size > sz && pre_download.unpacked_size - sz > pre_download_min_size_difference) || command_line::has_arg(vm, command_line::arg_force_predownload)) ) { LOG_PRINT_MAGENTA("Pre-downloading not needed (db file size = " << sz << ")", LOG_LEVEL_0); return true; @@ -58,6 +58,7 @@ namespace tools // okay, let's download + std::string downloading_file_path = db_main_file_path + ".download"; LOG_PRINT_MAGENTA("Trying to download blockchain database from " << url << " ...", LOG_LEVEL_0); From 4121cbe6753d645598cd6fef1362b7a99e8c2ad3 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Wed, 17 Mar 2021 21:01:09 +0300 Subject: [PATCH 51/64] added tx_payer to htlc --- src/wallet/wallet2.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 2c44dcd7..ab71af8f 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -4116,6 +4116,9 @@ void wallet2::create_htlc_proposal(uint64_t amount, const currency::account_publ htlc_option.expiration = lock_blocks_count; //about 12 hours htlc_option.htlc_hash = htlc_hash; + currency::create_and_add_tx_payer_to_container_from_address(ctp.extra, + get_account().get_keys().account_address, get_top_block_height(), get_core_runtime_config()); + finalized_tx ft = AUTO_VAL_INIT(ft); this->transfer(ctp, ft, true, nullptr); origin = ft.htlc_origin; From 9df7801865fe93a31e8d746e2751d132012cf815 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Thu, 18 Mar 2021 22:35:11 +0300 Subject: [PATCH 52/64] iplemented RPC API for atomics --- src/currency_core/account.cpp | 2 +- src/wallet/wallet2.cpp | 9 +- src/wallet/wallet2.h | 3 +- src/wallet/wallet_errors.h | 5 ++ src/wallet/wallet_public_structs_defs.h | 106 +++++++++++++++++++++++- src/wallet/wallet_rpc_server.cpp | 46 +++++++++- src/wallet/wallet_rpc_server.h | 11 +++ tests/core_tests/atomic_tests.cpp | 3 +- 8 files changed, 178 insertions(+), 7 deletions(-) diff --git a/src/currency_core/account.cpp b/src/currency_core/account.cpp index 4f8e9320..97d9480e 100644 --- a/src/currency_core/account.cpp +++ b/src/currency_core/account.cpp @@ -310,7 +310,7 @@ namespace currency account_public_address ad = AUTO_VAL_INIT(ad); if (!get_account_address_from_str(ad, str)) { - LOG_ERROR("cannot parse address from string: " << str); + CHECK_AND_ASSERT_THROW_MES(false, "cannot parse address from string: " << str); } return ad; } diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index ab71af8f..6b0baf21 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -400,6 +400,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t m_transfers[it->second].m_spent_height = height; transfer_details_extra_option_htlc_info& tdeohi = get_or_add_field_to_variant_vector(td.varian_options); tdeohi.origin = in_htlc.hltc_origin; + tdeohi.redeem_tx_id = get_transaction_hash(tx); } } i++; @@ -4141,6 +4142,11 @@ void wallet2::get_list_of_active_htlc(std::list& "[get_list_of_active_htlc]Internal error: unexpected type of out"); const txout_htlc& htlc = boost::get(td.m_ptx_wallet_info->m_tx.vout[td.m_internal_output_index].target); entry.sha256_hash = htlc.htlc_hash; + + currency::tx_payer payer = AUTO_VAL_INIT(payer); + if (currency::get_type_in_variant_container(td.m_ptx_wallet_info->m_tx.extra, payer)) + entry.counterparty_address = payer.acc_addr; + entry.is_redeem = td.m_flags&WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM ? true : false; htlcs.push_back(entry); } @@ -4170,7 +4176,7 @@ void wallet2::redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& ori this->transfer(ctp, result_tx, true, nullptr); } //---------------------------------------------------------------------------------------------------- -bool wallet2::check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin) +bool wallet2::check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin, crypto::hash& redeem_tx_id) { auto it = m_active_htlcs_txid.find(htlc_tx_id); @@ -4185,6 +4191,7 @@ bool wallet2::check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& o if (htlc_options.origin.size()) { origin = htlc_options.origin; + redeem_tx_id = htlc_options.redeem_tx_id; return true; } return false; diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 203fd272..9821567f 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -400,6 +400,7 @@ namespace tools struct transfer_details_extra_option_htlc_info { std::string origin; //this field filled only if htlc had been redeemed + crypto::hash redeem_tx_id; }; typedef boost::variant transfer_details_extra_options_v; @@ -862,7 +863,7 @@ namespace tools void get_list_of_active_htlc(std::list& htlcs, bool only_redeem_txs); void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin, currency::transaction& result_tx); void redeem_htlc(const crypto::hash& htlc_tx_id, const std::string& origin); - bool check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin); + bool check_htlc_redeemed(const crypto::hash& htlc_tx_id, std::string& origin, crypto::hash& redeem_tx_id); private: diff --git a/src/wallet/wallet_errors.h b/src/wallet/wallet_errors.h index 4e8fa6cd..efafaf97 100644 --- a/src/wallet/wallet_errors.h +++ b/src/wallet/wallet_errors.h @@ -74,6 +74,11 @@ namespace tools return m_what.c_str(); } + virtual const std::string error_code() const noexcept + { + return m_error_code; + } + wallet_error_base(std::string&& loc, const std::string& message, const std::string& error_code) : Base(message) , m_loc(loc) diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 60ae06be..22aaea2e 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -980,6 +980,7 @@ namespace wallet_public struct htlc_entry_info { + currency::account_public_address counterparty_address; crypto::hash sha256_hash; crypto::hash tx_id; uint64_t amount; @@ -987,15 +988,116 @@ namespace wallet_public BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(amount) - KV_SERIALIZE(sha256_hash) - KV_SERIALIZE(tx_id) + KV_SERIALIZE_ADDRESS_AS_TEXT(counterparty_address) + KV_SERIALIZE_POD_AS_HEX_STRING(sha256_hash) + KV_SERIALIZE_POD_AS_HEX_STRING(tx_id) KV_SERIALIZE(is_redeem) END_KV_SERIALIZE_MAP() }; + struct COMMAND_CREATE_HTLC_PROPOSAL + { + struct request + { + uint64_t amount; + currency::account_public_address counterparty_address; + uint64_t lock_blocks_count; + crypto::hash htlc_hash; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(amount) + KV_SERIALIZE_ADDRESS_AS_TEXT(counterparty_address) + KV_SERIALIZE(lock_blocks_count) + KV_SERIALIZE_POD_AS_HEX_STRING(htlc_hash) + END_KV_SERIALIZE_MAP() + }; + + struct response + { + std::string result_tx_blob; + crypto::hash result_tx_id; + std::string derived_origin_secret; // this field derived in a deterministic way if no htlc_hash was provided + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_BLOB_AS_HEX_STRING(result_tx_blob) + KV_SERIALIZE_POD_AS_HEX_STRING(result_tx_id) + KV_SERIALIZE_BLOB_AS_HEX_STRING_N(derived_origin_secret, "derived_origin_secret_as_hex") + END_KV_SERIALIZE_MAP() + }; + }; + + struct COMMAND_GET_LIST_OF_ACTIVE_HTLC + { + struct request + { + bool income_redeem_only; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(income_redeem_only) + END_KV_SERIALIZE_MAP() + }; + + struct response + { + std::list m_htlcs; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(m_htlcs) + END_KV_SERIALIZE_MAP() + }; + }; + + struct COMMAND_REDEEM_HTLC + { + struct request + { + crypto::hash tx_id; + std::string origin_secret; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_POD_AS_HEX_STRING(tx_id) + KV_SERIALIZE_BLOB_AS_HEX_STRING_N(origin_secret, "origin_secret_as_hex") + END_KV_SERIALIZE_MAP() + }; + + struct response + { + std::string result_tx_blob; + crypto::hash result_tx_id; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_BLOB_AS_HEX_STRING(result_tx_blob) + KV_SERIALIZE_POD_AS_HEX_STRING(result_tx_id) + END_KV_SERIALIZE_MAP() + }; + }; + + struct COMMAND_CHECK_HTLC_REDEEMED + { + struct request + { + crypto::hash htlc_tx_id; + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_POD_AS_HEX_STRING(htlc_tx_id) + END_KV_SERIALIZE_MAP() + }; + + + struct response + { + std::string origin_secrete; + crypto::hash redeem_tx_id; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE_BLOB_AS_HEX_STRING_N(origin_secrete, "origin_secrete_as_hex") + KV_SERIALIZE_POD_AS_HEX_STRING(redeem_tx_id) + END_KV_SERIALIZE_MAP() + }; + }; + inline std::string get_escrow_contract_state_name(uint32_t state) { switch (state) diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index fef4f1a4..4c30bdcd 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -19,6 +19,12 @@ using namespace epee; #define WALLET_RPC_BEGIN_TRY_ENTRY() try { #define WALLET_RPC_CATCH_TRY_ENTRY() } \ + catch (const tools::error::wallet_error& e) \ + { \ + er.code = WALLET_RPC_ERROR_CODE_GENERIC_TRANSFER_ERROR; \ + er.message = e.error_code(); \ + return false; \ + } \ catch (const std::exception& e) \ { \ er.code = WALLET_RPC_ERROR_CODE_GENERIC_TRANSFER_ERROR; \ @@ -779,7 +785,45 @@ namespace tools return true; WALLET_RPC_CATCH_TRY_ENTRY(); } - + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_create_htlc_proposal(const wallet_public::COMMAND_CREATE_HTLC_PROPOSAL::request& req, wallet_public::COMMAND_CREATE_HTLC_PROPOSAL::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + WALLET_RPC_BEGIN_TRY_ENTRY(); + currency::transaction tx = AUTO_VAL_INIT(tx); + m_wallet.create_htlc_proposal(req.amount, req.counterparty_address, req.lock_blocks_count, tx, req.htlc_hash, res.derived_origin_secret); + res.result_tx_blob = currency::tx_to_blob(tx); + res.result_tx_id = get_transaction_hash(tx); + WALLET_RPC_CATCH_TRY_ENTRY(); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_get_list_of_active_htlc(const wallet_public::COMMAND_GET_LIST_OF_ACTIVE_HTLC::request& req, wallet_public::COMMAND_GET_LIST_OF_ACTIVE_HTLC::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + WALLET_RPC_BEGIN_TRY_ENTRY(); + m_wallet.get_list_of_active_htlc(res.m_htlcs, req.income_redeem_only); + WALLET_RPC_CATCH_TRY_ENTRY(); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_redeem_htlc(const wallet_public::COMMAND_REDEEM_HTLC::request& req, wallet_public::COMMAND_REDEEM_HTLC::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + WALLET_RPC_BEGIN_TRY_ENTRY(); + currency::transaction tx = AUTO_VAL_INIT(tx); + m_wallet.redeem_htlc(req.tx_id, req.origin_secret, tx); + res.result_tx_blob = currency::tx_to_blob(tx); + res.result_tx_id = get_transaction_hash(tx); + WALLET_RPC_CATCH_TRY_ENTRY(); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ + bool wallet_rpc_server::on_check_htlc_redeemed(const wallet_public::COMMAND_CHECK_HTLC_REDEEMED::request& req, wallet_public::COMMAND_CHECK_HTLC_REDEEMED::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + WALLET_RPC_BEGIN_TRY_ENTRY(); + m_wallet.check_htlc_redeemed(req.htlc_tx_id, res.origin_secrete, res.redeem_tx_id); + WALLET_RPC_CATCH_TRY_ENTRY(); + return true; + } + //------------------------------------------------------------------------------------------------------------------------------ } // namespace tools diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index ccf26798..2d94bc52 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -65,6 +65,12 @@ namespace tools MAP_JON_RPC_WE("marketplace_push_offer", on_marketplace_push_offer, wallet_public::COMMAND_MARKETPLACE_PUSH_OFFER) MAP_JON_RPC_WE("marketplace_push_update_offer", on_marketplace_push_update_offer, wallet_public::COMMAND_MARKETPLACE_PUSH_UPDATE_OFFER) MAP_JON_RPC_WE("marketplace_cancel_offer", on_marketplace_cancel_offer, wallet_public::COMMAND_MARKETPLACE_CANCEL_OFFER) + //HTLC API + MAP_JON_RPC_WE("atomics_create_htlc_proposal", on_create_htlc_proposal, wallet_public::COMMAND_CREATE_HTLC_PROPOSAL) + MAP_JON_RPC_WE("atomics_get_list_of_active_htlc", on_get_list_of_active_htlc, wallet_public::COMMAND_GET_LIST_OF_ACTIVE_HTLC) + MAP_JON_RPC_WE("atomics_redeem_htlc", on_redeem_htlc, wallet_public::COMMAND_REDEEM_HTLC) + MAP_JON_RPC_WE("atomics_check_htlc_redeemed", on_check_htlc_redeemed, wallet_public::COMMAND_CHECK_HTLC_REDEEMED) + END_JSON_RPC_MAP() END_URI_MAP2() @@ -98,6 +104,11 @@ namespace tools bool on_marketplace_push_update_offer(const wallet_public::COMMAND_MARKETPLACE_PUSH_UPDATE_OFFER::request& req, wallet_public::COMMAND_MARKETPLACE_PUSH_UPDATE_OFFER::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_marketplace_cancel_offer(const wallet_public::COMMAND_MARKETPLACE_CANCEL_OFFER::request& req, wallet_public::COMMAND_MARKETPLACE_CANCEL_OFFER::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_create_htlc_proposal(const wallet_public::COMMAND_CREATE_HTLC_PROPOSAL::request& req, wallet_public::COMMAND_CREATE_HTLC_PROPOSAL::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_get_list_of_active_htlc(const wallet_public::COMMAND_GET_LIST_OF_ACTIVE_HTLC::request& req, wallet_public::COMMAND_GET_LIST_OF_ACTIVE_HTLC::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_redeem_htlc(const wallet_public::COMMAND_REDEEM_HTLC::request& req, wallet_public::COMMAND_REDEEM_HTLC::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_check_htlc_redeemed(const wallet_public::COMMAND_CHECK_HTLC_REDEEMED::request& req, wallet_public::COMMAND_CHECK_HTLC_REDEEMED::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool handle_command_line(const boost::program_options::variables_map& vm); diff --git a/tests/core_tests/atomic_tests.cpp b/tests/core_tests/atomic_tests.cpp index 68c7a82f..1c3f4fcd 100644 --- a/tests/core_tests/atomic_tests.cpp +++ b/tests/core_tests/atomic_tests.cpp @@ -297,7 +297,8 @@ bool atomic_simple_test::c1(currency::core& c, size_t ev_index, const std::vecto //============= phase 4 ============= //----------- preparation ----------- std::string bob_detected_origin; - r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); + crypto::hash redeem_tx_id = AUTO_VAL_INIT(redeem_tx_id); + r = bob_b_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin, redeem_tx_id); CHECK_AND_ASSERT_MES(r, false, "bob_a_wlt_instance->check_htlc_redeemed(hei_bob_b.tx_id, bob_detected_origin); returned false"); CHECK_AND_ASSERT_MES(bob_detected_origin == alice_origin, false, "bob_detected_origin == alice_origin failed"); From b4903386a5988ba5a1d224f3073dbae48428fa4c Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 22 Mar 2021 21:13:19 +0300 Subject: [PATCH 53/64] checkpoints reset for testnet --- src/currency_core/checkpoints_create.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/currency_core/checkpoints_create.h b/src/currency_core/checkpoints_create.h index fcd6cf3c..c07ad4bb 100644 --- a/src/currency_core/checkpoints_create.h +++ b/src/currency_core/checkpoints_create.h @@ -17,11 +17,7 @@ namespace currency inline bool create_checkpoints(currency::checkpoints& checkpoints) { #ifdef TESTNET - ADD_CHECKPOINT(50000, "cb05a7bdc7f78c5cdb6ef1048f85b27c569f44879233903ce5f5a4e5bd590a3d"); - ADD_CHECKPOINT(100000, "6b8b54356a9d44f6c1ebdacb8593d8f5ab2e2e2ca4493e7ae7baf4b3755c5e16"); - ADD_CHECKPOINT(350000, "885841f079e5a38f1921f4a5319f0d52fdbab64bb2026ca3cabad1c032d22db7"); - ADD_CHECKPOINT(450000, "e8b789b909d59ed8a2a1e3eceb6d0b19accfe0d45cc31621b1929de80adfa702"); - ADD_CHECKPOINT(700000, "b650754d8fef77643520f4c0de3d7c4047232ab7ce6ba8c3a47c3e45ffa3dd9f"); +// ADD_CHECKPOINT(50000, "cb05a7bdc7f78c5cdb6ef1048f85b27c569f44879233903ce5f5a4e5bd590a3d"); #else // MAINNET ADD_CHECKPOINT(425000, "46a6c36d5dec2d484d5e4845a8525ca322aafc06915ed9c8da2a241b51b7d1e8"); From 604c0264e6fdf6e09a275c7bc65a27fb1014fa03 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Mon, 22 Mar 2021 21:48:22 +0300 Subject: [PATCH 54/64] Added all the htmls as a submodule from separate repository --- .gitmodules | 3 + src/gui/qt-daemon/html/OpenSans-Bold.ttf | Bin 224452 -> 0 bytes src/gui/qt-daemon/html/OpenSans-ExtraBold.ttf | Bin 222424 -> 0 bytes src/gui/qt-daemon/html/OpenSans-Light.ttf | Bin 222236 -> 0 bytes src/gui/qt-daemon/html/OpenSans-Regular.ttf | Bin 217276 -> 0 bytes src/gui/qt-daemon/html/OpenSans-SemiBold.ttf | Bin 221164 -> 0 bytes src/gui/qt-daemon/html/account.svg | 15 - src/gui/qt-daemon/html/alert.svg | 9 - src/gui/qt-daemon/html/arrow-down.svg | 9 - src/gui/qt-daemon/html/arrow-right.svg | 9 - src/gui/qt-daemon/html/arrow-up.svg | 9 - .../html/assets/fonts/OpenSans-Bold.ttf | Bin 224452 -> 0 bytes .../html/assets/fonts/OpenSans-ExtraBold.ttf | Bin 222424 -> 0 bytes .../html/assets/fonts/OpenSans-Light.ttf | Bin 222236 -> 0 bytes .../html/assets/fonts/OpenSans-Regular.ttf | Bin 217276 -> 0 bytes .../html/assets/fonts/OpenSans-SemiBold.ttf | Bin 221164 -> 0 bytes src/gui/qt-daemon/html/assets/i18n/af.json | 593 - src/gui/qt-daemon/html/assets/i18n/ar.json | 593 - src/gui/qt-daemon/html/assets/i18n/ca.json | 593 - src/gui/qt-daemon/html/assets/i18n/cs.json | 593 - src/gui/qt-daemon/html/assets/i18n/da.json | 593 - src/gui/qt-daemon/html/assets/i18n/de.json | 593 - src/gui/qt-daemon/html/assets/i18n/el.json | 593 - src/gui/qt-daemon/html/assets/i18n/en.json | 633 - src/gui/qt-daemon/html/assets/i18n/es.json | 593 - src/gui/qt-daemon/html/assets/i18n/fi.json | 593 - src/gui/qt-daemon/html/assets/i18n/fr.json | 593 - src/gui/qt-daemon/html/assets/i18n/he.json | 593 - src/gui/qt-daemon/html/assets/i18n/hu.json | 593 - src/gui/qt-daemon/html/assets/i18n/id.json | 587 - src/gui/qt-daemon/html/assets/i18n/it.json | 593 - src/gui/qt-daemon/html/assets/i18n/ja.json | 588 - src/gui/qt-daemon/html/assets/i18n/ko.json | 593 - src/gui/qt-daemon/html/assets/i18n/nl.json | 593 - src/gui/qt-daemon/html/assets/i18n/no.json | 593 - src/gui/qt-daemon/html/assets/i18n/pl.json | 593 - src/gui/qt-daemon/html/assets/i18n/pt.json | 593 - src/gui/qt-daemon/html/assets/i18n/ro.json | 593 - src/gui/qt-daemon/html/assets/i18n/ru.json | 593 - src/gui/qt-daemon/html/assets/i18n/sr.json | 593 - src/gui/qt-daemon/html/assets/i18n/sv.json | 593 - src/gui/qt-daemon/html/assets/i18n/tr.json | 593 - src/gui/qt-daemon/html/assets/i18n/uk.json | 593 - src/gui/qt-daemon/html/assets/i18n/vi.json | 593 - src/gui/qt-daemon/html/assets/i18n/zh.json | 593 - .../qt-daemon/html/assets/icons/account.svg | 15 - .../qt-daemon/html/assets/icons/addnew.svg | 9 - src/gui/qt-daemon/html/assets/icons/alert.svg | 9 - .../html/assets/icons/arrow-down.svg | 9 - .../html/assets/icons/arrow-right.svg | 9 - .../qt-daemon/html/assets/icons/arrow-up.svg | 9 - src/gui/qt-daemon/html/assets/icons/back.svg | 10 - .../html/assets/icons/close-wallet-blue.svg | 10 - .../html/assets/icons/close-wallet.svg | 10 - src/gui/qt-daemon/html/assets/icons/close.svg | 18 - .../html/assets/icons/complete-testwallet.svg | 11 - .../qt-daemon/html/assets/icons/contacts.svg | 24 - .../qt-daemon/html/assets/icons/contracts.svg | 13 - src/gui/qt-daemon/html/assets/icons/copy.svg | 10 - .../qt-daemon/html/assets/icons/delete.svg | 11 - .../html/assets/icons/details-settings.svg | 16 - .../qt-daemon/html/assets/icons/details.svg | 10 - src/gui/qt-daemon/html/assets/icons/edit.svg | 10 - .../qt-daemon/html/assets/icons/history.svg | 12 - src/gui/qt-daemon/html/assets/icons/howto.svg | 20 - .../qt-daemon/html/assets/icons/icons.json | 12 - .../html/assets/icons/import-export.svg | 10 - src/gui/qt-daemon/html/assets/icons/info.svg | 1 - .../html/assets/icons/lock-transaction.svg | 10 - src/gui/qt-daemon/html/assets/icons/lock.svg | 12 - src/gui/qt-daemon/html/assets/icons/logo.svg | 31 - .../qt-daemon/html/assets/icons/logout.svg | 14 - .../qt-daemon/html/assets/icons/message.svg | 9 - .../html/assets/icons/modal-alert.svg | 19 - .../html/assets/icons/modal-info.svg | 21 - .../html/assets/icons/modal-success.svg | 26 - src/gui/qt-daemon/html/assets/icons/new.svg | 17 - .../html/assets/icons/not-allowed.svg | 7 - .../qt-daemon/html/assets/icons/purchase.svg | 12 - .../html/assets/icons/receive-green.svg | 10 - .../qt-daemon/html/assets/icons/receive.svg | 10 - .../qt-daemon/html/assets/icons/safety.svg | 21 - .../qt-daemon/html/assets/icons/secured.svg | 10 - src/gui/qt-daemon/html/assets/icons/sell.svg | 15 - .../qt-daemon/html/assets/icons/send-red.svg | 10 - src/gui/qt-daemon/html/assets/icons/send.svg | 10 - .../qt-daemon/html/assets/icons/settings.svg | 14 - .../qt-daemon/html/assets/icons/staking.svg | 14 - src/gui/qt-daemon/html/assets/icons/time.svg | 10 - .../html/assets/icons/unlock-transaction.svg | 10 - .../qt-daemon/html/assets/icons/unsecured.svg | 10 - .../html/assets/icons/update-alert.svg | 9 - .../qt-daemon/html/assets/icons/update.svg | 12 - .../qt-daemon/html/assets/images/Loading.png | Bin 3245 -> 0 bytes .../html/assets/images/background-dark.png | Bin 34583 -> 0 bytes .../html/assets/images/background-gray.png | Bin 37975 -> 0 bytes .../html/assets/images/background-white.png | Bin 35468 -> 0 bytes src/gui/qt-daemon/html/assets/images/logo.png | Bin 5422 -> 0 bytes .../qt-daemon/html/assets/images/qr-code.png | Bin 5337 -> 0 bytes .../html/assets/scss/base/_base.scss | 1045 - .../html/assets/scss/base/_mixins.scss | 98 - .../html/assets/scss/base/_null.scss | 128 - .../html/assets/scss/base/_theme.scss | 187 - .../html/assets/scss/layout/_contact.scss | 88 - .../html/assets/scss/layout/_main.scss | 119 - .../html/assets/scss/layout/_seed-phrase.scss | 258 - .../html/assets/scss/layout/_settings.scss | 0 .../html/assets/scss/layout/_sidebar.scss | 191 - .../html/assets/scss/layout/_status.scss | 232 - .../html/assets/scss/layout/_wallet.scss | 531 - .../html/assets/scss/modules/_head.scss | 64 - .../html/assets/scss/modules/_scroll.scss | 24 - .../html/assets/scss/modules/_table.scss | 64 - src/gui/qt-daemon/html/back.svg | 10 - src/gui/qt-daemon/html/background-dark.png | Bin 34583 -> 0 bytes src/gui/qt-daemon/html/background-gray.png | Bin 37975 -> 0 bytes src/gui/qt-daemon/html/background-white.png | Bin 35468 -> 0 bytes src/gui/qt-daemon/html/close-wallet-blue.svg | 10 - src/gui/qt-daemon/html/close-wallet.svg | 10 - src/gui/qt-daemon/html/close.svg | 18 - .../qt-daemon/html/complete-testwallet.svg | 11 - src/gui/qt-daemon/html/contacts.svg | 24 - src/gui/qt-daemon/html/contracts.svg | 13 - src/gui/qt-daemon/html/copy.svg | 10 - src/gui/qt-daemon/html/delete.svg | 11 - src/gui/qt-daemon/html/details-settings.svg | 16 - src/gui/qt-daemon/html/details.svg | 10 - src/gui/qt-daemon/html/edit.svg | 10 - src/gui/qt-daemon/html/favicon.ico | Bin 145619 -> 0 bytes src/gui/qt-daemon/html/files/Zano.desktop | 8 - src/gui/qt-daemon/html/files/app22macos.png | Bin 992 -> 0 bytes .../html/files/app22macos_blocked.png | Bin 15225 -> 0 bytes src/gui/qt-daemon/html/files/app22windows.png | Bin 724 -> 0 bytes .../html/files/app22windows_blocked.png | Bin 1247 -> 0 bytes .../html/files/desktop_linux_icon.png | Bin 1293 -> 0 bytes src/gui/qt-daemon/html/history.svg | 12 - src/gui/qt-daemon/html/howto.svg | 20 - src/gui/qt-daemon/html/import-export.svg | 10 - src/gui/qt-daemon/html/index.html | 15 - src/gui/qt-daemon/html/info.svg | 1 - src/gui/qt-daemon/html/lock-transaction.svg | 10 - src/gui/qt-daemon/html/lock.svg | 12 - src/gui/qt-daemon/html/logout.svg | 14 - src/gui/qt-daemon/html/main.js | 9788 - src/gui/qt-daemon/html/main.js.map | 1 - src/gui/qt-daemon/html/message.svg | 9 - src/gui/qt-daemon/html/modal-alert.svg | 19 - src/gui/qt-daemon/html/modal-info.svg | 21 - src/gui/qt-daemon/html/modal-success.svg | 26 - src/gui/qt-daemon/html/new.svg | 17 - src/gui/qt-daemon/html/not-allowed.svg | 7 - src/gui/qt-daemon/html/polyfills.js | 5810 - src/gui/qt-daemon/html/polyfills.js.map | 1 - src/gui/qt-daemon/html/purchase.svg | 12 - src/gui/qt-daemon/html/receive-green.svg | 10 - src/gui/qt-daemon/html/receive.svg | 10 - src/gui/qt-daemon/html/runtime.js | 154 - src/gui/qt-daemon/html/runtime.js.map | 1 - src/gui/qt-daemon/html/safety.svg | 21 - src/gui/qt-daemon/html/secured.svg | 10 - src/gui/qt-daemon/html/sell.svg | 15 - src/gui/qt-daemon/html/send-red.svg | 10 - src/gui/qt-daemon/html/send.svg | 10 - src/gui/qt-daemon/html/settings.svg | 14 - src/gui/qt-daemon/html/staking.svg | 14 - src/gui/qt-daemon/html/styles.js | 566 - src/gui/qt-daemon/html/styles.js.map | 1 - src/gui/qt-daemon/html/time.svg | 10 - src/gui/qt-daemon/html/unlock-transaction.svg | 10 - src/gui/qt-daemon/html/unsecured.svg | 10 - src/gui/qt-daemon/html/update-alert.svg | 9 - src/gui/qt-daemon/html/update.svg | 12 - src/gui/qt-daemon/html/vendor.js | 137619 --------------- src/gui/qt-daemon/html/vendor.js.map | 1 - src/gui/qt-daemon/html_source/.editorconfig | 13 - src/gui/qt-daemon/html_source/.gitignore | 40 - src/gui/qt-daemon/html_source/README.md | 27 - src/gui/qt-daemon/html_source/angular.json | 140 - .../html_source/e2e/protractor.conf.js | 28 - .../html_source/e2e/src/app.e2e-spec.ts | 14 - .../qt-daemon/html_source/e2e/src/app.po.ts | 11 - .../html_source/e2e/tsconfig.e2e.json | 13 - src/gui/qt-daemon/html_source/package.json | 64 - .../confirm-modal.component.html | 16 - .../confirm-modal.component.scss | 88 - .../confirm-modal.component.spec.ts | 25 - .../confirm-modal/confirm-modal.component.ts | 28 - .../input-disable-selection.directive.spec.ts | 8 - .../input-disable-selection.directive.ts | 16 - .../input-validate.directive.spec.ts | 8 - .../input-validate.directive.ts | 79 - .../modal-container.component.html | 11 - .../modal-container.component.scss | 90 - .../modal-container.component.spec.ts | 25 - .../modal-container.component.ts | 31 - .../progress-container.component.html | 10 - .../progress-container.component.scss | 50 - .../progress-container.component.spec.ts | 25 - .../progress-container.component.ts | 17 - .../staking-switch.component.html | 5 - .../staking-switch.component.scss | 22 - .../staking-switch.component.spec.ts | 25 - .../staking-switch.component.ts | 31 - .../_helpers/directives/tooltip.directive.ts | 242 - .../transaction-details.component.html | 35 - .../transaction-details.component.scss | 43 - .../transaction-details.component.spec.ts | 25 - .../transaction-details.component.ts | 41 - .../src/app/_helpers/models/contact.model.ts | 6 - .../src/app/_helpers/models/contract.model.ts | 24 - .../app/_helpers/models/transaction.model.ts | 24 - .../src/app/_helpers/models/wallet.model.ts | 246 - .../contract-status-messages.pipe.spec.ts | 8 - .../pipes/contract-status-messages.pipe.ts | 106 - .../pipes/contract-time-left.pipe.spec.ts | 8 - .../_helpers/pipes/contract-time-left.pipe.ts | 69 - .../pipes/history-type-messages.pipe.spec.ts | 8 - .../pipes/history-type-messages.pipe.ts | 65 - .../_helpers/pipes/int-to-money.pipe.spec.ts | 8 - .../app/_helpers/pipes/int-to-money.pipe.ts | 35 - .../_helpers/pipes/money-to-int.pipe.spec.ts | 8 - .../app/_helpers/pipes/money-to-int.pipe.ts | 45 - .../app/_helpers/pipes/safe-html.pipe.spec.ts | 8 - .../src/app/_helpers/pipes/safe-html.pipe.ts | 15 - .../_helpers/services/backend.service.spec.ts | 12 - .../app/_helpers/services/backend.service.ts | 777 - .../_helpers/services/modal.service.spec.ts | 12 - .../app/_helpers/services/modal.service.ts | 52 - .../services/pagination.service.spec.ts | 16 - .../_helpers/services/pagination.service.ts | 102 - .../app/_helpers/services/pagination.store.ts | 36 - .../app/_helpers/services/utils.service.ts | 14 - .../services/variables.service.spec.ts | 12 - .../_helpers/services/variables.service.ts | 236 - .../html_source/src/app/_shared/constants.ts | 10 - .../add-contacts/add-contacts.component.html | 66 - .../add-contacts/add-contacts.component.scss | 13 - .../add-contacts.component.spec.ts | 25 - .../add-contacts/add-contacts.component.ts | 191 - .../html_source/src/app/app-routing.module.ts | 159 - .../html_source/src/app/app.component.html | 28 - .../html_source/src/app/app.component.scss | 58 - .../html_source/src/app/app.component.spec.ts | 35 - .../html_source/src/app/app.component.ts | 752 - .../html_source/src/app/app.module.ts | 170 - .../assign-alias/assign-alias.component.html | 71 - .../assign-alias/assign-alias.component.scss | 46 - .../assign-alias.component.spec.ts | 25 - .../assign-alias/assign-alias.component.ts | 120 - .../contact-send/contact-send.component.html | 44 - .../contact-send/contact-send.component.scss | 33 - .../contact-send.component.spec.ts | 25 - .../contact-send/contact-send.component.ts | 44 - .../src/app/contacts/contacts.component.html | 95 - .../src/app/contacts/contacts.component.scss | 117 - .../app/contacts/contacts.component.spec.ts | 25 - .../src/app/contacts/contacts.component.ts | 60 - .../app/contracts/contracts.component.html | 52 - .../app/contracts/contracts.component.scss | 90 - .../app/contracts/contracts.component.spec.ts | 25 - .../src/app/contracts/contracts.component.ts | 57 - .../create-wallet.component.html | 62 - .../create-wallet.component.scss | 29 - .../create-wallet.component.spec.ts | 25 - .../create-wallet/create-wallet.component.ts | 102 - .../app/edit-alias/edit-alias.component.html | 53 - .../app/edit-alias/edit-alias.component.scss | 23 - .../edit-alias/edit-alias.component.spec.ts | 25 - .../app/edit-alias/edit-alias.component.ts | 63 - .../export-import.component.html | 21 - .../export-import.component.scss | 25 - .../export-import.component.spec.ts | 25 - .../export-import/export-import.component.ts | 138 - .../src/app/history/history.component.html | 70 - .../src/app/history/history.component.scss | 126 - .../src/app/history/history.component.spec.ts | 25 - .../src/app/history/history.component.ts | 80 - .../src/app/login/login.component.html | 126 - .../src/app/login/login.component.scss | 52 - .../src/app/login/login.component.spec.ts | 25 - .../src/app/login/login.component.ts | 245 - .../src/app/main/main.component.html | 22 - .../src/app/main/main.component.scss | 47 - .../src/app/main/main.component.spec.ts | 25 - .../src/app/main/main.component.ts | 56 - .../src/app/messages/messages.component.html | 23 - .../src/app/messages/messages.component.scss | 42 - .../app/messages/messages.component.spec.ts | 25 - .../src/app/messages/messages.component.ts | 33 - .../open-wallet-modal.component.html | 18 - .../open-wallet-modal.component.scss | 48 - .../open-wallet-modal.component.spec.ts | 25 - .../open-wallet-modal.component.ts | 127 - .../open-wallet/open-wallet.component.html | 44 - .../open-wallet/open-wallet.component.scss | 17 - .../open-wallet/open-wallet.component.spec.ts | 25 - .../app/open-wallet/open-wallet.component.ts | 148 - .../src/app/purchase/purchase.component.html | 286 - .../src/app/purchase/purchase.component.scss | 203 - .../app/purchase/purchase.component.spec.ts | 25 - .../src/app/purchase/purchase.component.ts | 413 - .../src/app/receive/receive.component.html | 7 - .../src/app/receive/receive.component.scss | 38 - .../src/app/receive/receive.component.spec.ts | 25 - .../src/app/receive/receive.component.ts | 51 - .../restore-wallet.component.html | 86 - .../restore-wallet.component.scss | 37 - .../restore-wallet.component.spec.ts | 25 - .../restore-wallet.component.ts | 274 - .../seed-phrase/seed-phrase.component.html | 112 - .../seed-phrase/seed-phrase.component.scss | 16 - .../seed-phrase/seed-phrase.component.spec.ts | 25 - .../app/seed-phrase/seed-phrase.component.ts | 169 - .../app/send-modal/send-modal.component.html | 49 - .../app/send-modal/send-modal.component.scss | 91 - .../send-modal/send-modal.component.spec.ts | 25 - .../app/send-modal/send-modal.component.ts | 53 - .../src/app/send/send.component.html | 90 - .../src/app/send/send.component.scss | 93 - .../src/app/send/send.component.spec.ts | 25 - .../src/app/send/send.component.ts | 225 - .../src/app/settings/settings.component.html | 124 - .../src/app/settings/settings.component.scss | 88 - .../app/settings/settings.component.spec.ts | 25 - .../src/app/settings/settings.component.ts | 208 - .../src/app/sidebar/sidebar.component.html | 188 - .../src/app/sidebar/sidebar.component.scss | 444 - .../src/app/sidebar/sidebar.component.spec.ts | 25 - .../src/app/sidebar/sidebar.component.ts | 144 - .../src/app/staking/staking.component.html | 47 - .../src/app/staking/staking.component.scss | 94 - .../src/app/staking/staking.component.spec.ts | 25 - .../src/app/staking/staking.component.ts | 408 - .../transfer-alias.component.html | 56 - .../transfer-alias.component.scss | 23 - .../transfer-alias.component.spec.ts | 25 - .../transfer-alias.component.ts | 108 - .../typing-message.component.html | 63 - .../typing-message.component.scss | 65 - .../typing-message.component.spec.ts | 25 - .../typing-message.component.ts | 22 - .../wallet-details.component.html | 90 - .../wallet-details.component.scss | 26 - .../wallet-details.component.spec.ts | 25 - .../wallet-details.component.ts | 150 - .../src/app/wallet/wallet.component.html | 94 - .../src/app/wallet/wallet.component.scss | 302 - .../src/app/wallet/wallet.component.spec.ts | 25 - .../src/app/wallet/wallet.component.ts | 485 - .../qt-daemon/html_source/src/assets/.gitkeep | 0 .../src/assets/fonts/OpenSans-Bold.ttf | Bin 224452 -> 0 bytes .../src/assets/fonts/OpenSans-ExtraBold.ttf | Bin 222424 -> 0 bytes .../src/assets/fonts/OpenSans-Light.ttf | Bin 222236 -> 0 bytes .../src/assets/fonts/OpenSans-Regular.ttf | Bin 217276 -> 0 bytes .../src/assets/fonts/OpenSans-SemiBold.ttf | Bin 221164 -> 0 bytes .../html_source/src/assets/i18n/af.json | 593 - .../html_source/src/assets/i18n/ar.json | 593 - .../html_source/src/assets/i18n/ca.json | 593 - .../html_source/src/assets/i18n/cs.json | 593 - .../html_source/src/assets/i18n/da.json | 593 - .../html_source/src/assets/i18n/de.json | 593 - .../html_source/src/assets/i18n/el.json | 593 - .../html_source/src/assets/i18n/en.json | 633 - .../html_source/src/assets/i18n/es.json | 593 - .../html_source/src/assets/i18n/fi.json | 593 - .../html_source/src/assets/i18n/fr.json | 593 - .../html_source/src/assets/i18n/he.json | 593 - .../html_source/src/assets/i18n/hu.json | 593 - .../html_source/src/assets/i18n/id.json | 587 - .../html_source/src/assets/i18n/it.json | 593 - .../html_source/src/assets/i18n/ja.json | 588 - .../html_source/src/assets/i18n/ko.json | 593 - .../html_source/src/assets/i18n/nl.json | 593 - .../html_source/src/assets/i18n/no.json | 593 - .../html_source/src/assets/i18n/pl.json | 593 - .../html_source/src/assets/i18n/pt.json | 593 - .../html_source/src/assets/i18n/ro.json | 593 - .../html_source/src/assets/i18n/ru.json | 593 - .../html_source/src/assets/i18n/sr.json | 593 - .../html_source/src/assets/i18n/sv.json | 593 - .../html_source/src/assets/i18n/tr.json | 593 - .../html_source/src/assets/i18n/uk.json | 593 - .../html_source/src/assets/i18n/vi.json | 593 - .../html_source/src/assets/i18n/zh.json | 593 - .../html_source/src/assets/icons/account.svg | 15 - .../html_source/src/assets/icons/addnew.svg | 9 - .../html_source/src/assets/icons/alert.svg | 9 - .../src/assets/icons/arrow-down.svg | 9 - .../src/assets/icons/arrow-right.svg | 9 - .../html_source/src/assets/icons/arrow-up.svg | 9 - .../html_source/src/assets/icons/back.svg | 10 - .../src/assets/icons/close-wallet-blue.svg | 10 - .../src/assets/icons/close-wallet.svg | 10 - .../html_source/src/assets/icons/close.svg | 18 - .../src/assets/icons/complete-testwallet.svg | 11 - .../html_source/src/assets/icons/contacts.svg | 24 - .../src/assets/icons/contracts.svg | 13 - .../html_source/src/assets/icons/copy.svg | 10 - .../html_source/src/assets/icons/delete.svg | 11 - .../src/assets/icons/details-settings.svg | 16 - .../html_source/src/assets/icons/details.svg | 10 - .../html_source/src/assets/icons/edit.svg | 10 - .../html_source/src/assets/icons/history.svg | 12 - .../html_source/src/assets/icons/howto.svg | 20 - .../html_source/src/assets/icons/icons.json | 13 - .../src/assets/icons/import-export.svg | 10 - .../html_source/src/assets/icons/info.svg | 1 - .../src/assets/icons/lock-transaction.svg | 10 - .../html_source/src/assets/icons/lock.svg | 12 - .../html_source/src/assets/icons/logo.svg | 31 - .../html_source/src/assets/icons/logout.svg | 14 - .../html_source/src/assets/icons/message.svg | 9 - .../src/assets/icons/modal-alert.svg | 19 - .../src/assets/icons/modal-info.svg | 21 - .../src/assets/icons/modal-success.svg | 26 - .../html_source/src/assets/icons/new.svg | 17 - .../src/assets/icons/not-allowed.svg | 7 - .../html_source/src/assets/icons/purchase.svg | 12 - .../src/assets/icons/receive-green.svg | 10 - .../html_source/src/assets/icons/receive.svg | 10 - .../html_source/src/assets/icons/safety.svg | 21 - .../html_source/src/assets/icons/secured.svg | 10 - .../html_source/src/assets/icons/sell.svg | 15 - .../html_source/src/assets/icons/send-red.svg | 10 - .../html_source/src/assets/icons/send.svg | 10 - .../html_source/src/assets/icons/settings.svg | 14 - .../html_source/src/assets/icons/staking.svg | 14 - .../html_source/src/assets/icons/time.svg | 10 - .../src/assets/icons/unlock-transaction.svg | 10 - .../src/assets/icons/unsecured.svg | 10 - .../src/assets/icons/update-alert.svg | 9 - .../html_source/src/assets/icons/update.svg | 12 - .../html_source/src/assets/images/Loading.png | Bin 3245 -> 0 bytes .../src/assets/images/background-dark.png | Bin 34583 -> 0 bytes .../src/assets/images/background-gray.png | Bin 37975 -> 0 bytes .../src/assets/images/background-white.png | Bin 35468 -> 0 bytes .../html_source/src/assets/images/logo.png | Bin 5422 -> 0 bytes .../html_source/src/assets/images/qr-code.png | Bin 5337 -> 0 bytes .../src/assets/scss/base/_base.scss | 1045 - .../src/assets/scss/base/_mixins.scss | 98 - .../src/assets/scss/base/_null.scss | 128 - .../src/assets/scss/base/_theme.scss | 187 - .../src/assets/scss/layout/_contact.scss | 88 - .../src/assets/scss/layout/_main.scss | 119 - .../src/assets/scss/layout/_seed-phrase.scss | 258 - .../src/assets/scss/layout/_settings.scss | 0 .../src/assets/scss/layout/_sidebar.scss | 191 - .../src/assets/scss/layout/_status.scss | 232 - .../src/assets/scss/layout/_wallet.scss | 531 - .../src/assets/scss/modules/_head.scss | 64 - .../src/assets/scss/modules/_scroll.scss | 24 - .../src/assets/scss/modules/_table.scss | 64 - .../qt-daemon/html_source/src/browserslist | 11 - .../src/environments/environment.prod.ts | 3 - .../src/environments/environment.ts | 16 - src/gui/qt-daemon/html_source/src/favicon.ico | Bin 145619 -> 0 bytes .../html_source/src/files/Zano.desktop | 8 - .../html_source/src/files/app22macos.png | Bin 992 -> 0 bytes .../src/files/app22macos_blocked.png | Bin 15225 -> 0 bytes .../html_source/src/files/app22windows.png | Bin 724 -> 0 bytes .../src/files/app22windows_blocked.png | Bin 1247 -> 0 bytes .../src/files/desktop_linux_icon.png | Bin 1293 -> 0 bytes src/gui/qt-daemon/html_source/src/index.html | 15 - .../qt-daemon/html_source/src/karma.conf.js | 31 - src/gui/qt-daemon/html_source/src/main.ts | 13 - .../qt-daemon/html_source/src/polyfills.ts | 80 - src/gui/qt-daemon/html_source/src/store.ts | 36 - src/gui/qt-daemon/html_source/src/styles.scss | 95 - src/gui/qt-daemon/html_source/src/test.ts | 20 - .../html_source/src/tsconfig.app.json | 11 - .../html_source/src/tsconfig.spec.json | 18 - src/gui/qt-daemon/html_source/src/tslint.json | 17 - src/gui/qt-daemon/html_source/tsconfig.json | 28 - src/gui/qt-daemon/html_source/tslint.json | 131 - src/gui/qt-daemon/layout | 1 + 475 files changed, 4 insertions(+), 210436 deletions(-) delete mode 100644 src/gui/qt-daemon/html/OpenSans-Bold.ttf delete mode 100644 src/gui/qt-daemon/html/OpenSans-ExtraBold.ttf delete mode 100644 src/gui/qt-daemon/html/OpenSans-Light.ttf delete mode 100644 src/gui/qt-daemon/html/OpenSans-Regular.ttf delete mode 100644 src/gui/qt-daemon/html/OpenSans-SemiBold.ttf delete mode 100644 src/gui/qt-daemon/html/account.svg delete mode 100644 src/gui/qt-daemon/html/alert.svg delete mode 100644 src/gui/qt-daemon/html/arrow-down.svg delete mode 100644 src/gui/qt-daemon/html/arrow-right.svg delete mode 100644 src/gui/qt-daemon/html/arrow-up.svg delete mode 100644 src/gui/qt-daemon/html/assets/fonts/OpenSans-Bold.ttf delete mode 100644 src/gui/qt-daemon/html/assets/fonts/OpenSans-ExtraBold.ttf delete mode 100644 src/gui/qt-daemon/html/assets/fonts/OpenSans-Light.ttf delete mode 100644 src/gui/qt-daemon/html/assets/fonts/OpenSans-Regular.ttf delete mode 100644 src/gui/qt-daemon/html/assets/fonts/OpenSans-SemiBold.ttf delete mode 100644 src/gui/qt-daemon/html/assets/i18n/af.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ar.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ca.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/cs.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/da.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/de.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/el.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/en.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/es.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/fi.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/fr.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/he.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/hu.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/id.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/it.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ja.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ko.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/nl.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/no.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/pl.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/pt.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ro.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/ru.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/sr.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/sv.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/tr.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/uk.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/vi.json delete mode 100644 src/gui/qt-daemon/html/assets/i18n/zh.json delete mode 100644 src/gui/qt-daemon/html/assets/icons/account.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/addnew.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/alert.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/arrow-down.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/arrow-right.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/arrow-up.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/back.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/close-wallet-blue.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/close-wallet.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/close.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/complete-testwallet.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/contacts.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/contracts.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/copy.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/delete.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/details-settings.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/details.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/edit.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/history.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/howto.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/icons.json delete mode 100644 src/gui/qt-daemon/html/assets/icons/import-export.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/info.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/lock-transaction.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/lock.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/logo.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/logout.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/message.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/modal-alert.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/modal-info.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/modal-success.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/new.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/not-allowed.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/purchase.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/receive-green.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/receive.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/safety.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/secured.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/sell.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/send-red.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/send.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/settings.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/staking.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/time.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/unlock-transaction.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/unsecured.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/update-alert.svg delete mode 100644 src/gui/qt-daemon/html/assets/icons/update.svg delete mode 100644 src/gui/qt-daemon/html/assets/images/Loading.png delete mode 100644 src/gui/qt-daemon/html/assets/images/background-dark.png delete mode 100644 src/gui/qt-daemon/html/assets/images/background-gray.png delete mode 100644 src/gui/qt-daemon/html/assets/images/background-white.png delete mode 100644 src/gui/qt-daemon/html/assets/images/logo.png delete mode 100644 src/gui/qt-daemon/html/assets/images/qr-code.png delete mode 100644 src/gui/qt-daemon/html/assets/scss/base/_base.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/base/_mixins.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/base/_null.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/base/_theme.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_contact.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_main.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_seed-phrase.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_settings.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_sidebar.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_status.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/layout/_wallet.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/modules/_head.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/modules/_scroll.scss delete mode 100644 src/gui/qt-daemon/html/assets/scss/modules/_table.scss delete mode 100644 src/gui/qt-daemon/html/back.svg delete mode 100644 src/gui/qt-daemon/html/background-dark.png delete mode 100644 src/gui/qt-daemon/html/background-gray.png delete mode 100644 src/gui/qt-daemon/html/background-white.png delete mode 100644 src/gui/qt-daemon/html/close-wallet-blue.svg delete mode 100644 src/gui/qt-daemon/html/close-wallet.svg delete mode 100644 src/gui/qt-daemon/html/close.svg delete mode 100644 src/gui/qt-daemon/html/complete-testwallet.svg delete mode 100644 src/gui/qt-daemon/html/contacts.svg delete mode 100644 src/gui/qt-daemon/html/contracts.svg delete mode 100644 src/gui/qt-daemon/html/copy.svg delete mode 100644 src/gui/qt-daemon/html/delete.svg delete mode 100644 src/gui/qt-daemon/html/details-settings.svg delete mode 100644 src/gui/qt-daemon/html/details.svg delete mode 100644 src/gui/qt-daemon/html/edit.svg delete mode 100644 src/gui/qt-daemon/html/favicon.ico delete mode 100644 src/gui/qt-daemon/html/files/Zano.desktop delete mode 100644 src/gui/qt-daemon/html/files/app22macos.png delete mode 100644 src/gui/qt-daemon/html/files/app22macos_blocked.png delete mode 100644 src/gui/qt-daemon/html/files/app22windows.png delete mode 100644 src/gui/qt-daemon/html/files/app22windows_blocked.png delete mode 100644 src/gui/qt-daemon/html/files/desktop_linux_icon.png delete mode 100644 src/gui/qt-daemon/html/history.svg delete mode 100644 src/gui/qt-daemon/html/howto.svg delete mode 100644 src/gui/qt-daemon/html/import-export.svg delete mode 100644 src/gui/qt-daemon/html/index.html delete mode 100644 src/gui/qt-daemon/html/info.svg delete mode 100644 src/gui/qt-daemon/html/lock-transaction.svg delete mode 100644 src/gui/qt-daemon/html/lock.svg delete mode 100644 src/gui/qt-daemon/html/logout.svg delete mode 100644 src/gui/qt-daemon/html/main.js delete mode 100644 src/gui/qt-daemon/html/main.js.map delete mode 100644 src/gui/qt-daemon/html/message.svg delete mode 100644 src/gui/qt-daemon/html/modal-alert.svg delete mode 100644 src/gui/qt-daemon/html/modal-info.svg delete mode 100644 src/gui/qt-daemon/html/modal-success.svg delete mode 100644 src/gui/qt-daemon/html/new.svg delete mode 100644 src/gui/qt-daemon/html/not-allowed.svg delete mode 100644 src/gui/qt-daemon/html/polyfills.js delete mode 100644 src/gui/qt-daemon/html/polyfills.js.map delete mode 100644 src/gui/qt-daemon/html/purchase.svg delete mode 100644 src/gui/qt-daemon/html/receive-green.svg delete mode 100644 src/gui/qt-daemon/html/receive.svg delete mode 100644 src/gui/qt-daemon/html/runtime.js delete mode 100644 src/gui/qt-daemon/html/runtime.js.map delete mode 100644 src/gui/qt-daemon/html/safety.svg delete mode 100644 src/gui/qt-daemon/html/secured.svg delete mode 100644 src/gui/qt-daemon/html/sell.svg delete mode 100644 src/gui/qt-daemon/html/send-red.svg delete mode 100644 src/gui/qt-daemon/html/send.svg delete mode 100644 src/gui/qt-daemon/html/settings.svg delete mode 100644 src/gui/qt-daemon/html/staking.svg delete mode 100644 src/gui/qt-daemon/html/styles.js delete mode 100644 src/gui/qt-daemon/html/styles.js.map delete mode 100644 src/gui/qt-daemon/html/time.svg delete mode 100644 src/gui/qt-daemon/html/unlock-transaction.svg delete mode 100644 src/gui/qt-daemon/html/unsecured.svg delete mode 100644 src/gui/qt-daemon/html/update-alert.svg delete mode 100644 src/gui/qt-daemon/html/update.svg delete mode 100644 src/gui/qt-daemon/html/vendor.js delete mode 100644 src/gui/qt-daemon/html/vendor.js.map delete mode 100644 src/gui/qt-daemon/html_source/.editorconfig delete mode 100644 src/gui/qt-daemon/html_source/.gitignore delete mode 100644 src/gui/qt-daemon/html_source/README.md delete mode 100644 src/gui/qt-daemon/html_source/angular.json delete mode 100644 src/gui/qt-daemon/html_source/e2e/protractor.conf.js delete mode 100644 src/gui/qt-daemon/html_source/e2e/src/app.e2e-spec.ts delete mode 100644 src/gui/qt-daemon/html_source/e2e/src/app.po.ts delete mode 100644 src/gui/qt-daemon/html_source/e2e/tsconfig.e2e.json delete mode 100644 src/gui/qt-daemon/html_source/package.json delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/confirm-modal/confirm-modal.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/confirm-modal/confirm-modal.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/confirm-modal/confirm-modal.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/confirm-modal/confirm-modal.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/input-validate/input-validate.directive.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/input-validate/input-validate.directive.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/modal-container/modal-container.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/modal-container/modal-container.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/modal-container/modal-container.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/modal-container/modal-container.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/progress-container/progress-container.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/progress-container/progress-container.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/progress-container/progress-container.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/progress-container/progress-container.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/staking-switch/staking-switch.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/staking-switch/staking-switch.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/staking-switch/staking-switch.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/staking-switch/staking-switch.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/tooltip.directive.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/transaction-details/transaction-details.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/transaction-details/transaction-details.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/transaction-details/transaction-details.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/directives/transaction-details/transaction-details.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/models/contact.model.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/models/contract.model.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/models/transaction.model.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/models/wallet.model.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/contract-status-messages.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/contract-status-messages.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/contract-time-left.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/contract-time-left.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/history-type-messages.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/history-type-messages.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/int-to-money.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/int-to-money.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/money-to-int.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/money-to-int.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/safe-html.pipe.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/pipes/safe-html.pipe.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/backend.service.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/modal.service.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/modal.service.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/pagination.service.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/pagination.service.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/pagination.store.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/utils.service.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_helpers/services/variables.service.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/_shared/constants.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/add-contacts/add-contacts.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/add-contacts/add-contacts.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/add-contacts/add-contacts.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/add-contacts/add-contacts.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/app-routing.module.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/app.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/app.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/app.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/app.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/app.module.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/assign-alias/assign-alias.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/assign-alias/assign-alias.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/assign-alias/assign-alias.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/assign-alias/assign-alias.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contact-send/contact-send.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/contact-send/contact-send.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/contact-send/contact-send.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contact-send/contact-send.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contacts/contacts.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/contacts/contacts.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/contacts/contacts.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contacts/contacts.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contracts/contracts.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/contracts/contracts.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/contracts/contracts.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/contracts/contracts.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/create-wallet/create-wallet.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/create-wallet/create-wallet.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/create-wallet/create-wallet.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/create-wallet/create-wallet.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/edit-alias/edit-alias.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/edit-alias/edit-alias.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/edit-alias/edit-alias.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/edit-alias/edit-alias.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/export-import/export-import.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/export-import/export-import.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/export-import/export-import.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/export-import/export-import.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/history/history.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/history/history.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/history/history.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/history/history.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/login/login.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/login/login.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/login/login.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/login/login.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/main/main.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/main/main.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/main/main.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/main/main.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/messages/messages.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/messages/messages.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/messages/messages.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/messages/messages.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet-modal/open-wallet-modal.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet-modal/open-wallet-modal.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet-modal/open-wallet-modal.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet-modal/open-wallet-modal.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet/open-wallet.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet/open-wallet.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet/open-wallet.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/open-wallet/open-wallet.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/purchase/purchase.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/purchase/purchase.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/purchase/purchase.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/purchase/purchase.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/receive/receive.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/receive/receive.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/receive/receive.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/receive/receive.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/restore-wallet/restore-wallet.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/restore-wallet/restore-wallet.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/restore-wallet/restore-wallet.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/restore-wallet/restore-wallet.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/seed-phrase/seed-phrase.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/seed-phrase/seed-phrase.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/seed-phrase/seed-phrase.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/seed-phrase/seed-phrase.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/send-modal/send-modal.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/send-modal/send-modal.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/send-modal/send-modal.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/send-modal/send-modal.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/send/send.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/send/send.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/send/send.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/send/send.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/settings/settings.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/settings/settings.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/settings/settings.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/sidebar/sidebar.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/sidebar/sidebar.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/sidebar/sidebar.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/sidebar/sidebar.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/staking/staking.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/staking/staking.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/staking/staking.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/staking/staking.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/transfer-alias/transfer-alias.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/transfer-alias/transfer-alias.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/transfer-alias/transfer-alias.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/transfer-alias/transfer-alias.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/typing-message/typing-message.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/typing-message/typing-message.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/typing-message/typing-message.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/typing-message/typing-message.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet-details/wallet-details.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet-details/wallet-details.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet-details/wallet-details.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet-details/wallet-details.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet/wallet.component.html delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet/wallet.component.scss delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet/wallet.component.spec.ts delete mode 100644 src/gui/qt-daemon/html_source/src/app/wallet/wallet.component.ts delete mode 100644 src/gui/qt-daemon/html_source/src/assets/.gitkeep delete mode 100644 src/gui/qt-daemon/html_source/src/assets/fonts/OpenSans-Bold.ttf delete mode 100644 src/gui/qt-daemon/html_source/src/assets/fonts/OpenSans-ExtraBold.ttf delete mode 100644 src/gui/qt-daemon/html_source/src/assets/fonts/OpenSans-Light.ttf delete mode 100644 src/gui/qt-daemon/html_source/src/assets/fonts/OpenSans-Regular.ttf delete mode 100644 src/gui/qt-daemon/html_source/src/assets/fonts/OpenSans-SemiBold.ttf delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/af.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ar.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ca.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/cs.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/da.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/de.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/el.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/en.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/es.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/fi.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/fr.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/he.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/hu.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/id.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/it.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ja.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ko.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/nl.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/no.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/pl.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/pt.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ro.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/ru.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/sr.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/sv.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/tr.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/uk.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/vi.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/zh.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/account.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/addnew.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/alert.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/arrow-down.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/arrow-right.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/arrow-up.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/back.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/close-wallet-blue.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/close-wallet.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/close.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/complete-testwallet.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/contacts.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/contracts.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/copy.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/delete.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/details-settings.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/details.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/edit.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/history.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/howto.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/icons.json delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/import-export.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/info.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/lock-transaction.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/lock.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/logo.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/logout.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/message.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/modal-alert.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/modal-info.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/modal-success.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/new.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/not-allowed.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/purchase.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/receive-green.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/receive.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/safety.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/secured.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/sell.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/send-red.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/send.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/settings.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/staking.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/time.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/unlock-transaction.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/unsecured.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/update-alert.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/icons/update.svg delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/Loading.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/background-dark.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/background-gray.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/background-white.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/logo.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/images/qr-code.png delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/base/_base.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/base/_mixins.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/base/_null.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/base/_theme.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_contact.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_main.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_seed-phrase.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_settings.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_sidebar.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_status.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/layout/_wallet.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/modules/_head.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/modules/_scroll.scss delete mode 100644 src/gui/qt-daemon/html_source/src/assets/scss/modules/_table.scss delete mode 100644 src/gui/qt-daemon/html_source/src/browserslist delete mode 100644 src/gui/qt-daemon/html_source/src/environments/environment.prod.ts delete mode 100644 src/gui/qt-daemon/html_source/src/environments/environment.ts delete mode 100644 src/gui/qt-daemon/html_source/src/favicon.ico delete mode 100644 src/gui/qt-daemon/html_source/src/files/Zano.desktop delete mode 100644 src/gui/qt-daemon/html_source/src/files/app22macos.png delete mode 100644 src/gui/qt-daemon/html_source/src/files/app22macos_blocked.png delete mode 100644 src/gui/qt-daemon/html_source/src/files/app22windows.png delete mode 100644 src/gui/qt-daemon/html_source/src/files/app22windows_blocked.png delete mode 100644 src/gui/qt-daemon/html_source/src/files/desktop_linux_icon.png delete mode 100644 src/gui/qt-daemon/html_source/src/index.html delete mode 100644 src/gui/qt-daemon/html_source/src/karma.conf.js delete mode 100644 src/gui/qt-daemon/html_source/src/main.ts delete mode 100644 src/gui/qt-daemon/html_source/src/polyfills.ts delete mode 100644 src/gui/qt-daemon/html_source/src/store.ts delete mode 100644 src/gui/qt-daemon/html_source/src/styles.scss delete mode 100644 src/gui/qt-daemon/html_source/src/test.ts delete mode 100644 src/gui/qt-daemon/html_source/src/tsconfig.app.json delete mode 100644 src/gui/qt-daemon/html_source/src/tsconfig.spec.json delete mode 100644 src/gui/qt-daemon/html_source/src/tslint.json delete mode 100644 src/gui/qt-daemon/html_source/tsconfig.json delete mode 100644 src/gui/qt-daemon/html_source/tslint.json create mode 160000 src/gui/qt-daemon/layout diff --git a/.gitmodules b/.gitmodules index c56c27cc..4c52bbd4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "contrib/db/libmdbx"] path = contrib/db/libmdbx url = https://github.com/leo-yuriev/libmdbx.git +[submodule "src\\gui\\qt-daemon\\layout"] + path = src\\gui\\qt-daemon\\layout + url = git@github.com:hyle-team/zano_ui.git diff --git a/src/gui/qt-daemon/html/OpenSans-Bold.ttf b/src/gui/qt-daemon/html/OpenSans-Bold.ttf deleted file mode 100644 index 7b529456032abf9132194ddaac62d2d163247c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224452 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%0AFPX_$oWVSJ?r+$`0^Vc7U(41ALVo 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 NJ^r4-t1mN*{|BJyceVfk diff --git a/src/gui/qt-daemon/html/OpenSans-ExtraBold.ttf b/src/gui/qt-daemon/html/OpenSans-ExtraBold.ttf deleted file mode 100644 index 3660681d398100fd0e2dcffa089570eea893629d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222424 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

-5d!dcM^@c6Oo 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 F{{!U$tp@-A diff --git a/src/gui/qt-daemon/html/OpenSans-Light.ttf b/src/gui/qt-daemon/html/OpenSans-Light.ttf deleted file mode 100644 index 563872c7680aed4d9f8f7a4bc4f3c1506c2cbbc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222236 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

    1^%;kbEy)x%1!e{>m|$h5Iw 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

    9J%&UTP`LM`y4=#imtiCKi100?RTe1+z~8* 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

    YE=h9c6s`zZi@B7|3|JKJY7qo+jyw@ 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 - - - - - diff --git a/src/gui/qt-daemon/html/alert.svg b/src/gui/qt-daemon/html/alert.svg deleted file mode 100644 index b549fd95..00000000 --- a/src/gui/qt-daemon/html/alert.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/arrow-down.svg b/src/gui/qt-daemon/html/arrow-down.svg deleted file mode 100644 index d24a3aeb..00000000 --- a/src/gui/qt-daemon/html/arrow-down.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/arrow-right.svg b/src/gui/qt-daemon/html/arrow-right.svg deleted file mode 100644 index bd4269b3..00000000 --- a/src/gui/qt-daemon/html/arrow-right.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/gui/qt-daemon/html/arrow-up.svg b/src/gui/qt-daemon/html/arrow-up.svg deleted file mode 100644 index f6515fdd..00000000 --- a/src/gui/qt-daemon/html/arrow-up.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/fonts/OpenSans-Bold.ttf b/src/gui/qt-daemon/html/assets/fonts/OpenSans-Bold.ttf deleted file mode 100644 index 7b529456032abf9132194ddaac62d2d163247c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224452 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%0AFPX_$oWVSJ?r+$`0^Vc7U(41ALVo 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 NJ^r4-t1mN*{|BJyceVfk diff --git a/src/gui/qt-daemon/html/assets/fonts/OpenSans-ExtraBold.ttf b/src/gui/qt-daemon/html/assets/fonts/OpenSans-ExtraBold.ttf deleted file mode 100644 index 3660681d398100fd0e2dcffa089570eea893629d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222424 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

    -5d!dcM^@c6Oo zF_w8bh9h_+E*9Qka7c)iJCrZpsHXeUH}nxMbbqJVTJU^s6r)fvG;^b{7!fT88R|)} zo3u(Tjf@OchQ>IJTD?U-$g7PS>eXtA#lVHhWMPB6vS4@s9Tt{t4l&=YOE{Cc7))@n z<_;{nv$9wKGZ0lUQg{Iw3OM2XjN`P&-+yjDTUb|hqT0v4yD(h9Em1#K$;wB*<#g zAh;4$=#>YP;6g7V{WM_x^y=F)Y`!JD7WBX*VE{G8*Kyes2cV;G!MS`?S$jmVC zecrrq@o3J3q3+QB;#s;(r^{a7vuwzaiu__>vG}q06IT8wB6{|k&UU_XHdmI2XC9uH zwX$*b3Tgz`Rshy0VAzV?5~~H~7}g{>M6LyV24Vz!!JY8=-6m#iWq}0?TYItvivjBu zqnukQelK33nKb&?zL|xO3>epNa&OB93++zBXgJNR5HHzW>z0YvYQ>Yaz!Dp|1z3XD z1CP;e6T%GUpdf=_0BNl{qA@9mBC^n{Fc9lKVBCi$zii54;ttb8x%@|gwRkqkz0!y z?sS8?;*PETkW6qdE3#0~U2NKk)#{KIG{B`CBvv@$;j=ZAvV^a@5$e2~3w_$BJJpw}FVc9tZrI zP%FnNutORWs<#?ta48GC3aegYEbwY5FNqCSA<_m4gH2k$G0!ld|Cn>?%m7NIFqJ|= ztkuo;`9*AOZh7P5l9gl1i}I5bf8mST4)I0r*O)JV7#iJf$?A{wB2O%$MR*N3Oh9a{ zKUw0*Pca&WutZH{q%Fjj!0|DCutAsU$&5)135kix@o)+HFt<+U1`G5W>J@A%Ug6T| z6bg&W)o-ZRWw3M~;*g zZn%%wL*cf^)AuXUCg)IWArGki&F=xJ^9ri+HCkeQ577 zm33|3+cw6E84aVJdbwfzrkqjp8+-Me-6%|bC%gC1H$GN|heX-L_s)K^W5cOF!4rCB z4DS`cYwnw;b@Ds%o_z{?CA<3YWA;^4w1S2(ioyj+n_x9htU(%uLTOco1P3XNM!wK% zG^pU{fOhWtwnqGcQ!M8g|1*iOO1gt>+!*=NWi_K&f{nq{Yjgd(=ef!M*zvZglUu%Q ze!sHl;<0u(PaIi@FPl6AvYoscyn;`N5 z+IEg04PllXZ8-Q$7s@+=@y?jZJr}qe0iI}tPNr6CG)5D$7T{Kyv_vU07qVP>&ehKASd=7f;D8?OV1sGpPhcIp7+24fY^n zkB~jW?hKiJhV|o-(=qI!mDFCb0FvV*gFLapMq{K>sZt@C-HH7?SA^AS3KN3Df(pI1 zFoRjIA|}QR;D$~)mIQ%;?uQ?SA43@ZiV`UaQCZsp`vm5Yz`9XO^O zz{ID9B)>fM*NL{CFHbu8KG!gF=H?fWnuhv?w?u<5byZ2(`hsDfdHqJyHD;)7}SL03^n;Wdn*PR{Ft6+duR0Id1ZdnJw>21DBTm z{WwPT+ms_1RSS;+QGg)187uIxa8+=DS7qQ01zxO)JIw7LL;(<6mvu>S5{_VHa|63` zXK51Ey+p~%_L!0}qX!QeQ&qxc!`Pjq{VBwNx}OsNz5kg_o1R&_?pZ*w44Uo?pfD3V zG6ig*T1afPQHi8?K}&QxOQBb1Q0bMCB;u}N3kYwQ-2%pEFl+IFNC>FnmYe|uffWJc zpB~4jR4gB8G6609vrJRpKm6BA;=2|3d`bD>ygW;G@!TjeTkd`O1@R;C8a#nx{Dk?9 zwr3t+y#ASm3|oM+1#p^3H1ks;`Cw&Gke1il>_L%gy%A|I@^HxyFyDn!vS9c4DUw*q zVp!e~;~kc6iChZF`esPh7mG#u!@Ga`^1U++$|zbUHfpss-Mz!hs&|&bs8a4M9zipejVe)!V_^s z%T1wLAjK7Dw8aJmDZ*?*q}m!;?6n$r^`NdSgbYEZ5SZBFAfOtgj5&WW0Mo}-MyI`m z!35z#qB;KhZ~uJkt?{ETj9ggw@|H($UV7-*NL@dotNben; zlIMATK}&0DN}Dq^B`Pr|wHiv9vYlRjI)0D9$}&-cR0fMhqcY*```{3b*O4UP zy_`r+ro`{=@RNb4fIr>@Sp6vo%-3LhPt34q`2*_~?!d5V!`9Rs+qYt09o&v!@q6ls z7q7-d9r=i!-!}iJtKvnma2kVSDSWukq_=Q-dO|cxq+eRFg&NGsOe(!hSJ>%{Gp_>5 z$B!q5vMvrdQ{=&cFfP9@H6-oy+g0v!4CmS z>rmk;M%9r_k4ZJiZP?*Bb_;DwzOZ+ZHYhecgE53QaK3CjD5ASWI?}%IJ3^DJ$cg2BRE|(;JK>N3U z*8VQ7#BLq+iO@V(07ozx=?T?XEC$5K1j@`>r~&j1!6g%Z%Ih-19e_hXDs7Od&>Iw? zM07bP4ITjkT<#>voH1<;x6uM>K-J*j7P56ASo8F^7JBiJM51uD7=`uI?x9 z<}(mKaDuDDOu@X(rV9>s#;PJBTux#%D#IgODue_4q+oMqLrDEgH8w=p%9ZUQ8+Du& z&XIy`SVFdfLyRn$mFePsGnY*G@~Af_ZpOkz4|OXjIrhc)Cm-U@dWVZEn{veOc)YhH z{xYM{q_xbMBK{EH-O7vKdseRgt+Wad(j{Upx2D5yL3~z_@eznB-1S>n#Dy+l=>>Aj zZ#^)lT+AsObBaM^HPoQB34#S{_1G|_GloqmEL>12rSOL2ld~xy9oer+CG{k&b3s8P zw*J|^L!q~V4IQ=j!G`(=rcA7x z#?`i!$c&@w>&8^o)?prtp@oZpKGq1%gpVZ* z(XN~vmZAXGVJoGMRlOudEVI*}!VX*2v93n~dj?k5>830$ieA zPHk2V?y|NoGrabejmETHqlt-(uj{dFSdG1jXj0)x3e%f3DyHx-IGT7|eu<)=^ zUKLWe&3cnbk1WbiA}hZ)_sWE|UBH{Y2VA5LFo-+i>}*>YiyY>FAiXjJp*n~IcmC6( z)7CZg&SI)(8@KJw#o^iEyLNpqJ5wfJ%E~RAEdHyed8qgn%}(hvq}K#$o%8uupj-{P zjkrjwlwIG~6JyYtRkDz9P6_`lCK5kbn~)e{HiUCp6?CW7YD47BpLGM34wM?*h7XW} z6N1&fIXx>rD+C-Ak`=<1n~D%cJX1-E_^dcr7iaUe#09U-FRvV3@yMGC6B8R>eZ*T? zJ7n&G`H7Sa&+J`Z-n-W@?!0%@+=KHIlNat=Fr>b^Z0>=%@vfN%=9Z1=HEd|_-ou6i z+t`Q|b|ZQkOlEj`=}Z=rHOOcrDjD9AQNw3K#wvogp^%*rxyfv*Lngnp zJ?y7du9Z?LJ2ELl4J?@m(RirbyOxWoTEFt?JOClUwr;D_%8Dbync-#y(ca1>CC$&&3PE+QgLjlf%0 zudtpy6Znh_Q-Ud4867*+8y&3F4fQH%=lTF~CN?+e6R>*H39~kgtcVXto?VE71;LnO z$MQpv04Ti}6raIDIm`j_27oVh?pzPERbK(3^L9=B3m>y`rV!%Y+`qNkuV*JI4=g>|5Quet*Ty?w*=% z{d(q1m^0m7+B>Chc15Bc^SvZ|CxpnIude(8qwUg|l3`=V4l5Z$FO4ZJ9Xqyk_-NVE!6QZvDjZo>Ja|M!QQ^oD&}L)sRz@Fa z94oTBGN5&AyiR4-nd5rI1^0*!j?T=IX^2sSPk6T&b6R+Z)e0m=b;1F@l5h-4N-;Ww z5v>fO4!p_&2~SoFhaI+9E(>0PJ1y3fk+o)k{3pKPnC;q&>Mf`aye`?;GMGxnF>-p`2n7uf zcbF9#jYHvZ#Zmn7lMtgpgj*o`U^dwg(^wLlgz`?Wmt9~5la2TL++d+Vd{Pn57T&Pd z0gZqFG}kA&=Zvzc3pT%7i3F*-j3HCjj$YX!md3`U^)0XAzFs&aXW{f&(^P^y(HR}K z%N@0$NzD1l9y_#8Fq3n{&Pk~(UP!?LIEeJ}gz<6#djXuF4$>&KT5Jnz^jeur2Zs0W z2e5Z2BpYBjf&c+PM-4Vd;ywOd{;HTRrJ>?AY7qY^&gXI5feLcC4;UE%I~KH)#!l_&lB8MaCthz4f8f}X59+Ox`?LZ6tM{bJ1ZWH7G8uye7HkkyJ>oi8k(bMZf&{CevZ_`1 z{0EN2jtGd;As`)$iP}#ziEI#VyvpX^qWAC6BMXZDA3Q3&mOJ*-_xT6KrAb*S@#5|Oi&?4fw%meb12qth_k^%Z!@*|_ ztbv%u#5Rrm&P_opx7=b}lEeMP;|&h@ClT1GQ4xb7GRmwCW3<65V!%g0*)jHHnvIEP zTvivml`~=Q#EE++jDNWf-#-n_%p5wnSFgcB6)x26nJ|9$#0k46qzx@eO&>m-jaLK$ z_LId!OX=a~hUygxq=IR%`Oj-Kcp*`%L9UWqU>i$}2i^X+IVFB%;)MUZT3^!q_`3Ja z8*vr?E4R1v?VF9_VP+S=hyA!>?kD&mc;nAwl^cz)0(db*LqfxpIvW=pOzl7u;t6-v zq(prQXHx1ZOV0O;DSKDL!Tr=;{dxI-0mDZ>Rr<=Tr=APXs@_0HbH!&rE3b;_UAb#e z|HmHcQ8sEEelH(b&gQNotCZ!!+N@du-VTB4&>9t5MO?gKg{Q8zM>%c!AhiQfu$3aS zzxQ&a#EI}I;2KJ1 zm*p0nQq>fx8R(MC- zpN(Y=*7NLzEM^`%HLb+X9VS0mioUYlSnlR~ySBae&Wl?=6tjD#Pn=jQl=bE%B~>(_)WVfgej@Ifw*lVk%CLrMXVamUB#&{Pqn-O=2y7jlp5s zBPBPZX!A)2QK5e zzWlfCZ=eq0S;B;z%zqn*eHBIzE_FsmM_U(bOJ)gKfwn1~Z50Oydv}brBqPvk33LW} z6;jYLj?BhpfC7Cl0e^Jq6}WJTErMED4F4n!5lovSA|f1OtW%oJ@wx&ry5qa`oGe~j{o(FMT8DdbySwSQv9+~h ztB`Fk{W2#q$Q3iWIQUhV8ySd{;4-3o6?^${Bq`$$TFilF|6g0s!DNZQMby20EbJHs zcQ^Z6gx=d?c1H^`nJh*N^=mxmlA7FwWJpIFT1pO*1;pS{p;3RAOD5}2l8hiS=YwHY zq=3eH>;O#lWNUQz)o}wa$jxS|*6EBaHH6?LA-v0GK+={PDc1(IK~3dmm6V{2{27Xb z#f~g!f3yqo7n;Iy8KgBBGYo!mF+J(`qM0UO8*nUuh;^{!O5w<gPY34TiXo{?}! ztsOXI`Q6c7TFfC6?rX6DEn@Drpo4uk{4F}E&HCUJj1K-$Ci}jS=)h4&2OWIhBYcu0 z_0ruBiTKrh;}oF9D_vU5=@_R2R>oI+)7=(;Wb}QIV0^wtg2X?{WZ$5BA%WCklT^x~ z*CIY#>~UFwOu@lQxex>wH9W#9SICFql~9GCQW=MNk;}uf!I2r&MfUEAX-E!_6!kI? z&=JuKqr={jX>Y`;`fj%U!i8P(?a!a@%(&;=)WZ$*XWb(U`u(5JVWz;TT&G~%k7y=d zsV+lYm`M=rDS_AERWc)Pl2h(Dwcob7;>0-U3p1!r#JqZyyW}X%yVO;%^as zZwp3!KOB?EYiPlwFv(AS*sVsY7PP_^Se7UcacV_! zJOT^14pJR89~OV2x$TXs~eF^O|BbDGz-ABdvQ<_+w~IZk?F!GaIy(=6>c zYtF+9-VqlpsAylO|K#t_m2(RtL1!tOQ=($802K`qerZGpe(!HFhbI2-EkMNOyib@5<4JoBcEw3U~ zid(H!YZW1L^8Y^P-kBuWzQ6aMe6r2lob@@+dDibE9>K|>b50SBh}(h|ke*~gurvj1 z`vVkvYVi$jQlY~c^=N7EH^KT6D@;Bd7LS(pSNx}V>2-73228ssVESvrp>uk~G~`pn zzMe#6Oa-ix9lWLxVr?X;LsEy5)TEN6&XrPL$dr_tYC>vFu&l7Q31tNQu3&wWOZOiO zqpj}!yG~)C+%7Rb2eO8AqYwm~w&B6#6BH^%9t=kiXFKPHvQ77%yk5dA~$ZkbKk*~92U+j zFU?QSD=q1>V8|VlIuGtp(f91N3u?oA&97reL>!$lgk9^49WhFMUPa8vZ{=dQe#^Fh z-y|)T_Fxl#`b1{D1vW4gqxVbOw@{LJe;7K#`$g^F569n^WP5D(n@|eQ`PwpJg%!ExgQ3u{!m^g~#_yJRYkWF=N8Kez(Y_I~;6;Jl=P7_`vK_ zzhX@uqvwGkOqw#Wtc3sbhrMIxjpCnn3d5P9_8Tx|Y#lpy5Yb;)QS$F2wht?c8 zx69(Y-EtR1_;N9Ze`(x`FBW~Uq<9-M!H%=qJh8at=Jrpt+>a+9pQ0Dh1{=u#raj@- z+i1ajiGw5M<=ZkX zmdpW7PA~940$!$sTSEXyu^`iUYkVoBGEFoS+AF9mTcVU{82|Ig;-6m?5I2FxpatC! zO(4qT4F3^%@_%B6|9PdexlhBPMeDcB+Bg2}f{jn!$LEf%A78g~+yJ>R?yVPD;Ol=f z{|NP-K}!ygpKxeE&$Wkc`Z@n~Y{ay=OTT>>d#6Q<(K&><1<3&v2Z*~qBfhG%Gsnc5 z4b%4i8L@LY|M`8|`^Uwa%KzmF?0s0Ykk`Hi8iDA64TAs)+6c9OpY}u>!3 z>2}$k8_5i$gq)#z7%&Ve^-a*yTgAHTB>{wyfDSbG5B)|`0TU7c;FWZVfO%eGH?Z{O zv-|JvbC|!*FE5`qVh^+0Stz&T{ORnFm0wOPn}6%P?MO65xKaL`>C?6&Gw3sZDreP9 zxzEj=*egk!ca19HwdP0Ygp0TgvCEWvffFuvnPtZJp#A%;C;Y!XfnDw`=qN!2S_`y` zS`RZIT++GH7(V#9=HnM*7%xuvVri{*Ir7|wM| zu5`QKqF4|oZ3!rdlUCX-@lWHViREgc()r&PNm} zS&KaTM)pOh)R3Cq%KMFDkZAcO|Arr5*?l~(F-v^+j3o~(TbA+2JrAwDZ(U+OG-H~N zQJV3iHscN&-D1`80c|#jCvs`VY>?0*LHpjg1Sak{!$~}W>k+4O5Q=fO<*Ql?+Y>D` z#&y~DEf`4))mmtT@t|D`+($XtS__hi4ONy3o?nl8~@PG6=s*w<-h#X`gt3m#O z2EG`<#6nin6fQhL9Am85N8BRx1W9kiQ?laJbX^;e8uw^zXv(wRMp>c_P!sHBXd&Fb zg*6zp7zG>54rnc8$5)Orcy6lw8M zU|xnLVlDE;{xwK*L<@4T%_xiy8+{l>e_BPkt8!YbqOJ+TL-7b+7jcM&ZlG+!W*Z&t z5OFAo%}h%2dtn$VC`^WvtAA4fKG%jOuQSDBbRtvGjWVdMVRk|gftVpQM3PK&^+FiM zaqYl0gOEEB@s5CZ1b2|PHAJ3Q5&7W$zt0^WhsOXPE8YPd{Z3Jn;m7WsGBb z(um&5=(-Jvzzh8w_RF-LrJDy>zumOy+iUYE_?Lgs3B6ovfld~+Kr4ss!#tG! zi8gpO<-2Qbfa<$3T=`g`_MQ!M1Dd79WOLb)Q-Uy=1*{&A zN%02p$?PrO&dGcpvG8SrQN zv$EYOxX565X=pOaNttfhEvtb{z%i1UU7U3?=TVGBe0=c{l0gVqn)=};%WOP48)~B# z*}rYuHn!&TzgrE#s>g19`5nG^&7`q>sk)v{b75p_(Wv_Wc{R3DHeTBC5?@67mJRV{ zhOh_;+ZG$vGFPLC_-ShSHJ1F}Mv~!#+>D^zYnUF+n>|hw;KH!N(OsvtF{tHMt&KQW zXhBlA{F2}bS{s81Zid=0#oH)H8{>iO4X>7W|+A|6yc9r_ju`QPXMAdK@e*XghQ4B4iX9vFwol60!MOq60Bt z66(pss%18)v#CX1Y1j$66fHu>DpBT%{#SsjY(|Dd9{d!fdkvD8(CdV6pxhu%1i8s@ zB3f+P2-0<)&~guEltes%EU)wg|4^HA>pg|@hzwxNq9e5}casi_KG)!NWH#XSM*VdF zs$otzV}@GH$&EOGREq>#3u1pB3vnIejzh1)%LSJR~Pr%P<_YW!+zoH zC!{s(B%wuUZM3;lK*R7G(`}6Z6toS`!%zEU4boRypK+VMuKCh!Onu@u#&w1sQ{&u* zVbuACgOJFEGCCiCa{T}gf~JB3w<1;Q9?g*54hL{@{mIVcv~;h{8E^qA4mS+}km&hH zI+ljMJ>rB2-)J0;q^do3h1-W6xckPu;T203m}8{`V!_^*dzf8p67;vA4?rc3apP3u z(T`(Wkv{+4XGhtptGz!WZ6fYPUx_=VUo@*PM#S0N}DnU4no=O`CVk>l~T|5@fotI~-Z9bUu zvu^wt{{<%0yU))umA>%d9pnw{{Iyq?uU@(0p@y8rNQ&No+Kjg%``4nQASwOdKYRN9 zV);riRoF7VG_6!u3VozRnjfuBHx(79cx1cRo0EfD79NwQV`;KCP~>fBDk^eFj)HpR zD9Lsp8AWQFtS%`4YpJSc)i$YZtfgXd$OUShBrK-7kv`5~;&xKxSjMMH!LaSDqiv#z zBAR`4>sK2eyB1Hp`gqF||Gvb`x?Obq(QB_Yh$O70LCRL$GP-tcJQHih3jXyK%_Lfy zD-Y6=vNk`fTSURRba@oukm4rVt5ItF_9ZT&{9VwkS5u}E=nwxV?x5~*zSXuz@U0$Nj|uPFIP~~QYmcnq1<@mrHZ>2pKqnF0wu?UI z$3+XQQ(TKc_LAxmEsWB}j2{@YW>5p&U)KVpaM%UuiO%sBMpOP%YYS}PZ$%5`i7`N$ z0YVC9hcO6CGS&$#FM+IryeYhnF2(Cp#Ov4h*dRHy9y`Q)yy?0g8(tPYCj12zxCb;D z2T~B-^h2n>N~|*Sp3vWD?Nt}OT7kQDjaVT(i*w!3@^7uTqYbStmA+5kP3^-D_{|Gw{5<7Vf z64B`*qX!3^E>vQ!_ykr1zK7lHaSeXuop<=6Gs-lCAOVF1ZmAbz7vwPO2X0SUT@N9v zD-+0rWo}EdFFoC2PjLpENtOWoVOiPEpf89VMky`LW=G0-vK1sEA!!xDW{C2KV$Tz{X{`m) zDYO;_NxQWc5_i04LEIx+3xl*fJ~>XOS_^cKXe~5KJO5J);vUgjXoTvHlhD2eGf5Fz z3qz#yXn`!7+92p2(dI#(Dy@wnFtO1SS|juXjbpi>NUfFOh$qroX^kgAD+Y%+bJPmm zMhI&X?G%XVh<0Gj1455B8eyA&216sjc|_iwHUfHGv5MEpY*Hrry+O1&5NIyqq!-2a z0JaTNspxgA{sc}Btw7@B;m@|-TX2isS{nhqjq5DCu;xLSMGFZ_i`D}9h`|HFWoJkw z`s_8c1?m=wmYc z$WFu~I1oGOGP{j-I2E;oZVK0l-}P`t;NpuzW>9+fh+jSZ;@t!D>N<8WQ$PCQuvPnaq)fpDOBb}Gq$aV!TtWfrA7F1ARoA1Yeep=a5|EkED)`mU!MhE!K}Li}1? z^OTeCI329SvtF6~%B0A-m%DJD(t8kg9>GlbcE+>^F^d!*-wA6rFIwd_q?&_Sxk#Wb zE)GhOh*b#&%|P%`E0E<^9(HBA3OYtpO^r>dsRoEq9Xp!K6oXlyE)fTN6{)?Y#S%(! zd|3WAd}{4dPe_EKPg+`VHNnpSZU7yXqMrZ&B78s!a&Hl7uK=H%f>nX1;nlrv0l3}r zmG8VZc8L#ZZ2lTYDQs~g%3R396HL2L?ga>_e&=-RWqXSUhgGg;}^w-|=p>S$@NUcS8lf9N)ZnOj!2E>| ztXrTjA}l7~6UP#q;(m=&$eR2kC+zwnEDye?u~+qEjF9n??oN?oed(%z4B;7jt?H!!*1@7*wnczG5y;z~)YvoD~|nhha?|ON2$#b4m~6 z8CW}ll)(TTca)rP0?nqhg3g0xwQC!>+K!rgJbwGq_3M`|-uhCUQVs9SduZ)~g%3P9 zU#CG>RIVZ_8+JwHpJYVsh_k?L>-HqcCJ~RV^&zCHARPLM6sD>Qqwz{(ZKvVm?$|nH z;<>?HUhfmQkhb#He#?8;LtJLkevJI8u>`s%eB3^-2~cXmWEa>u=3?_<{%^;jr1dp@ zgVr>sBk-V1VY*B*Q97avb)%>y5i%`!2uF8y7qtEZ45P!_7wER_#I)$W2hViO6^Gy8KShlc;%}+kF zo~iWP!qm%mAojn{_IiK*uWruh^TZ&3@gY*M*`uJ7ZpQJ*N%S59%jOIcEqCq2VwwVF_`R4G*y zCDnyZetQDpY|{$qV+J@2*u5zn=^T%>Z~cv(&IQm}`JH?DuAlWAJ-Xk|KEsBI4P>=kF z{|};|_J8Un{9isiUa-cs`A_C7cRE`wn$&}Fgm|)8I{VWnjmCH%^rSjpJlTPKpVzn9 z_DN*t%@(6BU()tDIi(yWKy;sqHcI1J(PDSDvVDv8ayw8<+V*YSOD(d+E84cma?5iO zRi1e67tmma84t>N>^{-n$QH6t+n)z!pDxsr?1vBGqc)PC9DkEm4(x8M9*jCT7i71c z4O^*!WGX6JWHcFMflE!mf^iQ?T*E@{{!zXFam>fAt;Ii~y%5@4Z8#3`q%UC_e6;h-LoO)0MCX#C(@r$OGB(Ft@%S(9y@rAR{^dviDD$M zCRt?QHVe6{O@c3uk}y!Q5QHirMwx)OS<5b>$i@ZU_jPZHVkqU@7HR5 z5<)Th#HFJBEo{6-lA^J$L$L037z5QTut_!1Y(>W1VKpKx&z>Z3kR_{X1=On5qnZ!` z`V(;WcB@HsQWShKXxFC{xtR}Bb~TSx&NQ2qP5cC4yH7N~$&a$$G!kK7G@QoBU>(#b z%+P?5z@Qg(tH}Q`NM=M4H#Q|upW{@f+3C;)J`D{(tenjksQc6f*Jv@dIZ`AmS|&Y; zkq=b`Ix_Tu{?V{(#pDzPfPVm;hYdlNlL$nDrpA&aM7ly`)@=x6NzlYueUiF(OSXST zQ$*YlV_hmj?t0|A4N<=1`?oi;UA*u5*=!@A8{wry^@S5wzJgaI@uL_S#v?2!M#!Bs zQhXSOh>=1o!yYt%OT2HO3Jp1+`ytVS{8SmjdI|uFGBZs+6GCB&oJB*L?9QCrJE9ryu|H-)=Wb6UokFHL}C^9s7B;7u)8DP>R%i*)duT$0OkD=HGHlOgh7 z!uVGqpJU52UScVaZRQ`Jvh!8GxA^4^KV#m*5w_fZ*IoB4cJWogMRzV;<};i+_`uaC zcl~((M<1>J;n}BSE1N&M^Pc%D?_9EG3C)qz5p6fB#cs@l>_~N>2^k^V0#rUJ3FX_2 zzMwIfp5a2J$Ht~K8LGX*q#@^OX?L_2?WRP!hVcB62@`ukW5y3$z63*tQyo^9@Kq6h z1gQwC=dN$-j-V?(1n z@l4zvP^&-FY7ZC%Ye1hx+L{ffBsT>}eVzIgv0ypNk$T8(yL4@g8H zi;P3@#J&0xhqWgXJ_1-=a63^S+U+!=1>Qz#BM|RpRm<1vm*W05|8+TkhMuj;bVx_&Y-(tPFmf z|FO}M-0W0iVIia{YbqjOvr*ElLy0Hd6v>U`);2{VU|5L8OG4UgZ4;KQHQ-UN9oA-6 zLMs>Qxn^o?Q$9mP!c)XMW&9@)v$bLpNMDtYUSTPl?tA68{ObFYc6COSUNMtK4$fTA zanhVwH+9SFTR*~>^`|47_XNx-FaPq~wNPs8AI8pq{efSYIV)Bg$hzsK!4p_`d}AZ5 zD8f!fIjA0Z_R?|H;l=|)hJ(-PGa3wDH!3uE9R??Z6pv&_aemsF8R#Todsqn2Cj{@D zfE1GDb9_qY5DD?t-SV&Is6i>HRxMC zfhgk?$UIHa4pO?Do&{t$Sx!xck15#`$&=DOsp+W%^_gVN@#ny>6EIi-G1L~3LM*Hh zb9D-$6Hg--QO6jnFnweTgAN`308Tt2PID_=$UUJLbW+6F(eu~-!OUMh^6mpm2mS8( zz5E^iO^p9RzOZxPO=BAdk5g7X^v<^33-~89dSyp%ox)>>zUHwje`2HfxyKi!{NmQp z)8^oCNa94Q6pcSQT48kilBIAsIXTmviF!Es1z90~p4E&XhJj7?y!1RsOL=*Yv@}HB zr@0&eOmgUn6uR#yj*W`hv~wZ3VcZdW;KyAdV(0~6nO0tl(11FlB92x!gC?icZyr0f z^vu~;X8+|r{&#+5(_ItiF!{SVC+?iHedCs?i{w+>6Uo163_sT~v}^ygM_ksFd&g~l zGPj&x=|8Z9P@G5cO=<+b^DM|GnaLhc2xU}(o-A3iLl}OxKL;?R$m{}cDjfll900@j!aMJ_F@pqJ!{IC4qv-do@WgVZ} zYjocDX{)yOWADAoHoqBQIiLQWFZ#pCp?O)GmOp*C|F+z$+?>>`SvxUOEyJ2n2Fs%< z1TiRi&0f^6A`D+-RujUYpM2IDMrW&MP7IF4gNNGqf0bct+W{=X208D|HVBK?Dj+ow z9iKK9Lw@ssmLbChoUWkDh>E(%c?-A(GyxUOV(|_@w37lmsM3C$Tcs+{?e!8dR9WEP zqDC5}NT{a)Nq!M~_yLk{vw$ERi5(v^QsF!0VdF;)HL!7};ffsr4~yB)*c$dY$_3xj zeB1G3M^CD0ue|o!D_9@F?Q!~(kb&%AP-h&@B&P*SW6{T??-))E@mn3+snRXm7gbH{ zzIy+kUV~ZE?=eF4%S|Zq=B?|6)ccJuKLnY18q8t`@1knQGlQ?!Brei zOLN0(4BReYUC~7l$f76@o1s5&cEN7r-g)?r+Q7kSXBqUak$f40{Sul!u&;>3y`=2x zXnpzlbT2?=`P7jC&-Qa#JWLKfbq&8aM_$pa;Qmu z9e|BA1sG_F>hTT4jzZ7G9X;-li?HxFo(|frBm1*8Xa3F)V;NWW@Bbv53J22O*xz|G ztz7(^mB7nhnw;*kfERm{2-VRAyJ$Kr5goINiaIKRlt4-?h^nI_lH*QtB!P2?gGYWh zbgq}J)XyIzGEE4=cYSoib_CooN?|q`anHaNmrbk!ZaE=+27)N+OVb5!dqFDIGqC*o;k|)JoLM6=8mt7SnOBLEQf#i!hoLq<1x2% z>)y#9{YIS94xLgv{sHttr{x&@qejYgz^sFix$RinWXPi-kINcJas(WzOZB;YDXD&h zECQm`<8=5?_jE4_nic2-nv1a#*qdPpr-pesqjM^LHT>CMHuI(5 zykRK0TF$b(F8;6V!WUjUS*%rhBi7Zn&9NVgE0v8VYD>G#R-TwsahCcpCvE z>2%rB6~r#a&oQyQxE4l35ZL58L@9}w0Z$}{&@4za?wqGy`09@hk5r@vaE})-+b?2k zWAE(Bnpiw?z#zF2=`3&MW^JFv|EZ=yT)E*9{@t>xJd$_sqd$KzP9cRDS2hrW14yw& zZC^GrlGm=ewau#FusVIqfDl^uQiEpjA|&x)f086`$Fr z*wQmBDMk=0ls$kIN(s)FP$mSGg6kQO6of(IY7pv?Fa?NP0Td}ej@o>0v4L!YT*JRO z^dJi0ZoO&LL3eI>V8t9CsEu`F1^mLjpKrOeRL+@q$M@0kL;7vfXzMHGD#qo(sBp)c zn1{h?;ZOh`;cz)>n_Nx{kay$EPuFq8qG|jFToBu)A>2W&A!3sEcJ4HI{@uTM`#JvY zarjp1d9Ti0i}|IRm)~ONh=izLAv2?2pM)wRM!3fnj~_%0eBahZNRTgR2D5LiAktX@ z%lEq^c_#pB|H;-29)9!4L2O-7Hvh=Q6y}w0jjf(P;j#S}S?>0K+|6G@jbnjZYn-F5 z$NfWy$Pu#x;dG&t6flNVH5GMDb0eM%T+kj@$iXo2WPmdY5l_>aUQ3X$;9VN^&|T!t zMXr{o3ek~tU5nfys>@|?>uw`3V(iXW{Eu^PXW?EAw@murlkZs;3ZVS;VqLGY$n?c9 z693K13V(Qp6>i=?>Z`@`R;02mpMT6hMis9g`0rDBx>|eJ-Tg-L3Fe(xxt3G#?grHr zQie1u+6CygFmM8`I3*2|CTcbq(lC-NpWhFBQE$MXt{Q;r0Xu>fmwURwDdAKS1TLu+ znjk^~Hw7cK`pR_ntUJoIzld)Hf)a*2HJb28@Q*G~ ziU*WJ0g$;G0R`Rah;`G)vfHZ)_(_yHcqoR7DpQvkJ=ffhd)EW9D)-m?>I(i({;rGX zvJX6Ru^f#ZT5-EY{U_*lGI;S|n+}>7zU8%sX z^nk@C6&9&Nk1xe1uzgKVQ;IVsE!_v>pwE{Cm~)pCHW4KWPF6%_>ZQHJO$ni(HQr8$ zCvNx$NDnn=IIsXhC8=Ed^usFR_q){ft7>}po46DiU<(kXvkXDaS^s9LFP)WTPF*(} zRfR>(q!-Q~U&{MpMTLc${E6%)nkyojwKy`S#SLH{WO1wkdP^E1fUEWt*(FR)RU@A+csnitj8fG9tH=Y2)x{C8#fD91JZA{+B!n)q$$-S%vy@kHlztK?V33uZX#*7gRKIOQKllqI-0Ks24JNA z14sooDa27x^6S0epxT++=Z>uHp4Yjm2AAKkl)W`W%`y@^>62OAbGHp;SM^?Fgd7MX|+#gUq3 zWUx`Ah$viVFjafJG%G6SOYVsZjT!4`E!VL#P4`MrUt;|F@Ri3=OOuK%&Snq&WZbRQ z7q#)SG8(OjSraG5Bh^O3R=eAdtHXeRPPfVJ_1R(5w%ZM68=Q-%{it}fx{uoJ|C58F zofCHb`9P`71J@r7zDTyWJr}WyL^D`9!!~g)ka_{!K7E7ccU~!-foL(AP2H5!3!AkC<#EeuMFv0qc+2ve0ck$XU-vfguMn zpG*!1_L@l&VGDUh4N?^POoQu6F(O`3_ccIqA{vcbx@h5Gb4dsX+VVk_qvM4?WW_j< zuV~)OS1et%Cq+5)Mr;pnE<8-j$-61G59R)B(6xt^Qa*w&*GEcOcEZ;N8RrVF0OIFv zX=1d*0whKS2)b^Y)daXME6P(b@u7eOR%v^b!oLl*^*Y6w6B#{7cpU}kP60AO5l5Q@d%reM&TtBRG@ zSy)^pZ4V28k&1P$5H=436eQsn$p$L}pea-(6n?}{`~n$Ffs>?MRbS$}Uwdm4|Kccr z`i~=-Y38pU=KJ?sYZY_+{u>rnC-IBbX7_=|?tOjcU^b$-vUb=e77cdp zeA`s!8d3WO@dunqBO#7C;YIg3j0B8kF+0sJx0-~^23WTUQ5_|i<0pxRieX~=eF{RV zu%?~8VHVoXCb`Vm?9ccPk2!Xbr=VcngH!msstOrZBhyfQanC_(MtZWzk<(`j4q4yfPhIq7vKu1Z>eK-5 zomw}jA^rYC48i=bJU^Ufta}|X!v$gn>UADFaDU@U%)ka*Ampk^W*O8V8)U)$QJn`D zfX@FlZ4SeY+at6g3yRg4SjfRQ1#m_=&)t6O+>Dz5TUj4qjO!M1<9B z7JFE`(&$GQ|2~V!pJHvw;DOeraJ_`@Z%tEiK(lph&}6jDQfdD25)_sA_b%U>^4QEfAD& zlLGP;k@WxTO&Xtf;wB|YNf(j~XORu_J}>4^$lrD&;STrcXJ1sX%U@h0DILNQpFxt5 zA~@ekjKzvQrh7db76JloR=p6~U{Up$+(ViG(B{Ln4kpF+3!cRMOwNGOM#nAk%GY_ zR5roo<~2b%F~QHDa9L7(Da4$1P6VM-Q86OK*H%C+fklh%GhAb^9KnJw7uLNsY{C7X zECFoQY`%r>oxtR53gPRw9f9KMFT|wl{L;N0j zT5K=&@?#h-^{UToFR&irNL4j@_frf7WEdF!ZP3(Yo6Tws1cA1Xf|Ns>5Y8x}>Md>? zvtpBR^mIKzTUjBD38L31Uq}m@OamX6OGvf4y&BOHr{NfhvW;^V%Og;+bR zJykZASM)q}7u$~u*(Wb)7&vY`aa<9DENswyh3rW3%|+pf3{yo0xJ0q-p%98Kq84Lr z1lj3sz#U=uCbt`L5{NJl28<^7wA(r&Y1leAmd=1Rsf=DFle?!&m)wZgr~)WiPcNjk zmki~??_}}?#`IWs5s)`4BMbT5RYUU)?(ptu?|#Bh!wmQxe38R;Y`)=M{|tH8Ugkgj zz<_N2lBKw)|IAUf6R-UPPN6s0+(srfPw2Fh>aCJjhN{{)qyW6~jnRCBnnQ&{6%4D> zWHn`FD{0;|WVWTHp@3BCz$Tm1>KoWZ$ir<2{Ce`HnF#N-jXJF79(yK;YQ_TRNXlw?i&yQm~P0eoaH@`&_A1BXg-90!ud$ylMDy&YZADu zF8@P8P00U#$p1bod;Nj|Zey?Cwpket7!MS2RarD*kRS^J8(^3jByw3q#tU z#CGzPh>aQr?Qa#nM&b9BY^Pi&M`G{e>vC+LToXGczJ|#p^Veb2rRqw=AC8H3$W3)C zio<~-i>cZERDWK6T82AY4hC$70Zq2HphO8C3Cd|Fli+U>`$^0f z(tQ_5_XOlXT7V1ax*F4j10W30iGz!#ZrQkf&eD@}|HYI!6K}sa_U7^vbC3OH!i*d5 z+$^6e=rFK9GneN+xp~~`WUK3exqMG{DJve+sjN!@CkcSgLOs^oApzwa%AlDgp^jbqSjkTS@P22a4_P;3mK_K<>-Q)C#u?SUkem$vJa zO+i`-5f8tJq(LF%A+r$SmihT~>_r*zDj+Qw$M7B5LpSm77ghHP@Evk+Ov)Imu~+_V z1XVPygd44v%{X*vU^5s3|Dl0DA1!_VKA;l|T2Sfi*(6jBWflu9yuk`A08z1uSrwbp zNL*0EK2Kbjf|JL25Ah#3f*h<1TWG6l}jXe%BI6!1UH_Y{3PEdt<1aFDxN`p~G zI2S6^t8mH0VJ2GpYVAiog7)91_OESH>IJ7G3WIkNwG_cmh6{ax`XWq2qXgv+b3_E4 zxJO?g5o26nk$1`fq-0as}jJ^gAg154VVvyhw*X#3XGPIAc*jJR7vc_ z767Nb_qATDCQn?WbXz%T@(Q`~d;UKua5{aN$%?-OxJ=l~p5aZY{M~OCJt52a>JAjm zQ)B1lpJ5#l+fR2S=7xM@q7B?2T+jyeEGXTGTT_td1&ze4I$>!O7X}N{QPFgg_#Cj7 z?N$;)uP|`F=h{WYVax=P(8Zw6rbTUrybDi1cIZ9yXJZKWbiBT1#G9)X-gPi$Lo|V(@HGnj}u#aXW>|n))l2O$VByq1sFpT z^qPUu0)y8pNeO5z>_utj}~&($^q$kXr}|= zCS;!y>2f6Gz!&&4`K!q5|6YKU{H47cd-QscP7I$m;IX?-9As0gJD<~}FymB=3Cbqq zFhtEeVbd|dTf;ESV6p)tNDM0p2~kOq!IJz5ZcGHwc1Ykt8ljQ!t6Tbw_$4lY8K=?} zaBX*l&V*tH*NWQcPF1y07uthg7tN3)sBWw9A72Ct7f zF(x?tu~Z1gvN|oUflWk>v`Rl64w0mAIJ6yx?D&5U05k)ymcmuSU+5prg);$Ulj2Q5 zbv7W30G?L08g14FXfsj(nsRI5a83D(W6{Qi3LX7Tmm8{pTSaj~D9S*ALZpYW6AKRy zeR;#Jiy2?eR;klRbl+4nXVTwh#8@`}i!Y~`MaEAa@%@-7Ia$pmrQk7N^ZyZkbzmYJ zKf)-z;C92KB`BY3Ohs7*ORC^?E{HuYm)%6%E(;)-3QjMU%&$;NdOTJ|Up38-qtTYW zk#wS=1LWl9ivl|C3bJwr+SS`NegtNB?a%yj_;K3Xt$8f?!Hyr+#OnGt4(r=*_>ev* zx(mq5ul^$Bk!gSU@Iij%;MR>=*)NK^H?bJFMb12lxQ#V#z_s9;hQZ z5cTkqa0Qw{e`cqR2=M=+i^1Zkg&Wct2`dyqREbqbl=oy5?V8GzFXarrbium%eskva z9?14}+P`q$%ivCH+3e2U{?;>oPi_-vv~^%4K#{EO$1&RFW&BfA8u zm<~2})BS`srpbjc`ygwYofb1)j0v}u3h5RPgVK_vx@fK|Xm+5Kxq@<#0iWC9ZfLUD z91egL*^o!=l6*NnZz$@K&oW*=KJW20 zgU6fL0>0ifb?mky+kGq#nfYN>I)Y#6H)YKCW5fNjOU`G~V`?Ql`O`?ma26DqOKIA`P)B_?&f zJS!quh@-1K!8KoRFW>GvEtsf$j#%jRvM&5-8;PZAJk>}wcq!+5e6&nTPIj5iUZ>4w z_X3|kE!~OGWv3IRTrnrG6U+$|;7)Sd{pMtxJAE$V+849Hm8_M?0qxSK5S7Ga5-eBe z8<3239b8@C%6qR8$GFPYv>m=Cp^~&JZUXEgKInX5M?M$3O8Uz@L8tG6PRU;hGYwIy zPtOR@WJ1z#G}KqQOTKttLubK>g&d_eV;yW#XXrPuFQ9&onVIcLHfYXH6xC@jbR_Jo zG{5VF4mrr@;@Ss_51+^PXhO%eO?(o1AwR$&N;tv?UuhX>CbNF*2jsB7?1~vW9fmt}VKK>67pZu$xnT4fjgEk@cVIwqeZ{B}Fn~?gTW{Oz91X}dP7Qvki%7<(6h%rm8LPU<@WH6m`JGLRFEF@?e%3Jm(~7RUj%yoHK9> z2oUtCs@JZlX8Ph~JI9jE*r&{9?*lOnw)+=Ul+rLmnv`l13B2BXggVJe*g0ho3-rlS zW(U}sJ*YJQ4VFfV;D5i=|Cgz%$&8ABQq60`v&E?n%BGOV%Pu&_kK|wU%`_Yg@JCLt z9?Xh;=*BO}5-Y|j1p~Qm9IzRfLGx|L!QiUSQ>xg~%)b1Kp_813gZz7b;s9F_0H4Af zl=EU76bGIJ-wQNzr$aI+NLR1X)71sf!AfWo3TZ#&kUp{Iy+4^@>r7F52|av%eGd+& zO--UvR#5d+T@XSK+O$L0&0ZPdm@vHkG6eWTM`<~T*J3>s&Wf>{PGtVuRc5gR-V}iz zSf0{yEl)o_1!}nq_C^26zIEI*n17y8Z9^aWZ>%`TR~>wSjlMPh6Kjl=4rQ;v3~Y=> zOsW-NDvAYbjqnR3%^B=g6H`s95#W(Fq?>~hi0cp`30^IF*Fp+(#;spRm~sT=j16uB z3>y(;FF#hz4|V6~SaEk&U(ITi1)0rrl#Q7zGn4&--_K2{=;BOI75OM26&#%(Q?~VlJRaB3$n*Xkvzs&knRM7Wo*1wuwEtAJ&@sG0j zTDBw$SpY}&h-oe64`lL>GxyL=)}xLXV(oETAfQ>)hyyO8;;^HtIjtpXl+odcqaBdi z%j$o%efyq$Tc6k~50k&#cjV~lfK^qic6f`0uvck5PD(~y#idVofh zyYmd}9*NYIb;-)=UF=O$QauV(3#t|Ob~zGQh|1m;HelkU1Z<*FocOi%6;KCZ)zF8)LONjK|KWf!|3;sn3|w7-?Z;%}TroDtM^l|L1= z?{bhKuUB>@i-!r<4Jb(v60OUdkTLWcuI-Drwkg+&_E1Yt{yg4Zyn-H;wl|@CUc5at zh9U==2Z zSdHKxV#E}}BhQXG_&f49lw*$P!J*{KN?+6z^id5*D)Q=sT8f(OR>=Y%vx{iO)9uyr z*6>_yu&qd!6$zwExhhi9t(1RzG3<)mICS1}`7&Ew+kL_`epEg)taI726+D?%8M28= zS>kR&be3IqxM@|331F%ouY!0w6wij@GNK7}_8bOy(MB{`jRvZnEz}ed04S8O*7$#n z2xBB;JJb_WBP)gRhkl30u?BwRrK?vfyJHs_=Q2BYmNzr?tnv{*agHCyc&1`JR7pKo zx;l0SglqoxKWi+-UC+J5GV(M!x`x!!(esg_!`$gH%ZR zLdo@uW8WP&cm14-8;C2?SK(q5UO!(u#I*|_pBqjWNBD)R-Zhn{$DCeVg4*lVX+wMC z_iiY?4$6S{*E9p`9zL1B!y}sPKA+3s1|X_C zGb^iTL{pYAGg&erFD(v$O1nVpT=**6*duiIp{1u%>KE}^g2JovR?v1J1ArXuLgi>J zFJ;`@?Uw8=8wZ|v=7D|F&oHp{a_;1R;2)Rp4Qv-Q$)eb*l4*0^?#iT8FX!pu!>|5r z`7&Xi`nar{{QeIu9HB|y@}_a4_hUb+papLQpUjumL>s`l(=ACJ)rRA2j+le#9#15a zovsuV8Z)yp$22L+vesqESy|2j&aA8~Y-?6ZG$}bHc}$ZP)@WZiERAdmn|#iZO+L)O zjh#>9{s7XV9WK`P7$S+D`2pz!za^kkDEZDGGWml5KM!g8GYW6#V_)+tX@|Q|EgM80 z_n5l`br|`RNS@E)S3;LIE}i;vj2|!Ewo;Z?ZmwW`nh*YJ$?fWznN6oN939x{omKqh zs^-6+_6Lejw=hcsKUV=_mI_-g8T%TJVb7hg1#}>-xF|0#9lD|#N(XC5N8uO0Urkp_ zItCGz;4N^aL{m1TD3kC_PRY&EImf%@Z%>$qAU3UHG4?hNedT&XzbNR;fvL2G0ZP;w zjkFdVr#kL18u*QdZW^PPJ0E@eiI)%W`uS1bzhlQSW5zc(?>ur~-<`Kbhu2M?Ghtk# z#-6V2KJexrp8f5sr}qqYihQDT0V}@n)$h;m-+%do*Wcsm9mi)y^0FWJ`qpvZ{_)e()up_Y)&Jp7 zZywN@ymv zLrGyu7$q!Vv~YT}yfTcMUPrpassLi!glPA40W3mr#9(_g9T=x3Owgt#D3B(k&lFn( z8(Y{z1%zg)BX>ea6@SCtow3(0` zhu<`5GY-Y3Z6sb50w!n?b%imXFjK-nUjvu%BHS|U?pzgC*rr$a$jN);zUwWfV=Qa! zqs({0WO+=!EQj{*r<A16!lFV+QMqu1J)nSlvl_hS3M}mtC&JF`J zvRFb|-hNfkXapJ~ZUd8BUi$NIRzL9FmdF3Kruk&qu3@WQ7+N>^{HF4!$2@yScoQ@H z{MRiHKFnjk`u0;!YV6qm{iE@y{`KTgxXDB`M|0Q8gI*Eq(?G&k`2WWpFFo zpvOyg@U%)%L09U9r~8Y#xKXtRPopj_v_-0m3)$i)Pfx(p^@gLO?cVgX+#{wv4K$jc zJYCfCiIMUbFcRe}Z6q=xn3++o`NwrnV~t_eS2qd-m578`w~X9e)TT-T`Q+t$UA7?N zFKpQe60ikT6;U(-Iax|}y^82EAtA&UnGCbUp8)Pamk?rSz+;63tL6Sml;|l;{76hw zH~xnI>G)qRKlt6xZ)=)5dhpinJzt;pPbS5d4P2I&)HkPW;tk4rV7J#^K7Vc>i#!<_ zH?^>km4+hx&&{(xJnu=n<=JsdF!m5^9l%JUzJKplfx&MbVyD=j*y~rf$p`G-OS18j@1pwgwe$<>+F?Cn z_41*vxbxQYA%?!hpYvG5q5N z)6^?l(NYQ@qS9X3K;PL2t-=_Pr*E`MRy(2WsK|E!%noEk%mW0j*^c#z#Jd3Rp@~37 zu4G^^;5aPgPLTt#tLm263bvPb1=7Qivx-$d@do0VNx#59@BHdLr(Qb5WEuda{ggi}!A zKC>{>UWoneP-1jjLOx%fGY=>-mNZo@Npqq{uqxtKdQZf$;_ISyP4b?PBqKma2+AbF z6g%d6EF^7RgD_p9~cvw@!FwSTV6c+$o`qtYsPGOp?O`jM@_W2qKn+G zrf*jNtfKPH@~MeCCT{9ef9%P}U)$Jw;PK`uQ*P)`Qh9uGN%x+`MP0GJEth~RJsUQF zpp+d=vIwr5;z&jepl!lSOm1G9!rD!P+oq|ZFd8<^N*+Qo^e~}PI-Se z`l|SeveK^CIvsrjbsowp%G7s${~GbmI+myQP?tguy9qqu66|{T*^*3k98wRr^g5WD zDnWxqacA0jX{B0Y$cH-yh$#rEMJWqAvzmawhln|N#Z-sG>-C#e)n~WaT)?ceBF6!C zGq({7uHAMgNs%S4T##6;Z8Rj%?hOqSb=E;GZ4-$g0oFBX+7HAM#R*P zN6?%}2d!Z6vnYzUmK}eX9p^nCX7<-ko|G@j7h|DVNWQ>^@csNCMqdKvGaHpt@}&mB z(T&mop##(FtdF?q}pz6!KQUK9B%p49FCRiHF7>>;185aSDLHBdO`6P30|VbJZ8HeS|CQbfc}LjF zpV;%6Q9ZmM$jU$ug>r>r)-mz2qYer6F+FwwZThnmXNYcy)_uoR{)?rB)#Y|5hUuh3 zE_>zWBYTd%@SB4tRB6?M1uO4fIQQ<4|M9O6KDqogNiP|4y^>{k2_AbZ2P;VD8XG+#`giAe)N(%YQ z`CL;$V5)p>-MW|L;@HQ#`t_a?+D*KDl3Xo+3(8NC`U2fV@gygEy=I3)F)OKQUXR5C ztsAmdFzCy)V=c9r6Bmt3d|Gf9C!?#7+Ishvr^`RhDVjOeQOw?WZ?YLHQYKf(T-emYQZ$-nPqu)+ zE6JJ3xe>_X&|f8lQuxyxj!>4A);g>S7=_?4`k9Q6Nw;^AnoG-?-- zFK>D8aI69BCQf}p$Soz%p^%N`SNsvBI8qEKMrVe_Y3W#M^m?kNL)2nYP&zsS3`{oDl?p#|Q8Fl}yx5t(jbsQ4u=+0sH zhf>pv{qDk?beNT7sTBL!EcP=8RhiP19I>IvnJ6$~G&*T79chm2kd%g*h{M&bl=f1e z3T-3Z&SHF;^-@$8uL`%`)FQYvpKaH-k^j14){H3zZ5t2o-gAP7?(V2wjqf54JEz`6 zyZGqtvxj2;gh~*Q>iJ63A;VX=18g{lgoT*}OLIOXj8fQitE6hF1|Gfsh|C)&&6E~O zcS>uSExIP!y_3P|?A4=8vNw*ndG6dvlV;7j`;J?0U3~B2nKSF|ts8Uinl)oaDE45# z!U%Gc`WEC`g7)A8>+V^;d?xImvt}(`Jag2*fiq{0w~rkyVy|f=gXHXB$7_@+F@`8ckKhHOOL|Eh9=wg0>07)ZdRvo}G%Os^aN;o`3HrnS2;@ox_PQ%j zT`mOs7_M_Nt`Moy7ZU%V`BlV!r=JvxL9bWR>-cJG$R=YoF_8!~G0?3DBF3o=dvzOj z*iTXEc!Ckf!Lw-IXRK$X#|&p!>8u~6+m0C=CuYU!nd{oe%)!594)xG1d|W%hT+OAo z-6kJnt|iQMb@y%fFmk-{)S4A5)~s1^*Zq9K8ho&i_RgMLT3p>}_QW&GdX9lbw@sX=`z$ zo?o?2HIHJC@cB314Bjw`A2aR2-Krq=zX*R2Cy{NRM@eud-oxjajp`tn9#$8%iq&cIi8}zMB7|rfxvb=zuyzk=zYg*hVo5dOf%X{sE*^ z_?#1!5OiNF@NOaWfVbF@@pu^-9wkzxG$Yz2*<4&87nGHCtjMg$HRn1rGfQNr+@-3x zV|GVC`DMEi7M<CSC_AsR zij-G`qlpDF5eucosm#w42%wZKUirbFHT-*FpRwM zwwvUS`0sbke{Ta^k!8i3VqdxDj2-(+`DDj*1jhbm=d(BG1+)G-fAX*n#T_zk9{AF+ z^i28A^Bd+odn3P$Fyaqc&Vw7r51&bQ5k3s#4JRP8_l{<};579jGTe%N^Lji!gdPFc z+oQNVss%Y_|8IG21Tk>e62#4vq$;r7q6CvtoP?r(R%@x* zXzZAiBbkFXqZu){W~WaoKpa^ACe&cUokrV0C?xcghLjA+Pb1&>e#A9el!qmI62bVu z#-!skL1q`|HrNkr2wAx`y3LnA{VG=R?Fm!uw-qg4-MPDCQu*%ZeOb}LWmQ48C|FrG zxOb(GWi#7Tn+W#j$Wjz6|KPSIcg$2KmhEZWJilzpl6mv)9apkw?Hqv$ig*=MmO%XM zgbkp$noofk0-8B6mtOC#aZ0#t(FyXHT5|HAnXteb~I4-tH!m+|UE zr5biA7cAMR@duelvH6lwnKV^`efk04(j%nJ zLQgWkC@N1vZ^CUoKxj)Qslm7{u1A^oK#$5Jy{gUogXw+D13AeiK;**DmWe3PLYD(( zX)mlO85ya5zcCdOT~;>Y5pBpPM%gn*6zJC|f)-D|OMOf8e#P0S;HRyef`k@g5?Z<- zNme0P5lsPuE2QzyY{M1g3hv;$`9?OEO<>da=clqIj>1Rp&2M(G{Kp>Iw3)w$jJyqe z1u$#pARTq(iTXQg1FyZ??U9%Gm_Pmb{5zNf;tP!~gAYe0hvwjh;DB=Ck|jGkBN#Mh zU=HD2zg@Cp4%vWHidtMsYAeWD>L32^bAUfgOaiQ3{*apP2e!<_2moDqmH@JCDVCygEWGq;-jy~>NP2B5I?8j>C zN4iuUO$VA1B5~4e9$QAH6(yvc=_=s7ok)m`!^ot*1!@utu1PKA3ZYf^$A<}VKn(+d zjFeV!`rU@5z4~Hsc}q_}^#s3g0ztU1u!p8Bzwv(PnV zU-OD}ilZ#V zM`2sk!NdONr2KJg%bfXJkF&4uOW!d&@Zk2j^`2%zZ@hNDdY*TO&W5i6%IA}z82|VI&L*B!ZLi{p? z5p@mifFy!S+zSCdWB4fBne^Tr3$ijhb)T?e{T9Qi#@m9WE6v4`j2yG??X26;W-SlJ zF1IX)s$~8RijkJ0$OcQ4xX5d+ojhyyl(W-s;b*AI#lBHE)f53JiwY(Mf?xJ&c}9y( zOVq}~6F^=dOritY6OtZ{m#E4~QMcO!&qX*ctm}O+L0~LL;^@cV$%c9n4GFV5y&n-A zSu1OW-3Dhc?*NCZfRt67p@hrAL05+kg@t9oGE30Xxw5Fpn<{1hf26$$U=-!~KR)lw z?2*|`c4v=l?mN4LkSy68n{b9JK)A0!5CSTf2qID{h!hbK5D_hkiilP%r562Ct5~hK zq9RgCt+murwH{Qf)_TwVwneU7XGq*2dOz5dFu zKTOfYB%(YYv)ttM+_Q?6I z*A9NV1-`sPb{T*8&E|s>roDLUQ^sF+h@m1f>Ck`;^IDf)b=$Tne3) zlL*xgGBz7O|H8QAsR?uDOn6?*{}h4Bs~fA051Wp@`r3QFvcx=N_t3ZBc=afd0Zx$Y z6tS5nA&-d-L9=NNDJ{p7lkN8-|Eb3VgFr?`fdd)a(j-rg$Br@;wvZi(+St9^9HF^r zN-ilnw-3CSqCZJcDY0iEr5g@b*Twxxm&BTm!bn(I?bIrl7zg3mf73nrPFt^K6UF80 zLJrrMey}_pHy$797Z3GcZXgq2`-|TjF!Dm-6@A+eTwHr6705DfZ-4sG*(vaq$EgOY zj|Jern~6+KWvNIk=YpNXj#CPiLadSFc1o+u;X#%oB;WF=DJX{C86pn>{??L^_C~Z= zHbsMyGSLMbc>PF(POrI}5 zgOYIM7eVpLIf$;$QC&8t&7Xn5bvYv=2=5JF*IZ!i4Q6(i7kgbJ@0m|@By0h%6p-_U zB@fv77odtVMqMGhGc|x6PJ@RG|Ugt&eVX zdjrm#P*w=GGW_Apae^R7IAZre3bH!g_-S;O(>J(9M{E?&w@K1;8KEs1uU}WfSv^V7 zVuZAAh1Z5nZU3U-0J(lYQY6xaAP@g*r%iB+ON|?yb0*yP`0jvsk)uWC{^<|o<3Dkn z@&5S}*vVg}%2M`YHabB{Lso=RDb;0jryx!&EzM2=BVMR?#810zlMtxpNJHE{&a|P+ z65*0yrf#wf{%=6KYN88Kp_rtYeiZeB$;N$?UpFq2*NfxwCS!5?ZjpICtd6hKKk^_@ z#*0N*dv$yUZinYLdgP((Lryo+A|Y1F1y6b#g6Y$Mb0PE;^i6fTok*?i);tK}lsSs? zJNgwemtZg*an~qD+UlLZS}9iUk)6h-ErX1g23~J$mgP%MF48ChQ>-+$(mzB~X$Vz> zBw~I^nE`D1v8uYVai|pZ!!D7IL_+Wk)xBzZIz{#RHSDRQhGd#qD>9%&iG@ccxLZ(9ZE;PO|v>u|HVVI8X`7>CQk( z$mhanLLnr=NKZ%btS0O51V}?buMnB4GXV7K?xxm&j+m8nn5GalDVwqD7!<9+5(8o; z;h~t*0O@(sK8ZomZ}3bfVc-kEKYk(*GD$d%&DRYyUK+I3*mTHv$JmBY(0d+VcJiWb zgz5}-V1k+4eG2rFA+r}Y_7%C3nxlJRe@%C}a@CNg6(9|0zQ^Z-Wi}@#l&9wAk{9lz z);vXbg-k{_<&t^|7ctY4+_~K}>4TwI75H#O85DUkQj1c>7z_anf$3`yQtZ{LQDe9~r0Q4~!S~s7rSm59Qpj&bV7tU*j-_ zil?@qkm_84iXdZmo<5e4EAogefNgbCR-;4bF+}=LJ6cfvl5bJ@*v67x5k)cM?8Z=M~fx# z8~+nCo{Ny2*M&F}F|mby=ROegiVLdt8<%t=W-x3VCh0?-l(&?X#+qks2SL-k);rdJ zo2LDzS`*Es4+gF16T+g#vdb7NC}PF{fsWb4_WZ$W{>>&*dubw?J65h^Og za;vC7&KEg3x%s*IV_R|9s*P*SLL9c7C1-_lJsBR|?FccsO&=snCVP_nKck~3_2KVm z3aLU&;MizR}JX@|2Fvm9Za znt6Wj+}i5a%IkJfiaR8AesArIQ!t1efyHx?plAo?8Yg= zzHrXcEe_fHtJDc&dOxtj%6xa^1Djf0QJkw~_>B*WRQ1q3FCS9nkrPHYCllc{4DFNiEl=y$&oy$yh+)Gt!Z_&b+uz!>*_|Qj~r>?w{e(rv^RoWM#`Mc2I=uYBEhI>nAr94KE#)v-~p3 zCUV;NeCfnd114-5wX8v(85=%l&hYm?{qRp0UxDl*YgR58(~R6B6*I~g4*PQT)Fn6A zR`?I3)%PyhbfJ}PBCR@~UGQ*MIx>(7!C*+!^%+UDz7AWzqmDaozo!(gB4|q^Y62YHHyy^F#N+dG$ zr65Zej7;u{Nh1^UYqxko;1YQ2v@A)Yz+dPSNS-U(zBYCm_p(80sh9-J82{XOZ2sc*?eoq*f1bHVwY`Hg#SA)8bip$`H9g&l2%fA|w>#5~S=}cgXBPH% zrXnyM?kyoF8D}A9ImRNJ)>KsT2E2qRTs0atM8bn=8-md8Q6o(}@rJiTu}Ae;z2@9( zI|A8zEiiQCS!Difm-?M(==YmJV(X9hjInmkD7>>CK9zNi**G26kU|#@%Yht4mb3NH z$X4A;wNXh)lk0qPNo~!*>=jDc2ZPl$)Duh7podB|0uUyO+nzyao0{TV-gm~Txn=W; zd-X1>^kesXfi0u3)LS!9wEgh9em;-!URs|T;z|5xdxz{K@>S@bL;1e#I4mg?31}9B zO+*56{Ia~>dS(N@M$c3xqXick0oM@No5NgF&LPdR&t)D*){vCr7%%722K&!av8u<+ zwy0yheU!Z#tCk4-oGa79VP|G$0S>7GMMX+(fh6U+;Ot#e6i$QHB%mX1FE=~WnMs~; zPBNh!rL_w7N?AvF)dKXGKHR1kM^VFQpK5P4)s2Ne(#HBJYBMMLD{pAkVlPcOIF4Q zm53|FXwf8Ag$Gtw4-6X{k^lZzW9QE8b!?XyF>c|)@fc}K#}-scc^9kca%p;Fc}Y+y z=xjzj|@XdAE%71uNj;2p|G93 zb56>b23*gb>l{;GJH|CfZurXhQ$gL3p|vHV{G-2%(t^6ip*1DO8>fzss2eh@X4J0_ zkHV+b&8GHp-s3c&xtehTzO`{gb!Nk;hKk8!#<+#6WqeCZc<9i~TY3e=}Zq^2hz-Lx;_qe%>7ChR^k!qMU}j#7Pqd4s5EgZ)zGkv{_VERJaPfE_m#gy1a@lD;lp9d2Lp9L)Ab~s4{HoGFXBg!{H-0RJx{dXkNd5 z@pvgV{SN4K?E1=Ksc)=m3{{neN{0`tuP^MCR@ti(DNfyPS8A#)1-t*oKrc0~a9~Yg z4N5Q;b~6!Y{W%sp9E))bM8XD!#j15y)?>*8mB0qaAT064*1y{S&5CSM!(KYMscK^t z|C^``|DT!KF?`+r1^93Oy7nRe8xIpk@gHjO9tTGI0Hck5xSiz$b3D1ddzTd!=H=z0 z?r{>mj#5N=g)8B{UqMgg2B25{0SmFE0Z(r~Po~ut9(igYodNxsoL$Ww4>2)*fJFLd zK9X1objRqww@TYGyWmdT)5Ao4@mO*BhBS8<6SeJl0#|3==`>akT_mzm=j+aBTQ_4h zRyLSxDep1%`^f7CV?1hO!nHOl+odB1sH&#J)!WZy{H(YqlUJ;LOQG(7Wz;O20Fx*S z6&*Lmk&%5xcDC_|ao5kpkQ1N$VfCbYW^daghOBsbHnM8{Q5IK;i{BM99$RP}4%eJI zV$7@yqc51>DFYd_KKddBgDGBwC8wl^9I41I=M^aZBhqnLhqX-CEI3wQP-BJ?rII!< z`$1+*c^S&Xd?xBd-k}Fqj9fKj&Z5Kn_n-%VND*bikNRhIEyi2ZOCjV`3^dCl<%h8wWf?!~fDt^0D@Ki2xhG?Nm*QzCxj;B;&ja^~ZRf7Yr8je#Qa+rrHn3Z(6%% z_;okFSrsiEJYel_blbB~MmPLuU{ynQR_*6#AN9r$Dw=&6eAN&Y3$rM~iv6_SOhf*w z=&L51;}r-orOkqM-iB2Kow)}QYQ1yLdDAZ(T9Q8`w)Y9!!O07UH#B&h*%>IfzHl?O zzd=1Hf5YvUGOhJ;ebL~PET@;6WZxLYP)vvdi63qZ2o!r z0sM*YHu0ZZY&Tstt0;d+>&kx_bWvE)x>AIew-pu^=eK_U(mC{d=1S$*@;3eqcj))b zl}6t3*?jfA<+F?P=vz$Vb&l1x*FXmkR>! z=UsfKKFQ`?TYF)2x3Bk@s!98%pIoo*9r^N**R~p?(+5V(2KA;AYEUV#0&I(#EIyT-kY{?0{ME;Low6NG!lxbS&(w)dkRGmhWVQ zGSXm+x5^;Ekw9T5;hPVT&#yi(O7I6$d*y}MO1WzKDU&yNs6 z&PmVmH>w`D&F9gBZbx&gJE#>~(+!_HVEuH|6kD3ozcnJ{RYa;sm~qVkQLJR3~LEd4P}50VR5mtZt(PHPzY!Yj$VTo&YAVF5#6!q;icaDekndri-n=VhEyY|)doYTB&|52Ccq7+5zjrYMm{rUZ0jM~0V)xLLi z{#~2pm)74jB6=eXLdcK=uN*qNNkx^fJVZtz3j}fvDu@_@&Y94P6^QKeamg?E{n2_b zapsgzI4qy={ex3@@~1fP3uSNnDY3xVWvuvxvO*q)#1LnVXW&FyZN8IphoAGE$a+if z49duVDss+lUXm=&ufoSYkLsm%th=) ziE4MFV3#B^k%cHP-;2e!H`|$w>QYWb?As=^%4X$^g!!}UDj0SOlTz>wp&yWli_%lz zs};J3jM#`+Ggc_a+Mn9E>!1kUev|Rl<0J2m&AWL0b;hYHTTv?MS>ulKTaC94A2a@R zbHF2p7ytAw(U1?^Y%*%q*KvB3L;VaQu-=C1LR6|a7a`A0t(lo55>2gsk1wboK`Ygf zA`F@HKv#n@O#`H9O1%;`;t5Y9EONNp@JNFtBpt3|9~;}QXkNZ#{>7KpM~v0V3L`Lm z#82BdE-*efPDVw3`46sLwq7?VTkXkD{a1eitaW^2G&oVy1^b6(jd4_cOhFP{q(4Lo z96>Rmu+@gral{OFk#w&erIfMk_6Z;SLo_(~`BJl!wUM~%rlgt*Cvmbsa+{E0^Ak&w zF?FH;fTaHQV(X8dWs=;Y*;x13xho|Zqo~kFXSF1ZW-g!C1*N5pbx6vDgiOet?ngTJ z0QrU>9*^8v1G>+bo(kV%ujKb5fmOf*3Q#K1E^`;$7g*!`mt!#p!bjzafzSzhBK`Xt zqR_a1?{_7DH;z+I-EK+XVHutQ-Gs_d@SuaLLWZz);sjfCN8vuQ!{h#O>;7W=hNlk{ z1oC;ndt^*wDWdX_ffto3kozxHk)1M1=c3j;JW5cY!UmV0MA;hRH*=r~C19#tlaiR+ zlC)t`smF;NPj;5!R%{S+a0UuP0_xQkt!mf!WMc%uC;V%~@1;3xwHc-jZtA>KSAMw^wP$lvjK zV9bZLcN7yQDib(;pc#1A?{t8B9gYB^(tWDeXHRh>X)IzkT?$H1I?1)Hvzz9ec@Fc6 zMP@Qrn|%X^qPyfmfPmh`x4kcZWn{??BmT{8oX}o=NX*zLT$I&b6hAALFX_x|kJ2@^ zO{_KGdzt3;yHT`~lM#i|{eb}R8S)?{(G+-HIlY=!4hB&G4#nRXoe6HU{2kZ`l)xrS zTS6xbLZs=nhoGb&m3CwVLT;H}p?#jYX=uMaNd0Y69&pQ=C#CJ(nAMc#roukIb&D(kuf>lLg? ztlq)23QTfTPB(pq4zuAOv6I!nAuBOK-L0+OEjE4lp}5H^4ltDXa`$d~V8`d}kD=N_ zqC~)UvJpr~J7d29c=TX~DDr5eqfoS6M;!_*4JBQZJsuktBwQ@fLLaT|OqJTDLv#Z@ z;?pT>QqUP+_L&yGjK}5IENs=7*rMu08!c1`&e%cO%H7B;A4aN1AP8Bc(o$_IrcqTz z5(eaCmr%b6nN(dKn=>ddpM&eHJxdZptUb`3WRIZT>3?RjLM6XDVknb07s9a6LW#T+ zy6m8Zmy%Q@4oAvXtjiRXi$kVCpaYc!k=G^VT&nC_iCg&?ig>)sk8J~$jKb7i%f4Ah z;Gf0yxH|o@c>bPiI}Dro zu~%+hY9>liXJz^G{PsM1VUdhwo-8BFR?hg=d?hQ-$3+jV^;0r`cCr^{C%n%wC!AxI z$9BC$2W?~5-Eu&r?$~M=4-el}HG9G3>o;Asath+8mKrP62NhrWZN^(K|JpdY(^~B9 zyf@z{RaczZhVC-g)H;>|YgD75mumA<5?_IWqFHG+gwX29Pp)Tc$X*V9f>DDCLkQC? z`&>&@v*!f65RaF8h;HMxV0zNgLfs3L{v9PN@~4i%s?YeiV^U^$Jv0reJqb-%!`r zUfy?7Yk9dh6hgR7NKNxXe@=v}t+yBpZycOp0qcFi97z{8OqS~6i5wc0*0YwX0B>Mh zWVz77f*ZlVbNJXJ=ZtB#v~iYj3WT;7uD-}OF*IRx_NsoryKTYqhm1FOqe?<_%+I28 zXG~nNX48t=P}T4gM_zr~c(A3ksvt67-n;gbX-;Rzc*B*pEc$<9%sXO@*qY-vj^%vt zo9ExL_dnG3+jmdAwyk;W;L9545N29B9=DBG*TXIrBg_OUv$H)~d3i5HR47GKk*Bhf z^1@cvlvgRGRn4uXrEZ@uqp8)0iha$kFe)e*?tiq@E z-S>jvC?@Zc|cpI4OL z)~|OZc`H~aABc7fW0u64R4z++8E_qxFlFlCwd(!&jrq-JP-&e&^%HYYJQvfkW^*XW zM{QLA?y(d#57^j~z~p&eep;FX%jtaR>^D#nd#bV9)YoPuY`m!onXjqx3cm@{sEp`S zM+)AAN(x9_j?!DuRE{7L)Fh5V*twTX4#_tq6*JXi`3PG1eX}G>`w7y>JU3Y$8xuME z(3l4HclQsOxT1wkv$G0efL8S#q?TCsgz>KN zfiVP?^XkPx6lk>|vq_ScPfc(pRa*hf8tygTMGCQ;WBR#v2SLGlG;!$K}n4NL4a z%>}!Ga48CQEm*tw?3lBm4Y>r4CH(AP!w9tiP?wmSt>5Z>9ImtO%#Fq~%4y_p9SMc8S zkP~OdR0S91ak}ryNk}nGSj#ADx=eNeGeS5KGl}3c+iG(;+wtPD55=~Yw)MYCE@;11 z{j~*LL{_N)^#G7)0-N}OD} zdK;s}IR5Z2p8pM&ci+3bO#IO@&+ndk=qVIP0$yOZ;F`CYq$6-N8gjW1>Z?;-Fx{4w zjU+pvGz9ayQ>d1pF9W$q6`xsPfVC58F^Ctj4LBu#;+lQ8FS57Wwac3ooh8-Xcebe0m%gJR3fES555qzZRSNkJ=@#N%NZpr*eIt z9?*^H7%nJCpd4xk7^)% zE(&oHja+B>8Ks$-x*E<$x1!vn6eyb58c-$d4{#{Qw#nq0 zi*gktH8qh2f0?S9oTN(R2zwF43prH;#je3!gX^~xlp^&d|SY3O>c=-w6Z9DI3 z6p`H0+Gua_J=h{9i$!O3+b@3vR|$2Q@#KNa_qyd4`#pi1Md3@=u3NOA2?rI(JXT?} z8EXga*t_4@+cZHvuzTaCUFH~V+tl^gIdJ92-1MSQ$b+1mO1dk8JojM=X2a?J*w&&H zoT~VI1wzrMBTydjmj1#g@(zB=<@ z+tL=}RNrD{>%)^Tpb=p{AgUF?|7}TQeW552vZChaXM~A*5u#o>sMj0RE6kbDirC;J z1u;?j0>w;3o+GeoCZa(nGW~d{rUOw|3Yz{{G-HINe@jRBgqeg?e))m%S^B@Dl9Ll~mg0!QTjq7S zdKKp6=cEKu#R66*8Iv~UJ>`9-2g@NItM!T z!a{ujDgt#lQMz*?Wz$GjF2NIyBV4KTH`Wtdv81IZ*rAzpm{E)J4hIouiyCFvD5JP3 zLf<5jj)ECExoL=0P0M!RBoUbak;<#HIy(F#d3%+ZH>+{TL+c1@`wUA|I?j0D^wjMf zg^qZj?8pX@`wNkJqw%Ei$*%2dE?9N*&vxxt2)#F7zN7u})Vqw2A2W^_4^@ca75ldT zssFpQ$`Z@L-R|djpGkx|)5P)?jt)u9xMZH?)PVEo1SFf^{|;yss6YZ?%)iC0c8Rz6Sc;r`Wr_BU$= zr;Dn<^y7%nqs**c$Pc2%rSz`-L>e+$J&80C$_Qe48-&q*B$jSA3DOc&5{s4pqMya^ z4DIYD)mAk<42(~ER#+8Yaw_Oqd&=Zc+Xi4Vh||`5pAEYjKT76#5Gvw>InL+v1iXsJ zr@+@Ed9c@G6-CtML%k$3GIfc6(ryW{Fy?dyNKO_ws%K+j1N~q2OE~1x6e@c13oS!3`n@anR?(p$ScX z-?nIiRtcnFTi#`{2x}3Drq&`MO?CTAw6bk!yXse1>ONyMD6SJT%rz~RZ?w_{y|5eL zdZ+>7V&R9U5^V|m&ct2-1#djA;uLptvJ@qo4?1@yL?I$hVkbZ>Q*HGKHBwjZz)s*e zY$;Zm)E|GZO6;LJV)B8fsZ#1PlV_YWStreGtjv%!_)951o6U}M5EwGje4v><4dwV? z{fE;F3zs(=-rW)v8^b|u!uJI|>9Py37{_#;g8J`F=1!Y9)7=PhlS0WhUQY?4l5v`- za-z7cEzV>-e;+s>(~#@%Eo@Y!lkAA z)3X#CmfIG~lcv%IvO=J$rY+0oap^r3701XEA-}uZtXFZSXh)E5XDwz5V=lDcZ*iI@ zHg>D=)%Jn?{l+%AeBsPU>VQep&8a0?!GU_oJ9n%@z0Npj>#Xr@y7O5H0XB)W!9r9h_bh8cx2$8j=D3P^=EK|og z*A};cJ>FW5XHw)+ZX(gfYOYquZAgo8oJf@?qMv4V8LE^w%IxP*?q`m*gb&LZ;~JItbLia$nyfAT0ezBd?eBYU%Cd?-Jzu3K{S;c3tBz1LwJ zkY}pvjo%_q)H}wng$wKbB`qSeB64;mmV%%QW0j~cze98Z^`Ee)UzMc3Ng33>lm9}L zkrv|@Q9qibzPWxxE9Ux9S}ceQDc&uTXoc38SV5u{!7E5S(+1Y#XAJ@14X*ZSDG0dq zW!mx46nOK%1KS5{h2N&g3e-2Ov6h{`)7(#My`-ta+_#V-2k($hLR3FWWvaXyNF3|X zZn4@ZSKcy~z9a0=qtABy{=&~Lyy2#oU$|7c0QzOv7sj3LKR@#JR};k4is~^_#xox|sUy=u$Nzj$twoQaKb`RB&%`G)a3aMxGk#l&cQ z#igrxA3-ObrH&Bj^$^iZjFSvgs{IM6CTl~p?GT>$t@Xrhpn7uO01h77iF);6xBzXtfrEFib9*fbN@XW*9jv|*Qd50r$S&vP|GvFQA=82QL zL}gMdR0l);fq6~>UV4`Fm<&fY^fvhx`n=0qROK9Rq3?ss#HN-Vi7g+a?KTI%V_abqCN&j#{=87Ix7Ds`zP35R&}hs@E7 z1|EG^-hw397x3ucw=i^;xk6PssS#*L%b1J9@*Vihpa3L`p|?ypxg{Kn}EWSTq>b!1Pev8PDzCZNL?hi=1} z2JF(PvQeNb&f!EVYD2=q4(a}pr$05-4|_4(%Y1eZ?AN**NykA}c+==X2a084-AXoL zKJ}nZpX=m^7T5R$eTE;Dc`^f6D69!_FcX2r?E~v*=H&aY!wGIU9nFaQFk|ec!x>{H zTxMqpI+{VPNAP(YuuM7Z8ya&^JPxi-lEdeBVcJ421EkY;BC`RU1Iaj?T;+5#PEc0R zl0xRXf)c^isj8dB5K$Er+u)%2rtz%2$@|eMzj*&Ir)1~p<}>1&`}Tt)NKfwJI>#eH zar6b*yO3xKb5OB_vzc6noR;P)E=FP*M2D4>y0Ry>23o=^aR&4v` z><6LO#?%ie4}9-?U;q7+&t&J>;u#YsorjI>nty#D?|5p&xV~{-gMH?Rz?-a4s-!%g zeNw_o5Sz5@lAs1cg*~ba3HtkZ$1!je&mYx&;I$jIota?{o=Y21BNt; zP3t~5d#G)k(lTq@v{~L^!-q5>z7_@KME%&A8#jvRnd=9RnlK1efB(Aal?z4r+AH#R zuDj{lZFFj@fifRsRa}Nh`99tfn1u^d!{KZko@Lv6muKmrJeUdmKC5ZIKKW2;UzYoVxN{-Eam2wmHFYXh;41LyP~ovGe4Yw2(-ia%tR>W`08kUaCTAhuiD_U zjUEDGZC-ck-ret9)d@%G~1XJ70Bgl1ozD=qpj#x+9JC>aHZ7ThE zGtmh4zH-p0m}!)5)4W=GdU0M}VPS!{prq8}&a~U?HiW;}i~YrU&8?`WQS5h*ZuMIm zolccS8?(e3JHdG-jY@02iy%Q{5el+mllPX*JO5jh*s_sl*wbxOihAH*bFSG?M;1bi z0jnPeRctFFOK=dW2o(ixQfavbX$8e4d3i3l!NRJ8TBFctD91Cg)kSiH^9;*iN$x=j zQvmgxbpzA_BtdTA0%EP82yZrsY1ut)gzsU~cr@QiCz?uE3X#B9f z+R|U|ZF+VI^__BDzQyy&h{j@^LE>y(aRg{G$;#FUe#ro+ok=WhiEnt6?o-y z3;`cT8xDC~S+2CKw47W4rx%2+h%6=BlNIzK2E=EnoO5=LR46nJcdJXMSl5^xHVu%8 zS>RqEw$liiL>sAnpw&xOTlA3jAfG~eWRX9B&#vI?!Y#wAFFQw7Cw|Jp89`uOz$B)Gq5CjfDPu9?JS6|g*bQ%-TVbBOSuDBktMk_0^VkDV z{!CPTEvgOk4{ zLVKiF39{t+CbT-hZMjM=RvEd-wFM)Jl^)7sIC59(Vt8XE$xC})nqqckb_2Ji<3PW- z02kG<68KLR7ICqMcx?$*$NzX%xUSiI>r1cIuf1&7e&fImKV2&9Q-5RJ`=s&F&4*ty z9#-exbGT`$@!5h);z*(W%#O)TwdKbC2^YU~&CZ8>&VE?Y4hBa?Xdf@G<~>g)_B>}n z_pqQW-Pj|kbNRj(_g8`jVevZOU$2-kJd#n^t(w3>wzCSQT*x}trJar)+?&pJR@oNxYzKeS zn3|LQS#5i$XFF_rJ8SS~8K+0GTob{Z4og2y6g z!a2=L@Q#QWBdv!!heKxCkWIkLMsS@i*hD9Lp4lF#J0{f5PtM@p$wh1q=O@ik`jfp| zV>@j1&P;^fX%Bxk*}FBiHfxmSoxNjhb+&V5vYm|XqqKLnb7iufPMe6?pIOQNtW9Fw zH1Q|<^IS~d0eEU3)aV){o-fYwlBsbFCL!k+n2D#PwoMI5b=d4aXx^m91Crx&7uYOcSCOZ zRDka|$~Sw_q9_@eZ_LYhcOZ79f3Tj8oZioFKeoF0`#=3FUs^nQ!5= z;{qB@mv&a!YJ0ZRaSJ4Lcb9fn*%p0^HZ-D_SwhYJtp1MvxLHEY{;ama7TSZxCU%Ke z%yzD@`Ku1J{6hor8+v&I!)O@x}JF9Gqzts-gzL~qsc2?Wo@7WHo z{0!zUvp=iP(I2xN;x4nDD{LQH?bLJ~m-;Mom)Xu0Hlhd3S;;d;#5RB?%w1@Q_5bsx z{wLbtSvj5ON#+@*6I-9r9_fFCdlR)TH=l%aTY?YKJLG?({El;oE~q_}kKTbUy}D4& z?xnWmx#klRc!%EChi$O@zMicNlji>0R!}YDfpfM&JY@C+8tkmuMoIUcU=3mR1W%Z{ zMefD3f0v#>%bBg9g^$fvOq05)p)ek3Ic^174vG?^fu$#j6Qhu7`j~AHm!sy1#r;$# z$NVO9|60Dk6O>ua+Pof^Av}M{_cuaX;MfGp)4WUf_nOaxLszr3;CYsXz1&B^>VdQ< zD#akr2CbIxO@4yt2$@fwWb6dpHZtALx9Ha2Y$Ke&7FU~LxJK9}kHt)! zAR8{xjamWSa5RE8y3h@DpxQrX8;tLF5_F)tJLWg}J~TdBq!krK%7mo>7JY7_`+NfQ zcc$Ac^S(oauc*1En8X*L^phsp9rA^jKVzEPqe|aFt>s4x0r1t zw7Jy=#%Y~lO)ljYOa+G)T8xdh1{$UG8ubo21;JI4eENOV>)8%YO@RTydrW-9b#|cjnL>u0JUQGdQwD+oytc3Y4)pRFplCS#mM03Kmtsh(uX2| zLHuQ$JbKaM%g%qbZMC>*bz9qvxX2y&$m8mXrn&QnDAdV(KSR5TcwM-j?0f+dc_g5 zG;J*mrs>@Wcyg`%4%g~oB_(-Hi9po5Dh3uP=kY7rxzzko}&DsXpvHsmjOhdoc-t7FTem4o&AiNZUaRt$#_A@ z!#HIrjPKQUyPtYXWQY?T(nIYh`Yu?2>O=0eDNAOQP8>5VD_WYi&VA`4`|p`lzjpBc z!B@w{gq&%c?B3$y{IWG0L)oFi-fK1*hvQ@W_RGwTFQ3?}^>Xz1ZuI!D{aN@3r%QoH zoybPuSKT-mJc(R!@Dv33@xp2%xgY6Cs@d2~{W<$Y=75Z|S4`Wr{-L+rkGn3rpzTWg z0reHz>GFB?!ObI$vya^|ddjqsdmrrb4hJk0fky>Gb9^?Jv+FyE+SQ?u((M)P2X7yE z^VxWOb@w-%tlk}5IM;Y9`GUk7AkU~*O|*9NNrKyvY|8E)DwwUi+e80D4(0>DRXahk0JWs ztsXNDgZ`=TWQsJVqsCr>)M@FON6CkehJ&Q{F8sj4P*+OYsS46kQ58qWXv%-SGMCh}=`Xnu;Qz zrrDPaLVU7S)i;FVzaV#)y3J43PJF#>;_g-FO$m(58TV4z+@ihbM4+OjQY#qE}N)Pw2{M1O`*;W^-jV<5_k zqaOIwRvglKrnV}X)(L&W&_;$-c7HORpe%D61-{tT2a(kF6XPE^T`du*2#(5auN~dm z(lmP7^wIKgoT(lWF;w@;6)`wAzJ1%4Ew|mVc0J)8drW1$y6)WL^Zpm(TW>6LRt>o0 zX>nS#h|gDERabfW*J3SNZop1#4aS!t4Qnh6393LWxdl!fviuGQq7_r7wR%vnTZquK zR(g+VE;E18IYQEb2S=rh($YaP%NU=zap71;uuxrd=3UXe==RINAF$v;(|d)H6^4bn963MS7Drn_71s~Y%G)u?S*bXtjCdF z1sQoIdB8j>k%d}XGcr<2!YN+RqqK|Rv*$^nMSkujMTG}do&2FF8xt&f9N>)eCq%D+ zPMkhErm9tY?-ZB7bo}n>=U2^rY3kLN@BGosS)!tK%=J6(TmH=*?;_%4=;r79*ei|K zUj3-3QjCgKjvhawNtE5*zrIa4$B%dz`T`zP`_v6gJHOP3%>On=nv7$F6j_pO3R0T- z9o`hXU-h@N3N@@?4Ca|GaxcROnW$BPezR{>DW@nyd@9#^hm$GzSKV-{aYg%s@>+4; zt?ln3cSY;awrr}%VJHjE9@$oZmwfxw)r8eHV0AKjl1ryZnb~SK4yP!qYl@nepYE5? z1E3i$`&rWvDdI?-+Ul?{YS~ClkAf~FC!~Vgks>OHvuhIk1TKplDE_Xa_0%W(8!jDL086vP9m3# zpg1nRZr`Nlx3{C6C1TWvXKLv!!||47{1)1c$x^NHINm}MQ9}NZIX1tms7UflrHCNP z&-b>p=I1Nv>6ueo(@PX*OREx2%0Hd5b+aO4dbPBHr4-}E6vKeyX{owED&^A)llkCb zbG>o#x^XQnzxzOQN5)<<`KjLv-O?SYY zWh0Svn96Mxwrst!La(T)tt#$aTv%Qh(X%C2wkwm$DpW=yHRZif$)Fb;IJjmwd6#g( za5KV<&lCAn(Ta^Rh0P3xqd0g%0+PgSdPdAsvA<>0)P z6?+?Ub9(2M4w+iJaK(Ua(Rfau%6Upc;OR$RB{U zcpOxBNLPsGd1q0JD%8tt6LEjKbssxLng{Uw9(6tDf!^>eiKGNFQMVwsB%qY{DJjqk zBBNUia&kPGX(2u27zy#wB@}$HPCu9@5E^Z1O-rWDBR8lX);TyN@?+3IlIf!nszyQM zZW>D7+B#`++dY&2;&#tH^3)$rK7DkNGgnN;jPm!J|L^-7f7Z6>B9VQ`hUm`q#>tzn zGX4>nb+4$08z;Oo?!Nxa?f*QJ84(S&kp&lG^gJ5cVJg@+k?jiRE?5rg6BZrwbJ#6n@5B1UpF2=;u?<*43)S6QNW8%z_mhsBPnc~$nz56E$KyeSjOqsw{|bLM z${;|3ix7M)9uOl+CF8KGyB<$A(vDf7z)*)Y%(%wfd8H=ysk<>hPVDl;_d9Ox{zS)* z@I;@^C&U<|y~pki0sD#|uQux~i;a))1ndhUX;1HX7SFh74`@CEORR3TlJE}iXh&av zN1l$>6XQBk%qQ%Lo#yZGM7v{8@`>>siur^iF&gA&Bg~jjAP|328_D(#e6QNEDfzt# zQlR_0DY8xFvm$yoc)CKyn1H_n=(TM7LWMnUlllG>zMjh0)A+iD;S7dX^Sd@MyoTXMhSxIO#PBYD?>*eYz5Mq3 z82*^yUWPwmxR2pa`N{hk{*2*%h7T}&nBgM~4>Ej|;V&6J&hS^=r-EUWVHLw_hP4dq_{n;rg6PL^ z7>!pjCx|8*wO}3)%mbo@Kb^zy0)`hcT+L5j(eVbJU&HVRd}lqsYl^Yvx?=?aExJ3hvz>-hdg zhMO2}VYrRqLkyWq&hSfu zN(w!%XngJBYd2pr|0q7blg@Xt7-lof;rqD^^Jt_>K3^B`bs=9D@pUm@mog0Vod{p| z;_EWL?#y)4d|kuWb=<3ZhW!{0VA#lTD8u0ln;DK} zIG!QvC51JT(!zIUFr3M77Q;4%OihKUsmvpqDhn7cVz`*$5{8#BTt-}>EN8fa;dXF~ z#u`;)jjFLm)mWoyu*L@PDanz>8dYPBs=-fkBkqtiX{=E-i8QK)_yW358da01|C&S^ zRm15FLDHz2L>g6-NTX^JX;ck1c7mi)HF!Z0B#o*`q)|1AG^!?%M%5(JsG39?Rg*}g zY7%KwO(Kn|N%u1(jjBncQ8kG)swNSyY7)tsCXq(fB+{swL>g6-NTX^JX;e)jjjBnc zQ8kG)swR;})g;oWnnW5^lSrd#5@}RTB8{p^q)|1AG^!?%M%5&eVof5As!60#HHkE; zCXq(fB+{swL~^Z3q)|1AG^!?%M%5(JsG39?Rg*}gYOGN;K^j#Pq)|0N8dYPBii9kD zO&V1bq)|0N8Wpw(hNMw7K^j$Kjj9RKsG1;+stMAlnjnp;3DT&VAdRXC(x@7ut3d_U zsG1;+s@ zqiTXQswPOIYJxPXCP<@df;6foNTX_kG^!>@qiTXQswPOIYJxPXCP<@df~m|JRTHF9 zHNmuCjj9RKsG4BRvqsg#M|_7gswPOIYJxPXCP<@df;6foNTX`3Q8m`68f#RIHLAuM zRb!2+$&0BSnKY^!5LHJLQ3CX+_hWYVab%v{PERg+1hYBFh5 zO(u=1u}0No(x{qD8dZ}?qiQl~R81z0s>!5LHJLQ3CX+_h)#u`;qNTX^BX;e)ijjAc6Q8k4$s-}=e z)fCdGnnD^?Q%Iv~3TaeLA&sgjq)|16G^(bMM%5J3sG33=RZ~c#Y6@voO(Bh{DWp*~ zg*2+BkVe%M(x{q38dXzBqiPCiR81j`swt#VHH9>)rjSO}6xK_uQ8m`6nnD^?Q%Iv~ z3TaeLA&sgjq)|22s2XcjjWw#KkVe%M(x{q38dXzBqiPCiRE;&NrjSO}6w;_J?A(8e zIP!4EF2LRlV+?B;#xX9BR1bQ2qz1gvBhiRF5{<|sZQ*BbW_Sz3oeXbfcpJlA4Da9; zb~C(_;U0!}aXT;bGp{gwmEo@${+Z$14FAILJ%S>Qp_ieLVSr%?^;U!#_NMklABL3- z`!b9%tYJu$@(7}oNAS4BNN#5V=;#qk87}A6F5_ob@TV*JdKJTs+|Hf+%w7EHUcUY% zU;m2X6MW|>ZtdBQS!kK`vq$`iKYfSWF~@b9ug@|x2+9&enxQ=M9C}_ppWY}h;p;1@ zHTeg8eHA}*HN$K8&b16TGrW%B^$dSXZz_0H1;a=9{z1N`dB-C^#_&nL{}kVU zn&0>g-{-N&&++vkhA%Pv9X~_!h)4cAf9oF%zhKzTpYrIGRC-2XYAQ5Scoe3o5~L@U z5WQE);Oo&0$1ohna00_g45u)h#&9~rR)*&>oXwE2r!e-E3kiqHe1;1dUc~TXhD#YP zMWZ&%cjnJrJO zE|F~N63M165fAGuo4O!6>Vjkwb|8i%n>x#;E=V?YmQ7udZ0dq!Qx_zgDBr=5WK(C^ z)LAxlmQ7udZ0anVIxtUdl5FaNWK$O;o4O#`)CI|=E=V?YL9(d}l1*KZZ0dq!QwOE! z4#}o2h@W+qO`T;^7bKfHXh%x#;&a$b?B%3N3fuE|YBPGRdYclWgiT$)+xoZ0g_;^oM0rmq|8tnPgK3x6pl(O1?o4QQ0sk3bAGRdYclWgiT$)+yz=vX#&mQ9^y zQ)k)KSvGZ+O`T;^S4cK>g=AA#NH%qaWK&m2Hg$z$Q&&hfb%kV8S4cK>g=AA#NH%qa zWK(C^)LAxlmQ7tD+0+%1O4U0;zcr*ZmmMj8+1vp-*pScniaw3~yz48^c`;Njgd(9rXMw3}0pV zYlgJuDS>nlq%}_oqyrGrLD0+4$1uQd_#w#e68-s_-y-10j{C#-TX*yIX@+MR8U%qif==qc>}EKF zp2r%JU_Qe_hQ$m^8AceEF)U|T!7$3OieWXwWz;_KMsNkg?dUl&4CB)<^CUd`_?oye z%v={{t_wp~(;ecvFmyFR;<_+&H9_LHF!Ng&+L*41-@?$w1c~3m%x_`lw=nZtnE5RX zZH!N$jR_J*!QYJ_b4!@HB@FqcJH#zv$S*)VXlZUS43pu ziU@N>gt;Pu-2~ksu83eCL6Ep2g1rMl;))3N3j~QPBG@AkB(8`+YvC=-6%po&2&CzG z_zzb|Yp@ch^-meFN04$0mN5>?7(ZoYS zVJrk`EM+{FG9F7AkEM*qQpRH`wXLefTmH#LzM9lWjsU~4^hTLl<^Q{JVdej zq84^Dypthf|8VCnZinPO%21qKu^|V=2m5iZYg>jHM_f1?@mm z2==D-vHBud$*?cO7{eNdb^K&K^#RgEkTgaVQbX`8LxUis2A^UM0#at5M%8WW9<}U?G$6}6l3iaW9<}UnT@e_im`Tzv382F zc8alfim`Tzv382FM8{a7V=U1zmgpEubc`iB#u6Q4iH@;E$5^6cEYUHR=om|MjI~pY zwNs3>Q;fA!wd66r#@W5jumtP0YQ|DEeukNYMA;pJh~dDehpKKnEEwL{Tilz4O72{ zsb9m?uVL!fF!gJg`ZbJ!8pc2kW1xnqU&GX|Vd~c~^=p{=HB9{)rhW}mzlNz_!_==~ z>en#!Ynb{qO#K?BehpKKnEEwL{Tilz4O72{sUHX4Hp1HO#TqFN z?9nyNO>y9GIUwniIP1nZ>&7_i#yIZLGsB?`;;_cklOq|9V%W@ZBIpvAXpazwHJ+ZK zokASec)F(jLLAn3dLwZ{T%uJ+T$;&{)*f+b7Q@-xH?q~oK`DaQFeF=j9F!tRw)!~h z*P4=8dXZRXJI=_p<+E0+IxN%tf37%v~tI9ZR z{&a`dmT_4A>6&&laoGRq`aQmWpRZ3-&xM_#lVK`D+V#YRho0fNDK2!rrWI*i`1zXF zrEwAD>kxk{lVL9LfGA{0rvq_59f;#}fZj#&9v39z8J89^Lp1i&iJ2nf>b7RN~e-6yMTT%6%M?F40+z9lORRfe>(iu1}U4of@U1$o4G zVQEKeJOjpIZ>KvK(5H}7T*EqzPa&;zUBK65osPpgP4~$<9f#x+4D%hbPREsAd|k%Z zz4@A~({ZH_Uz2q@4(l|v5asK>d|k!YF}^12bR5=cdZv!A>lyZAIDlaz!=Vg^Go)Q) zTw!VD89WY4HMK)~gt#)EuW6?c=h-~2uoUy09#>e3d1jBpj!oa9y+a(m);US@@)S(3D_4!$O9|3`-eC z7?v?CXIQ~7$`Fz4_%34W{~t+jA0FpbpZV*V>2CQIn$@awQ+2qmc1tpO0AoyFggus5 zy--73(h3qYVTl5X{p05!VQaE-2&-->rIJQMYzl19TNF!^1-%&Aqs#Hi!IejnBM+mg zP!vVjtN1+-BfFq>yAn?I(qZ<#Km2oF-|Og^=bUqY&$-X{oag8qeZ~AYD)}yz(`a?w zC3PJY#`&wGwOvwIqhqsO($yv5hd{U6U1fVg{in0+kAe??50btQ`(xNi?1w<&m;zhDHn5#1J3#%HrJmRS-U#(Sal#(37yK5vd>b492f-n57(5Do2OI&9fycoN zI0l{qy+*oA%4s|ej)P~&F$+$Bli)OEKF2d&gWaVsq5f?idj`9}lYfUji~W7^kg^VAH>(czzH4ONwWk{w2k;4NFoy z+n?Z9j$U?YcH>+ez3hs968lrwa45xd`Y$;AG=Dt^>i;E`{#o$Pz|RR2s7C_zNT41G z)FXjXA@X zX0&=FP>+P-F56a*gcQ|i^++i0@{?ANgyJrv)gys=Bv6lp;x4CHJrat$j8>0?_E8wE z9trKEFj_ql+DBoudL$Hg8Lb`(?V~VSJrdeSVYGTAP>%%akXAS_5~xQ)`zV}l^++h%%akw85X8bie`>XAS_5~xQ)@si4bdL&Sf1nQAMJrbJZ=vRuDRA$9X zwyhos#Y;}HdL&Sfgl0XqtsV)~BY}D(Gy`(F)gz&J$+p!afqEoRj|A$GKs^$Qm;6_& zM*{UopdJa-BcZSPPPcj_P>%%akx;zkT39_2ikEC#JrY{|uucC$Jrbx#0`*9s9tqSV zfqEoRj|A$GP`uPH*=-k%$0UCSK7@w-frd{yP0w9X0EZD6{_9L z8g?^Z*v(8~H!D=TnFZ`tYgArphem7BZX)O1tQzem=G;xRxtmp^-Nc!@#h9KXw%kor zxtn-$x0rFdW60e^kJZw~ly-)B-dc?|R!bXgyVljzx|&*7Q|oGJW3SRb1bQbxwY1Ub z5usYzcuwg3W7X0|r+fccwY1T;_m5Re8%KrSKUQ7ll2l6}ontfD0(y5%wG`6mJvP;_ zT@BmSuw4z?)v#R++tsjLEroPm-v$T3L2w8h29JW@0sWP~S_)}A4rahH@D%8;iq%p` zqrZ(-OCgQkX;#fnvuY`%ZSORzmO{GB=XfTE{XOhF_6&A`y8j*aEcW-Y=dfSKp2vO# z`&IA<;016Aya-+fuY#VFR!bp`uY*4Xe+0e(-T;3LdS_a-6w>IOY1L9l;~oC16jC*% zHC9U@ZM#iYOCfE$WmZceZF|RBwG`6m*rr+vY4k3&YAK}AyVRGJ`{;Q>#PWiCkEX~w2(oEyW{WfW)ZGS(lrl(X(Gi`fcWwkU@ zf0bq`MVe{*x3N8Uu9jvx{hio%gK<*s!49$Ch5c^q_h4_selPZR?Dt{szO;+#FiIeUn6_7LanA%56HOlK{}9|Fy=dh9_eOX>^Y;(wzaQRJrjwG4y7ScdR^eW9-%IX$ z$$c-m?WHQ5$~=D6X}mBxa;_t0t|O+cBVMf|Uaccuts`EoBVMf| zUaccuts`EoBVMf|Uaccuts~m3)5@OT>7r;cc+j%cTjXs1qnR=*{}sUx>gLwZz-v8h)-jDb9k;^`E*+(w>$Yme7 z>?4^ds+9-B`PyMBVY ze?n1#QefZ{iVa4~9_CjM^Q(vX)x-SiVSe>6zj~NoJR8K3arxn%Hit1@a^|YdT+Dtudrk*xaPn)Ty&D7Io z>S;6ew3&L^Og(L;o;FiY+o-2))YCTVX&d#lhkCqUkMHX7T|K_5$9MJkt{&gjtH*cs_^uw`)#JN*d{>X}>hawpu>A;ZYwxZ2*N!>RE4Pop_9L+U2y8zB z+n-`oZIZS$lr>3PjGluuDT*+9e_B)7?_#?(HkEmAXH%K?r!|#%e_B(S_op>6Q)ptQ z(8NrkiJ3wZGleE*3Qf!un)F@L&pQrpVs_TV?5v5|SrfCfCgSHNW@k;z&YBcy=y~Gd zrofSKlOheHzxOriYo^ir)0zVBnr_n9Oruq+Nnb6U?)_;^f%m61MaukFsh@r&^)ou+ zY9i`uBHn8v(rZ$z;&jJ&O^Q{FNzf5p6R}(qQCt)8TN9C6Q}hYHKiU9#A7B&v)0*MA z8J?Trxf!0D;kg-}o6F2|GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q!*eq{H^Xx? zJU7F0GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q z!*eq{H^Xx?JU7F0GdwrLb2B_Q!*er{b2B_Q!*eq{H^Xx?JU7F0bJRRH!*dHfx4?4? zJh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=AT zz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae z3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#BJ{?|}_NB`{sS~pVg zoPy^RJg4AU-z0g)x{-os&B^4i6g;QkIR(!tcuv7{3Z7H&oPy^RJg49}1TCgg69-Gr{FmS&nb9L!E*|pQ}CRE=M+4r;5h})DR@r7a|)hQ@SK9@6g;QkIR(!t zcuv7{3Z7H&oPy^RJg49}1TCgg69-Gx59HPJh#%GTj9ACo?GF$6`ot+ zxs~?Z3eT3eT3eT3eT3eT z3eT3eT8W@Z1K^ zZSdR%&u#GB2G4Eq+y>8W@Z1K^ZSdR%&u#GB2G4Eq+y>8W@Z1K^ZSdR%&u#GB2G4Eq z+y>8W@T?m{)yvx8xecD%;JFQ++u*qkp4;HL4W8TJxecD%;JFQ++u*qkp4;HL4W8TJ zxecD%;JFQ++u*qkp4;HL4W8TJxecDb!p_om7;cB*cDQYa+jcl?hr@O_Y=^^kIBbW* zb~tQ@y>{4ZhrM>#Ylppd*lUNqcGzo&y>{4ZhrM>#Ylok9>fTP>+o^jyb#JHc?bN-U zy0=sJcIw_v-P@^qJ9TfT?q8*j{|$T^{2TC@GRJ1mlsPtgMytL{Lhtx`Mr~i6%v*XcFJ|YTL-*# zsITe$@YVru9q`rxZyoT~0dF1blIP@F>f8} zYsv-QI^eBCeeGOXC%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7` zC%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2 zb;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!dn--b-`N~ymi4_7rb@B zTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ zymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_ z!CM!+b-`N~ymi4_H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{ zH@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7J zb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&?u$^}t&Xy!F6a54`oj zTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&X zy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYT zz*`Tz^}t&Xy!F7F{vTH(k^V~$^mwY>cG5lV29h53!doxA>01gZ9v6Dytry;U;jI_m zdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f| ztry;U;jI_mdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f|try;U;q5u`wp8|< zcr)H5PM#Ad#%8buOo6Rn8#oQ-z`Rkl6RP}rkIHZK4xHyye&cU}-tqOE%5S_Iya#+2 z_#V(Z!Jbq3jqeA&6YL1(JVH5-P|hQi^9bcUBH#HLm-C2xXLLD_$ZJNI^N74Aq?|`6 z=Ml~!yuNNZKuw)aS+*&~r= zk3?EuQk;wTNTkJ#(R(D)V#eq_5@|7GZ0E@iuoLV8yTKl?7xW&9beZ=^r1h1==sgl? zeI+q^k3?EuNsQhjk=FXQ(R(D)?2$-oecQJ8NTjvCZS)?AGeRFZjkH9y;8=&_{q&dAO z9e9sKnmrQfz4!lPq9e9sKI`AHebl^P_ zY4%8@*&~r=k3>4~9*K0|Jre1_dnD5Akw~*gBCRiIDv!RP8NEj$%^ry~dnD4#AJgoS zNV7*Gt$v|r)Gv(QBav3`u4;aG)A~kW+u!%o>NWZ+dnD58JGQ+?BCQ@|+j}I^ z>PNP{MT9;WM2%-XoEY(ks~`k!F^i zW{*UgJre1t_ei9p-XoD_k3>4^JrZg5NTk^#@jU-E_B{VJ_Pq3@x9oXhgXf8+o>zZ& zN;B93rodLP4V(sZVBW}x|2!l9^Nje<2enS;zs8>Dzs8=I_mv_q8~tBn&&#vMcY=3= z_kiyL-vhoEd>{CJ@b`q@(mK_O&|jRt75Qb*yA-}n`nO5{HtFAvIDLTh0n!IZA0T~@ z^g+@GNgpJAi1Z=She#hHeVFuN(uYYOCVhnT5zi!i zT*k;{j9kXZWsF?L$YqRN#>i!iT*k;{j9kXZWsF?L$YqRNPLazgaydmVr^w|Lxtt=G zQ{-}rTuzb8DRMbQE~m)l6uF!tms8|&id;^Si;mq@f6=M=pjGHaa(R(lUL=l|I zd68URB$pS-4$ zi4vzZH}o_94mGX0q0!%=ritRFS#zFd&3T$N=V{iQr&)8JX3cq8vqC@b@7L2rN7KYb z(?mqmL^#vLHq%5k)2uvC6R}Jat4tH6OcS3>Yc8qsXfA2=y8U$E@7L3sOB(NUE}Ans z-QTaLHD?rR&ZxhNJ^f1T868nfGa^qj7Edz@Pc!~bGyYC9@=i16PBYq0GtN#k!cH@` zPBW@bNB#YJI_mG&)0#6HeU6Pz$5g-2nQcaVcMjj>;6DfdIrz`Pe-8e0@SlVK9Q^0t zKL`Ig_|L(A4*qlSpM(D#{O9052md+v&%u8V{&Vo3gZ~`-=iomF|2g>2!G8|^bMT*o z{~Y}1;6DfdIrz`Pe-8e0@SlVK9Q^0tKL`Ig_|L(A4*qlSpM(D#{O9052md+v&%u8V z{&Vo3gZ~`-=iomF|2g>2!TY5`UYuv&oC z0(=(WvjCq3_$u+RakCS!y>+?PjUnEVY}ZcC*xO zmfFoyyIE>COYLT<-7K}6rFOH_ZkF23QoC7dH%skisogBKo27QM)NYpA%~HErYBx*m zW~tpAwVR`MbJT8*+RahBIchgY?dGW69JQOHc5~Ejj@r#pyE$q%NA2dQ-5j->qjq!D zZjRc`QM);6H%IN}sNEd3o1=Df)NYR2%~88KYBxvi=BV8qwVR`MbJT8*+RahBd1^OL z?dGZ7JhhvrcJtJ3p4!b*yLoCiPwnQZ-8{9Mr*`wyZl2oBQ@eR;H&5;6sogxao2Pd3 z)NY>I%~QL1YBx{q=BeF0wVS7Q^VDvh+RanDd1^OL?dGZ7Jhhvrb_+xZ3q%MDn$0bh zEtGlfccIK{zYEegqrV9*NabvM?RP=5Jg4}Z;DT0ljQ*Copj92CzX>j|_Pe0f65Ba2 zZbBc{k}?+^(s-;tGYSv>$-{JcQi|Uwd@bE@6~?`yjpfYSO{TMMMSQV{FBb8|BEDF}7mN5}5nn9gi$#2~h%XlL#Uj2~#21VBVi8{~;)_Lmv4}4g zwOX}Qwumnl@x>y(Si~2L_+k-XEaHnre6ffx7V*U*zF5Q;i}+#@Uo7H_MSQV{FBb8| zBEDF}7mN5}QR^@&1HM?q7mN5}5nn9gi$#2~h%XlL#Uj2~#21VB;yk+oE-Um&`^Ky-b9==uWD^#!8q3ye?~7@;l@UH>og(&_SQ z2|DK(^c-i2yq3soiM*D`Yl*y;$ZLtbmdI;~yq3soiM*D`Yl*y;$m=!ox=3CZ$?GEZ zx=3CZ$?GC{T_mrIoR#=Ca=rnb(y>_lhtKz9aUdP)z?w=byR&FRbNNd*HQI#RDB&) zUq{u~QT26HeH~R_N7dI+^>tKz9aUdP)z?w=byR&FRbNNdH?)SoRJKv(xz9$~UeN!+ zvB3`T4R(NUumgO99pD@60N-E-_y#+`H`oEb!4B{Zc7SiN1AK!W;2Z1!-(Uy$20Oqv z*a5!54)6_jfN!t^e1jd}8|(nzU*&X@{eLSP>;T`0`u}Y= zqW(Yq4R(NUumgM(-ZtTF6W%u2Ill>SoA9;?Z=3M832&S5wh3>W@U{tWoA9;?Z=3M8 z32&S5wh3>W@U{tWoA9;?Z=3M832&S5wh3>WW#(-Y-ZtTF6W%rh^R@|ZoA9;?Z=3M8 z32&S5wh3>W@U{tWoA9;?Z=3M888vU4@V3d$`AvA+gttw2+l04Gc-vAhd!%ejz04Tb zZ@1`KTlB0gde)Z4GN*g2-_nR?+uq#LSawe6Z$Ml0yDj?N7X5CEez!%x+oIoXajM=H zr|NC#Ok=;TAM~kuTlC5;dgT_qa*JNMMX%hVS8mZOx9F8y^vW%ITPNCG`ja~X_Pen3;1)RMoIluS|qNd zMMkeYY;mgI77DP10&JlGTPVO53b2I&Y@q;KD8Lp9u!RC_p#WPbz*cm>OU0>rThady z`~L?Y2mcdz2zePfPf;gilNOw1iJf__TyiOZc>e zPfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf z__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf; zgilNOw1iJf_Ngu=)BhU^^`B)z%|wL118OEBTQd=%W+Fn(M1-1&2sINCY9=E5d)uCg z2=)JWx~WxqE|i`NrGY~IHA6sPF4Q-Dp}y%0^-W)> zZ~8)g(--!F&+&#Mp!8hnY9~VVeWCikP~Xsn`g$(ZcXOe>g9~*^fKcDQg*S|DCqkXV zEvx|F4oc6JLS5WWWN!nd=d#uJh0=4O^js)C7fR2C(sQBoTqr#kO3#Jr`$6D#B9xvB zrRPHFxljrm1a2q7`$7HZyX=pE4}kl?B&e^q`m1IWLVd9n>RYXlx4E6j{(nK~xoq`) zq58g1eP5`)FI3+bO3#JTbD`Tw6rV=%X%wGE@o5yFM&0-IjC~r#r%`+w#ivnx8pWqk zd>X~4QG6Q3r%`+w#ivpCeZ9v%jk@m(?b9eejpEZNK8@njC_ati(A1-r%`+w#ivpCeWlo^QG6Q3r%`+w#ivnx8pWqkd>X~4QG6Q3r%`+w z#ivnx8pWqkd>X~4QTP2Iich2N`?BrRsQbRqK8@njC_ati(T87_%w=7-y)x`1aFZ~g(|I4U#o*V%JfZ2sBcn2vvh|%drqiT9idiQ zgj&@RYE?(5RUM&Lb%a{g5w?I@)sfu_wt?E|trV^52y2s*X^rI>JrxU%;Om#lKOjIzoLr6KYi_xWg+6LapiuwW=f3s*X@A3Br3o zt?J0us*X^rI>PsXTGf%QRUM&Lb%a{g5o%RO_;r=M9Nx;|P51ulN#6n83G<=>70k4sYe~Rt|6F@K){> z7(HX&%HgdX-pb*vTYwpaR}1;H?7QD&S4`Wvf&b@KynD74TL8Zx!%X0dE!X zRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8 zZx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!X_I9s? z1a~rm-^mDmr%wz}%7;LYICpv;D*UjRywkH$;m5#lf!_uPz(H^b90req-vLL!W8iTx z1CD{Gz!$;qf~Uc8@ErI(a0dK4@cZD);49#(;19qH;1YNd)ZAa?*Bn-Oof`cRd;|Qk zG59zBYw&NuUju&~gc+Y0pufTi5zC!KEO+|EfZ$Hge1kiEVu0|s!QTPnUZ2{u5AZ4*DxTisB>Bot0wk zx-GL9l_I{<$ zixArTl|C;*Xzy2gy+Ua3S9-ldXzy2gy+Ua3S9-ldXzy2gy+Ua3SNgmNp}k+}^CE=y zex+A1g!X==S1^S3ex+A1g!X==S1^S3ex+A1g!X_m3Y4r?^ojeO1xi*_bYu~L{J&E_ba3Jex-Kz8SVW_pBEvt z_bc&!CEl;Z`;~aV67N^y{Yt!FiT5kLa-v_^`;}ff5!(Bec)t?wSK|FjykCj;E2H*) zCEl;}%1IEz`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9 z!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+ zF}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3 zAH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc z`!T#9!}~G3AH(~1Y24KRQJ3iqcA@rZ3$=qts68!0w_ENx5?Y<^DziG>Ri-o8g*xL} z_#vLW57ZggO3|s#LY=`bd;rwx&9e7l>-1*XNo<|LE?fI5h1Soz%B)d$c?DkRwtAOV z;9WMI!7kJp?7|i>1-621U^~xufSq6$*bVl8y`auu*L!pZyHIDa3v~v&P-n0Ubq2do zXRr%(2D@+sJO=6vcBSYHcA?H-7wQalq0V3zeizgk?6P$RyHIDa3$vikV3(~k*o9M+ zL}#$e)*0-=9JbD2mz~Gf8SJtPJgGC-WzS-NAA1g4XRs@M9$ROy%hnm}LY=`b)EVr; zB~WLu%hnm}LY=`b^c?ms^#$9nW9tld*+0V88SJueVE-6<(v*!7kLD*Fx={6>9gaP`hV^+C3}O z?pfg9!j+oCZN@vkCL@RvaC z{Z@+hehWYDycCb=x9aJ78*{O{)Zd+Qz<*VoCR=@9e^s<*TW7Efbq2doXRr%(2D|WX zP-n2qz6V=pu*=pN>_VNvE_@HR&S00VGuVYXgI%aI*o8WSU8pnIg*t;>s597wI)h!P zGuVYXgI%aI*o8WSU8pnIg*t;>_($L$yYA8ur`(UNGuUPSDYnjFm;Dj!2S9o;v&*}r zF#cx!7kgY3U^6`Z2yA8Ps8Lv@H60N!9N2( z2mWV%r8C%ryESqdb&^|fx766ElibvLtZ8vHEsmze(X=?4#ywg3t4HBDnifaX;%HhN zO^c&xagBftdd6)gj;6)Yv^bg;*J$W;Yg$}mqHSwhyv&*wN7LeHS{zM_qiJz8Esmze z(X=?47DvH+X>t93ib{^A#r6LwwykO0ZYH#*amSg^ znifaX;))GyThro-5Nuo1;(;|S9$3@jXj&Xiiz^?sOf)Tyrp3{;IGPqm)8c4a++UgX zq%|#$rp3{;IGPqm)8c3v_pIp|+9#S8N7LegH7$;&#nH5Q#F`e5SkvNYS{zM_qiJz8 zEsmze(X=?47Dvl|yj;6&~8H=N7+&ZURtZ8vH zEv^{Jwl$3#=!EoQG%b#%aT}e|t!Z&IEv^X4w&RmHn#TQfvaM;{QYW;g#nH4lnifaX z;!$f_JZepg>;GAd*0gxknih{*)8bKUTHH4#2lt?9_n>L_plSD@X(5^xqG=(T7NTh( znidkLg=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TTF5GHh^B?C;)ZBi$SQ7#riEx)h^B>TT8O5F zXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J- zg~VwgnidkLg=ktxoED;KA(|GVX(5^xqG=)P*ddx05~qb|T8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B?aX(5^xqG=(T z7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GV zX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh( zniisIA(|Evr-f)*h^B>TT8O5FQO9W^niisIA(|Evr-f)*h^B>TT8O5FXj({|7NTh( zaaxF`g=kucriEx)h^B>TT8O5FXj+J-g=kucriEzQyQN)A!Mmke#=Eq}@@}bwu^H5V zf6GpR`tNVqZJ_@9TeklDTd4p34&JTSB9zDV9(mmOADtqf8h;D?_uxChyTN-v{r9(? zc@L=n{+6x(QWxsK)P?%*?_e9{+(tRKQO<3Ya~tK{CN=XjF6TC>nbGCkCS@?XoZBep zHp;n;a&DuX+bHKY%DIhlZc}^H^J-~Emvfuin9=3jMme{sMcH;aw^7b*lyf`f+)g>S zQ_k&_b35hSPC2(z&h3SQ_k&_b35hS zPC2(z&h3Y=* zz70@FIep)s-bOin-=EScr|^7R;$Xq=3G^_7xWj0D#a(p2SBfESC#F<{us7y zjZw-&pxLexC(f%GYyov^j8b%Kj8M162-|tG1JtcCO6dZ-!5**|^eT51>zq}rb5^m= zS;abM73-W;taDbe&RNAeXBF$5RjhMXvCdh=I%gH@oK>uIRzq}JKwOe6 zH~~(Ax-~}WUIVX^A8mUjyh`4*?e*{~#UB2xSH-Iod)W5cc$H!g+g>5BQtV;-73^0* zuaj4?Qd-4IX%#D_Rf;{F?sf7i#UB2Zzm-%e_Aves{1NyDcmw<~=x?c2iam^P0e=;| z19Tg%QtaWsx+PaB_OR`h_A135w!Pk7rP#xECFqt}rP#yhwpXQi!|1kG6}atHDc&&t z0a$BhShKBS&9+K$h5t&sQd}Wh?O*Lv?cb=|l!Ur9M(8-dN|A$8yh2{3$U(MxhyKdy zZk76o?cera)l+PHoxe)`#kOvZ5qj;kO1;K*h^<>=WP9bIN_2* zph|tp>0WoOQqQve``G?ARHewlm;n84s7jH8@q-|JN|A$0{$Wz?$Nm%SKgF)Y{s=bx zOOb=$K>t$YV4MEMN^+GV2fxkVlByIr*!F5|l_Ce*UahTCed+9pA&vSGa#L=Ugq6Iz9Do}=v@Td4H|raRre3bcS>RH-S;Gp2ELC^ zr+?~6qcvxzG{?5Ru#=h5PHB#9bGTEQqZ5CmImY|Iy`Z_;Da|=2)JY>kop>PBNh3m? zcp%hCBSPKABGhdxLa%H220-VilSYI(X+)@#Mua+PM5vQSgkI0t$=qirbDy2eeReYU z*~#2zCv%^jn)^7fZ-WD%P8w0l5I77T1$EMh(nmm@G$Q*rm;rUth*D00I%!1qcfr%( zIH=oLl%5538;fk+#v;^7Bf@h$qmxEt>!cB(P8t!;U>B&7P8v~)S8{erd2G*Nzl`mb zoSjl0r@spR0K5P$fjVhKf7MANLY*`s^y>6ZDUb1WP$!MZ_UiOb&3cSpo!+Tgk5RX= z1UscXM%~6D)JY@4JN#G8dh||aJv*g5wkt^gHSD)z|2p=a{7NT{=o$C=ol+j7ZetPZ zHWuOgK%F!qTPKYO{{VDP+^IQ^(f!dkJc=u6k#nTIF~`{{Epm!(V+nl!qn=SqHh$di zkrvt3Nh3n9lkoirlUNh3m?G$KrZI%!0< zP8tz@5Tx$RVs=W4obJ`;otnki_G~Mz1aV?mXvZE%M!YMr)Dp&NEtze0QGFTI9R)jMgIGooBQb z`R+WUwa9np8LdUWJI`n>^4)o^g|*0c=NYXmo^5N9@6NMrE%M!YMr)Dp&NEtz ze0QGFT9gQ^MZP=FXe~-;y~Xdb7A4Rk-=-(7&?4Wa=l46__HBB$twjm6$hYa~Nwg?| z7WpP0zNq$hYa)wifv|J=@kI-=^mjYf%C%@@;yytwp{~ z&$hM5x9Qoo7Wp~p3z$5+w_dqBHyNGv=;d`J>ws{)@YG$ z)3a?Y@@;yytwp{~&$hKF5vAXuMZQhXf3+6*Ha*+cBHyNG+gjw?^lV#;5@?Zc)3a?Y z@@;yy;SeoKC@wOS)*|1gXS5diHa(-Y$hYaO2;U8Q_Ox5-Vf0+ax9J%@m+@_SM$ct@ zo1W2g8Q-R7^z6X5=@~sE@NIfV$M(KW&**sGx9J%jtM69(G&(-_ZF)i?WZ$MITO1l4 zRr)qPqvJ{6re|~v>D%;-jvIZOp3$+QZ_`@|xc5rv+Hvod(6!q`?YQ?!wrj_|S3=j0 zd#{A99rs=dT|4f*61sNWdnI)3xc5rv+Hvod(6!^{P=ey6y0HPo&K-_=mN8hlqn?P~B{4YjMm zcQw?m2H(|CyBd5~L+xttT@AIX!FM&(t_I)LP`es@SA*|r@LdhHtHF0Q)UF2K)lj<{ zd{;y5YVchRwX4B*HPo(Fdw?5)+A^KoB6Pf6tC|{h^N7$RU9IYC)X6PEo!lbS$t^;i z+#>WyRLe+IOH^FTNL0&6RLe+I%ScqK-I#vfI$w*z*P`vUsCq3bU5h@~qRh2uaxJP` zi{93X4gFSZ7`@A-Hi&~dxka{4ZV~F_7NNDVR(my_u9I7YI=LmNjp*bS;V=7Fk+*{G z(Y2^bEqYRmlGLIhwP;8!>QRes)QV3(Z>^|BC2G-!T9lzS`h?#fZ2)z0i|nr}7w%0H z{)$@8A1Qa^TZQ+shx0z-llzEI?o+(66x=7a&k4N)_CB#~+)cW7T;Er=2W%px8EgSl zU@O=Lrg?H2I|t^CVo&cEdq(fLzEA8K$%`GZ_pt-^zMzKmT7LCB_9p0^!}p0*p;$F~ zW_KTP)O{Lvl#9j}<8Oi9aebdg6XV_BJ>a{*_kiyO-v_=Q{5|jqzhA5xp9H;g_#s;F zL$uz9f`fYUq2LhMAkH5O4vYVXf+tCNN@aT}XmkqRe+chC6#1A^>fyg0{_BH>^n88b zR#6`u06p`q4<5(<&)5yhy{|v=OiEd@^WInLi09pA^qZq1K<0 zkCuW@$wxvlZ+xrpQGE9(zIznkJxZ+~)q5I(NAcaG`0mlbzIznkJ&Nxh#dnY5yT|a| zWBBedeD@f>dko(_hSwg$M~~r=$MDF0e6gQzvitGKe*N~5V84EAJOFx3->)|~}HM;d4#5)J^ z&Oy9$5bqqsI|l>ztb_RIVBns0P&w*Xw4#G}?VxgWx?9x2z&-0AemsaD57NdyLzzEA znLk6mp9%g(Pktu&@50Ba-Q(2mah`mfCm*MFk5jwHsomq$?s01OIJJA6+C5I~4pEmw z)a4L$IYeC!QI|v1I0I zRQIrWIHzZuh6~wuoxH>T6GVL0i#v-uoy5}bq`bb!>YS&tL|ad-G8;}9#*Yw zTXhes)<&!DVb$8URrfG;JWL%Aqqru5Il&*x$0^Dy&yde-OZSx>?3Q*ir~avu$z zQtrkBpw-|hn{%XWu zjrgk(e>LK-M*P)?zZ&sZBmQcnzKztk5r6%8@D;6Z|AiE3Md)boFQhX@M}uEf`l#?% zjPU$Lc>bcEQHq`!4Zg%1zATnTgD;CEA-?;v@{+B*MuTSc{obHiY%B@C1pYPnH262* z*THXq{~i1$_^dG!@f*~?jK3uGoo*{am$`*9w@~JkO0pEBR1%@eV0@d+WU6)qs z(n?)gsf%xw8V%YgVH+iE6X#1xajDwGw$bHj6RS(A^S@FL{fgcu)UQ^AUjnT{UqNBM zqBl6*wfl~Ig~_kNix#I3BSp2zsYaE$#1{OZ@wvuuc~j5Go5o)Py{_eZaLxtY zD#Mb{5n8wMH9A6jma;ud*`B3r&r-H$DciG@txwO427P))81#wHzF-JEsyFln-Z|eF zOklr+?bW}&;0h^ML9fO21vkJqje5V{ruQ2^2Y%7NjeHr~O4}Fd2A>0m!SDFZkrCc- zisxU%_9|sxbR>f`m0Wf-XWg*qSorZXgT(s&OQ1YdeS!nq=f!I4&MtPJ4ib{7|`?mf&YJ@KN!V! zz4`;!r9U_WW~C?n!K8m1%<)&Rl=cVnyvO@*`-26Zd=*^euRj1?yZ+z;PyR1#ub}n^ zukovk*q1=>(e0PloXb`48Y$O#=j%N4L-0r78{iF|{4w@2c$4REVgJ2&=nsCvdsayK z2kd{OJgeXu>9@f*dD}l@Zy438RUTr1eqsRMh9LITs*RuZ+amvoC;!a(Mm)avM;b^u z%wIi2?~go1%6|d>9CQrdAF*=wNB)W@-OKtTo@@6F?;5eA&8Cpo>EN_?wbD-DZ`y<}n-5>Efe1D{X{e6B#TZ+t+ z{t8@q)xAGL`-xn@rp-jWm%BegJBj%JQ~D#XgUh_<7Wfl;Jc6$y|HyCuH|hVxlm7>M z6?+Z)XV}(+{>VCY@p?{w#Opczk)Qhw(K67ZRe$tf`^l)sp#JFpG82Y>ZqwdTH$&{-;Vw3{Py4R zNvrNc)zN6JPD^2o9wX9G*W!6no+riU&yNN^e_n`651`TmfmM0{l^#H)2Lh|#Kwy;~ zK&1!N-~EhhH-JhH1op@PDm{Qo51`Tm5v%k7Dm@UfN)MpY0}-qAK*TCN5V1-Rpwa^o ztJ#2Btl#!sY%AM9#40@yu}Tj_tkMG!GdvKnN)N!*K!kF_*Z?X$pw{STtkMH&Ek>*K zK*TCN5V1-RsO1=~(gScffJzUb(gUdU04hCzN)JS>(gUcp&*~oyd{(~@4hP|I5Do|7 za1ag$;cyTR2jOrK4hP|I5Do|7&}aVZZE!dUhl6l92#14kI0%P>a5xBugK#(qhl6l9 z2#14kILJsh2#14kI0%P>a5xBugK#(qhl6l92#14kI0%P>a5xBugK#(qhl6l92#14k zI0%P>a5xBugK#(qhl6l92#3DcU^MW(20}O-g2N#=9D>6kI2?k*Avhd@!yz~vg2N#= z9D>6kIQ0DpdM6wX!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z5F8G{;Sd}S z!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z zF#0o${tTl(!|2bj7+VU4;b#~X8Ws;qL5qgbqG7aX7%dt`i-ysnVYFx%EgDws{3|Qc zuxe+tE)7eUdW9Y%hE-FixW^5nPQ$3vFzPg{dO6)1HH=0Lqfx^s(lClNj7AMdD-{DD zCH^@|_z&3s$QxGq)z6$x6mgU&;;5nsJug0$W5hAT(a4j2Qmi`VulQ>V zb_%-{yA9iO>Z6JW{D!Y$dxmmUk$_Wr$m=Nh0_i77|DV`n*!IFv_&>_Ha8x6;YAr7~ zy@2h}`Do-7N@b56Wh_3*SbUVR_^8HWr~hx>{7=~b2YVHJ4f|)<_S#WK&!ZYWZF}@Q zs?pQ7N6e!dF~xv9sJcY|9qGRbdXzjGeTV+)8%Y|39)CyF(|d)EYDUz@onk#7p^uNK zk30PeDfZC_z1#PX=t=c!yumv?j*QUGN7R3ni~6r}q@9nb z|JwG5Jfi-qC+WYwMP(`QEh<8_@D-tZnQuZddNe<#mZo(2?=kx0F?!-L+Q2cqe~dnO zOuqJ$m%*!`d*5;OsZpWV2aYqJJ+Ag_`^$RfxY#p(7yMhJO0Hk2%u7Lr{+MAtlA%{- z(3}jtGDEM-&?__a$_!eRL5nhh=OY>UcU0*4NG5O$nPEPXQ4ej9?fFP1cop<~BojEE z%mki~WYm9CLeEDsfn&=I^N~#8`A8=4d?XV%&djLII2X@HGJ)qKnZWarOyK!QMoMV( zd?XWiK9W(p@{^vAWCG7eGQmxr_k1K1cs`PmKKMP3Q8Us9+n$eP0?$V>f#)Nc;5O*_ zNGAAaY|lqB%ttcJM>5PuGAKy~CCM-!$uJ+upwAiRBN^r+8MGxMZBZ`FM>3KB!aF@5 z$wdAV{E|z{d?XY3Yi!R)GH82-`A7zZ&oCd!pz|5#BN@~_!+a!z=4Y6XWFnrAWSEa+ zn2%&4&+|^tM=}x5M>5PuGU`*RFY}R1WR!HzM>32ZnTY2j8Agyy#Pg91^O1~tpMT}~ zNJb;6(esgvMpE0Jk7U&2jMjk+{VpSw^BX+YWTbMoJs-(LXiLmTGEzKq<@rd4`A9}R z)HZDf4a}f{88k4%d?XX`d?XX`d?XX`d?dqsB*T0p!&sJycs`P0M9V}xAIUJTWg?!B zWFn4!Gt5Ua8q-}1&qp%S0p-qoBop;~B*T0p!+a!zqGp(nWKh%$^O20S!cTfWl0jWF z%ttcJM>33(8ELHYm3k-_<|CP?l{O=#O$DRDx66JQj7EN1YSOYE}cL*PoPdGP|g#0 z@C3d)fkvG`IZwdt30OS=pC^bDPN1JBh!ai_C!C-bCw@^27&t+k@B*6l0-E*$n)U*k z_5zyr0-E*$n)ZTpekFJTO?v@N8-tB8*cgM2G1wS`jWO65gN-rR7=w*5*cgM2G1wS` zjWO65gN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5 z*cgM2)39+GHco4VT?tN0pO=I~*q+&)mR1`_!4se(jnmR?r+c5?Y2xkEfup|DuyI-= zvY(j&y$|QKG}*Xng!$7je_E=gUrDu`{$D}IoTu@~X*_Z|k|yPU@YnBvr<^aII*q4J zN4%DGS~0fYLrLK9bYzzFdGHnf>d5o7dbiQh-D&l1hbq<)T8ZbTF7Zy$Z7RHr&Rd28n2BpQr;nZoUd}@e3cs)Qs-1Z7bvCZwcSarI~ zKd$l4f3+fwi#H)(=*Ia%H!j|s@+9c*`{S@Q4iDqhdR!`}w@Kyvq{qH-)z^3xbbZIE z%Q$rzSDP7CiswP&s*8TBy6Ab;!uC64pP?6=p%AX!#Kv$U2h5lEIclO+Pl(sHsyAX(Z^mIx$EE6NgqWQjnsL?Brr zkSq~MHsS~*O9YZ70?87AWQjnsL?BsKM6?{#T7TwMgfnzgCz!uasI}`ETKI%oxSmu? zcFJG*4Qjo%Q`nxrPpI`e-ShVewO-qvzfY*$8a;oXVE#T4@%(*4Ezs$nzfY(I+V=c? z0&Sc?8z<1l3AHQL8ikx-{ysrlnqdAufo4w7awcdw6SSNO=I;|~8-DXY@n+B8C)75a zi|6kXY8$qHZp7CU%-<*Q^#t?x3H&=D|B3;5R=;BYJ|Um_SB@$tn7>aFT}%>POe(rq z3MS=K;}CdMwV0HDo#NxJ_9(NV;tcs4qU zm?VCf6vIw&{4h!UFd6ZDa58cm{Ab>?0d5%?Z6_IRCy5*;i5w=0943hzCKWm84MYx; zVsa&zV&s})gql*zUs8%!9;S%3rWkprP~#~g&nYx^3PqhlOQ%rLDfDv+<(xwCrqH@6 z;-x8C+7waK6zy#a9h*YIrieVJXkAk%%oN%(g{n*u7fsP}rWlu}7?-CQm!}w)r_g~Z zBG0qTIL~lJK<>H+X;ngODUnh5$6KOs5w@Bb808Hy{ey6 zJMmw=B9znEYINVvY4kLD{*`0ZH^-`Pj#b~B*wb&-PLzwYHPA zC>L?$kkjbkw|y7eUmtR6KTaRV_Sc7;Mhd6<>q8EnbK=>y*F|&U*0xvPa;*C1SoO^j zdFEL4%@Kd*SoO_`Z9ngRnq$>Br?#XNF?LSqZ^SwAX4_vMa;zHphQZOmHw+5lFb{`$ zILyOg9uD(xn1{nW9OmIL4~Ka;%)?`d~`7In2Xh9uD(xn1{nW9OmIL4~Ka;%)?J^ z=HW08hj}>6!(ko{^Kh7l!#o_$plLH`+Kf0{31-l=88KEDBBD(rWtzu4Ei>MzRjR- zGZD|2X2iD9`ZgnmZF_Dz!%SgD+}iexV}`yzgVxQUbu(z)41IqF#hXF#W>CBt6mLd~ z=Qnu9Gz0T9a6SXuGvZlqM)zjWy%}_G2Hl%M_h!(&8D>l~=-v#vSAgvTY!_g=0NVxF zF2HsHwhORbfb9Zo7ht;p+XdJzz;*$)3$R^)?E-8UV7ma@1=udYb^*2vuw8)d0&Evx zy8zn-*e<|!0k#XUU4ZQZY!_g=0NVxFF2HsHwhORbfb9Zo7ht;p+XdJzz;*$)3$R^) z?E-8UV7ma@1=udYb^*2vuw8)d0&Evxy8zn-*q)U>tOT>t2ci14(L2iKg1^_g(97~g zudrO+d|4imE#A%vJsQ3&_H4g~?Um%06>%AV0{#QI>Sx$T^fLR1US=QB%VJw^6Whkm z`bn|vC;tjN1-60hp!emztVqc?2EM}c{vV&0726oS&hWD08KGhr0x{bHI<`Qxwm_V= zKvcFsRQ4(!JWrX=Q|9xO`8;JlPnpkC=JS;KJY_ylna@+^^OX5KWj;@t&r{~}l=(bm zK2Mp?Q|9xO`8;ZTo-&`O%;zcddCGjAGM}f+=PC1f%6y(OzXtQK!Tf8?wO`Xnv=Y3g zk;r&mY`mtD+r9z5X~ajb;iK1>1HPtF#_2DDUN?SCGGC(1 zmnickjc6;u75eoR`t=q1^%eT{75eoR`t=q1^%b=lJ+C%nbicl$)?#$OzCypgLchL3 zzrI4hzCypgLchL3zrI4hzM^)e->O|1-LJ2xT^Zf4uh6frNDuvH_vnrr@EA;Ct z^y@41>nqYUJxRa5LchKuO*-6;N^z`fU+EQ?xo_?L4 zex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06v zot}Q3o_?L4ex06vot}Q3p8h%vzYfE%!`tid_6F&1kp2egZ;*aN>8ap`(uH{BhCI?M z`>H&C1CQKLO-E(lApK3J>kWEdZ!jJb8#f|eeY(Nw(+$>?Zs4gK@|4~tPZ>}1+i}o6 z@rJzS^s|1ycraR}Z@|M1Ja|KFINeHeL+dlfb>86r3cn#g8h`F*@Z$~qctd{Fo8?F2 zZwQyE=`uB4rl!l(beWniQ`2Q?x=c-%)%MN>%hYt4nl4k*Woo)iO_!qKGYPw8K zm#OJ8HRYDffLk(yo7D8CYPurZYJZcO-c(I(TkUVs%eYT7;66>Ezd7Edm))e7-J}*b z>18)n3;l{-c9W9dq?g^K18+RWj87FP0DEy{e0GT)-iw1(Tae3iboN?%*0udUM8R_SZ2cz>0?wu<*x>1(U>wN?7s zDt&F0zP3smSfvfD($`k$Ype9NHEOy>P1mUD8Z}*`rfbx6jhe1e(=}?kMorhK=^8a% zqo!-rbd8#>QPVYQx<*acsOcItU8AOJ)O3xSu2Iu9YPv>E*Qn_lHC>~oYt(d&nyyjP zHEOy>P1mUD8Z}*`rfbx6jhg<9R{b+t_0MS4KciLuj8^?KTJ>$l%G+wUOTlf%%G+wU zw!L0-o3ZjXW94ne%G->Uw;3yMGgjVath~)wd7H8FHe=;&)lqLy9gQ9%Zd1qGs-11` zr@GBpd7H8FHe=;&)l2D&mA4ryZ!=cjW~_XZc;-#wnKy}N-XxxRlX&J$;+Z#zXWk^9 zd6RhNP2!n1iD%aJhE%Z5cd>Q7M>eaA>#Vo0Yc}1W6n__654^gy&Z^@&tB&h@7hC7M z*gD_E*7+{Bu9EmY-kGybi(2Qq*m~gaV(WYtTMxX(wXV|oN$<>A5B!Z|UCjGe7qR~@ zN$(#Y)peiw&)flBy)GkCAsk3!M^O}6Q4~c{6JM}o{JUJo{25;T&$S(%ABHV)93MXv7+kKX|K#Fian!O<`j7@R+Q#_ zHa{0D@?5OQbFm`N#fm%^D~fIXOKcnO@!5DTR%9l&NE<2gT&&1bgQ9B0NA~!fJQpkS zT&&1*u_AM}MXAf@ab!}YWfg;6r2VEqk-6NWROfU*`F>NN7z~hp6!gmQqSWYougod( zT&&1*u_7(B$aAq`;FUQ=o{JULW_7>BB+iAZkP*fZD zzq~T1s5WkNCl}QgdN#fm%^ zEAm{ds8-{AG{e)4qUJ{YU%x3(RBJLi;wti7tSH}5jq_Zr$aAqGv(`nmI3GF3kzSco zWCpva*5|ZmhKq6=U%yx86y-KXugod(T&&1*u_De>#CeK5D=DhY>I^(9DXQfWlm9T+-W~UDXO*ZPM7F&OZ2%V`rHzIZizm(M4wwy z3%Z;x(dU-bQk?eatR#gSJvuAV=a%SmOZ2%V`rHzIZizm(M4wxt&n?mCmgsX!^tmM| zN@t_bEz#$e=yOZ-xh4AC5`AuoKDR`lTcXb`(dU-vb4&EOCHmYY?rw?uTH;GtOZsxf zXnKk7r7Wf1uM(G19|ms$H>-BoBU|`U(!U38;n)8Q{22JhouvPS^q+!VplA4( z_)_RnY8UCtXGF?jjBlvmn3*ckmesB=Nq?KP=bzaVT<8@J>sl zy`|K@fgZCjr5v#@=}Rm|e<^e+<>-A$-^en0c4aAD1^Ru)rF0GGc@=gT7kYMuea3~W zNY}Y6zGlOo<4Sv_%~JXu;7woy*b26R?O+Gk34R3hmqM5LQs`3pKXc}fl8>&^=!%xI zL`zxXOQB2pGKv1hmqM5LmJU0fE9Y+imoJ4b@ukqEjK37Rq%UIWn)y=bQszCR{iV<) zz7)EYxtW}1a^6SUUkY8~OQB1dR?;6J-(Lz{;!B}R`XZLoA0oel^oL3NOQB1dTS(su zt^?PD8^Dd=CXhD8w}9A(UH`pAxiXYYzWkay|q8H}D?NPvMvNQmFQPPyKOPd%lBS zt6U~7D&r*D-`x2`MB3$?v{x_3cutJx#2gvpIWe9S<2f;&6YHBrmvy}PiBr}_jOWBD zYa`az`TVOrCr+7@IAu=alsSo0<|Iy;lQ?D1iBtBRIAza?@thdXiBtBRIAza?@tl~i zLdAGaoU-S{d=)Cz*N~jH=fr#!Do)vRVmv3tbK;aeCr;UO;*>onPT6x}eV5N@&x!du zag680DSJ+wvggF9G0>h9r}CgZCr~BL+jHWy*RIESPMoeKZO@6*_M8~c ziPJZbw&%onPMo&q#C)AN=Ig{UUnh>!_MA9v&x!S2KBGM+PTO;0JSWC;;rs+Rd`N}=frqUjOWC7PK@Wocut(L=frqUjOWA|drq9O z=foL%PK@Wocut(L=foL%PK@WocutJx#2I@|oU!M`8GBBQ=foL%PMopl#2I@|tgrAH z?K!c&!e^vS;W=?;3pw_jIAhO=GxnS~W6z2CB3YcFec?GVo)hCaF`g6SIWe9S^L64l zW6y~*_MDjSmBkr*PMopl#2I@|oU!M`e4RMv>%_6X!si@&POPu+8SOc-zQSj`Pxuy| z^A?`-mYif%IetIlEu7>nJm)Pu=Pf+vE!E&?I>B=iJSXAE1kXwEoCMEF@SFtCN${Km z&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF z@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCNr-b2JSQQ} zN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwE zoCMEF@SKD=C&6RedD)yWpr6YF>HNzv+7tw|9 zC9P;v>Gy+jZ>1G03O823bF8G;2)F!ang5^{u9!FO1WL6Kh3}N z6=MBMUm+Im0`(PQrS%nJp}s;a+{=;w2!0;?0{9rX9~=a~L|Mb2<}UQ#!=T;@RC)w_ z8q^zn%F%Nip}s;a{0jIC_)nl_x0J7^JVLGA5`GnY9z4ZeoCdZ2P`_%esZd`b7EW-C z)|e@+cUpz|3b9ag8p7AO+Ha9QLt0-UR{mMidjCjiJ&P1-Wxi1F9|^U3T&P(Np=LRR zniCUh#lBE0_Jx|66zbWx@MoZADV07C>WxCBFMt<8J%tHUavr0;)*{qbh=rQf7ivX^ zP;>i2t>_T0B3(y%HR&5j>np_iRbL?%>MO)TeT7)4uMi9M6=GpK*a3Ee9|6_->(|>r z#Q;j{E5t(dCNFZi8p{jOo4iP8mY#Ktlx+Nj&m%8#`jb9hUZmsYMNaE0#6e14q+k6N zVxhi5EPOX)KK!Vi$vSBRDVAnA6} zA0pjB`op9HR&X7-9^3$K1UG@)yT2EzGjAd14${9*`VUC|A?ZIN{V|YsCol59 zXm|1=r~i~AKS8>S^e0K*Mf%T3e~L7%QeNbHghPLYSm|GLs4smf{TcATf%*!ua`Y8q zp}s;Kr0qpQjk$!1e}syEgm##;y-299NC`FO655M`)NdKnn%fcH4BihO1do8HL5(1E z%ujU9fo61tT2G}M%}+W#Mp`2jrC%WZqSIQ-q+>LP=Je;3&QM~85;K&TNxQ_1R*@N9 zVn%Djj4m-li5W`FP-2D>GnAOoJm+MPp~Q^lHkGEt3?*hLaTz5pqr_#DxQr5)QQ|U6 zTtu%mr>#}N?b;X%P4UfB`%}HWt3PYKfgby@*aP}-v-x%8&a#4 zvsw35B|qOS{3!T);1<s(*t@IO=`z6jWOzDTf!=O2@l1m$(2K5~erH_GM2EPJ61O5}J_n~ymIH>opmHsOD zJZP7$QhaE%OIP92RdQ)x&jh8sO!^hlnt4|KtE9ih8D0m!4QkF=zy1sOeNay;lrssQ z1E;{Bg8xQ|)8Gtv5wz=8;ks40ZWXRuCBN0##t(cd`x^y&<)*hEi{{?tA z_}{_5*|38j&ORP%&1Ngtd$H7Bf zgPt_$SH1ftq?Xg}E2}iW?R@G&^V?4UE62dR=C^(PFTh`dzoIP7&iDnF+Xx(Bb)oVky8uU!?`<*GD)?i@Xb5?(XE8tPj-K*wBwxExEB!9tsd_`F-%VP(Q7io((%Ow$=_c@Ia+*oM zk8}&^_mgfV{Q=T#q(4Zyo%DxDcaZ)t=}ywOkiM0xS_kT@+A2|B{1$EmH-VeME#U8i ze+c4B>gjyEzPc%N3{a&Q+xRK)&p~RFUaTtPUaX2?cGM6@4RO>kWk(HDcGM6@4RO>EM-5YMO`%5R6GBJGA&#nEkbFC8h@*x$ zYKWtTIBJNahB#`d*x2RTQ9~RxRBY_D9W~U5+ojl1LyfqNcGOTKZlfJF#8E?yxP9a? z(2g1^?lsy`LyfqNZfhZq8Y=E}+Kw7(#BH>rhB#`7qlP$Yh@*x$YM8R4hKhS#t{pYR zQA3TjeFi&fsPVPYtvJL{L&djF+fhRtHB@}-wA*#4_||Ag4K^BW0Z@ZAT4p)DTAvanuk;4RO>EM-6e*5JwGh)DTAvanuk;4Yjk7 zY5_+Lanuk;4RO>EM-6e*5JwGh)G%#F4fT~#qa8KWH$^9fcGM6@4gDQarR}I;+Kw9H zsA1ZU8tOZuMmuVlwxfn=J8FodhG{!$n6{&aX*+7@XZJ!oYKWtTIBJNahB#`7qlP$Y zs3(R#(vBM9sA1ZU8tR$2%d(?}IBKX_RkZ@mV+nE85JwGh)DTAvanuk;4RO>ku%m{7 z9W@N>s3DFT26ogCM-6e*5JwI5Y|;6s6h{ql)DTAvanuk;4RO>EM-6e*5JwGh)DTAv zanuk;4RO>EM-6e*5JwGh)DTAvanw-HD0K~bMrpL8hB#`d@rCXJM-6e*5JwF)*Wr9S zYN)vmr|qbr#uv`9qlOw^IBiD_HP_*^9W~VW!f88dsPTo((T*D8s3DFTYOcdMcGOTK3!@!1)XatvU&2vC95uvILmV~4QA3Rme54&U z#8E>WHN;Uv95uvILmV~4Q9~Rx#8JbH9X0gcuR(RnRi}I})hYK5)tVFVG5-jD9@I((? zJa2$M1J8pOj2agkwE|PP3S14kU#M18Z+yScpVr*C@PnY9!71&zlJ`9Zs*q?(tiu?<~#>E<_Ug1LfUf_)mn{X)OV1C zT5BQvdgW6>J9D*07XEdb^Zfe0mPp57VhmEC`_^iWrgePqf4fAjU2*zBpDpMmy^~{d z;4X6dzIi6{$)*CS{QQuG!zCiwqmxjVh{qGP=JLg=Ww+G{X`p3SJ%NJ`hEk(AT7gLi;` z0R9p9G4SKypMakLJ^xUx`90&OLD=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=i1&dt~0*drqL zh=@HRVvmT}BO>;Qh&>`=kBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT} zBO>;Qh&>`=kBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT}BO>;Qh&>`= zkBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT}BO>;Qh&>`=5ACI6oe+CO z#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq z5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucue zMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@ z5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-r zM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg z5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi` zM?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$ z9ucueme?ap?2#q*$P#;Gi9NE!9$8|KEU`zH*dt5qktO!X>PhHekkyk=qhpV(o`f15 zdt_6NJ+djs9@&&*k8H}ZM>gfyBdezXKE|;}Rx|%b#~xW?kE~|zop$VzO}UTG5_@Ec zJ+j0e*|cMitY#FoBL%TXme?ap?2#q*$fg~8WQjep#2#5g%)Bb#>Yk=4AV%XRFL)$FCyjykVvj7bM^>v9?2*kl_Q-06-{{yQn{n)sCHBY?dt^0-?;OV-Sz?bY zu}3!J*dv>9?2*kl_Q+-&dt@_?J+c|c9@&gzkE~{rwbP08Fe%)oF=}z@cK1TbY2>U?ohoZFhLlL^(?^NGp{2cfX;Q!CB z|BLkJNozk89kU;Nocux3Lq^?~u2c7A)Vjf-OK%O_FVt#Yp`Vs^$wQ3V&raw#ze`SH z^eCoF9x^Ii4|@F4#WT$=d5DkkGtDmVXD9SC%`SO}(a$uy@QN;;7ePx`ue#@8jU(690eqo3S$$t#S0TGxeFbm0|U@&R2HKG1~^bn%p}E3H+{%Gau9 zVPd2`b_JpDCGbpR7thzacs|u7ed^58r_oQNx};B|pF?%=1gcB=blOjyx};B|pEPwz zpGK>$3)OX@x-L}rNxz*Dd{R6MRk~5{n+JDEU86!jSGr5;niTpxcPXkdYL$-A+P*9O zS1Ob^$SH$w8G~D#AAAJ-H2CMn%xC>;=I=@WgYa&Z_!;3RK$mzoCElHKiFc=5 z;@v5ic(+P4HiItlZmn%Jy2QIxqVXf(r@=orQsUhz(dmB>-UGw;!0h;wFXqiiJ=s28GAKQSdnU9KVi{_A{4z(=U*I3H&1=3uJzpJ2p zx2Ag)%Ng~J0^tuxYYm~&Q{YcQKP$gCc#~rmz(sOOU>SVN=ssA;;OwLb0yTpB}apkMVjSqr5#om4DPmM=8#g zpL$8-OB_R4V$#RIWmJDRD0~~Z#z*pua;vU+cd%90Ec81;LeEQVP5)G9-s*RGgnCO? z=s01k-!cof>Y8=DuG#3mW2@hV5qfrXYw#%eBYjb8-!c4Z>}zk^6=2*S1MTgTf=A=aIH?&D*3U=f4bEOWU}MZK@-sRXaLTwPU=G zoCkfR;#zS-E8$$&L3(Qo_--$vS;Y*Rbc8PMu>nAr|9 z+cj3547O{OYMcVC+wJIfyGE?e_Y;ck=ytnCug>`;Xbo?NrR}h^U87O`ijuc84&APC zsB^69?WlUY#-vW~0r!H|`F4#=jn?^gjZdBaC(tu#+ogHuJP%s!+r^km{|0EaZ}-<92Du_;zwUd$wI;)ybe6 z_PSxO8(npyt8T^!-RPnlPA=H=&BoCb)&0pbk&Wny3tiPy6Q$(-RPOogM=&A=@^`NUBbk&2ddeBvm<~k;W9{jThUG<==9(2`% zu6pp&9(2`%u6o4Vp#EiD^`NUBT(k#W^`NUB&3^dI)>V&YJdD;=54!3>S3T&e2VM1` zs~&XKgRXkeRS&xA!BKnA)nAL@%fVlZ+snbz@HlB#zyzQ4=O^?k@V>gDmHN1J^Mpa$Yr5p;D_iX zACfAZ{we5Q@*%0hITyg|Mk&GQX!)VwNgt!ybb1_g5BQMk&N*KLzX7_}dq}nBeD`_} zsg9i1dsxC4OpNq*57FN}q&jkr-op~E752h^FZ}nay(@?4u~)6$>8Ew(UZTfdvFh}3 z(9vVB792#19((;&E}^5xUe$up(PJ-l-Ai5f5MlHhR%UFVSPKT*AL{B}9+CM322hkG({Xy+n__s%4+k z{X(zi0F90wdx;)<14oa&fuqM>f0avE1|2>25UNqTD^w>-E*h}=-OZ3<) zh3E?iC}al;*?~fKppYFXWCwB74ivHjh3t@5=wB#g2MXDNLUy2#9Vlc+V1?{JAv;jW z4z+Io%L>_nLUy2#9Vlc63fX}|cBmEWNEEUIh3r5fJ5b0D6ylvFcL&~CQmE+Yvha|c zWT#Ydzi^cF82D9w)%%Rf_X^vc>2HzN*Ibo$%i1XoIPD&JC(gMOx7?|_c8>eso&K7u z(7o_Z%^~}2SNWH|<{EfkOI?YSV|0(aQ&E|Yk&1LZQjyND2+cV=_;nX)_scsqM9T!pWa zevP!}33p0$zA8sJJDG*vDb@LEe+t@lcPb9_neDwh6%9IVzuKu;DW~njJL$7_GXK02 z@7>A#^G+Oir?jWCq&=0TC{h2yhj-$@JEcSadZT`Qm{$KVt^Q#g@?jkEVI1;d+UCQw z&4=;EhjGP+alD7|x*V#=p^6-;$f1fHs>q>=ocv)h$SIb-EVL?es3M0daw>OJIaWmu zRpd}b4prn(MGjTuP(=<^Ci9ID8niX5uQp^6-;$f1fHs>q>=9ID8niX5uQp^6-; z$f1fHs>q>=9ID8nibqhzBdFpLRPhL^cm!2Ef+`+C6_22bM^MEhsNxY+v5Pb8;tabu z!!FLSi!!U~Oqetsg z#Oq_+qxI?9jPB9;bZtVet&eN#qetu06*}MZA${~{ee`I3^k{wbXnpi(ee`I3fqS$* zdbB=zv_5*YK6!U~O6T>Qn9<7fatxs(0J3jPid+5>j(4+04N83Y> zwuc^V4?Wr*dbBnQAj@u=|>^`D5M{S^rMh|6w;4E`cX(f z3h757{V1d#h4iD4eiYJ=Li$liKMLtbA^j+%ABFUzkbV@>k3#xUNIwecM^`D5M{S^rMh|6w;4E`cX(f3h5{2=|>^`D5M{S^rMh|6w;4E z`cX(f3h757{V1d#h4iD4eiYJ=Li$liKMLtbA^j+1FACX-ppXF+GJrw`P{;rZ89*TeC}aSI44{w!6f%H922jWV z3K>8l11Mwwg$$q&cA5^@X8l11Mwwg$$sO0TeQT zLIzOC016pEApppXF+GJrw`P{;rZ89*Te zC}aSI44{w!6f%H922jWV3VD?F_$cl1Q9S=qaWWY^iswH{t9g`G^C+JGD4zc)p8qJG zzmHkFeazbJOP|tz_c2qkkN9C9vv&KKwcDqDU%#ryH+t4?pL%(tXYKZ>Pd9qjZXf;l zKKk)}^yB;J!S_jB{&g1gtld8K#YWF3>|@q$AG3D*q$}tA26%(;^Zp`w@Ogg`J@`Do zex6^yKpXi2ZR86m{|hMJJ8_Q&-icc%9Zm|5fSxOUOo}qTOwLb0&+I*>GbmqYFnX@| zF==K(=(*y@q!SV;J|LVEo$D|hLya;-(_%Uh5=(*y@RM$e)@1W3g z#gC~@b-dcnq#`8G74O$I3u*8B)!qk{_FVCP+WUUh%c#^FI}_IbH)2LzhU$^Xuq!6`JOA@uevjO_H4i6E~Cdp`&EO^ z_o#V);1S1uxrEQ)d9(d;38UwV_u~@#af$t^FP&NSW%P{MESZkC&>=ydk9+xLL z?UC~1as#J58hu>a_OCw#uNu7vkT45wBWFA4r>l?Cx*wkvq@#jJO zc@X9YVSW&Q9>kvq@#i5q#$YhyFDVH<>KW3W^DRQp5)7#>MukVn@%s58)rfPf_90wi z2$vZ0H_(*hvFea^ByjpH>2HIsuOW?4{I7rJ%>M#@k6*tJ{s45H4yAuYdJ_Cs{&kM@ zk3r8S4W-`z|BdtfjC_6lO!?1!ObKzb1@8H2!Q3p|%T6f6U){V%zz@gAQo_#YhUCmln9pT-WUClZJ9ULVs# z&foCs-;wsS{vq6TNMkFX!5%xLv6a(y+98dtoVMQ%X>8@RU3UoA9n#p!IexM~B~iQ1I^{^{8)}`3&w;hBVgmnccGtX{_h8`rM zFPIstoKJfhQmgl`?lp$g_MP^#@*#ShA$pu4xq)-+21ELSna|)JYDi;4=dUp{8X-FU zPS9R)K<#cq==skBax)c>Dk(@dJ#(4>0aNz$p6wNVV!@BBR!@&NDq5ZJ*@v*0AC>AJ?ue6Wj@2#NV}gsNYrtV-u9pr|7r_K}^E_^-4Q- z^8WP`Lf^G_u^$!suG!08_&-y>D||>E&c60Sw|Dln7rKqJuf5PQ)f4c*?)FN%B|ZTg zPpEfr+C8;*x;MV!a_O(1P`h*5z4jAgz`we6uUNnM-MKLf9T zo(*_XYBYL&^+{>cm<1gZJ_-L%N}108P2p3-z)ukaKSjj*6cO)JMEg$>?LS3S{}fUE zQ)u8RYX3{#5g-_*?;EBzhw0;nsm)<(bC}v3rZ$JE&0(VAVQO=j+8oBihpEkBe0!MM z9LB4Msm)<(bC@`JnA#ksHixOrVQO=j+8m}fhpEkBYIB&{9Hushsm)UjBtLQ5wRuQ> zVsvdDB0f1pZ62aF4^f+kF5Of4Ly z77jBWIm{UFFivt9{tq*zI}G!OVg4}8ABOqEFn<{455xIkI6urd?l6vVn9yA9ER<~uzgs5;+(|DnB_2Imc!i9VeaTK{2%rnPr(s<{s<0# z1cyI@!yn;Zj)?zB9pf4MBh0=Y!OxH2=ST4KBl!6d@$X|!fSyG^!d)EU`j4QNBk1G^ zSAGPaKZ4I6!RL?Q^GCSyBe?w$-2MnYe*~W&f&UTsAA$c7_#c7)5w3Xz{zu?{1pY_h ze+2$V;C}@EN8o=1{zu?{1pY_3@)7tS;rd75e+2$V;D3a>7=iy0_#c7)5%?eBE=J&g z1pY_he+2$V;C}@E*~>m)7ki<5*r(zDY3_wx?3H8w*`Z$O{`6`1e;WSTcV0Q>|7rMt zn*Q`@?t(q#mH$nCwd+33m9ta4(pSjw^N6S6|7otA9pMA^f){!%!PD@66#kFG|55lq z3jasp|0vgd6#kFG|55lq3jasp|0w()h5w`Qe-!?Y!v9hDKgyLKh5w`Qe-!?Y!v9hD zKgwMkh5w`Qe-!?Y!v9h3;wbzdh5w`Qe-!?Y!v9hDKZgE~q5os>e+>SQaWBWv|1tPK zhW?Mi|1tPK2LH#<|1tPK2LH$4pS|V-c9|EN|6}N%{pFQ*oO2BRkD>o#@Xs#u!7=oI z4E-O2|6}m~WqN@xGtcm4?&!Q*n%W{J)ZKO??#WOyyv^q9#47CcjtIK#Xj#skEht@UFh+Y_jxyZJmnqU zjUG=ullFMZd%OF;9#46PcjtIKNl=pV`uO3f%Z+BxaIUY~3pS#fGDfV+0 zdOXE`?m~~J*w0<)h|4>WJf30?cOmu2c#7TImE-XgySEEH zo?`cQp~q9~-Y)cb%6qk|M8;F>)vk24&&+trd$sF$##7#_-D$^i-mBf{@s#&!_jx>? zVy||g$5YQRp7LJpPJ2A%z1jzZQQF-o?QWEIH_E7LlxSy^QPn6hUXIT)4NjgDPM zrB$OxRr+3zu0dbE0j)#5Me6gT!%-rlQN~%L#6^0B=Ko4XM#n{?(u~n@(Wq+H=yBGl z7RG^GCt@d6%XGp^cQTN)i_K4Qbg(_$9y)$ zqE6?@FMuzAFOvTfXYe@dS@jw|o1>;@rOyeWz4uw^(`omB&#DLUF^-^~Re#~M~Yp{9S=Oid7QrQIM;uiD?iRPALnY1bDhU^g*v~k&FC4+ z=Tr-m!Xu!^xz90s{2Zf<=NM%?$Ncbf;#0pe;&_e`$8*dHKgYP^ImR8&G3$GRKIH^` z$_Zx4PUwEMp9k}YC(@qjI-z@aj^__gFn@T0-sc3p&k5!aPw0O2tM1omKRKa0b=sq? z6S`BQ9pi-V(P_8(6U-l;VE*s~^M@yN@A{SbkQ21u6XL-+UiEZBJX{V=5}%x;=Q>Hx zb&~kxBz1HWuRe(bpCl$ZNlbE*nB*ie$w{2{Br(ZJVv>{8$VqDCB#w6yuRBSNoFoD{ zNd$6|2;?MnbduQPB(cXy{NyBla+26%O#ZN2GgemDnEXL$u6#^A@}SaQfitGQ*y%CQ zIvL}R#+ch2(|zf`>V2M7xppV2fZS9O#b5|e?)o`)cy|2 z@yzp>dSRp2v5e7j$5i7kOZz(rUGHP+k$sG3ILFi@8@0cK(5-t+{j$@SK=;dI>X)6P z{T+nA;5?Vf`6cOJaXnYTdGZ&)>zr+objc_`)cNIy#$}*a4UNeUjraI$>X&__`{gm( z;Fx-6=Xf2_nB3Aw_K@>8;NO7{f$p8h zPhqb9g*5t+=ADmb)NA`+=tRA?)7sxb==M9tEa;e?!l=g8cl%$z0zG0KQ@`UQJr_Er z-p6Ur{EVp&a@upDV{!mrzu$x!lLHvtn~!;a2VnqK`AFPgOf63TRsUtQ1COZ}Gp^)F zKi?TsZ*E-W`||z{LeDIXsgLuKcK9*%bWVF!)tLIb-N87$`8d7#IKBBez4a-80LoZft#-h7-ZH85FZh=u|2&a@ zUi|xPzv2vz{PRTqc_RNjk$;}ZKTqVJSB>lr^7u(!HKOB*^Yi#go;W{GoS!Go&lBh8 ziSzTs`FX|px)OSsyz0?s@H}c>wdu6oBdp@bQl7^EgIcI`Mhz7MuV@aMF^$m%R)ycUsWp>N+HUZLX2Js z_Em8uR4GQUo+{9$3bd&LZK^<`BHdUZa6=+ih+Ejry zRiI53Xj28+)bq5d=V?>V)25!MO+8PWdY(4*JZmF4Q#=Pbg?>(m6aJ8Q>`F;~;0>JlqjTyEI;YXkbG3?}bPn{2sR?RaQL4{OU8{dn zk0AF2y<%#D+Mm$uw9jBZCp6FCv{{|de1g;Fc7k#11mo5T#;p^YVeqf!c0!|UrD0$~ zV{NBB%QV4=djciAta~2}Ue>(}xx1G&{+d+U_w}+y*+Siye${;$t=N~j@|OdT6JORS zz-Yz3tm`o@fw57gj|x5Ze3=qo5v!BIE6f$V!d$^CV#7IpKkF6oAk>u`-zNMfwf0SF z?VHrvH>tH(InS${=T*-0D(88X^SsJ=UgbQma-P>X&ug6LHO})I=Q%@5KSLWoLmNM% zHa;1g;VHuz)w0sG?lU}PI77QWL%TjhyFNp^K0~`cL%Tjhi#|h(KEqRnGpa|Q=j)*7 zi_S1II>VUg3{M%(s7{^lG0Pd+@)_Fl8P%zC5+fu1GmP}lP_t*K(=)X0Gx*`_YTc8; z>uTLbKjnE{t=s5(d0nmB=%+ldt92Xwl;?G|ZsQ)%@3XwF)@}4tw%66VjlPT5r9-2= z=yhD^b*}t%wRGoP0sWNcb+vS(ul#kjbYm9uQ=Zq=x+jCPw7#>nzO!n%p9#)VvuCM= zv$VdmQs#v6ef?*pOr>dSXK8C^HSWHw9Jjc$(u0l(9wsM8`VrEPg2(u;^>$Vo_IbRT z;;fYHGk8tKS?SqnKYch$8$8QhpQR0+<=)TY#%E#REN*-j9?sG>&%(x8TH;ym{Velc zXH{Q1C$nB>RclVK6@Huh`ZlF}oAZC0Gklx>eg`-E4sP}xYWzFY_;=CschU2A(eroF z^Y=LZdmR5gj{hFVf1l&O&+*^q`0sQ4k2wBE9RDMZ{}IPea{MI6>zkwEWRm00DgXZ9 zobrWo%R!;%6V9pDoa450PPOJ7&j6gmRnBpb=WvyCI-8Ev*^Kx3c-5VbRNajVbKqm- z4}l|~=V{O3Kj+la{a^Q$=Tw8ch5mlvIn6Hm7_LEe=d=}jPIc$Bb$gC>caC;9pNoT6HlYbpJceI@@Xde_A!-V_pS4 zI-5?r=ba{!oFG(FTbJ=8R7ai@c)d{{Oe1k-D^w-XTa}(9s^F(YfLMW_pkQ(X+`fwui%|#rTsK3?Wb93Kg~+} zX;#`#tG;v$t9++fP2*0}in{%)$C%TqFXKDO@p$t*wR4`@InUhhc_~);iX4od zvpp~MI_pXLk=cP>Nd#?U`;Hcodbm+8Wp7YY4(es4or8lQ9kuH*6 z0%Oq8&UxnQ&oeuBUaE7B=jzW(X_tc;6f%QCW>Cls3YkG6Gbm(6Cls3YkG6Gbm&Rh0LIk8RCi=6f&dHpYDPY%?t{eK_N3JWCn%IppY39GJ`^9 zP{<4lnL!~lC}akO%%G4N6f%QCW>Cls3YkG6Gbm(+(bEMKash>0Kp_`U$ORN~0fk&Z zAs0}{1r%}tg0Kp_`U$ORN~fvETbQSk+$;tTSn z%fST{ash>0Kp_`U$ORN~kvQ-oao|Pbz>7HZMQZsXZhVnA@FKN#kvQ;TuuE)TBo4et z9C(p9@FH>GMdHAV#DN#7sf)PlMe6G!?s^e-y@o%0g+a)~(b5^>-q;=oJ9ftQE_ zFA)b`(kM^I69--*4!lGhc!|5X#Pwea90y(^{<*}JUm^~?L>zcYBR>D?IPelzeu+5n z5^>-qjq;RF9QY{t66+t79W_!2WHXLEIu%c56t2Nv-rR)J}`?9%;E#H_`obaFpKJD@qt-< zU>4?QVSW}Ln8gQX@qt-;0iu)1s}MA4_u+{u26SZ z@PRA%z!iMp3O;ZJAGm@KT)_vf-~(6ifh+jH6@1_dK5zvexPlK{!3VD316S~YEBL?_ zd|(cR%%PAu6f%cG=1|BS3YkM8b0}mEh0LLlITSL7LgrA&91593A#*5X4u#C2kU11G zheGC1$Q%lpLm_i0WDbSQp^!NgGKWIuP{sjautPKMIl#F$W;__6@^?yAy-kzRTOd+gC}bXm%%hNb6f%!O=26Hz3YkYC^C)B<$*C5TPQ^%R;ZsSd=R67mku113fpjnD&=X78Q|B2){+zYaJJf@fM{4r#<7h znD$6;G3`iiQFm?p1?cbLEE4Z6^5v67X~zHZmroX@99@Z&W4y=5E7nzsQjxAlD$0Z z`NLpP(m3U^(5fh*iV~_QsoYWJ_{=3#Q9>0ZR8c||B~(#D6(zohQ$iIbR8c||B~(#D z6(v+rLKP)cQ9>0ZR8c||B~(#D6(vRxB~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+r zLKP)cQ9>0ZR8c||B~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+rLKP)cQ9>0ZR8c|| zB~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+rLKRD>VhL3&p^7C`v4kp?P{k6eSV9#` zsA36KETM`rswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1 zGO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-B zD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$} ziZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqly?+#Hb=h z6)~!aQALa@VpI{MiWpVIs3Jxc-uHQTP+?W4cYjuz8H@_rsGyAs+Nhw73NsrOX=74H z`i=F96f!D2D?h2Qs_IURh^ZzSLjuw zDF4f=IxAWSVze7q)EB!Huj;HwY0mKsVI}PqI~A$U=vAE+R&`d?NBc;x>a3)_sqDIOs?G|lIxDQ|tgx!n zJ7w!%=(!?2>ujv*tT5YCVO3{^Rh<{qLc~(x{fkQA$f3fj z&Wd6f-LKY@ILA>$CGe`widvA*=2e{)wIHXxsn zK7&_vRsuiMsW4|%QCssFysERJw&t{FYb&hktkCW%(yh7js?Lg5p%{M%q8VCZg_c;M zC05iDeIC#BR#??pVO3{^Rh<=9byk=etEip&$T^Pms?G|tWEHhjr~Tx*qS(y$;#Hj$ z#b!pY>a1uLiqWe&E5vCP;3=1ycQlmq2B?)7N^2#C zQ157DQeM?5)H@o&WuV^CP+F_eg!lMJ>C;E*O=O|gYzVbxL#Q zM?{8#>^m7hxM%`c(e{1R&Qpiqt^)cQ}M97(A4pTZeX>pzv& z`cI*}NT@fzgumdwTK}oE-WU?<%`f4vNNZK0((|PC=9kh7r1j>P(t7hNlc6><)Mkd- z%*c!MFKRQR+SJ*+dQEt*%k}Ct;Wl%qTK17WthFQJ@AD9;h<%`c%=gbMW~4WZur66(z_;gcNmB~WjEDdz~NFKH;P zH@}2mAxCROmDU4rs8ypvjRJ%k1qd|? z5NZ@4l-mf=hTO(y(@J2W-ux1x2fK~ZXh3db-n4>Ls5ifadh<&tw-Nq3NIiO0n{qS* zFVve~LivnPBPO9%iVF4Smry<xFmmo$WtkC&@Bt@WJ3mHcW? z$jDWkvx;B!=9khpkpFh_^(77E{3dCw9aUOyer1-a-AxEKXlC>u@;=T&`Zv=@&t*wNqMam4$kf zOZZLlwboAQ*GOxWt+Z9K96c;Y3CmUc%BMD$YmBd7sk`Os3nnw(xB9Zs-d?4;FxuOz zbVo)ze3fcMhdD%2BFp*`F?M;qRI(86+LAF}{#<>iV62MS2b$O9+2Jj>gVPo9z&`L)Z>IQ>2{4sFr11 z0lGDX+))Vsp`U_fs^PyH{;T1?8veZ-rhhg6)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p z|JCqc4gb~fUk(4&@Lvu8)$m^p|JCsCohT zv+!x@aD{qLqaAgHW(e;W>I*Q!m%y)sFLV4q>&z?EcKoY*w-wag3bi2RXzokr*W8zJ z8##aNV^pX9RjU?-TD2&A0<`C^&Rf6`C{j@$Su6 zsNRjP_Z6ylr(N$Wf-|J;6fjFE-Iti~^snJi3t zFEgjjWLDz~rQtIRpIQ1x?>nYn;U^0l-dW5!X283N8GYB@LCokrD64qYsP&V=81x-w zxtA<=!9HTjQ7kI-HP>*>HC%HInyEoEHE5;=&D5Zo8Z=XbW@^w(joP)&pjqWnp*2&( z{nl`&HQZ?pcUr?e)^LwCXr?BxW@^w(4VtMzGc{4;{2F=u< znHn@xgOk*tnHqSmK{GY5U4v$7&`b@QsX;R}Xr>1KSHk~F_+JT!E8%b@npp{xD`9da zOs+&TE8%k`e6ED6m9VrDepbT9N_bca11q`rmE848?sp~kwGz#&L^CVV%u4QPCHJzD zyI85~*Z1$x%u25LZS=Np^Qynh+qk>8abLfod%2wX4c&`SS7_7u zR*S}J(O4}St3_kAXsi~E)uORlG*$~gweV95Gqo^N3p2HFQVS=wXsi~E)uORlG**ko zYSCCNyw#$yTG*>aW3_Nti^givSS=c>h1FU#RtvYaXsi~7YtdLOJlCSJTG*~dW3_Nz zi^givSS=c>MPs$pMJ*buMPs#StQL*cQX{o!td@GIMPs$pPAwX%r50+@SS@u?i^giH zuT}8B3jSBY;VL*>g~nFF;?b!esz&D5cpIy6&d;IbnyEuGb!esz&D6m|9h#|w zjXE?_2PbuCrVh>2p_w{ZszWn%a8-w9>R_x6&D6nL9h#|wy*e~g2ZwcNrVh>2p_w`~ zQwO(oXr>O$)S;O=G*bt|b!eszp6k#|9c8K zXl6BSb<_LX3_cZ}9A>&||0@ zRO32EwQS6RPjJi_sCNpKuXhTBo?*B_b!0q8j-&A#R3pZV&KKLpQ22JSXY}~x?PBk; z&_}*qycxBoG4pnDrC-IB@kw${gRg^^z#^#iiaJK?6*F%a1IB95(a77WyEQ6tRNwgU zIB|{Ii{8^vdogDX+ci?G&aB#>%&bMRYf{=AN7R9bb zv1?K6S`@n$#jZuMYf{=AN7R9bbv1?K6JGh>A zaOQV#=67(;ckthL($Bt=e)gTT)^}3ZH|kC=XKvJ;3U&QP_p>)C|9+unAcZ%JlbcfS z2es3v(jO*$3#gq&m7|?Th3ml$n$x(+JB+ zDRmb74)_N6Gw?iUb={P;m3;y2)|L=nTcfo%>{MW;OJ^a_hf4z5l&D6txy?1(5+WgnUe?9!yr_6sn{MW;O zeaigTd#6{S`LBondhhhAwE3@x|9beZhyVJN`L9oz|N4~quTPo(`jq*vhyQx`uZRD7 z@ARsC^Is4D_1@`KY4cwX|Mh9}U!OMr_3&R0|Ml=+5C8S>Ul0HF@Lv!A^%?VD@10(S z=D$8;{_8X5zdmFB>oexR-aEYt&3}Ey{MTp9e?9!yd#6{W&HuaM|K0HaZuoyU{5QaV z1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$ zH^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@ ze*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^r#2map!|L=kS z_rQN6{5QgXBm6hQe40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3 z{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y z!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjY zGyFHhe>42Q5B}c=|L=qU_rZS){I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G# zz<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e= z3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$; zx4?f3{I|e=3;egh|NG(p{qX;O_@e=GdA!hb9Lx59rb{I|k? zEBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9L zx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@ ze=GdA!hb9Lx59rb{I|k?EBt=|{yzZ!AAtW4z<(S3x50lK{I|h>8~nGye;fR_!G9b4 zx50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGy ze;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK z{I|h>8~nGye;fR_!G9b4x50lK{I|jX2jTyN@c%*h{~-Lg!+$&cx5Ixs{I|n@JN&o9 ze>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs z{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ z!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{C^1kKLr0Dg8vV}e+T?`z<&q)cffxK z{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?` zz<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A z2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cfkLL;s3+%|6%z5F#LDIe<%ER z!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2C zC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|H zcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|H-va-)!2d1qe+&G7 zB-NJspP5_v^;UkpHRX}@t*N^}kFRe{eG2@v=8JAkc`okO^lyP1oRhu{+z6J*_x#(f zlyWPj+?x5Ua(;`l)=}0v%34QR>nLko%4MyitaT}uwT`mZQP#S&%UVZS>(VZ3UD{=> zOS`Ofl(mks)=}1PQ`UOQT2EQ)DQi7tt*5N@l(n9+)>GDc%34oZ>nUqJWv!>I^^~=q zver}9ddm78%Gy9#8z^f7Wo@9W4V1NkvNllG2Flt%SsN&817&TXtPPa4fwDGG)&|Pj zKv};_S+`NvZIpEzW!*+uw^7z@lyw_r-9}lrQPypgbsJ^fMp?H})@_t^8)e-_S+`Nv zf1s?5l(mtvHd59`%GyX-8!2leWo@Lajg+;KvNlrIM#|bqSsN*9BV}!*tc{fQA1P}S zWo@FYO_a5XvNloHCd%4GS(_+p6J>3ptWA`)iLy3P)+Wl@L|L0CYZGPtC(7DPS(_HP8~a6>J0B!49w!-0JhouZ;TMpzw3L@-5WP7HVe;wX=oV*+T7Xp?0=V zJ6ouoE!55yYG(_zvxVB(LhWp!cD7JETd18a)Xp8$&K=aw9n{Vp)Xp8$&K=aw9n{Vp z>T51%?x1$=NV#_Ipmy${cJ4^IcJ4^IcJ4_1pX$ClJdWaie`jWO>MpopgU#6(3@-AX ziY0+5sxH#`ET7LdLKZqnC+XzVt@h^RMsoq1W@LH?gH16#p(HqfLkAODfIuJ=QvzQg zgbsl~exG@F?j#_|H&34D`^V3I^qJ3=nRoX6%)GlZJ9np|Q%Cn2b-s#DouQ&rXQ=4Z zAv$%4P936Chv?KHI(3Ln9aGV%Lv-qxicTF<(Wygp>JXheM5hkXsY7(?5S=JgoKM5i9nsYi6`5uJKOrykL%M|Av%jvvwS zBRYOW$B*dv5gk9G<41J-h>jo8@gq8ZM8}Wl_z@jHqT@$&{D_Vp(eWcXeniKQ==c#G zKceGDbo_{pAJOq6I(|gQkLdUj9Y3PuM|Av%jvvwSBRYOW$B*dv5gk9G<41J-h>jo8 z@gq8ZM8}Wl_z@jHqT@$&{D_Vp(eWcXenck#-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q) z0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{& z0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)N ztpU6>fVT$l)&Slbz*_@&YXENz;H?3?HGsDU@YVp{8o*lvcxwP}4dAT-yfuKg2JqGZ z-WtGL19)oyZw=tB0lYPUw+8Um0NxtFTLXA&0B;T8tpU6>fVT$l)&Slbz*_@&YXENz z;H?3?HGsDU@YVp{8o*lvcxwP}4dAT-yfuKg2JqGZ-h$vQ2;PF=EePI%;4KK=g5WI( z-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI% z;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ z2;PF=EePI1;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+ zLf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6 zEd<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-j*5jj74IZu@v?gql5fL*kfUv zV0SCa4pQf^DX^v3^BwH>%JO2hpO?Tchiz6?^s1v`3;eBQ8-dse#709QHUhEHP>79& zLToe?Vj~b6f!N3tVk1+CjZ7gn0m)&xR*qjdYrP8>DeYsy-8X6&PKBI8FRAg6HH<1P0FhE z@L}pl%03MHsIt^A$WqIva;W7iyG-q&mapsquoGbqggpp$3hbe<(_m-7&V=>B7Ln~B zW;)0&g;njX1I%=QnGP`10cJXg89GYLD686A2bk#qGabYX?IC8AT@Kr5W9fb4a9CB zb_1~+h}}T!24Xi5yMfpZ#BLyV1F;*3-9YRHVmA=Gf!GbiZXk98F$TmK5Mw}$0Wk)| z7!YGXi~%tQ#264`K#Tz~2E-T;V?c}nF$TmK5Mw}$12GQ7I1uANi~}(a#5fS+K#T)1 z4#YSR<3Nl9F%HBy5aU3M12GQ7I1p`W;in3lTDY>440<0!?Ogc>Q!BMGw`OBj&Bm;n zZB*0hJKLy*odY`;c0SHuNMkYEXn7aI*3QPPosC&L8?$ycX6P$ zb0h3cu=Kf9+H(u+ov?So-VOUJ*k8l$f>kTSZ9}bjvkkQZ%{J63dYcqLUC~20=VAEj z^CLFhRn`8-;Hz~_w($gfwYteRo`kQ~IN1jM@(5YA(#AH_r^al9KBG#OKBG!jeQL}$ z=rgKh=@ZRl>31T?z6PsS=Gev?uxfpdZKzKK*qEiXjkn>y1N$!Qx2n#}1FJr7WwU%( zwUWwa>XV^1<}+=kJ{f9bR?}u9;H$MgHX8+Bt(3FbSlIC@%4{O+H0+rHI}_FiTLfDI zI~(O3341hbmEww_y)m>m%#qp*?TyV>C6l7kIi#q{E>-1_t}6c+RUdwwDu=hgZ&gQ0 zZ|SI*p!SgJD&Gr#BK%444}^aZ?7`SG1^yxM4~0J!{xta0;m?3y0DmTY3%(D2A^alv z#qejrmcbqdI~(?B*h*MjJ7#)qF&}%>dNW(p!&j@GY_R~oTKi;U?$;LRcbEaT1^ON4 zfo-t_XR6guwpa#V&D`3e5x$yDwM7$r^h(hT9~=sBC|nNP!DI()7i>3d3^q=-*T|q} zl3pVRR?TSj;;FS43e(Fo)qXq&_VQf#YOSmTEpnhm4$gF-MGmycffhN?A_rRJK#Lq` zkz*(=atzfr97Ac5V<;_hphb?MIB^W6MUJ63aSWwJj-j;3ffhM5|DbXyEpnhm4&C3C zue8Xa`@6DAiyXW`aG*sFw8()LInW{pTI4{B9B7eaC@pdfr9}?3$T5@_InW}{y~7CCrV;y{ZWXpsXga`4{7F_acLhSDMjTI4XLMGmyc!CMsvTI4{B9B7dP zEpnhm4&Jjk&?1K^Epnhm4pUm>K#Lrvw8&vfiyWr3$YDy09Hz9$VM>b}ns=g_(7cnf zN{bwNek0zXMGmycffhN?A_rRJK#Lq`kpnGqphXU}$bl9)&?1McencxtRhiHtS{Dgl zX^}%CAhlmO92yxZUuls;<0IuOEplj-q{y~QTI4{B9D!a5EpqV2%7GR+ z&>}}DEpmj?B1b4Ka)i<%M<^|Fgwmn}v?u{BN|3_bN_*7odIAcQfEFd7MG0t8f+BdU zkkBFtEs{7>LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{ zNJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9E zizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jw zv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2 zLW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jW zB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{ zNJ5Jwv`9jWB%X^Tv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jw zv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2 zLW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5K}(4r)? zCnAl+{&TR;!@dan5-fdxARVP|tRhR_A4pa`S@n~eDPN89`bo`{{}%kW z;j2+zKdG78|E;PyshP4_u=%iRl-EycM(04y`bo`{uRc4|Pim%oHOlKJHB8*B-}*`4 z6#9H%skI#a?0aSDJ8CE|r(Z!OYr?8gVL#NbpVW`8m(-8)lKN3;P``dsKeeY-9VPW6 zpVW_zlKLs%3x6W~N$?MZe-P}!*fRzGA@C1{KNbEo_|xIffL{QACVUIN4}Ky1BKXDd zXTdLnJq&g>?9s55u+^~h)U}iPsoJVhVLz##^3|xYpVUwJYE;+{_3J0~Q+w3sV){w_ zl&?M=(@*NBeDx&OPwJ<9^(59$>Zg45B-T&rr+oD!)=%oEd^IZUC-qal%V9g1?11fp z?S_rP#$nZ}o_=bHhtk|r25gS9q-o0L8iyL{-~Mcg!QdH2F{Q50jBMI+eNO%n+84(D zMy>WuV}#MF{R|_|=+nN(*vD9}eHwcj=V?F77-_t#{ah;NZ`#i@3fL&^=aXNh{UOFw z<{0!8qx&pBqE?q1qQl886koIp~}WV_$CT{T^d7->m&iV+X%U z`&q^zBB1?TqfD&QexA`JZqt6g(PZXoe~7Wz?9~1+V;}Q3+8<8-Q`OPVXfnDs((Y{! zC&S)0yLU|@+S!%#?(`N~KHqfj9NX@UMZ8sZqSsD@lTkZf5a^A>y}@u?)~rq@!j*Qc z-B;kV4);|As}5Jk)S(&aW9hTK>0L`A2}uQcRknYZAu7FLFF~|NdcuhnUb`bzn{d3{ z+Y?^nZH;&nk?_o1% zu3ELKAgm9!(KQyd**!D=-Ld4F-bi~yMmytl5d~ezo>+a9N|%J+2aIG_#9PrDZlgpW zneI(paAAQpxNMwNU?)0f#@sUG%=&p%H4B0@Gw4jC+K3vR^p~W+wMN8fH@x&0rtL6! zZH8_18f%OM&g!DQUSlWy6&jY|qyN*%pF`)^R7Q+)dyOjc6O>0;RZ5h+xKUsPXkUap zuMwpEaYK?hn6AOxUN##T-4k;!jaZ*8h)%glTUFpAKUBxR&ydP%Fr2nh% zzkm>aoLj|MMXUhP?x8dP+k8p7RuyGcE5&{%)zFPZ0m|&5xYpxpRNW=c^wM<>Tt|}5 zQ%qG*Ibo`gyY=Hds?Gg0!i7|O>tEJ;psWI1YbRY}>__#Gw5Oh4e^gOxT0kwWh8Eqq zW&XT9{JhnY8guuK@sAE_4FBYxxRG%tn8`Ajhh?%Xmd$clF3V&2YzQ05hOyynA2x!G zWTV(bC#x7@9uq)YBY#Y0pUBkAs9qd|m9lM_0z;?15 z*-h+bb_=_e-NtTbzhJ*)cd$FzUF>c~zm3iAVY}FG*uCsNc0b$Ae#;(U4>J0dO7;kQ zls(2CXHT#_>`C@J_7r=XJ;R=5&#~XL=h+MFMfL~w5__5bk-fs`m&Vv@>~;1Adz0;D zZ?U)8JM3NdXZ9YWUsPcqun*Zs>@VzN_E+`^qhG0DpR+I6m+UL{HT#DBjeX0$V}EDg zvme+$xWO6coW8@5XK)YCkt;fL@;`BXlQPvka@;2ViBfNum@-80b-FyX)@g5%MHt*#QPjJbTypONstN3cZ zhOgzv^Aq@q{3L!dU&q(;4SXX%g`dhd@y+}+emXycpUKbSTlm?$pKs;o@N@Zj{Cs`^ zzmQ+VFXor-i0QC%=*3#Bb)e@LTz9{C55e z{!4xbzmtBK{%-nx>RWh|CT?%AEe*?e3*Vg^HKg7f1E!-zZm%> z{et0B{AvCSf0jSTf6t%iFYp)nALy6-UZ!8Sdxd@>?oa$R{yKkyen)LD{l3=Q{2ltm zp+EEY`1|~S_y_z${t^ER|Cs-kf5JcIpYhN67yL{96@6p+H~eq>TmBvYJO7^lK;Lm{ z2u5FHDd-#hGK7b|g)K{DiyZn+tvo^BokZU-G)xQ^`-l-@Bz?QaX!UImVyqY^_7nTl z=kX`dXTrT=qL?HO6qCh4;$SgF93l=CQ^hnfUCa;#Vy3W!PZWwGQ7lTtEKw@TM7cOj z94=;yBgB#7C~>r?5S5}zREru>E9Qu~VxE{!D<$iNUn~#-u~0OKMItB`i;!3%meOjH zV`!Dfv7$*V7tP{0(L$>PT1A^^7ZG{`-%0PsqoP}^5HZms;`H98mu5Q?LW-p56D!3k zv0AJVYsK;61aYD`Nt`U!iS=TG*eFgBr;1Htvp7whF3u2VinGKPaW*}ZZx!c=bH#b$ zd~t!eP+TM~7MF-i#bx4hafP^2TqU-NtHm{9yVxPF71xRD#SLPoxKZ3BZWgzQTg7eS zcJT}GOL2#|Q`{x)7QYg|7War<;y2=6ai6$f>=wTj4~PfFL*ilahyCLR}0h&|#- z@jLO9cv?Ioo)yoD-;3wP3*trb2l0}4S^QDFB3>1L60eEZ#T(*Hu~)n$-WKnOcg3H@ zd*XfZKjH)Nq4-GrMSLv&Dn1dPiqFL7;tTPm_)2^&z7c;D--_?V-^KUh2k{TnFqz3s zVVY)!=`l0SEHm58F>}p4Gv6Fy4mF3F!_9rn5#~s9lsVcQWA1B?HOHCznfsgL%?aiK zrq`TkPBITPCz}VE2b)vOL(D_Xspd3ux;euvFlU;U=`#z>BD2^mF=v^jW|>)T9%deH z&Nh!Qk2H@mk2WjJO0&wWHfzjUbB;OJoM+BA>&$x7Z!Rzc=0dZ@YjcE;DL&n=8zi*<;2{+w3(RGhs?IY4({b z%~j@VbB(#yJl;IPJkdPKJlR}lt~WQB8_iS9Q_W50X7e=jbn^`JO!F*ri+Q%$Z*Dcu zG0!#6GtW0KFfTMOGA}kSF)uYQGcPx#x9@xEAWSlo`QC-`W*GZ9JlCE^*99(^O8$m+IOxF^f$vy+kb)>uxwucuWF z4LakVb~_deCo+2@33|9rW`}#oll0i1i<2dl6pLi{h7*x^EYgw8fro)hR#=S&qH=}V z8|#x9^f=!W_H?c3?TW-bR7TWp&ycaO>@wFz61K485s_SFXC%845#rD8OPC$el@TGM zt21O|Wh9;vQKKO<9*sw+te73omXV$)JTn%NG9%*jg=3j?U15TyONmG|=HTJvPw(p) z^9sVTbkO9$whVZ^j=(JE{#~C(Y9!!t*<8sqYg=9mq=3SbIbTv6U`UMG@i4al_YcuZo*0NLh;b7#+=O>q}5z z+SZ6QkvJ7?uZYB{*i0G0cr2?uO2ai7mD%ahX0DxR?;u_k&H0^u(O4|fV}pU5nB5s| z3&*H6W%k9RmQ_)mGce@KwpUWKP}lBhk5CM#Nl?(KoIaULVU>M|cp@L+O>Jd_+xn6b z-qWYrPnbCC?Hb~?40RQ1B$?S3X{S1bbE$cxa^+DKdx(uby28kibRAum=sao$3Cf&F zZdW+g;X>-2GB4FG6j`1M#K}{EdgNBPaqNgiR(mSIbaq9Gp^S_j}LGm_|`ZrvJ_9uHC-F8p62a5FAZhh=jE>C-OWwbrwv0W1S+>Cv0#=e1!*?s98YjBWs zhe*g?liHnG(GzY<*zwG;n|dm!$0<&bWLDUn)Vx+?hTYUtg+e@SE>P6~P;T3RZ&tP2 zNwbZNr>ZSXg?rlEq}ol|Q(Fl;obzGseGawigVj;d=XnY=krZWkr5bI?Za+=1M=T?4*3 zmo&!gQu;Ly@lnm%Lz7$7baLmp*P(W0MqNK=9w6Pb;O5SAYwn)q`a|ZWFHr5yqAex+ zQO~^jYMV#9bLS7#A-8+L&#N0$>AV#`+E7vzk5Rjiwt4E^AjXj7)ek-|HfY0B@6s7V zV%967Vq`q^ZljC2$pW{uxLewSK?UT+2W@y3xTVG2;KakdwoE2$x=V_hc&CWOJ2L~i z3D~*`1l&N`Nb&<+eeuq4qOT_w?n~y|gSU8~hT9R(BDW@VV&HlK^vaM?s-Wh=3>=k zl4Lv~x6k(>$qeah@6*>Fa<9D)Nk&MiPX^5}#yj&vgReZlZ}3)TNOy=nH_cr-a0R)m z2KmPf^4ARb*~g@0!PDrnvKC2BW4cM^tWCR~M)%6rBFUg9l}_pDh}l%j9Nb0RyiiWK znHBCmBr~i<)0J=>%XO6ueqL}8e|dDXr3WhA`3LHn;exw#Wq_vabk$77l*c6@0|e&{ z<|!j-$8DLPx>#)GRK$9_!f><0bnmBUlV~`vrdLMk!mvB5Cg~o}pGRVZU8+Oo1?cIF z6bn1@LW45o1bQN!?uo;rl;uZw8Nf3uBgt^aoG@J>9yW@~i!(K**+_@zCK;yt7I|3; zRN-aRg?oF$)QNjq+r!-7#~1YRWl`!ps0Cjb6^pv;j9|30CoC3+`!aQn#KNwqsG`4x zGU`HAln+y7rfQ|i9;#1H?aK+LNy&>0y0R>)kV}=iE_fsR+~cXN*qMR+W-FbZ(Wx#n zqdgK!hBI|p^h8XTs1DK;b~0?L!ZKFi^5`j@F3+uKWfhP2@zv2xTVG>uR3y4=4?VW` zgnb!EM3OF5S3&gBWwy~D)hNSOG00OTr)oCzCpFE}#kv912eFZZ%y6^A9nq-IvI>h* zUWqU56{fv`qs93;M@fldHoY}VZKcmIO?zc&uRP_=veI4}YgP)&S6q@h>Pwg6OPAtH zmr|H6r7&GeVX73XusBspVY|lW6Vm|YF0YOtaOf9=^V4t zIZD&DDoxj=G+md{bX`i*C6}g4E=`wQnl8CCU2<8v&9`)C3~ zDrK(eOW4>u%U7to5P7;u&GHqM6lSO2nr7g(m#wBHdT5HGJ)1@lnA7OW!>HKxWv-g` z(0(3fK2is0kerN$W9`w7j*M#DFM1PpdtX~JTlUdCMAbM0BkoLkQLBdPS!-L15hmzbu{_sJ5Lfsl8d1}@tMQ@&(?-|%20#X~fH2;(G^T9@X3$&!R z^3;SyYD3ku(6TI@qUN++sJDxBTCCF&ozBu}sZPsuTCURyomQ%}wx+fgX>DzlPODXF z`D%e{6;@)uRa6apN`X%)aC|jIHR^myQI4<1tuLiG-&b4gmRDF?L~UJ0!}jVZZu}Gr zTmhxU838qH&9GrZuzkv+CPi+ER*_pGrA20!ZLd%vYmLP0RXD3ypH*zRc*P}d{fkTV z_AI?U%e{``S?+Zd&q6J%;#uI4Qt(JAu8&giNGW)v6g*N29w`Nnl)5|>&r0Ee7upYA ztm0CQU#js-HGZkaFV*;^8oyNImumb{jbEzqOErF}#xK?Qr5e9fQzE#;?%$6&k-%<5z0@N{wHs@hdfcrN*z+_>~&JQsY-@{7Q{qsquAxEUwh}l^VaY zHW$2BS?Uqg<+w`Mp-R`GO4p%E*P%++p-R`GO4p%E*P%++p-R`GO4p%Eb5N!0P*tO` zYX`8aH4j=hinVSOSL-@d>pE2HI=Fgb6<6yzRO>oa>pE2HI#laARO>oa>pE0x9;$U5 zYBYY0=AcG%P^0l{G=7c7uhAUTX#5(DU!(DBG=7c7uhIB58ox&4*JymLpT)HrzgFYd zYW!M_U#szJHGZweuhsaq8oyTK*J^xMudU)*jbE$rT|Ku-v>ujd)hu!E8?@iWFR@(w z63fLev0VHT%f&CTT>KKt#V@g3{1VH>FR|R~FVT8iV!8MwmV5mrK9~OzpL_i!KKJ@d ze8BhBxc!t;9H$h=DNP+m{b(EYqZIX{6!oJN^`jK^qZIX{6!oJN^`jL0P>T9diu(C# z+TP zs_WtQQ`*+`aQi83>w38Tl(uyo+iIu33>rEMJtx1Z9s#&`Rvug2}Cl-t9Vc4Pe?K5zmdXD+YX_(Ja`-b4bG+mOr znJy$BM^pLTgXyfpQqQ*PxEdr3Pwi->w~w?hRQ1z6^;KE)AYaf+uS_%5Gi`w_J!%If z^x}(>EIi$llc}C^kNp;2m4hc*b%J`BrIdGcsM}GYuh7a`oSJA&YA2&p zHQAwqX7JT^jyrv?+$=SFubg3nC+*b^HqYa}nDV$UrE&+okjhTKjPkgX_nCUe-s8^F zXX>f>oPp_hK5u@unlZzKkg2>pWm3aOJ>a!UQUh751TDiVc6&0Vsh+J{NL7VFt9gZy zMW3h0H8TG}zf+CXy?L}~Y&89GwIz0vHED}{ZF6Y#@hpSI!pS)09cFNUpx$eYUKH?q zY2~m%<RgB*Vz0`sY(^htZnn(Z*P+!}wUVGi=-rdpGR8F={x*gRqaoJ{_~$V#W)wuh{D7 zo3QW0exe$h@eS+`$}&@`kmkVd13OMi%f}|cPK7NbTgVQBJsP%_Y!R!6T?D%73Ej+V`c_JC0iR{&a*9@>xKj9CQZd zpnN(9dH*iQ5W`d}nV6SNq#T@0W(QFKX`Q7iSM^=0h5A&$NJ5%q975lSA!xyAfW99? zrS8+};CXC6qO08Kw zde&9{8pq_*EoPRlxUi_CyrjI*YWfdBi>*QzblU$0s%lEh{%3gS6k6-A8hnu~!w~DY z7}omJ`TF(7!*_kQXw{kTm6d~ik%0K?-+mj zo(m!6DJm;%(Z@vAll^1@xbADURoPrg(=Psz5cGkzs=AZdO<~!r2f3xAn zWq*9C^79$L?R$O8O^=;D{?b@|)&&z@fAz1OdlL`Nd+^GZ*?Zr*fAsdY)zOj1-!g*> zYDC-DKWwdkz$*4+QG3Y9$Yjhs#5&lToZ7b7rhWCN2kbW4TR;<-QF_}FS07oh@`#b~ zBN+RK$t}YwQdOdTV3w&Vi4BYy3m>U_eDb8;{q&r3?pQMJ=<7Z__x`f- z+xuoE54$+Uo)e z3vDPn>w# zm@B7OU9%_n^od7&HTAGx2hKOH?aA4={BO;{FZR7->CoPXzWef)3$_gz^ZLW1*R?z` zbXt6q`RRvWte)~*#v>mWAKQG-yu#0lsP{cge=~INo3nfD1#fIwR9p4+t37k`eLH?a znYI4RK|P_d!Z*qqp(xH8k++oQaU+Siw<_El@r|_hQM)ro`YTZ;S9yudC zi@U{b?ue1@4sR9BR7X2#s#eY2`VO$hyYU;X533F=Q~g(W+al_zG-a3S zwraB|)ouSzv|8w{*yf*8~p}U{^X!U2St~<$|z5Be|@^^K85j%g+ zeT!z?H1~)v?|yOlar^PBzMZ*Z!j7-EUwYlR$NAoq>leK}q~)Wd_dn^L{MV0q?9Mkf z-*?>FZeM}8Wc`R6=6Ij>$^4}=o?2a8biqEC>~qiST{Ca|^V<)ean{s_&YZZpr*1uM<*gs@%K!Ww{~xz~ z*R}1|k%!;0`GMbP#dy_P|MGvS7^>~Kijie`sCRQ_SQTpD0p?*=nKf%$@wUQEsgEoD zOgG%NGPtQ!RX{~lOC5jEzmpK=Ax(pXP|Msg)*6#)-(o}_NeDHxvKhV^B}IeduY`nj zdj5*PeX#7o>ivDEueoH}g}XQ0%>J-{{ZqG}u`K>Z)}h;*AK!D{i1*Az`G1`=Wu{Sf z`#VpZx8TwjCbf?G`l!;0fnMLbPtPpde8>CmUu697Oz6S|lYhT+%7V4G{wiGY`P8T1 zd*YAHul;7)sYl**#a(~gyYwIT-}%T%Up|v}YFzxxn7wxxS*_5x3ns03||4x4q z-H#)S4&M9Af_?WMGxX3?Z=UpC(@$z_9XF^O|GT?rsZ~ORP!BDrqNSY8ek-iy0;)b)4&hc(b5kUL`Zz%4b= zCzIX<5gJY=R`?FL%H1j!E~XWGQhgS$Pe#1qq*vWpr2Zt`;9JtnL~q!8NZX-SIn}N} zWfmi*q)Sg-XqDYgPYZMxQx6ODwxoPUp?XyK-@5<(o#XFpxsg^(EE#h`#}mz)@?ZS) z=Ifn}XPz=-UN;2Fz#oztzN9)7O)@*-s%&>h%O}Txqzxd>7bG+5} zyxuXnQyAF7y?D550_a?p?+tJs3&%CZ@%GTuHXx;GY^p?3-zI5YAwsYf4W#?Gs zBQ6w&opAKxyKi}O=6)Ohbi?pPNAf#fn)dy~yRUEBJ~Vgdb;A}8DK79||MU~h2fc9C zy`RTVIP_k&{O`WajW3>cYUi@k#%|kP^2rC&woiO->sK4!z2Pq{tDBE++4%j^+~pPd zZHrs}P&M(dZuj57UL~ep!foKEUAb3vF|Qf5I<1H&w`J2@w&|N1mN`aPORPgucX!T4 z@Bc63*VZeosp&JhHDTPpK9^$s11pI-6Q`XJlq) zw1b{r53n-z!>~EB|J~=uZMu2O*()A;W?lCSbN8Ko{MZ8PpwS2Frx#iaZ2$Q2Wu?SE zRg$`kk?@SRMy7D-X+=Lu3GrWwq)!!kfJu*07ClC7o3shdom%_P1hKa*Tm%7B55)9% zG|BSrm|*Si8)xlHJE-jsN0TqAN()?xTje42v4W8oJ-gzDgL@yp`l#~{$eQtR$z?mP zp77aE)I{munc}yvo&R#hHR0&(qi$IJnDyw^*(X(gJ^Ai;Hp(%ymVemgSHJb``k5d8 zc2D(ti8mMC9UA7{7{Bn`cP?${zO&T#r)y_?c$V?l_`rMq!d<6+v*7-3J42CAy6<1R zr@d_4uwkofR{B2Qv{npldGL9fD2jme};J&R?I@GP}k>2nW0Y7y$hoROpawCGKJme@-ZU7bq&FrGTn znyrrKjwrzgv%@j(ylQVsD`$B9YE_xEJCfcYnN{@h2k(+_EJ`2UrYAY?%0l11c#1c3 zM-E-A%BBxjyPw&XDP-|4kpJ!Q==|z!7er48w{-vp#%U-(p z+M_=iJ1=+Agka#os_XWgxpT>1<8wVXWQ;1G(02IbeYW0n@iTj}N={6?J!k3nYo0t~ z{(DFF&M0X+`POyMJbc^B-+leW-%o$}r5)Q|&Hn6~&yN4=Q+*G79a-2u>5BVKy!V!0 z*Zpo;%@F@{$JF~%YPXTp?qnM7QU@D>an6s1CYkH3YIW!U^9YM>SKCUrm24_XjeBHU z5e-e$?PbQ#x^7jlDs>P&7^QgKQhqF*qys5Q`M1)kM`-9ML_;ht>w7EwtRqhX#oj2hCwyu^Mco)Hat zO#De7$M9~!pC@g8qqAbvn74la@kv9Te(;h%wB7f~UFW^qooLM_@x_W5^PuDJE<{F2va=iOX=eoM{N%YL}bu0Q-2 z#htywHvOZqys7c+*oK=*PKeZfe{s)Uqt2gq`Dwkw?myxetry(+>YXpV^8OVSTTlAo z#Cvv}`(gaENoPE|YL@?u#@t|r@A+wm+_q@%mbEMHT2*~t-Ys7&KWO^fPn}^MStl-E zv*)@6x8^?hyUCfk51hZ@t6`t++Ish8m%iLId&H+7aL>L|{IgHDi_Um{)9e4Utf=pZ z56_FfRc$XYV$ZyI>MKjGyY#xFo~)nPwe_=>U3=g6EH9rpqVO-i4Wg4|v5hlkt$*_W zTiN5oekSMx^HkeD)l`$@LAP35tR3QPzP28BHJE z|FTc=9RF7Hs}DVy+10!_uzSt(_Rc>JZfP|BGuN*>;-*jJ!@DMBU+_|M*GKPfiETBu zyw!izkXxUfeeyTY9slZQkH6O2#wUII)fe|p%YSS6`}e+nT3N;^r=0ZMkb+g8-h22H z_246O=e0#z6_{*oB_T|`|*XK-Y zzVFj#@7wum!KY=viQIPXi)F<--nm-I&jxnV>p|4*jP{>fzBpr|aT z$BWb?BgG&$y^+Z%1nDCgzM*tWqg8!YiEma3y(Dh@SqL8eVE9#EygQ>W=j10}_wYkf8Ta!LEdF)m`!nyl?7Im^ZoZ+!x%Ij&e_A~@cI>(L-1yDH=W}1V>g3*uzdXEm zec_kaZhT@__m#UpzSKW&*|q0&3{Ac~=gBu;8=w7ITln;^*Pa^KGyRd+^rGg!Y#P1w zo40=TUWqwp@v=Qtqwn4JusMH9`>x&j&-%{3cHLuNmk+yhSlP0zB_F)Bk2CDT`7avA F{{!U$tp@-A diff --git a/src/gui/qt-daemon/html/assets/fonts/OpenSans-Light.ttf b/src/gui/qt-daemon/html/assets/fonts/OpenSans-Light.ttf deleted file mode 100644 index 563872c7680aed4d9f8f7a4bc4f3c1506c2cbbc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222236 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

      1^%;kbEy)x%1!e{>m|$h5Iw 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

      9J%&UTP`LM`y4=#imtiCKi100?RTe1+z~8* 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

      YE=h9c6s`zZi@B7|3|JKJY7qo+jyw@ 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 new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ar.json b/src/gui/qt-daemon/html/assets/i18n/ar.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ar.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ca.json b/src/gui/qt-daemon/html/assets/i18n/ca.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ca.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/cs.json b/src/gui/qt-daemon/html/assets/i18n/cs.json deleted file mode 100644 index 5e6066d0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/cs.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Nastavit hlavní heslo", - "SETUP_CONFIRM_PASS": "Potvrdit heslo", - "MASTER_PASS": "Hlavní heslo", - "BUTTON_NEXT": "Další", - "BUTTON_SKIP": "Přeskočit", - "BUTTON_RESET": "Resetovat", - "INCORRECT_PASSWORD": "Neplatné heslo", - "FORM_ERRORS": { - "PASS_REQUIRED": "Je vyžadováno heslo", - "CONFIRM_REQUIRED": "Je požadováno potvrzení", - "MISMATCH": "Neodpovídající" - } - }, - "COMMON": { - "BACK": "Jít zpět" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Přidat peněženku", - "CREATE_WALLET": "Vytvořit novou peněženku", - "SAVE_PHRASE": "Uložit svoji seed frázi", - "OPEN_WALLET": "Otevřít existující peněženku", - "RESTORE_WALLET": "Obnovení z zálohy", - "WALLET_DETAILS": "Podrobnosti o peněžence", - "ASSIGN_ALIAS": "Přidělit přezdívku", - "EDIT_ALIAS": "Upravit přezdívku", - "TRANSFER_ALIAS": "Převést přezdívku", - "CONTRACTS": "Kontrakty", - "NEW_PURCHASE": "Nový nákup", - "OLD_PURCHASE": "Nákup" - }, - "SIDEBAR": { - "TITLE": "Peněženky", - "ADD_NEW": "+ Přidat", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "Nové nabídky/zprávy", - "SYNCING": "Synchronizace pěněženky" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Nastavení", - "LOG_OUT": "Odhlásit se", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "Chyba systému", - "COMPLETE": "Dokončení", - "SYNCING": "Sychronizace blockchainu", - "LOADING": "Nahrávání blockchainových dat" - }, - "UPDATE": { - "STANDARD": "Aktualizace k dispozici", - "STANDARD_TOOLTIP": "Získejte novou aktualizaci.
      Doporučená aktualizace!", - "IMPORTANT": "Aktualizace k dispozici", - "IMPORTANT_HINT": "Důležitá aktualizace!", - "IMPORTANT_TOOLTIP": "Získejte novou aktualizaci.
      Důležitá aktualizace!", - "CRITICAL": "Aktualizace k dispozici", - "CRITICAL_HINT": "Kritická aktualizace!", - "CRITICAL_TOOLTIP": "Kritická aktualizace k dispozici.Aktualizaci důrazně doporučujeme!", - "TIME": "Systémový čas se liší od sítového", - "TIME_TOOLTIP": "Špatný systémový čas!
      Zkontrolujte a nastavte systémový čas." - } - }, - "MAIN": { - "TITLE": "Chcete-li začít používat Zano, vytvořte nebo otevřete peněženku", - "BUTTON_NEW_WALLET": "Vytvořit novou peněženku", - "BUTTON_OPEN_WALLET": "Otevřít existující peněženku", - "BUTTON_RESTORE_BACKUP": "Obnovení ze zálohy", - "HELP": "Jak vytvořit peněženku?", - "CHOOSE_PATH": "Zvolte prosím cestu" - }, - "CREATE_WALLET": { - "NAME": "Název peněženky", - "PASS": "Nastavit heslo peněženky", - "CONFIRM": "Potvrdit heslo k peněžence", - "BUTTON_SELECT": "Vyberte cestu k pěněžence", - "BUTTON_CREATE": "Vytvořit peněženku", - "TITLE_SAVE": "Uložte soubor peněženky.", - "ERROR_CANNOT_SAVE_TOP": "Stávající soubory peněženky nelze nahradit nebo přepsat", - "ERROR_CANNOT_SAVE_SYSTEM": "Soubory peněženky nelze uložit na diskový oddíl s operačním systémem", - "FORM_ERRORS": { - "NAME_REQUIRED": "Název je povinný", - "NAME_DUPLICATE": "Název je duplicitní", - "MAX_LENGTH": "Dosáhli jste maximální délky názvu", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/da.json b/src/gui/qt-daemon/html/assets/i18n/da.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/da.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/de.json b/src/gui/qt-daemon/html/assets/i18n/de.json deleted file mode 100644 index b93cd965..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/de.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Master-Passwort einrichten", - "SETUP_CONFIRM_PASS": "Passwort bestätigen", - "MASTER_PASS": "Master-Passwort", - "BUTTON_NEXT": "Weiter", - "BUTTON_SKIP": "Überspringen", - "BUTTON_RESET": "Zurücksetzen", - "INCORRECT_PASSWORD": "Ungültiges Passwort", - "FORM_ERRORS": { - "PASS_REQUIRED": "Passwort ist erforderlich", - "CONFIRM_REQUIRED": "Bestätigung ist erforderlich", - "MISMATCH": "Fehlanpassung" - } - }, - "COMMON": { - "BACK": "Zurück" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Wallet hinzufügen", - "CREATE_WALLET": "Neue Wallet erstellen", - "SAVE_PHRASE": "Speichere deinen Seed-Satz", - "OPEN_WALLET": "Vorhandene Wallet öffnen", - "RESTORE_WALLET": "Aus Backup wiederherstellen", - "WALLET_DETAILS": "Wallet-Details", - "ASSIGN_ALIAS": "Alias zuweisen", - "EDIT_ALIAS": "Alias bearbeiten", - "TRANSFER_ALIAS": "Alias übertragen", - "CONTRACTS": "Verträge", - "NEW_PURCHASE": "Neuer Kauf", - "OLD_PURCHASE": "Kauf" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Hinzufügen", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "Neue Angebote/Nachrichten", - "SYNCING": "Wallet synchronisieren" - }, - "CONTACTS": "Kontakte", - "SETTINGS": "Einstellungen", - "LOG_OUT": "Abmelden", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "Systemfehler", - "COMPLETE": "Abschluss", - "SYNCING": "Syncing block", - "LOADING": "Lade Blockchain-Daten" - }, - "UPDATE": { - "STANDARD": "Update verfügbar", - "STANDARD_TOOLTIP": "Neues Update ausführen.
      Update wird empfohlen!", - "IMPORTANT": "Update verfügbar", - "IMPORTANT_HINT": "Wichtiges Update!", - "IMPORTANT_TOOLTIP": "Neues Update ausführen.
      Wichtiges Update!", - "CRITICAL": "Update verfügbar", - "CRITICAL_HINT": "Kritisches Update!", - "CRITICAL_TOOLTIP": "Kritisches Update verfügbar.Update dringend empfohlen!", - "TIME": "Systemzeit unterscheidet sich vom Netzwerk", - "TIME_TOOLTIP": "Falsche Systemzeit!
      Prüfen und korrigieren Sie Ihre Systemzeit." - } - }, - "MAIN": { - "TITLE": "Erstellen oder öffnen Sie die Wallet, um Zano zu verwenden", - "BUTTON_NEW_WALLET": "Neue Wallet erstellen", - "BUTTON_OPEN_WALLET": "Vorhandene Wallet öffnen", - "BUTTON_RESTORE_BACKUP": "Aus Backup wiederherstellen", - "HELP": "Wie Wallet erstellen?", - "CHOOSE_PATH": "Bitte wählen Sie einen Pfad" - }, - "CREATE_WALLET": { - "NAME": "Wallet-Name", - "PASS": "Wallet-Passwort festlegen", - "CONFIRM": "Wallet-Passwort bestätigen", - "BUTTON_SELECT": "Wallet-Verzeichnis auswählen", - "BUTTON_CREATE": "Wallet erstellen", - "TITLE_SAVE": "Wallet-Datei speichern.", - "ERROR_CANNOT_SAVE_TOP": "Bestehende Wallet-Dateien können nicht ersetzt oder überschrieben werden", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet-Dateien können nicht auf der OS-Partition gespeichert werden", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_DUPLICATE": "Name existiert bereits", - "MAX_LENGTH": "Maximale Namenslänge erreicht", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet-Name", - "PASS": "Wallet-Passwort", - "BUTTON": "Wallet öffnen", - "WITH_ADDRESS_ALREADY_OPEN": "Eine Wallet mit dieser Adresse ist bereits geöffnet", - "FILE_NOT_FOUND1": "Wallet-Datei nicht gefunden", - "FILE_NOT_FOUND2": "

      Es wurde umbenannt oder verschoben.
      Um es zu öffnen, verwenden Sie den \"Wallet öffnen\"-Knopf.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_DUPLICATE": "Name existiert bereits", - "MAX_LENGTH": "Maximale Namenslänge erreicht" - }, - "MODAL": { - "TITLE": "Wallet-Passwort eingeben", - "LABEL": "Passwort für diese Wallet", - "OPEN": "Wallet öffnen", - "SKIP": "Überspringen", - "NOT_FOUND": "Nicht gefunden" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet-Name", - "LABEL_PHRASE_KEY": "Seed-Satz / Private-Key", - "PASS": "Wallet-Passwort", - "CONFIRM": "Wallet-Passwort bestätigen", - "BUTTON_SELECT": "Wallet-Verzeichnis auswählen", - "BUTTON_CREATE": "Wallet erstellen", - "NOT_CORRECT_FILE_OR_PASSWORD": "Ungültige Wallet-Datei oder Passwort stimmt nicht überein", - "CHOOSE_PATH": "Bitte wählen Sie einen Pfad", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_DUPLICATE": "Name existiert bereits", - "MAX_LENGTH": "Maximale Namenslänge erreicht", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Schlüssel ist erforderlich", - "KEY_NOT_VALID": "Schlüssel ungültig" - } - }, - "SEED_PHRASE": { - "TITLE": "Stellen Sie sicher, dass Ihr Seed-Satz an einem sicheren Ort bleibt. Wenn Sie Ihren Seed-Satz vergessen, können Sie Ihre Wallet nicht wiederherstellen.", - "BUTTON_CREATE_ACCOUNT": "Wallet erstellen", - "BUTTON_COPY": "Kopieren" - }, - "PROGRESS": { - "ADD_WALLET": "Wallet hinzufügen", - "SELECT_LOCATION": "Wallet-Verzeichnis auswählen", - "CREATE_WALLET": "Neue Wallet erstellen", - "RESTORE_WALLET": "Aus Backup wiederherstellen" - }, - "SETTINGS": { - "TITLE": "Einstellungen", - "DARK_THEME": "Nachtmodus", - "WHITE_THEME": "Tagmodus", - "GRAY_THEME": "Graumodus", - "APP_LOCK": { - "TITLE": "Programm sperren nach:", - "TIME1": "5 Minuten", - "TIME2": "15 Minuten", - "TIME3": "1 Stunde", - "TIME4": "Nie" - }, - "SCALE": { - "75": "75% Rahmen", - "100": "100% Rahmen", - "125": "125% Rahmen", - "150": "150% Rahmen" - }, - "MASTER_PASSWORD": { - "TITLE": "Master-Passwort aktualisieren", - "OLD": "Altes Passwort", - "NEW": "Neues Passwort", - "CONFIRM": "New password confirmation", - "BUTTON": "Speichern" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Passwort ist erforderlich", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Aktueller Build: {{value}}", - "APP_LOG_TITLE": "Log-Level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Alias registrieren", - "DETAILS": "Details", - "LOCK": "Verschlüsseln", - "AVAILABLE_BALANCE": "Verfügbar {{available}} {{currency}}", - "LOCKED_BALANCE": "Gesperrt {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "Was bedeutet das?", - "TABS": { - "SEND": "Senden", - "RECEIVE": "Empfangen", - "HISTORY": "Verlauf", - "CONTRACTS": "Verträge", - "MESSAGES": "Nachrichten", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet-Name", - "LABEL_FILE_LOCATION": "Wallet-Datei-Verzeichnis", - "LABEL_SEED_PHRASE": "Seed-Satz", - "SEED_PHRASE_HINT": "Klicken, um den Seed-Satz anzuzeigen", - "BUTTON_SAVE": "Speichern", - "BUTTON_REMOVE": "Wallet schließen", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_DUPLICATE": "Name existiert bereits", - "MAX_LENGTH": "Maximale Namenslänge erreicht" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Alias eingeben", - "TOOLTIP": "Ein Alias ist eine verkürzte Form Ihres Kontos. Ein Alias kann nur lateinische Buchstaben, Zahlen und die Zeichen „.“ und “-” enthalten. Es muss mit “@” beginnen." - }, - "COMMENT": { - "LABEL": "Kommentar", - "PLACEHOLDER": "", - "TOOLTIP": "Der Kommentar wird für jeden sichtbar sein, der eine Zahlung an Ihren Alias vornehmen möchte. Sie können Details über Ihre Geschäfte, Kontakte oder Text angeben. Kommentare können später bearbeitet werden." - }, - "COST": "Alias-Gebühr {{value}} {{currency}}", - "BUTTON_ASSIGN": "Zuweisen", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_WRONG": "Ungültiger Name: zulässige Symbole \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "Der Alias muss 6-25 Zeichen lang sein", - "NAME_EXISTS": "Alias-Name existiert bereits", - "NO_MONEY": "Du hast nicht genug Geldmittel, um diesen Alias zuzuweisen", - "MAX_LENGTH": "Maximale Kommentarlänge erreicht" - }, - "ONE_ALIAS": "Sie können nur einen Alias pro Wallet erstellen", - "REQUEST_ADD_REG": "Der Alias wird innerhalb von 10 Minuten zugewiesen" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Alias eingeben" - }, - "COMMENT": { - "LABEL": "Kommentar", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "Sie haben nicht genügend Geldmittel, um den Kommentar zu diesem Alias zu ändern", - "MAX_LENGTH": "Maximale Kommentarlänge erreicht" - }, - "COST": "Gebühr {{value}} {{currency}}", - "BUTTON_EDIT": "Bearbeiten" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Alias eingeben" - }, - "COMMENT": { - "LABEL": "Kommentar", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "transferieren zu", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "Keine Wallet mit diesem Konto existiert", - "ALIAS_EXISTS": "Dieses Konto hat bereits einen Alias", - "NO_MONEY": "Du hast nicht genug Geldmittel, um diesen Alias zu transferieren" - }, - "COST": "Überweisungsgebühr {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Abbrechen", - "REQUEST_SEND_REG": "Der Alias wird innerhalb von 10 Minuten übertragen" - }, - "SEND": { - "ADDRESS": "Adresse", - "AMOUNT": "Betrag", - "COMMENT": "Kommentar", - "DETAILS": "Zusätzliche Informationen", - "MIXIN": "Mixin", - "FEE": "Gebühr", - "HIDE": "Verstecke deine Wallet-Adresse vom Empfänger", - "BUTTON": "Senden", - "SUCCESS_SENT": "Transaktion gesendet", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Adresse benötigt", - "ADDRESS_NOT_VALID": "Adresse ungültig", - "ALIAS_NOT_VALID": "Alias ungültig", - "AMOUNT_REQUIRED": "Betrag ist erforderlich", - "AMOUNT_ZERO": "Betrag ist Null", - "FEE_REQUIRED": "Gebühr ist erforderlich", - "FEE_MINIMUM": "Mindestgebühr: {{fee}}", - "MAX_LENGTH": "Maximale Kommentarlänge erreicht" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Bestätigungen {{current}}/{{total}}", - "LOCK_TOOLTIP": "Gesperrt bis {{date}}", - "SEND": "Gesendet", - "RECEIVED": "Empfangen", - "DATE": "Datum", - "AMOUNT": "Betrag", - "FEE": "Gebühr", - "ADDRESS": "Adresse", - "DETAILS": { - "PAYMENT_ID": "Zahlungs-ID", - "ID": "Transaktions-ID", - "SIZE": "Transaktionsgröße", - "SIZE_VALUE": "{{value}} Bytes", - "HEIGHT": "Höhe", - "CONFIRMATION": "Bestätigung", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Kommentar" - }, - "TYPE_MESSAGES": { - "HIDDEN": "versteckt", - "UNDEFINED": "Unbedefiniert", - "COMPLETE_BUYER": "Vertrag abgeschlossen", - "COMPLETE_SELLER": "Vertrag abgeschlossen", - "CREATE_ALIAS": "Gebühr für die Zuordnung eines Alias", - "UPDATE_ALIAS": "Gebühr für die Bearbeitung eines Alias", - "POW_REWARD": "POW-Belohnung", - "POS_REWARD": "POS-Belohnung", - "CREATE_CONTRACT": "Vertragsvorschlag", - "PLEDGE_CONTRACT": "Vertrag-Einzahlung", - "NULLIFY_CONTRACT": "Einzahlungen verbrennen", - "PROPOSAL_CANCEL_CONTRACT": "Stornierungsanfrage", - "CANCEL_CONTRACT": "Abbrechen und Einzahlungen zurückzahlen" - } - }, - "CONTRACTS": { - "EMPTY": "Keine aktiven Verträge", - "CONTRACTS": "Verträge", - "PURCHASE": "Kauf", - "SELL": "Verkaufen", - "DATE": "Datum", - "AMOUNT": "Betrag", - "STATUS": "Status", - "COMMENTS": "Kommentare", - "PURCHASE_BUTTON": "Neuer Kauf", - "LISTING_BUTTON": "Auflistung erstellen", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Weniger als eine Stunde, um zu antworten", - "REMAINING_ONE": "{{time}} verbleibende Stunde", - "REMAINING_MANY": "{{time}} verbleibende Stunden", - "REMAINING_MANY_ALT": "{{time}} verbleibende Stunden", - "REMAINING_ONE_RESPONSE": "{{time}} verbleibende Stunde", - "REMAINING_MANY_RESPONSE": "{{time}} verbleibende Stunde", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} verbleibende Stunden", - "REMAINING_ONE_WAITING": "Warte für {{time}} Stunde", - "REMAINING_MANY_WAITING": "Warte für {{time}} Stunden", - "REMAINING_MANY_ALT_WAITING": "Warte für {{Zeit}} Stunden" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "Neuer Vertragsvorschlag", - "IGNORED": "Sie haben den Vertragsvorschlag ignoriert", - "ACCEPTED": "Vertrag gestartet", - "WAIT": "Warten auf Bestätitung des Vertrages", - "WAITING_BUYER": "Warte auf Sendung", - "COMPLETED": "Vertrag abgeschlossen", - "NOT_RECEIVED": "Senden fehlgeschlagen", - "NULLIFIED": "Alle Einzahlungen verbrannt", - "PROPOSAL_CANCEL": "Neuer Vorschlag, Vertrag zu kündigen und Einzahlungen zurückzugeben", - "BEING_CANCELLED": "Abbruch wird durchgeführt", - "CANCELLED": "Vertrag abgebrochen", - "IGNORED_CANCEL": "Sie haben den Stornierungsvorschlag ignoriert", - "EXPIRED": "Vertragsvorschlag ist abgelaufen" - }, - "BUYER": { - "WAITING": "Warte auf Antwort", - "IGNORED": "Verkäufer ignorierte Ihren Vertragsvorschlag", - "ACCEPTED": "Verkäufer hat Ihren Vertragsvorschlag akzeptiert", - "WAIT": "Warten auf die Bestätigung der Einzahlungen", - "WAITING_SELLER": "Warte auf Sendung", - "COMPLETED": "Vertrag abgeschlossen", - "NOT_RECEIVED": "Senden fehlgeschlagen", - "NULLIFIED": "Alle Einzahlungen verbrannt", - "WAITING_CANCEL": "Warten auf Stornierung des Vertrages", - "BEING_CANCELLED": "Abbruch wird durchgeführt", - "CANCELLED": "Vertrag abgebrochen", - "IGNORED_CANCEL": "Der Verkäufer hat Ihren Vorschlag zur Stornierung des Vertrages ignoriert", - "EXPIRED": "Der Vertragsvorschlag ist abgelaufen" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Beschreibung", - "SELLER": "Verkäufer", - "AMOUNT": "Betrag", - "YOUR_DEPOSIT": "Ihre Einzahlung", - "SELLER_DEPOSIT": "Einzahlung Verkäufer", - "BUYER_DEPOSIT": "Einzahlung Käufer", - "SAME_AMOUNT": "Gleicher Betrag", - "COMMENT": "Kommentar", - "DETAILS": "Zusätzliche Informationen", - "SEND_BUTTON": "Senden", - "FORM_ERRORS": { - "DESC_REQUIRED": "Beschreibung erforderlich", - "DESC_MAXIMUM": "Maximale Feldlänge erreicht", - "SELLER_REQUIRED": "Adresse benötigt", - "SELLER_NOT_VALID": "Ungültige Adresse", - "ALIAS_NOT_VALID": "Ungültiger Alias", - "AMOUNT_REQUIRED": "Betrag ist erforderlich", - "AMOUNT_ZERO": "Betrag darf nicht Null sein", - "YOUR_DEPOSIT_REQUIRED": "Einzahlung erforderlich", - "SELLER_DEPOSIT_REQUIRED": "Verkäufer-Einzahlung erforderlich", - "SELLER_SAME": "Anderes Konto verwenden", - "COMMENT_MAXIMUM": "Maximale Feldlänge erreicht" - }, - "PROGRESS_NEW": "Neuer Kauf", - "PROGRESS_WAIT": "Warte auf Antwort", - "PROGRESS_RECEIVE": "Antwort erhalten", - "PROGRESS_COMPLETE": "Abgeschlossen", - "FEE": "Gebühr", - "PAYMENT": "Zahlungs-ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "Neuer Kauf", - "WAITING_SELLER": "Warte auf Antwort", - "WAITING_BUYER": "Vertragsvorschlag erhalten", - "WAITING_CONFIRMATION": "Warten auf die Bestätigung der Einzahlungen", - "WAITING_DELIVERY": "Warte auf Sendung", - "COMPLETED": "Vertrag abgeschlossen", - "IGNORED_BUYER": "Vertragsvorschlag ignoriert", - "IGNORED_SELLER": "Der Verkäufer ignorierte Ihren Vertragsvorschlag", - "PROPOSAL_CANCEL_SELLER": "Stornierungsanfrage gesendet", - "PROPOSAL_CANCEL_BUYER": "Stornierungsanfrage erhalten", - "BEING_CANCELLED": "Abbruch wird durchgeführt", - "IGNORED_CANCEL_SELLER": "Der Verkäufer hat Ihren Vorschlag zur Stornierung des Vertrages ignoriert", - "IGNORED_CANCEL_BUYER": "Vertragsstornierungsanfrage ignoriert", - "CANCELLED": "Vertrag abgebrochen", - "EXPIRED": "Vertragsvorschlag abgelaufen", - "NOT_RECEIVED": "Senden fehlgeschlagen", - "NULLIFIED": "Alle Einzahlungen verbrannt" - }, - "ACCEPT_STATE_WAIT_BIG": "Vertrag gestartet", - "IGNORED_ACCEPT": "Vertragsvorschlag ignoriert", - "BURN_PROPOSAL": "Einzahlungen verbrannt", - "SUCCESS_FINISH_PROPOSAL": "Vertrag abgeschlossen", - "SEND_CANCEL_PROPOSAL": "Stornierungsanfrage gesendet", - "IGNORED_CANCEL": "Vertragsstornierungsanfrage ignoriert", - "DEALS_CANCELED_WAIT": "Abbruch wird durchgeführt", - "WAITING_TIME": "Antwortzeit", - "NEED_MONEY": "Unzureichendes Guthaben", - "BUTTON_MAKE_PLEDGE": "Akzeptieren und Einzahlung tätigen", - "BUTTON_IGNORE": "Angebot ignorieren und ausblenden", - "BUTTON_NULLIFY": "Beenden und Einzahlungen verbrennen", - "BUTTON_RECEIVED": "Einzahlungen abschließen und freigeben", - "BUTTON_CANCEL_BUYER": "Einzahlungen abbrechen und zurückzahlen", - "BUTTON_NOT_CANCEL": "Anfrage ignorieren", - "BUTTON_CANCEL_SELLER": "Einzahlungen bestätigen und zurückzahlen", - "HOUR": "Stunde", - "HOURS": "Stunden", - "CANCEL": "Abbrechen", - "NULLIFY_QUESTION": "Sind Sie sicher, dass Sie beide Einzahlungen verbrennen möchten?", - "BUTTON_NULLIFY_SHORT": "Verbrennen", - "WAITING_TIME_QUESTION": "Sind Sie sicher, dass Sie den Vertrag kündigen möchten?" - }, - "MESSAGES": { - "ADDRESS": "Adresse", - "MESSAGE": "Nachricht", - "SEND_PLACEHOLDER": "Nachricht eingeben...", - "SEND_BUTTON": "Senden" - }, - "MODALS": { - "ERROR": "Fehler", - "SUCCESS": "Erfolg", - "INFO": "Informationen", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Senden", - "BUTTON_CANCEL": "Abbrechen", - "TITLE": "Transaktion bestätigen", - "MESSAGE": { - "SEND": "Senden", - "FROM": "Von", - "TO": "Zu", - "COMMENT": "Kommentar" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Ausstehend", - "TITLE_TOTAL": "Gesamt", - "TITLE_PERIOD": "Zeitspanne:", - "PERIOD": { - "WEEK1": "1 Woche", - "WEEK2": "2 Wochen", - "MONTH1": "1 Monat", - "MONTH3": "3 Monate", - "MONTH6": "6 Monate", - "YEAR": "1 Jahr", - "ALL": "Alle" - }, - "TITLE_GROUP": "Gruppe:", - "GROUP": { - "DAY": "Tag", - "WEEK": "Woche", - "MONTH": "Monat" - }, - "SWITCH": { - "ON": "AN", - "OFF": "AUS" - } - }, - "CONTACTS": { - "TITLE": "Kontaktliste", - "IMPORT_EXPORT": "Kontakte importieren oder exportieren", - "IMPORT": "Importieren", - "EXPORT": "Exportieren", - "ADD": "Kontakt hinzufügen/bearbeiten", - "SEND": "Senden", - "SEND_FROM": "Senden von", - "SEND_TO": "Zu", - "OPEN_ADD_WALLET": "Wallet öffnen/hinzufügen", - "COPY": "- Kopieren", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Adresse", - "NOTES": "Notizen", - "EMPTY": "Kontaktliste ist leer" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Adresse", - "NOTES": "Notizen" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name ist erforderlich", - "NAME_DUBLICATED": "Name existiert bereits", - "ADDRESS_REQUIRED": "Adresse benötigt", - "ADDRESS_NOT_VALID": "Adresse ungültig", - "SET_MASTER_PASSWORD": "Master-Passwort festlegen", - "ADDRESS_DUBLICATED": "Adresse existiert bereits", - "MAX_LENGTH": "Maximale Länge der Notiz erreicht", - "NAME_LENGTH": "Der Name muss 4-25 Zeichen lang sein" - }, - "BUTTON": { - "SEND": "Senden", - "EDIT": "Bearbeiten", - "DELETE": "Löschen", - "ADD": "Kontakt hinzufügen", - "ADD_EDIT": "Hinzufügen/Speichern", - "GO_TO_WALLET": "Zu Wallet gehen", - "IMPORT_EXPORT": "importieren/exportieren" - }, - "SUCCESS_SENT": "Kontakt hinzugefügt", - "SUCCESS_SAVE": "Kontakt wurde bearbeitet", - "SUCCESS_IMPORT": "Kontakte wurden importiert", - "SUCCESS_EXPORT": "Kontakte wurden exportiert", - "ERROR_IMPORT": "Fehler beim Lesen der Datei!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Ungültiger Dateityp. Datei als .csv speichern", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Nicht genügend Geld", - "NOT_ENOUGH_MONEY": "Unzureichendes Guthaben im Konto", - "CORE_BUSY": "Interner Fehler: Kern ist beschäftigt", - "DAEMON_BUSY": "Interner Fehler: Daemon ist beschäftigt", - "NO_MONEY_REMOVE_OFFER": "Es gibt keine Gebühr für das Löschen eines Angebots, aber um das Netzwerk vor Spam-Transaktionen zu schützen, müssen Sie mindestens {{fee}} {{currency}} in Ihrer Wallet haben", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in-Nummer ist zu groß für den aktuellen Blockchain-Status. Nicht genügend unverbrauchte outputs zum Mischen", - "TRANSACTION_IS_TO_BIG": "Transaktion überschreitet das Netzwerk-Limit. Sendet benötigten Betrag mit mehreren Transaktionen.", - "TRANSFER_ATTEMPT": "Keine Verbindung zum Zano-Netzwerk", - "ACCESS_DENIED": "Zugriff verweigert", - "TRANSACTION_ERROR": "Fehler. Transaktion nicht abgeschlossen.", - "BAD_ARG": "Ungültiges Argument", - "WALLET_WRONG_ID": "Ungültige Wallet-ID", - "WRONG_PASSWORD": "Ungültiges Passwort", - "FILE_RESTORED": "Die Wallet-Datei wurde beschädigt. Wir haben die Schlüssel und die Wallet von der Blockchain wiederhergestellt", - "FILE_NOT_FOUND": "Datei nicht gefunden", - "FILE_EXIST": "Eine Datei mit diesem Namen existiert bereits. Geben Sie einen anderen Namen ein, um die Datei zu speichern", - "FILE_NOT_SAVED": "Sie können keine Wallet-Datei in diesem Ordner speichern. Bitte wählen Sie einen anderen Ordner.", - "TX_TYPE_NORMAL": "Fehler. Die Zahlung von der Wallet", - "TX_TYPE_NORMAL_TO": "zu", - "TX_TYPE_NORMAL_END": "wurde nicht abgeschlossen.", - "TX_TYPE_NEW_ALIAS": "Fehler. Fehler beim Registrieren des Alias zum Speichern", - "TX_TYPE_NEW_ALIAS_END": "Bitte nochmals versuchen.", - "TX_TYPE_UPDATE_ALIAS": "Fehler. Fehlgeschlagen Kommentar von gespeichertem Alias zu ändern", - "TX_TYPE_COIN_BASE": "Fehler. Die Zahlung wurde nicht abgeschlossen." - }, - "CONTEXT_MENU": { - "COPY": "kopieren", - "PASTE": "einfügen", - "SELECT": "alle auswählen" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Beenden", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Eingehende Zahlung (nicht bestätigt)", - "INCOME_TRANSFER_CONFIRMED": "Zahlung erhalten", - "MINED": "Mined", - "LOCKED": "Blockiert", - "IS_MINIMIZE": "Zano-Anwendung wird auf die Systemleiste minimiert", - "RESTORE": "Sie können es wiederherstellen, indem Sie auf das Kontextmenü benutzen oder anklicken ", - "TRAY_MENU_SHOW": "Größe ändern", - "TRAY_MENU_MINIMIZE": "Minimieren" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/el.json b/src/gui/qt-daemon/html/assets/i18n/el.json deleted file mode 100644 index e8110d82..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/el.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Alias has wrong name", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/en.json b/src/gui/qt-daemon/html/assets/i18n/en.json deleted file mode 100644 index 394f046c..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/en.json +++ /dev/null @@ -1,633 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "CONTACTS_TOOLTIP": "Contacts option available only with Master Password enabled", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "LOG_OUT_TOOLTIP": "Logout option available only with Master Password enabled", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing block", - "LOADING": "Loading blockchain data", - "DOWNLOADING": "Downloading", - "SLASH": "/", - "MB": "MB" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "SEED_PASSWORD": "Seed password", - "OK": "OK", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid", - "INCORRECT_PASSWORD": "Incorrect password" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "LANGUAGE": { - "TITLE": "Language", - "EN": "English", - "FR": "French", - "DE": "Deutsch", - "ID": "Indonesian", - "IT": "Italian", - "PT": "Portuguese" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Current password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Incorrect password", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "CONFIRM": { - "TITLE": "Remove wallet from the list?", - "MESSAGE": "To access it you’ll have to add it again" - }, - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - }, - "TOOLTIPS": { - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "SETTINGS": "Settings", - "CLOSE": "Close wallet" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "CREATE_PASSWORD_SECURE": "Create a password to secure your seed", - "INFO": "info", - "SEED_IS_UNSECURED": "Seed is unsecured", - "SEED_IS_SECURED": "Seed is secured", - "REMEMBER_YOU_WILL_REQUIRE": "Remember, you will require the password to restore it.", - "FORM": { - "CONFIRM_PASSWORD": "Confirm password", - "GENERATE_SECURE_SEED": "Generate Secure Seed", - "SECURED_SEED_WILL_REQUIRE": "Secured seed will require this password to restore." - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "PASSWORDS_DONT_MATCH": "Passwords don't match" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK", - "CANCEL": "Cancel" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy" -, "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WALLET_WATCH_ONLY_NOT_SUPPORTED": "Watch-only wallets can only be opened by simplewallet", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/es.json b/src/gui/qt-daemon/html/assets/i18n/es.json deleted file mode 100644 index e7ba8cc6..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/es.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Nombre no válido: símbolos permitidos \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/fi.json b/src/gui/qt-daemon/html/assets/i18n/fi.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/fi.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/fr.json b/src/gui/qt-daemon/html/assets/i18n/fr.json deleted file mode 100644 index 6ecf4c04..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/fr.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Configurer le mot de passe principal", - "SETUP_CONFIRM_PASS": "Confirmer le mot de passe", - "MASTER_PASS": "Mot de passe principal", - "BUTTON_NEXT": "Suivant", - "BUTTON_SKIP": "Sauter", - "BUTTON_RESET": "Réinitialiser", - "INCORRECT_PASSWORD": "Mot de passe invalide", - "FORM_ERRORS": { - "PASS_REQUIRED": "Mot de passe requis", - "CONFIRM_REQUIRED": "Confirmation requise", - "MISMATCH": "Non-concordant" - } - }, - "COMMON": { - "BACK": "Retour" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Ajouter un portefeuille", - "CREATE_WALLET": "Créer un nouveau portefeuille", - "SAVE_PHRASE": "Enregistrer votre phrase de sécurité", - "OPEN_WALLET": "Ouvrir un portefeuille existant", - "RESTORE_WALLET": "Restaurer depuis une sauvegarde", - "WALLET_DETAILS": "Détails du portefeuille", - "ASSIGN_ALIAS": "Assigner un alias", - "EDIT_ALIAS": "Modifier l'alias", - "TRANSFER_ALIAS": "Transférer l'alias", - "CONTRACTS": "Contrats", - "NEW_PURCHASE": "Nouvel achat", - "OLD_PURCHASE": "Achat" - }, - "SIDEBAR": { - "TITLE": "Portefeuilles", - "ADD_NEW": "+ Ajouter", - "ACCOUNT": { - "STAKING": "Mise", - "MESSAGES": "Nouvelles offres/Messages", - "SYNCING": "Synchronisation du portefeuille" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Paramètres", - "LOG_OUT": "Déconnexion", - "SYNCHRONIZATION": { - "OFFLINE": "Hors ligne", - "ONLINE": "En ligne", - "ERROR": "Erreur de système", - "COMPLETE": "Fermeture", - "SYNCING": "Syncing block", - "LOADING": "Chargement des données de la blockchain" - }, - "UPDATE": { - "STANDARD": "Mise à jour disponible", - "STANDARD_TOOLTIP": "Mise à jour.
      La mise à jour est recommandée.", - "IMPORTANT": "Mise à jour disponible", - "IMPORTANT_HINT": "Mise à jour importante !", - "IMPORTANT_TOOLTIP": "Mise à jour.
      La mise à jour est recommandée.", - "CRITICAL": "Mise à jour disponible", - "CRITICAL_HINT": "Mise à jour critique !", - "CRITICAL_TOOLTIP": "Mise à jour critique disponible.Mise à jour fortement recommandée.", - "TIME": "Le temps du système diffère de celui du réseau", - "TIME_TOOLTIP": "Mauvais temps de système
      Vérifier et corriger votre temps de système." - } - }, - "MAIN": { - "TITLE": "Créer ou ouvrir le portefeuille pour commencer à utiliser Zano", - "BUTTON_NEW_WALLET": "Créer un nouveau portefeuille", - "BUTTON_OPEN_WALLET": "Ouvrir un portefeuille existant", - "BUTTON_RESTORE_BACKUP": "Restaurer depuis une sauvegarde", - "HELP": "Comment créer un portefeuille ?", - "CHOOSE_PATH": "Veuillez choisir un chemin" - }, - "CREATE_WALLET": { - "NAME": "Nom du portefeuille", - "PASS": "Définir le mot de passe du portefeuille", - "CONFIRM": "Confirmer le mot de passe du portefeuille", - "BUTTON_SELECT": "Sélectionner l'emplacement du portefeuille", - "BUTTON_CREATE": "Créer un portefeuille", - "TITLE_SAVE": "Enregistrer le fichier du portefeuille.", - "ERROR_CANNOT_SAVE_TOP": "Les fichiers de portefeuille existants ne peuvent pas être remplacés ou écrasés", - "ERROR_CANNOT_SAVE_SYSTEM": "Les fichiers de portefeuille ne peuvent pas être sauvegardés sur la partition du OS", - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_DUPLICATE": "Nom déjà utilisé", - "MAX_LENGTH": "Longueur maximale du nom atteinte", - "CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas" - } - }, - "OPEN_WALLET": { - "NAME": "Nom du portefeuille", - "PASS": "Mot de passe du portefeuille", - "BUTTON": "Ouvrir un portefeuille", - "WITH_ADDRESS_ALREADY_OPEN": "Un portefeuille avec cette adresse est déjà ouvert", - "FILE_NOT_FOUND1": "Fichier de portefeuille introuvable", - "FILE_NOT_FOUND2": "

      Il aurait peut-être été renommé ou déplacé.
      Pour l'ouvrir, utilisez le bouton \"Ouvrir le portefeuille\".", - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_DUPLICATE": "Nom déjà utilisé", - "MAX_LENGTH": "Longueur maximale du nom atteinte" - }, - "MODAL": { - "TITLE": "Entrer le mot de passe du portefeuille", - "LABEL": "Mot de passe de ce portefeuille", - "OPEN": "Ouvrir un portefeuille", - "SKIP": "Sauter", - "NOT_FOUND": "Introuvable" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Nom du portefeuille", - "LABEL_PHRASE_KEY": "Phrase de sécurité / clé privée", - "PASS": "Mot de passe du portefeuille", - "CONFIRM": "Confirmer le mot de passe du portefeuille", - "BUTTON_SELECT": "Sélectionner l'emplacement du portefeuille", - "BUTTON_CREATE": "Créer un portefeuille", - "NOT_CORRECT_FILE_OR_PASSWORD": "Le fichier est invalide ou mot de passe du portefeuille ne correspond pas", - "CHOOSE_PATH": "Veuillez choisir un chemin", - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_DUPLICATE": "Nom déjà utilisé", - "MAX_LENGTH": "Longueur maximale atteinte", - "CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas", - "KEY_REQUIRED": "Clé requise", - "KEY_NOT_VALID": "Clé invalide" - } - }, - "SEED_PHRASE": { - "TITLE": "Assurez-vous de garder votre phrase de sécurité dans un endroit sûr. Si vous oubliez votre phrase de sécurité, vous ne pourrez pas récupérer votre portefeuille.", - "BUTTON_CREATE_ACCOUNT": "Créer un portefeuille", - "BUTTON_COPY": "Copier" - }, - "PROGRESS": { - "ADD_WALLET": "Ajouter un portefeuille", - "SELECT_LOCATION": "Sélectionner l'emplacement du portefeuille", - "CREATE_WALLET": "Créer un nouveau portefeuille", - "RESTORE_WALLET": "Restaurer depuis une sauvegarde" - }, - "SETTINGS": { - "TITLE": "Paramètres", - "DARK_THEME": "Thème sombre", - "WHITE_THEME": "Thème blanc", - "GRAY_THEME": "Thème gris", - "APP_LOCK": { - "TITLE": "Verrouiller l'application après :", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 heure", - "TIME4": "Jamais" - }, - "SCALE": { - "75": "75% échelle", - "100": "100% échelle", - "125": "125% échelle", - "150": "150% échelle" - }, - "MASTER_PASSWORD": { - "TITLE": "Mettre à jour le mot de passe principal", - "OLD": "Ancien mot de passe", - "NEW": "Nouveau mot de passe", - "CONFIRM": "Confirmer le mot de passe", - "BUTTON": "Enregistrer" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Mot de passe requis", - "PASS_NOT_MATCH": "Ancien mot de passe non correspondant", - "CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas" - }, - "LAST_BUILD": "Version actuelle : {{value}}", - "APP_LOG_TITLE": "Niveau de log :" - }, - "WALLET": { - "REGISTER_ALIAS": "Enregistrer un alias", - "DETAILS": "Détails", - "LOCK": "Verrouillage", - "AVAILABLE_BALANCE": "Disponible {{available}} {{currency}}", - "LOCKED_BALANCE": "Vérouillé{{locked}}{{currency}}", - "LOCKED_BALANCE_LINK": "Que signifie cela?", - "TABS": { - "SEND": "Envoyer", - "RECEIVE": "Recevoir", - "HISTORY": "Historique", - "CONTRACTS": "Contrats", - "MESSAGES": "Messages", - "STAKING": "Mise" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Nom du portefeuille", - "LABEL_FILE_LOCATION": "Emplacement du fichier de portefeuille", - "LABEL_SEED_PHRASE": "Phrase de sécurité", - "SEED_PHRASE_HINT": "Cliquez pour révéler la phrase de sécurité", - "BUTTON_SAVE": "Enregistrer", - "BUTTON_REMOVE": "Fermer le portefeuille", - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_DUPLICATE": "Nom déjà utilisé", - "MAX_LENGTH": "Longueur maximale atteinte" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Entrer l'alias", - "TOOLTIP": "Un alias est une forme abréviée pour votre compte. Un alias ne peut inclure que des lettres, des chiffres et des caractères latins « » et « - ». Il doit commencer par « @ »." - }, - "COMMENT": { - "LABEL": "Commentaire", - "PLACEHOLDER": "", - "TOOLTIP": "Le commentaire sera visible à quiconque souhaite effectuer un paiement à votre alias. Vous pouvez fournir des détails sur votre entreprise, vos informations de contact ou inclure tout texte. Les commentaires peuvent être modifiés plus tard." - }, - "COST": "Frais d'alias {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assigner", - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_WRONG": "Nom invalide: symboles autorisés \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "L'alias doit contenir 6-25 caractères", - "NAME_EXISTS": "Alias déjà existant", - "NO_MONEY": "Vous n'avez pas assez de fonds pour assigner cet alias", - "MAX_LENGTH": "Longueur maximale du commentaire atteinte" - }, - "ONE_ALIAS": "Vous pouvez créer un seul alias par portefeuille", - "REQUEST_ADD_REG": "L'alias sera assigné dans les 10 prochaines minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Entrer l'alias" - }, - "COMMENT": { - "LABEL": "Commentaire", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "Vous n'avez pas assez de fonds pour changer le commentaire de cet alias", - "MAX_LENGTH": "Longueur maximale du commentaire atteinte" - }, - "COST": "Frais {{value}} {{currency}}", - "BUTTON_EDIT": "Modifier" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Entrer l'alias" - }, - "COMMENT": { - "LABEL": "Commentaire", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transférer à", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "Aucun portefeuille avec ce compte n'existe", - "ALIAS_EXISTS": "Ce compte a déjà un alias", - "NO_MONEY": "Vous n'avez pas assez de fonds pour transférer cet alias" - }, - "COST": "Frais de transfert {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transférer", - "BUTTON_CANCEL": "Annuler", - "REQUEST_SEND_REG": "L'alias sera transféré dans les 10 prochaines minutes" - }, - "SEND": { - "ADDRESS": "Adresse", - "AMOUNT": "Montant", - "COMMENT": "Commentaire", - "DETAILS": "Détails supplémentaires", - "MIXIN": "Mélange", - "FEE": "Frais", - "HIDE": "Masquer votre adresse de portefeuille au destinataire", - "BUTTON": "Envoyer", - "SUCCESS_SENT": "Transaction envoyée", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Adresse requise", - "ADDRESS_NOT_VALID": "Addresse invalide", - "ALIAS_NOT_VALID": "Alias non valide", - "AMOUNT_REQUIRED": "Le Montant est requis", - "AMOUNT_ZERO": "Le montant est zéro", - "FEE_REQUIRED": "Les frais sont requis", - "FEE_MINIMUM": "Frais minimum : {{fee}}", - "MAX_LENGTH": "Longueur maximale du commentaire atteinte" - } - }, - "HISTORY": { - "STATUS": "Statut", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Verrouillé jusqu'à {{date}}", - "SEND": "Envoyé", - "RECEIVED": "Reçu", - "DATE": "Date", - "AMOUNT": "Montant", - "FEE": "Frais", - "ADDRESS": "Adresse", - "DETAILS": { - "PAYMENT_ID": "ID de paiement", - "ID": "ID de transaction", - "SIZE": "Taille de la transaction", - "SIZE_VALUE": "{{value}} octets", - "HEIGHT": "Hauteur", - "CONFIRMATION": "Confirmation", - "INPUTS": "Entrées", - "OUTPUTS": "Sorties", - "COMMENT": "Commentaire" - }, - "TYPE_MESSAGES": { - "HIDDEN": "caché", - "UNDEFINED": "Non défini", - "COMPLETE_BUYER": "Contrat complété", - "COMPLETE_SELLER": "Contrat complété", - "CREATE_ALIAS": "Frais pour assigner l'alias", - "UPDATE_ALIAS": "Frais pour modifier l'alias", - "POW_REWARD": "Récompense POW", - "POS_REWARD": "Récompense POS", - "CREATE_CONTRACT": "Proposition de contrat", - "PLEDGE_CONTRACT": "Dépôt de contrat", - "NULLIFY_CONTRACT": "Brûler les dépôts", - "PROPOSAL_CANCEL_CONTRACT": "Demande d'annulation", - "CANCEL_CONTRACT": "Annuler et retourner les dépôts" - } - }, - "CONTRACTS": { - "EMPTY": "Aucun contrat actif", - "CONTRACTS": "Contrats", - "PURCHASE": "Achat", - "SELL": "Vendre", - "DATE": "Date", - "AMOUNT": "Montant", - "STATUS": "Statut", - "COMMENTS": "Commentaires", - "PURCHASE_BUTTON": "Nouvel achat", - "LISTING_BUTTON": "Créer une offre", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Moins d'une heure pour répondre", - "REMAINING_ONE": "{{time}} heure restante", - "REMAINING_MANY": "{{time}} heures restantes", - "REMAINING_MANY_ALT": "{{time}} heures restantes", - "REMAINING_ONE_RESPONSE": "{{time}} heure restante", - "REMAINING_MANY_RESPONSE": "{{time}} heures restantes", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} heures restantes", - "REMAINING_ONE_WAITING": "En attente de {{time}}  heure", - "REMAINING_MANY_WAITING": "En attente de {{time}} heures", - "REMAINING_MANY_ALT_WAITING": "En attente de {{time}} heures" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "Nouvelle proposition de contrat", - "IGNORED": "Vous avez ignoré la proposition de contrat", - "ACCEPTED": "Contrat démarré", - "WAIT": "En attente de confirmation du contrat", - "WAITING_BUYER": "En attente de livraison", - "COMPLETED": "Contrat terminé", - "NOT_RECEIVED": "Échec de la livraison", - "NULLIFIED": "Tous les dépôts ont été brûlés", - "PROPOSAL_CANCEL": "Nouvelle proposition d'annulation de contrat et retour des dépôts", - "BEING_CANCELLED": "Annulation en cours", - "CANCELLED": "Contrat annulé", - "IGNORED_CANCEL": "Vous avez ignoré la proposition d'annulation", - "EXPIRED": "La proposition de contrat a expiré" - }, - "BUYER": { - "WAITING": "En attente d'une réponse", - "IGNORED": "Le vendeur a ignoré votre proposition de contrat", - "ACCEPTED": "Le vendeur a accepté votre proposition de contrat", - "WAIT": "En attente de confirmation des dépôts", - "WAITING_SELLER": "En attente de livraison", - "COMPLETED": "Contrat complété", - "NOT_RECEIVED": "Échec de la livraison", - "NULLIFIED": "Tous les dépôts ont été brûlés", - "WAITING_CANCEL": "En attente d'annulation du contrat", - "BEING_CANCELLED": "Annulation en cours", - "CANCELLED": "Contrat annulé", - "IGNORED_CANCEL": "Le vendeur a ignoré votre proposition d'annuler le contrat", - "EXPIRED": "La proposition de contrat a expiré" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Vendeur", - "AMOUNT": "Montant", - "YOUR_DEPOSIT": "Votre dépôt", - "SELLER_DEPOSIT": "Dépôt du vendeur", - "BUYER_DEPOSIT": "Dépôt d'acheteur", - "SAME_AMOUNT": "Montant identique", - "COMMENT": "Commentaire", - "DETAILS": "Détails supplémentaires", - "SEND_BUTTON": "Envoyer", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description requise", - "DESC_MAXIMUM": "Longueur maximale du champ atteinte", - "SELLER_REQUIRED": "Adresse requise", - "SELLER_NOT_VALID": "Adresse invalide", - "ALIAS_NOT_VALID": "Alias invalide", - "AMOUNT_REQUIRED": "Montant requis", - "AMOUNT_ZERO": "Le montant ne peut pas être nul", - "YOUR_DEPOSIT_REQUIRED": "Dépôt requis", - "SELLER_DEPOSIT_REQUIRED": "Dépôt de vendeur requis", - "SELLER_SAME": "Utiliser un compte séparé", - "COMMENT_MAXIMUM": "Longueur maximale du champ atteinte" - }, - "PROGRESS_NEW": "Nouvel achat", - "PROGRESS_WAIT": "En attente d'une réponse", - "PROGRESS_RECEIVE": "Réponse reçue", - "PROGRESS_COMPLETE": "Complété", - "FEE": "Frais", - "PAYMENT": "ID de paiement", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "Nouvel achat", - "WAITING_SELLER": "En attente d'une réponse", - "WAITING_BUYER": "Proposition de contrat reçue", - "WAITING_CONFIRMATION": "En attente de confirmation des dépôts", - "WAITING_DELIVERY": "En attente de livraison", - "COMPLETED": "Contrat complété", - "IGNORED_BUYER": "Proposition de contrat ignorée", - "IGNORED_SELLER": "Le vendeur a ignoré votre proposition de contrat", - "PROPOSAL_CANCEL_SELLER": "Demande d'annulation envoyée", - "PROPOSAL_CANCEL_BUYER": "Demande d'annulation reçue", - "BEING_CANCELLED": "Annulation en cours", - "IGNORED_CANCEL_SELLER": "Le vendeur a ignoré votre proposition d'annuler le contrat", - "IGNORED_CANCEL_BUYER": "Proposition d'annulation du contrat ignorée", - "CANCELLED": "Contrat annulé", - "EXPIRED": "Proposition de contrat expirée", - "NOT_RECEIVED": "Échec de la livraison", - "NULLIFIED": "Tous les dépôts ont été brûlés" - }, - "ACCEPT_STATE_WAIT_BIG": "Contrat débuté", - "IGNORED_ACCEPT": "Proposition de contrat ignorée", - "BURN_PROPOSAL": "Dépositions brûlées", - "SUCCESS_FINISH_PROPOSAL": "Contrat complété", - "SEND_CANCEL_PROPOSAL": "Demande d'annulation envoyée", - "IGNORED_CANCEL": "Proposition d'annulation du contrat ignorée", - "DEALS_CANCELED_WAIT": "Annulation en cours", - "WAITING_TIME": "Heure de réponse", - "NEED_MONEY": "Fonds insuffisants", - "BUTTON_MAKE_PLEDGE": "Accepter et effectuer un dépôt", - "BUTTON_IGNORE": "Ignorer et cacher l'offre", - "BUTTON_NULLIFY": "Terminer et brûler les dépôts", - "BUTTON_RECEIVED": "Compléter et libérer les dépôts", - "BUTTON_CANCEL_BUYER": "Annuler et retourner les dépôts", - "BUTTON_NOT_CANCEL": "Ignorer la requête", - "BUTTON_CANCEL_SELLER": "Confirmer et retourner les dépôts", - "HOUR": "heure", - "HOURS": "heures", - "CANCEL": "Annuler", - "NULLIFY_QUESTION": "Êtes-vous sûr de vouloir brûler les deux dépôts ?", - "BUTTON_NULLIFY_SHORT": "Brûler", - "WAITING_TIME_QUESTION": "Êtes-vous sûr de vouloir annuler le contrat ?" - }, - "MESSAGES": { - "ADDRESS": "Adresse", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Tapez un message...", - "SEND_BUTTON": "Envoyer" - }, - "MODALS": { - "ERROR": "Erreur", - "SUCCESS": "Succès", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Envoyer", - "BUTTON_CANCEL": "Annuler", - "TITLE": "Confirmer la transaction", - "MESSAGE": { - "SEND": "Envoyer", - "FROM": "De", - "TO": "À", - "COMMENT": "Commentaire" - } - }, - "STAKING": { - "TITLE": "Mise", - "TITLE_PENDING": "En attente", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Période de temps:", - "PERIOD": { - "WEEK1": "1 semaine", - "WEEK2": "2 semaines", - "MONTH1": "1 mois", - "MONTH3": "3 mois", - "MONTH6": "6 mois", - "YEAR": "1 an", - "ALL": "Tout" - }, - "TITLE_GROUP": "Groupe :", - "GROUP": { - "DAY": "jour", - "WEEK": "semaine", - "MONTH": "mois" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Liste de contacts", - "IMPORT_EXPORT": "Importer ou exporter des contacts", - "IMPORT": "Importer", - "EXPORT": "Exporter", - "ADD": "Ajouter/modifier un contact", - "SEND": "Envoyer", - "SEND_FROM": "Envoyer de", - "SEND_TO": "À", - "OPEN_ADD_WALLET": "Ouvrir/Ajouter un portefeuille", - "COPY": "- Copier", - "TABLE": { - "NAME": "Nom", - "ALIAS": "Alias", - "ADDRESS": "Adresse", - "NOTES": "Notes", - "EMPTY": "La liste de contacts est vide" - }, - "FORM": { - "NAME": "Nom", - "ADDRESS": "Adresse", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Le nom est requis", - "NAME_DUBLICATED": "Nom déjà utilisé", - "ADDRESS_REQUIRED": "Adresse requise", - "ADDRESS_NOT_VALID": "Addresse invalide", - "SET_MASTER_PASSWORD": "Définir le mot de passe maître", - "ADDRESS_DUBLICATED": "L'addresse est dupliquée", - "MAX_LENGTH": "Longueur maximale des notes atteinte", - "NAME_LENGTH": "Le nom doit contenir 4-25 caractères" - }, - "BUTTON": { - "SEND": "Envoyer", - "EDIT": "Modifier", - "DELETE": "Supprimer", - "ADD": "Ajouter un contact", - "ADD_EDIT": "Ajouter/Enregistrer", - "GO_TO_WALLET": "Aller au portefeuille", - "IMPORT_EXPORT": "Importer/exporter" - }, - "SUCCESS_SENT": "Contact ajouté", - "SUCCESS_SAVE": "Contact modifié", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Erreur lors de la lecture du fichier !", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Pas assez de fonds", - "NOT_ENOUGH_MONEY": "Fonds insuffisants dans le compte", - "CORE_BUSY": "Erreur interne : le noyau est occupé", - "DAEMON_BUSY": "Erreur interne : le daemon est occupé", - "NO_MONEY_REMOVE_OFFER": "Il n'y a pas de frais pour supprimer une offre, mais pour protéger le réseau contre les transactions de spam, vous devez avoir au moins {{fee}} {{currency}} dans votre portefeuille", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Le nombre de mixage est trop grand pour l'état actuel de la blockchain. Il n'y a pas assez de sorties non utilisées pour mélanger avec", - "TRANSACTION_IS_TO_BIG": "La transaction dépasse la limite réseau, envoyez le montant requis avec plusieurs transactions", - "TRANSFER_ATTEMPT": "Il n'y a pas de connexion au réseau Zano", - "ACCESS_DENIED": "Accès refusé", - "TRANSACTION_ERROR": "Erreur. Transaction non complétée.", - "BAD_ARG": "Argument invalide", - "WALLET_WRONG_ID": "ID de portefeuille invalide", - "WRONG_PASSWORD": "Mot de passe invalide", - "FILE_RESTORED": "Le fichier de portefeuille a été corrompu. Nous avons récupéré les clés et le portefeuille de la blockchain", - "FILE_NOT_FOUND": "Fichier introuvable", - "FILE_EXIST": "Un fichier avec ce nom existe déjà. Entrez un autre nom pour enregistrer le fichier sous", - "FILE_NOT_SAVED": "Vous ne pouvez pas enregistrer un fichier de portefeuille dans ce dossier. Veuillez choisir un autre dossier.", - "TX_TYPE_NORMAL": "Erreur. paiement du portefeuille", - "TX_TYPE_NORMAL_TO": "à", - "TX_TYPE_NORMAL_END": "n'a pas été complété.", - "TX_TYPE_NEW_ALIAS": "Erreur. Impossible d'enregistrer l'alias dans la blockchain", - "TX_TYPE_NEW_ALIAS_END": "Veuillez réessayer.", - "TX_TYPE_UPDATE_ALIAS": "Erreur. Impossible de changer le commentaire de l'alias actuel", - "TX_TYPE_COIN_BASE": "Erreur. Le paiement n'a pas été complété." - }, - "CONTEXT_MENU": { - "COPY": "copier", - "PASTE": "coller", - "SELECT": "tout sélectionner" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quitter", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Paiement entrant (non confirmé)", - "INCOME_TRANSFER_CONFIRMED": "Paiement reçu", - "MINED": "Miné", - "LOCKED": "Bloqué", - "IS_MINIMIZE": "L'application Zano est minimisée dans la barre d'état", - "RESTORE": "Vous pouvez le récupérer en cliquant ou en utilisant le menu contextuel", - "TRAY_MENU_SHOW": "Redimensionner", - "TRAY_MENU_MINIMIZE": "Réduire" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/he.json b/src/gui/qt-daemon/html/assets/i18n/he.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/he.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/hu.json b/src/gui/qt-daemon/html/assets/i18n/hu.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/hu.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/id.json b/src/gui/qt-daemon/html/assets/i18n/id.json deleted file mode 100644 index 4b4c95a5..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/id.json +++ /dev/null @@ -1,587 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Atur Kata Sandi Utama", - "SETUP_CONFIRM_PASS": "Konfirmasi kata sandi", - "MASTER_PASS": "Kata Sandi Utama", - "BUTTON_NEXT": "Selanjutnya", - "BUTTON_SKIP": "Lewati", - "BUTTON_RESET": "Atur Ulang", - "INCORRECT_PASSWORD": "Kata sandi salah", - "FORM_ERRORS": { - "PASS_REQUIRED": "Kata sandi dibutuhkan\n", - "CONFIRM_REQUIRED": "Diperlukan konfirmasi", - "MISMATCH": "Tidak cocok" - } - }, - "COMMON": { - "BACK": "Kembali" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Tambahkan dompet", - "CREATE_WALLET": "Buat dompet baru", - "SAVE_PHRASE": "Simpan kalimat/kata kata anda", - "OPEN_WALLET": "Buka dompet yang telah ada", - "RESTORE_WALLET": "Mengembalikan dari cadangan", - "WALLET_DETAILS": "Detail Dompet", - "ASSIGN_ALIAS": "Tetapkan nama alias", - "EDIT_ALIAS": "Edit nama alias", - "TRANSFER_ALIAS": "Pindahkan nama alias", - "CONTRACTS": "Kontrak", - "NEW_PURCHASE": "Pembelian Baru", - "OLD_PURCHASE": "Pembelian" - }, - "SIDEBAR": { - "TITLE": "Dompet", - "ADD_NEW": "+ Tambahkan", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "Pesan baru/tawaran", - "SYNCING": "Sinkronisasi dompet" - }, - "CONTACTS": "Kontak", - "SETTINGS": "Pengaturan", - "LOG_OUT": "Keluar", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "Sistem error", - "COMPLETE": "Penyelesaian", - "SYNCING": "Sinkronisasi blockchain", - "LOADING": "Memuat data blockchain" - }, - "UPDATE": { - "STANDARD": "Pembaruan tersedia", - "STANDARD_TOOLTIP": "Dapatkan pembaruan baru.
      Pembaruan direkomendasikan!", - "IMPORTANT": "Pembaruan tersedia", - "IMPORTANT_HINT": "Pembaruang penting!", - "IMPORTANT_TOOLTIP": "Dapatkan pembaruan terbaru.
      Pembaruan penting!", - "CRITICAL": "Pembaruan tersedia", - "CRITICAL_HINT": "Pembaruan penting!", - "CRITICAL_TOOLTIP": "Tersedia pembaruan penting.Direkomendasikan untuk segera di update!", - "TIME": "Waktu sistem berbeda dengan jaringan", - "TIME_TOOLTIP": "Waktu sistem salah!
      Mohon dicek dan perbaiki sistem waktunya." - } - }, - "MAIN": { - "TITLE": "Buat atau buka dompet untuk mulai menggunakan Zano", - "BUTTON_NEW_WALLET": "Buat dompet baru", - "BUTTON_OPEN_WALLET": "Buka dompet yang telah dibuat", - "BUTTON_RESTORE_BACKUP": "Pulihkan dari cadangan", - "HELP": "Bagaimana cara membuat dompet?", - "CHOOSE_PATH": "Pilih path untuk menyimpan" - }, - "CREATE_WALLET": { - "NAME": "Nama Dompet", - "PASS": "Buat kata sandi dompet", - "CONFIRM": "Konfirmasi kata sandi dompet", - "BUTTON_SELECT": "Pilih lokasi dompet", - "BUTTON_CREATE": "Buat Dompet\n", - "TITLE_SAVE": "Simpan file dompet", - "ERROR_CANNOT_SAVE_TOP": "Dompet yang telah ada tidak bisa di tulis ulang atau di ganti", - "ERROR_CANNOT_SAVE_SYSTEM": "File dompet tidak dapat di simpan di partisi OS", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama di butuhkan", - "NAME_DUPLICATE": "Nama sama/duplikat", - "MAX_LENGTH": "Maksimum panjang nama tecapai", - "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" - } - }, - "OPEN_WALLET": { - "NAME": "Nama dompet", - "PASS": "Katasandi dompet", - "BUTTON": "Buka dompet", - "WITH_ADDRESS_ALREADY_OPEN": "Dompet dengan alamat ini sudah terbuka", - "FILE_NOT_FOUND1": "File Dompet tidak ditemukan", - "FILE_NOT_FOUND2": "

      Kemungkinan sudah di ganti atau dipindahkan
      Untuk Membuka, gunakan tombol \"Buka Dompet\".\n", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama diperlukan", - "NAME_DUPLICATE": "Nama sama/duplikat", - "MAX_LENGTH": "Maksimum panjang nama tecapai" - }, - "MODAL": { - "TITLE": "Tulis kata sandi dompet", - "LABEL": "Katasandi untuk dompet ini", - "OPEN": "Buka dompet", - "SKIP": "Lewati", - "NOT_FOUND": "Tidak ditemukan" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Nama dompet", - "LABEL_PHRASE_KEY": "Seed phrase/ kunci pribadi", - "PASS": "Katasandi dompet", - "CONFIRM": "Konfirmasi kata sandi dompet", - "BUTTON_SELECT": "Pilih lokasi dompet", - "BUTTON_CREATE": "Buat Dompet\n", - "NOT_CORRECT_FILE_OR_PASSWORD": "File dompet tidak valid atau kata sandi tidak sama", - "CHOOSE_PATH": "Pilih path untuk menyimpan", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama diperlukan", - "NAME_DUPLICATE": "Nama sama/duplikat", - "MAX_LENGTH": "Maksimum panjang nama tecapai", - "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama", - "KEY_REQUIRED": "Kunci di butuhkan", - "KEY_NOT_VALID": "Kunci tidak valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Pastikan untuk menyimpan seed phrase di tempat yang aman. Jika kamu lupa seed phrasenya, kamu tidak bisa menggunakanya untuk memulihkan/recover dompetmu.", - "BUTTON_CREATE_ACCOUNT": "Buat Dompet\n", - "BUTTON_COPY": "Salin" - }, - "PROGRESS": { - "ADD_WALLET": "Tambahkan dompet", - "SELECT_LOCATION": "Pilih lokasi dompet", - "CREATE_WALLET": "Buat dompet baru", - "RESTORE_WALLET": "Pulihkan dari cadangan" - }, - "SETTINGS": { - "TITLE": "Pengaturan", - "DARK_THEME": "Tema Gelap", - "WHITE_THEME": "Tema Biasa/Putih", - "GRAY_THEME": "Tema Abu-abu", - "APP_LOCK": { - "TITLE": "Kunci aplikasi setelah:", - "TIME1": "5 Menit", - "TIME2": "15 Menit", - "TIME3": "1 Jam", - "TIME4": "Tidak pernah" - }, - "MASTER_PASSWORD": { - "TITLE": "Atur Kata Sandi Utama", - "OLD": "Katasandi lama", - "NEW": "Katasandi baru", - "CONFIRM": "Konfirmasi katasandi baru", - "BUTTON": "Simpan" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Kata sandi dibutuhkan\n", - "PASS_NOT_MATCH": "Katasandi lama tidak sama", - "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" - }, - "LAST_BUILD": "Versi sekarang: {{value}}", - "APP_LOG_TITLE": "Tingkat log:" - }, - "WALLET": { - "REGISTER_ALIAS": "Daftarkan alias", - "DETAILS": "Detail", - "LOCK": "Kunci", - "AVAILABLE_BALANCE": "Tersedia {{available}} {{currency}}", - "LOCKED_BALANCE": "Terkunci {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "Apa yang dimaksudkan?\n", - "TABS": { - "SEND": "Kirim", - "RECEIVE": "Terima", - "HISTORY": "Riwayat", - "CONTRACTS": "Kontrak", - "MESSAGES": "Pesan", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Nama dompet", - "LABEL_FILE_LOCATION": "Lokasi file dompet", - "LABEL_SEED_PHRASE": "Seed Phrase", - "SEED_PHRASE_HINT": "Klik untuk membuka frasa kunci", - "BUTTON_SAVE": "Simpan", - "BUTTON_REMOVE": "Tutup dompet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama diperlukan", - "NAME_DUPLICATE": "Nama sama/duplikat", - "MAX_LENGTH": "Maksimum panjang nama tecapai" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Masukan alias", - "TOOLTIP": "Alias adalah formulir singkat atau akun Anda. Alias hanya dapat menyertakan huruf Latin, angka, dan karakter “.” dan \"-\". Itu harus dimulai dengan \"@\"." - }, - "COMMENT": { - "LABEL": "Komentar", - "PLACEHOLDER": "", - "TOOLTIP": "Komentar akan terlihat oleh siapa saja yang ingin melakukan pembayaran ke alias Anda. Anda dapat memberikan detail tentang bisnis Anda, kontak, atau memasukkan teks apa pun. Komentar dapat diedit nanti." - }, - "COST": "Biaya Alias {{value}} {{currency}}", - "BUTTON_ASSIGN": "Menetapkan", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama di butuhkan", - "NAME_WRONG": "Alias memiliki nama yang salah", - "NAME_LENGTH": "Alias harus 6-25 karakter", - "NAME_EXISTS": "Nama alias sudah ada", - "NO_MONEY": "Anda tidak memiliki cukup dana untuk menetapkan alias ini", - "MAX_LENGTH": "Maksimum panjang komentar tecapai" - }, - "ONE_ALIAS": "Anda hanya dapat membuat satu alias per dompet", - "REQUEST_ADD_REG": "Alias akan di pindahkan dalam 10 menit" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Masukan alias" - }, - "COMMENT": { - "LABEL": "Komentar", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "Anda tidak memiliki cukup dana untuk mengganti alias ini", - "MAX_LENGTH": "Maksimum panjang komentar tecapai" - }, - "COST": "Biaya Alias {{value}} {{currency}}", - "BUTTON_EDIT": "Edit/ubah" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Masukan alias" - }, - "COMMENT": { - "LABEL": "Komentar", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Pindahkan ke", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "Tidak ada domet di akun ini", - "ALIAS_EXISTS": "Akun ini sudah memiliki alias", - "NO_MONEY": "Anda tidak memiliki cukup dana untuk memindahkan alias ini" - }, - "COST": "Biaya Alias {{value}} {{currency}}", - "BUTTON_TRANSFER": "Pindahkan", - "BUTTON_CANCEL": "Batal", - "REQUEST_SEND_REG": "Alias akan di pindahkan dalam 10 menit" - }, - "SEND": { - "ADDRESS": "Alamat", - "AMOUNT": "Jumlah", - "COMMENT": "Komentar", - "DETAILS": "Detail tambahan\n", - "MIXIN": "Mixin", - "FEE": "Biaya", - "HIDE": "Sembunyikan alamat dompet kamu dari penerima", - "BUTTON": "Kirim", - "SUCCESS_SENT": "Transaksi dikirim", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Alamat di perlukan", - "ADDRESS_NOT_VALID": "Alamat tidak valid", - "ALIAS_NOT_VALID": "Alias tidak valid", - "AMOUNT_REQUIRED": "Jumlah di perlukan", - "AMOUNT_ZERO": "Jumlah 0", - "FEE_REQUIRED": "Biaya dibutuhkan", - "FEE_MINIMUM": "Biaya minimal : {{fee}}", - "MAX_LENGTH": "Maksimum panjang komentar tecapai" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Konfirmasi {{current}}/{{total}}", - "LOCK_TOOLTIP": "Dikunci sampai {{date}}", - "SEND": "Dikirim", - "RECEIVED": "Diterima", - "DATE": "Tanggal", - "AMOUNT": "Jumlah", - "FEE": "Biaya", - "ADDRESS": "Alamat", - "DETAILS": { - "PAYMENT_ID": "ID Pembayaran", - "ID": "ID Transaksi", - "SIZE": "Ukuran transaksi", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Tinggi", - "CONFIRMATION": "Konfirmasi", - "INPUTS": "Input", - "OUTPUTS": "Output/Keluaran", - "COMMENT": "Komentar" - }, - "TYPE_MESSAGES": { - "HIDDEN": "tersembunyi", - "UNDEFINED": "Tidak terdefinisi", - "COMPLETE_BUYER": "Kontrak selesai", - "COMPLETE_SELLER": "Kontrak selesai", - "CREATE_ALIAS": "Biaya untuk menetapkan alias", - "UPDATE_ALIAS": "Biaya untuk mengubah alias", - "POW_REWARD": "Hadiah POW", - "POS_REWARD": "Hadiah POS", - "CREATE_CONTRACT": "Proposal Kontrak", - "PLEDGE_CONTRACT": "Kontrak Deposit", - "NULLIFY_CONTRACT": "Setoran yang dibakar/hangus", - "PROPOSAL_CANCEL_CONTRACT": "Permintaan pembatalan", - "CANCEL_CONTRACT": "Batalkan dan kembalikan setoran/deposit" - } - }, - "CONTRACTS": { - "EMPTY": "Tidak ada kontrak yang aktif", - "CONTRACTS": "Kontrak", - "PURCHASE": "Pembelian", - "SELL": "Jual", - "DATE": "Tanggal", - "AMOUNT": "Jumlah", - "STATUS": "Status", - "COMMENTS": "Komentar", - "PURCHASE_BUTTON": "Pembelian Baru", - "LISTING_BUTTON": "Buat daftar", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Kurang dari satu jam untuk merespon", - "REMAINING_ONE": "kurang {{time}} jam", - "REMAINING_MANY": "kurang {{time}} jam", - "REMAINING_MANY_ALT": "kurang {{time}} jam", - "REMAINING_ONE_RESPONSE": "kurang {{time}} jam", - "REMAINING_MANY_RESPONSE": "kurang {{time}} jam", - "REMAINING_MANY_ALT_RESPONSE": "kurang {{time}} jam", - "REMAINING_ONE_WAITING": "Menunggu dari {{time}} jam", - "REMAINING_MANY_WAITING": "Menunggu dari {{time}} jam", - "REMAINING_MANY_ALT_WAITING": "Menunggu dari {{time}} jam" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "Proposal kontrak baru", - "IGNORED": "Kamu mengabaikan kontrak proposal", - "ACCEPTED": "Kontrak dimulai", - "WAIT": "Menunggu konfirmasi kontrak\n", - "WAITING_BUYER": "menunggu untuk dikirim", - "COMPLETED": "Kontrak selesai", - "NOT_RECEIVED": "Pengiriman gagal", - "NULLIFIED": "Semua deposit/setoran hangus", - "PROPOSAL_CANCEL": "Proposal baru untuk membatalkan kontrak dan mengembalikan deposit", - "BEING_CANCELLED": "Pembatalan dalam proses", - "CANCELLED": "Kontrak dibatalkan", - "IGNORED_CANCEL": "Kamu mengabaikan kontrak proposal", - "EXPIRED": "Kontrak proposal telah kadaluarsa" - }, - "BUYER": { - "WAITING": "Menunggu untuk respon", - "IGNORED": "Penjual mengabaikan kontrak proposal", - "ACCEPTED": "Penjual menerima kontrak proposal kamu", - "WAIT": "Menunggu konfirmasi deposit", - "WAITING_SELLER": "menunggu untuk dikirim", - "COMPLETED": "Kontrak selesai", - "NOT_RECEIVED": "Pengiriman gagal", - "NULLIFIED": "Semua deposit/setoran hangus", - "WAITING_CANCEL": "Menunggu pembatalan kontrak", - "BEING_CANCELLED": "Pembatalan dalam proses", - "CANCELLED": "Kontrak dibatalkan", - "IGNORED_CANCEL": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", - "EXPIRED": "Kontrak proposal telah kadaluwarsa" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Deskripsi", - "SELLER": "Penjual", - "AMOUNT": "Jumlah", - "YOUR_DEPOSIT": "Setoran/deposit kamu", - "SELLER_DEPOSIT": "Setoran/Depost Penjual", - "BUYER_DEPOSIT": "Setoran pembeli", - "SAME_AMOUNT": "Jumlah yang sama", - "COMMENT": "Komentar", - "DETAILS": "Detail tambahan\n", - "SEND_BUTTON": "Kirim", - "FORM_ERRORS": { - "DESC_REQUIRED": "Deskripsi dibutuhkan", - "DESC_MAXIMUM": "Maksimum panjang bidang tecapai", - "SELLER_REQUIRED": "Alamat di perlukan", - "SELLER_NOT_VALID": "alamat tidak valid", - "ALIAS_NOT_VALID": "alias tidak valid", - "AMOUNT_REQUIRED": "Jumlah di perlukan", - "AMOUNT_ZERO": "Jumlah tidak bisa 0", - "YOUR_DEPOSIT_REQUIRED": "Deposit/setoran dibutuhkan", - "SELLER_DEPOSIT_REQUIRED": "Setoran penjual dibuthkan", - "SELLER_SAME": "Gunakan akun terpisah", - "COMMENT_MAXIMUM": "Maksimum panjang bidang tecapai" - }, - "PROGRESS_NEW": "Pembelian Baru", - "PROGRESS_WAIT": "Menunggu balasan", - "PROGRESS_RECEIVE": "Balasan diterima", - "PROGRESS_COMPLETE": "Selesai", - "FEE": "Biaya", - "PAYMENT": "ID Pembayaran", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "Pembelian Baru", - "WAITING_SELLER": "Menunggu untuk respon", - "WAITING_BUYER": "Kontrak proposal telah diterima", - "WAITING_CONFIRMATION": "Menunggu konfirmasi deposit", - "WAITING_DELIVERY": "menunggu untuk dikirim", - "COMPLETED": "Kontrak selesai", - "IGNORED_BUYER": "Kontrak proposal diabaikan", - "IGNORED_SELLER": "Penjual mengabaikan kontrak proposal", - "PROPOSAL_CANCEL_SELLER": "Permintaan pembatalan dikirimkan", - "PROPOSAL_CANCEL_BUYER": "Permintaan pembatalan diterima", - "BEING_CANCELLED": "Pembatalan dalam proses", - "IGNORED_CANCEL_SELLER": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", - "IGNORED_CANCEL_BUYER": "Proposal pembatalan kontrak diabaikan", - "CANCELLED": "Kontrak dibatalkan", - "EXPIRED": "Kontrak proposal telah kadaluarsa", - "NOT_RECEIVED": "Pengiriman gagal", - "NULLIFIED": "Semua deposit/setoran hangus" - }, - "ACCEPT_STATE_WAIT_BIG": "Kontrak dimulai", - "IGNORED_ACCEPT": "Kontrak proposal diabaikan", - "BURN_PROPOSAL": "Semua deposit/setoran hangus", - "SUCCESS_FINISH_PROPOSAL": "Kontrak selesai", - "SEND_CANCEL_PROPOSAL": "Permintaan pembatalan dikirimkan", - "IGNORED_CANCEL": "Proposal pembatalan kontrak diabaikan", - "DEALS_CANCELED_WAIT": "Pembatalan dalam proses", - "WAITING_TIME": "Waktu Respon", - "NEED_MONEY": "Dana tidak cukup", - "BUTTON_MAKE_PLEDGE": "Terima dan buat deposit", - "BUTTON_IGNORE": "Abaikan dan sembunyikan penawaran", - "BUTTON_NULLIFY": "Matikan dan bakar setoran ", - "BUTTON_RECEIVED": "Selesai dan lepaskan setoran/deposit", - "BUTTON_CANCEL_BUYER": "Batalkan dan kembalikan setoran/deposit", - "BUTTON_NOT_CANCEL": "Abaikan permintaan ", - "BUTTON_CANCEL_SELLER": "Konfirmasi dan kembalikan deposit", - "HOUR": "Jam", - "HOURS": "Jam", - "CANCEL": "Batal", - "NULLIFY_QUESTION": "Apakah kamu yakin untuk membakar/menghanguskan kedua deposit/setoran?", - "BUTTON_NULLIFY_SHORT": "Hangus", - "WAITING_TIME_QUESTION": "Apakah kamu yakin untuk membatalkan kontrak?" - }, - "MESSAGES": { - "ADDRESS": "Alamat", - "MESSAGE": "Pesan", - "SEND_PLACEHOLDER": "Ketik sebuah pesan...", - "SEND_BUTTON": "Kirim" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Berhasil", - "INFO": "Informasi", - "OK": "Ok" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Kirim", - "BUTTON_CANCEL": "Batal", - "TITLE": "Konfirmasi transaksi", - "MESSAGE": { - "SEND": "Kirim", - "FROM": "Dari\n", - "TO": "Untuk", - "COMMENT": "Komentar" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Tertunda", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Periode waktu:", - "PERIOD": { - "WEEK1": "1 minggu", - "WEEK2": "2 minggu", - "MONTH1": "1 bulan", - "MONTH3": "3 bulan", - "MONTH6": "6 bulan", - "YEAR": "1 tahun", - "ALL": "Semua" - }, - "TITLE_GROUP": "Kelompok:", - "GROUP": { - "DAY": "hari", - "WEEK": "minggu", - "MONTH": "bulan" - }, - "SWITCH": { - "ON": "On", - "OFF": "Off" - } - }, - "CONTACTS": { - "TITLE": "Daftar kontak", - "IMPORT_EXPORT": "Import atau ekspor kontak", - "IMPORT": "Import", - "EXPORT": "Ekspor", - "ADD": "Tambahkan/edit kontak", - "SEND": "Kirim", - "SEND_FROM": "Kirim dari", - "SEND_TO": "Untuk", - "OPEN_ADD_WALLET": "Buka/tambahkan dompet", - "COPY": "- Salin", - "TABLE": { - "NAME": "Nama", - "ALIAS": "Alias", - "ADDRESS": "Alamat", - "NOTES": "Catatan", - "EMPTY": "Daftar kontrak masih kosong" - }, - "FORM": { - "NAME": "Nama", - "ADDRESS": "Alamat", - "NOTES": "Catatan" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Nama diperlukan", - "NAME_DUBLICATED": "Nama sama/duplikat", - "ADDRESS_REQUIRED": "Alamat di perlukan", - "ADDRESS_NOT_VALID": "Alamat tidak valid", - "SET_MASTER_PASSWORD": "Atur Kata Sandi Utama", - "ADDRESS_DUBLICATED": "Alamat sama/duplikat", - "MAX_LENGTH": "Maksimum panjang catatan tecapai", - "NAME_LENGTH": "Nama harus 4-25 karakter" - }, - "BUTTON": { - "SEND": "Kirim", - "EDIT": "Edit/ubah", - "DELETE": "Hapus", - "ADD": "Tambahkan kontak", - "ADD_EDIT": "Tambahkan/Simpan", - "GO_TO_WALLET": "Pergi ke dompet", - "IMPORT_EXPORT": "Impor/Ekspor" - }, - "SUCCESS_SENT": "Kontak ditambahkan", - "SUCCESS_SAVE": "Kontak telah di ubah", - "SUCCESS_IMPORT": "Kontak telah di impor", - "SUCCESS_EXPORT": "Kontak telah di ekspor", - "ERROR_IMPORT": "Kesalahan terjadi ketika membaca file!", - "ERROR_TYPE_FILE": "Tolong mengimpor file .csv yang valid", - "ERROR_EXPORT": "Tipe file tidak valid. Simpan file dalam .csv", - "ERROR_EMPTY_LIST": "Daftar kontak masih kosong", - "ERROR_IMPORT_EMPTY": "File masih kosong " - }, - "ERRORS": { - "NO_MONEY": "Tidak cukup uang", - "NOT_ENOUGH_MONEY": "Dana di akun tidak cukup", - "CORE_BUSY": "Kesalahan intenal: inti sedang sibuk", - "DAEMON_BUSY": "Kesalahan intenal: daemon sedang sibuk", - "NO_MONEY_REMOVE_OFFER": "Tidak ada biaya untuk menghapus penawaran, tetapi untuk melindungi jaringan terhadap transaksi banjir/banyak, Anda harus memiliki setidaknya {{fee}} {{currency}} di dompet Anda", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mixin terlalu besar untuk keadaan blockchain saat ini. Tidak ada cukup keluaran yang tidak terpakai untuk digabungkan", - "TRANSACTION_IS_TO_BIG": "Transaksi melebihi batas jaringan, mengirim jumlah yang diperlukan dengan banyak transaksi", - "TRANSFER_ATTEMPT": "Tidak ada koneksi ke jaringan Zano", - "ACCESS_DENIED": "Akses ditolak", - "TRANSACTION_ERROR": "Kesalahan. Transaksi tidak selesai.", - "BAD_ARG": "Argumen tidak valid", - "WALLET_WRONG_ID": "ID dompet tidak valid", - "WRONG_PASSWORD": "Katasandi tidak valid", - "FILE_RESTORED": "File dompet rusak. Kami telah memulihkan kunci dan dompet dari blockchain", - "FILE_NOT_FOUND": "File tidak ditemukan", - "FILE_EXIST": "Sebuah file dengan nama tersebut sudah ada. Coba menggunakan nama lain untuk menyimpannya", - "FILE_NOT_SAVED": "Anda tidak dapat menyimpan file dompet di folder ini. Tolong pilih folder yang lain.", - "TX_TYPE_NORMAL": "Error. Pembayaran dari dompet", - "TX_TYPE_NORMAL_TO": "untuk", - "TX_TYPE_NORMAL_END": "tidak selesai", - "TX_TYPE_NEW_ALIAS": "Error. Gagal untuk mendaftarkan alias ", - "TX_TYPE_NEW_ALIAS_END": "Silakan coba lagi", - "TX_TYPE_UPDATE_ALIAS": "Error. Gagal mengubah komentar menjadi alias dengan aman", - "TX_TYPE_COIN_BASE": "Error. Pembayaran tidak selesai." - }, - "CONTEXT_MENU": { - "COPY": "Salin", - "PASTE": "tempel/paste", - "SELECT": "pilih semua" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Keluar", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Pembayaran masuk (belum terkonfirmasi)", - "INCOME_TRANSFER_CONFIRMED": "Pembayaran diterima", - "MINED": "Ditambang", - "LOCKED": "Diblokir", - "IS_MINIMIZE": "Aplikasi Zano di minimalkan ke dalam sistem tray.", - "RESTORE": "Kamu dapat mengembalikannya dengan cara mengklik ke dalam menu konteks.", - "TRAY_MENU_SHOW": "Ubah ukuran", - "TRAY_MENU_MINIMIZE": "Minimalkan" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/it.json b/src/gui/qt-daemon/html/assets/i18n/it.json deleted file mode 100644 index 9e6282aa..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/it.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Imposta password principale", - "SETUP_CONFIRM_PASS": "Conferma la password", - "MASTER_PASS": "Password principale", - "BUTTON_NEXT": "Prossimo", - "BUTTON_SKIP": "Salta", - "BUTTON_RESET": "Azzera", - "INCORRECT_PASSWORD": "Password non valida", - "FORM_ERRORS": { - "PASS_REQUIRED": "La password è necessaria", - "CONFIRM_REQUIRED": "La conferma è necessaria", - "MISMATCH": "Non corrisponde" - } - }, - "COMMON": { - "BACK": "Torna indietro" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Aggiungi portafoglio", - "CREATE_WALLET": "Crea un nuovo portafoglio", - "SAVE_PHRASE": "Salva la tua frase segreta", - "OPEN_WALLET": "Apri portafoglio esistente", - "RESTORE_WALLET": "Ripristina da backup", - "WALLET_DETAILS": "Dettagli portafoglio", - "ASSIGN_ALIAS": "Assegna alias", - "EDIT_ALIAS": "Modifica alias", - "TRANSFER_ALIAS": "Trasferisci alias", - "CONTRACTS": "Contratti", - "NEW_PURCHASE": "Nuovo acquisto", - "OLD_PURCHASE": "Acquisto" - }, - "SIDEBAR": { - "TITLE": "Portafogli", - "ADD_NEW": "+ Aggiungi", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "Nuove offerte/messaggi", - "SYNCING": "Sincronizzazione portafoglio" - }, - "CONTACTS": "Contatti", - "SETTINGS": "Impostazioni", - "LOG_OUT": "Esci", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "Errore di sistema", - "COMPLETE": "Completata", - "SYNCING": "Syncing block", - "LOADING": "Caricamento dati blockchain" - }, - "UPDATE": { - "STANDARD": "Aggiornamento disponibile", - "STANDARD_TOOLTIP": "Ottieni un nuovo aggiornamento.
      L'aggiornamento è consigliato!", - "IMPORTANT": "Aggiornamento disponibile", - "IMPORTANT_HINT": "Aggiornamento importante!", - "IMPORTANT_TOOLTIP": "Ottieni un nuovo aggiornamento.
      Aggiornamento importante!", - "CRITICAL": "Aggiornamento disponibile", - "CRITICAL_HINT": "Aggiornamento critico!", - "CRITICAL_TOOLTIP": "Aggiornamento critico disponibile.Aggiornamento fortemente consigliato!", - "TIME": "L'orario di sistema differisce dalla rete", - "TIME_TOOLTIP": "L'orario di sistema è sbagliato!
      Controlla e sistema l'orario di sistema." - } - }, - "MAIN": { - "TITLE": "Crea o apri il portafoglio per iniziare a usare Zano", - "BUTTON_NEW_WALLET": "Crea un nuovo portafoglio", - "BUTTON_OPEN_WALLET": "Apri portafoglio esistente", - "BUTTON_RESTORE_BACKUP": "Ripristina da backup", - "HELP": "Come creare il portafoglio?", - "CHOOSE_PATH": "Scegli un percorso" - }, - "CREATE_WALLET": { - "NAME": "Nome del portafoglio", - "PASS": "Imposta password portafoglio", - "CONFIRM": "Conferma password portafoglio", - "BUTTON_SELECT": "Seleziona posizione portafoglio", - "BUTTON_CREATE": "Crea portafoglio", - "TITLE_SAVE": "Salva il file del portafoglio.", - "ERROR_CANNOT_SAVE_TOP": "I file del portafoglio esistenti non possono essere sostituiti o sovrascritti", - "ERROR_CANNOT_SAVE_SYSTEM": "I file del portafoglio non possono essere salvati nella partizione di sistema", - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_DUPLICATE": "Il nome è duplicato", - "MAX_LENGTH": "Lunghezza massima del nome raggiunta", - "CONFIRM_NOT_MATCH": "La password di conferma non corrisponde" - } - }, - "OPEN_WALLET": { - "NAME": "Nome del portafoglio", - "PASS": "Password portafoglio", - "BUTTON": "Apri portafoglio", - "WITH_ADDRESS_ALREADY_OPEN": "Un portafoglio con questo indirizzo è già aperto", - "FILE_NOT_FOUND1": "File del portafoglio non trovato", - "FILE_NOT_FOUND2": "

      Potrebbe essere stato rinominato o spostato.
      Per aprirlo, usa il pulsante \"Apri portafoglio\".", - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_DUPLICATE": "Il nome è un duplicato", - "MAX_LENGTH": "Lunghezza massima del nome raggiunta" - }, - "MODAL": { - "TITLE": "Imposta password portafoglio", - "LABEL": "Password per questo portafoglio", - "OPEN": "Apri portafoglio", - "SKIP": "Salta", - "NOT_FOUND": "Non trovato" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Nome del portafoglio", - "LABEL_PHRASE_KEY": "Frase segreta / chiave privata", - "PASS": "Password portafoglio", - "CONFIRM": "Conferma password portafoglio", - "BUTTON_SELECT": "Seleziona posizione portafoglio", - "BUTTON_CREATE": "Crea portafoglio", - "NOT_CORRECT_FILE_OR_PASSWORD": "File del portafoglio non valido o password non corrispondente", - "CHOOSE_PATH": "Scegli un percorso", - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_DUPLICATE": "Il nome è un duplicato", - "MAX_LENGTH": "Lunghezza massima del nome raggiunta", - "CONFIRM_NOT_MATCH": "La password di conferma non corrisponde", - "KEY_REQUIRED": "Chiave richiesta", - "KEY_NOT_VALID": "Chiave non valida" - } - }, - "SEED_PHRASE": { - "TITLE": "Assicurati di mantenere la tua frase segreta in un posto sicuro. Se dimentichi la tua frase segreta non sarai in grado di recuperare il tuo portafoglio.", - "BUTTON_CREATE_ACCOUNT": "Crea portafoglio", - "BUTTON_COPY": "Copia" - }, - "PROGRESS": { - "ADD_WALLET": "Aggiungi portafoglio", - "SELECT_LOCATION": "Seleziona posizione portafoglio", - "CREATE_WALLET": "Crea un nuovo portafoglio", - "RESTORE_WALLET": "Ripristina da backup" - }, - "SETTINGS": { - "TITLE": "Impostazioni", - "DARK_THEME": "Tema scuro", - "WHITE_THEME": "Tema bianco", - "GRAY_THEME": "Tema grigio", - "APP_LOCK": { - "TITLE": "Blocca app dopo:", - "TIME1": "5 minuti", - "TIME2": "15 minuti", - "TIME3": "1 ora", - "TIME4": "Mai" - }, - "SCALE": { - "75": "75% scala", - "100": "100% scala", - "125": "125% scala", - "150": "150% scala" - }, - "MASTER_PASSWORD": { - "TITLE": "Aggiorna password principale", - "OLD": "Vecchia password", - "NEW": "Nuova password", - "CONFIRM": "Conferma nuova password", - "BUTTON": "Salva" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "La password è necessaria", - "PASS_NOT_MATCH": "La vecchia password non corrisponde", - "CONFIRM_NOT_MATCH": "La password di conferma non corrisponde" - }, - "LAST_BUILD": "Build attuale: {{value}}", - "APP_LOG_TITLE": "Livello di log:" - }, - "WALLET": { - "REGISTER_ALIAS": "Registra un alias", - "DETAILS": "Dettagli", - "LOCK": "Blocca", - "AVAILABLE_BALANCE": "Disponibile {{available}} {{currency}}", - "LOCKED_BALANCE": "Bloccato {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "Che cosa significa?", - "TABS": { - "SEND": "Invia", - "RECEIVE": "Ricevi", - "HISTORY": "Storico", - "CONTRACTS": "Contratti", - "MESSAGES": "Messaggi", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Nome portafoglio", - "LABEL_FILE_LOCATION": "Posizione file portafoglio", - "LABEL_SEED_PHRASE": "Frase segreta", - "SEED_PHRASE_HINT": "Clicca per rivelare la frase segreta", - "BUTTON_SAVE": "Salva", - "BUTTON_REMOVE": "Chiudi portafoglio", - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_DUPLICATE": "Il nome è un duplicato", - "MAX_LENGTH": "Lunghezza massima del nome raggiunta" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Inserisci alias", - "TOOLTIP": "Un alias è un modulo abbreviato o il tuo account. Un alias può solo includere lettere latine, numeri e caratteri “.” e “-”. Deve iniziare con “@”." - }, - "COMMENT": { - "LABEL": "Commento", - "PLACEHOLDER": "", - "TOOLTIP": "Il commento sarà visibile a chiunque desideri effettuare un pagamento al tuo alias. Puoi fornire dettagli sul tuo business, contatti o includere qualsiasi testo. I commenti possono essere modificati più tardi." - }, - "COST": "Quota alias {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assegna", - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_WRONG": "Nome Ungültiger: zulässige Symbole \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "L'alias deve essere lungo 6-25 caratteri", - "NAME_EXISTS": "Il nome dell'alias esiste già", - "NO_MONEY": "Non hai fondi sufficienti per assegnare questo alias", - "MAX_LENGTH": "Lunghezza massima del nome raggiunta" - }, - "ONE_ALIAS": "Puoi creare solo un alias per portafoglio", - "REQUEST_ADD_REG": "L'alias sarà assegnato entro 10 minuti" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Inserisci alias" - }, - "COMMENT": { - "LABEL": "Commento", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "Non hai fondi sufficienti per modificare il commento a questo alias", - "MAX_LENGTH": "Lunghezza massima del commento raggiunta" - }, - "COST": "Tassa {{value}} {{currency}}", - "BUTTON_EDIT": "Modifica" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Inserisci alias" - }, - "COMMENT": { - "LABEL": "Commento", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Trasferisci a", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "Non esiste alcun portafoglio con questo account", - "ALIAS_EXISTS": "Questo account ha già un alias", - "NO_MONEY": "Non hai fondi sufficienti per trasferire questo alias" - }, - "COST": "Trasferimento commissione {{value}} {{currency}}", - "BUTTON_TRANSFER": "Trasferisci", - "BUTTON_CANCEL": "Cancella", - "REQUEST_SEND_REG": "L'alias verrà trasferito entro 10 minuti" - }, - "SEND": { - "ADDRESS": "Indirizzo", - "AMOUNT": "Importo", - "COMMENT": "Commento", - "DETAILS": "Dettagli aggiuntivi", - "MIXIN": "Mixin", - "FEE": "Commissione", - "HIDE": "Nascondi l'indirizzo del tuo portafoglio dal destinatario", - "BUTTON": "Invia", - "SUCCESS_SENT": "Transazione inviata", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Indirizzo richiesto", - "ADDRESS_NOT_VALID": "Indirizzo non valido", - "ALIAS_NOT_VALID": "Alias non valido", - "AMOUNT_REQUIRED": "Importo richiesto", - "AMOUNT_ZERO": "Importo è zero", - "FEE_REQUIRED": "La commissione è richiesta", - "FEE_MINIMUM": "Costo minimo: {{fee}}", - "MAX_LENGTH": "Lunghezza massima del commento raggiunta" - } - }, - "HISTORY": { - "STATUS": "Stato", - "STATUS_TOOLTIP": "Conferme {{current}}/{{total}}", - "LOCK_TOOLTIP": "Bloccato fino a {{date}}", - "SEND": "Inviato", - "RECEIVED": "Ricevuto", - "DATE": "Data", - "AMOUNT": "Importo", - "FEE": "Commissione", - "ADDRESS": "Indirizzo", - "DETAILS": { - "PAYMENT_ID": "ID pagamento", - "ID": "ID transazione", - "SIZE": "Dimensione transazione", - "SIZE_VALUE": "{{value}} byte", - "HEIGHT": "Altezza", - "CONFIRMATION": "Conferme", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Commenti" - }, - "TYPE_MESSAGES": { - "HIDDEN": "nascosto", - "UNDEFINED": "Non definito", - "COMPLETE_BUYER": "Contratto completato", - "COMPLETE_SELLER": "Contratto completato", - "CREATE_ALIAS": "Tassa per l'assegnazione dell'alias", - "UPDATE_ALIAS": "Tassa per modificare alias", - "POW_REWARD": "Ricompensa POW", - "POS_REWARD": "Ricompensa POS", - "CREATE_CONTRACT": "Proposta contratto", - "PLEDGE_CONTRACT": "Deposito contratto", - "NULLIFY_CONTRACT": "Burn deposit", - "PROPOSAL_CANCEL_CONTRACT": "Richiesta di cancellazione", - "CANCEL_CONTRACT": "Annulla e restituisce depositi" - } - }, - "CONTRACTS": { - "EMPTY": "Nessun contratto attivo", - "CONTRACTS": "Contratti", - "PURCHASE": "Acquisti", - "SELL": "Vendite", - "DATE": "Data", - "AMOUNT": "Importo", - "STATUS": "Stato", - "COMMENTS": "Commenti", - "PURCHASE_BUTTON": "Nuovo acquisto", - "LISTING_BUTTON": "Crea elenco", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Meno di un'ora per rispondere", - "REMAINING_ONE": "{{time}} ora rimasta", - "REMAINING_MANY": "{{time}} ore rimaste", - "REMAINING_MANY_ALT": "{{time}} ore rimaste", - "REMAINING_ONE_RESPONSE": "{{time}} ora rimasta", - "REMAINING_MANY_RESPONSE": "{{time}} ore rimaste", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} ore rimaste", - "REMAINING_ONE_WAITING": "Attendi {{time}} ora", - "REMAINING_MANY_WAITING": "Attendi {{time}} ore", - "REMAINING_MANY_ALT_WAITING": "Attendi {{time}} ore" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "Nuova proposta di contratto", - "IGNORED": "Hai ignorato la proposta di contratto", - "ACCEPTED": "Contratto iniziato", - "WAIT": "In attesa di conferma del contratto", - "WAITING_BUYER": "In attesa di consegna", - "COMPLETED": "Contratto completato", - "NOT_RECEIVED": "Consegna fallita", - "NULLIFIED": "Tutti i depositi bruciati", - "PROPOSAL_CANCEL": "Nuova proposta di cancellare il contratto e restituire i depositi", - "BEING_CANCELLED": "Cancellazione in corso", - "CANCELLED": "Contratto cancellato", - "IGNORED_CANCEL": "Hai ignorato la proposta di cancellazione", - "EXPIRED": "La proposta del contratto è scaduta" - }, - "BUYER": { - "WAITING": "In attesa di risposta", - "IGNORED": "Il venditore ha ignorato la tua proposta di contratto", - "ACCEPTED": "Il venditore ha accettato la tua proposta di contratto", - "WAIT": "In attesa della conferma dei depositi", - "WAITING_SELLER": "In attesa di consegna", - "COMPLETED": "Contratto completato", - "NOT_RECEIVED": "Consegna fallita", - "NULLIFIED": "Tutti i depositi bruciati", - "WAITING_CANCEL": "In attesa della cancellazione del contratto", - "BEING_CANCELLED": "Cancellazione in corso", - "CANCELLED": "Contratto cancellato", - "IGNORED_CANCEL": "Il venditore ha ignorato la tua proposta di annullare il contratto", - "EXPIRED": "La proposta di contratto è scaduta" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Descrizione", - "SELLER": "Venditore", - "AMOUNT": "Importo", - "YOUR_DEPOSIT": "Il tuo deposito", - "SELLER_DEPOSIT": "Deposito venditore", - "BUYER_DEPOSIT": "Deposito acquirente", - "SAME_AMOUNT": "Stesso importo", - "COMMENT": "Commento", - "DETAILS": "Dettagli aggiuntivi", - "SEND_BUTTON": "Invia", - "FORM_ERRORS": { - "DESC_REQUIRED": "Descrizione richiesta", - "DESC_MAXIMUM": "Lunghezza massima del campo raggiunta", - "SELLER_REQUIRED": "Indirizzo richiesto", - "SELLER_NOT_VALID": "Indirizzo non valido", - "ALIAS_NOT_VALID": "Alias non valido", - "AMOUNT_REQUIRED": "Importo richiesto", - "AMOUNT_ZERO": "L'importo non può essere zero", - "YOUR_DEPOSIT_REQUIRED": "Deposito richiesto", - "SELLER_DEPOSIT_REQUIRED": "Deposito venditore richiesto", - "SELLER_SAME": "Usa account separato", - "COMMENT_MAXIMUM": "Lunghezza massima del campo raggiunta" - }, - "PROGRESS_NEW": "Nuovo acquisto", - "PROGRESS_WAIT": "In attesa di risposta", - "PROGRESS_RECEIVE": "Risposta ricevuta", - "PROGRESS_COMPLETE": "Completato", - "FEE": "Commissione", - "PAYMENT": "ID pagamento", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "Nuovo acquisto", - "WAITING_SELLER": "In attesa di risposta", - "WAITING_BUYER": "Proposta contratto ricevuta", - "WAITING_CONFIRMATION": "In attesa della conferma dei depositi", - "WAITING_DELIVERY": "In attesa di consegna", - "COMPLETED": "Contratto completato", - "IGNORED_BUYER": "Proposta del contratto ignorata", - "IGNORED_SELLER": "Il venditore ha ignorato la tua proposta di contratto", - "PROPOSAL_CANCEL_SELLER": "Richiesta di cancellazione inviata", - "PROPOSAL_CANCEL_BUYER": "Richiesta di cancellazione ricevuta", - "BEING_CANCELLED": "Cancellazione in corso", - "IGNORED_CANCEL_SELLER": "Il venditore ha ignorato la tua proposta di cancellare il contratto", - "IGNORED_CANCEL_BUYER": "Proposta di cancellazione del contratto ignorata", - "CANCELLED": "Contratto cancellato", - "EXPIRED": "Proposta contratto scaduta", - "NOT_RECEIVED": "Consegna fallita", - "NULLIFIED": "Tutti i depositi bruciati" - }, - "ACCEPT_STATE_WAIT_BIG": "Contratto iniziato", - "IGNORED_ACCEPT": "Proposta del contratto ignorata", - "BURN_PROPOSAL": "Depositi bruciati", - "SUCCESS_FINISH_PROPOSAL": "Contratto completato", - "SEND_CANCEL_PROPOSAL": "Richiesta di cancellazione inviata", - "IGNORED_CANCEL": "Proposta di cancellazione del contratto ignorata", - "DEALS_CANCELED_WAIT": "Cancellazione in corso", - "WAITING_TIME": "Tempo di risposta", - "NEED_MONEY": "Fondi insufficienti", - "BUTTON_MAKE_PLEDGE": "Accetta e effettua il deposito", - "BUTTON_IGNORE": "Ignora e nascondi l'offerta", - "BUTTON_NULLIFY": "Termina e brucia i depositi", - "BUTTON_RECEIVED": "Completa e rilascia i depositi", - "BUTTON_CANCEL_BUYER": "Cancella e restituisce i depositi", - "BUTTON_NOT_CANCEL": "Ignora richiesta", - "BUTTON_CANCEL_SELLER": "Conferma e restituisce depositi", - "HOUR": "ora", - "HOURS": "ore", - "CANCEL": "Cancella", - "NULLIFY_QUESTION": "Sei sicuro di voler bruciare entrambi i depositi?", - "BUTTON_NULLIFY_SHORT": "Bruciare", - "WAITING_TIME_QUESTION": "Sei sicuro di voler cancellare il contratto?" - }, - "MESSAGES": { - "ADDRESS": "Indirizzo", - "MESSAGE": "Messaggio", - "SEND_PLACEHOLDER": "Digita un messaggio...", - "SEND_BUTTON": "Invia" - }, - "MODALS": { - "ERROR": "Errore", - "SUCCESS": "Successo", - "INFO": "Informazioni", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Invia", - "BUTTON_CANCEL": "Cancella", - "TITLE": "Conferma la transazione", - "MESSAGE": { - "SEND": "Invia", - "FROM": "Da", - "TO": "A", - "COMMENT": "Commento" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "In sospeso", - "TITLE_TOTAL": "Totale", - "TITLE_PERIOD": "Periodo di tempo:", - "PERIOD": { - "WEEK1": "1 settimana", - "WEEK2": "2 settimane", - "MONTH1": "1 mese", - "MONTH3": "3 mesi", - "MONTH6": "6 mesi", - "YEAR": "1 anno", - "ALL": "Tutti" - }, - "TITLE_GROUP": "Gruppo:", - "GROUP": { - "DAY": "giorno", - "WEEK": "settimana", - "MONTH": "mese" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Lista contatti", - "IMPORT_EXPORT": "Importa o esporta contatti", - "IMPORT": "Importa", - "EXPORT": "Esporta", - "ADD": "Aggiungi/modifica contatto", - "SEND": "Invia", - "SEND_FROM": "Invia da", - "SEND_TO": "A", - "OPEN_ADD_WALLET": "Apri/Aggiungi portafoglio", - "COPY": "- Copia", - "TABLE": { - "NAME": "Nome", - "ALIAS": "Alias", - "ADDRESS": "Indirizzo", - "NOTES": "Note", - "EMPTY": "La lista dei contatti è vuota" - }, - "FORM": { - "NAME": "Nome", - "ADDRESS": "Indirizzo", - "NOTES": "Note" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Il nome è richiesto", - "NAME_DUBLICATED": "Il nome è un duplicato", - "ADDRESS_REQUIRED": "Indirizzo è richiesto", - "ADDRESS_NOT_VALID": "Indirizzo non valido", - "SET_MASTER_PASSWORD": "Imposta password principale", - "ADDRESS_DUBLICATED": "Indirizzo è un duplicato", - "MAX_LENGTH": "Lunghezza massima delle note raggiunta", - "NAME_LENGTH": "Il nome deve essere lungo da 4 a 25 caratteri" - }, - "BUTTON": { - "SEND": "Invia", - "EDIT": "Modifica", - "DELETE": "Elimina", - "ADD": "Aggiungi contatto", - "ADD_EDIT": "Aggiungi/Salva", - "GO_TO_WALLET": "Vai al portafoglio", - "IMPORT_EXPORT": "Importa/esporta" - }, - "SUCCESS_SENT": "Contatto aggiunto", - "SUCCESS_SAVE": "Contatto modificato", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Si è verificato un errore durante la lettura del file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Non abbastanza denaro", - "NOT_ENOUGH_MONEY": "Fondi insufficienti nell'account", - "CORE_BUSY": "Errore interno: il core è occupato", - "DAEMON_BUSY": "Errore interno: daemon è occupato", - "NO_MONEY_REMOVE_OFFER": "Non c'è alcun costo per eliminare un'offerta ma, per proteggere la rete dalle molte transazioni, devi avere almeno {{fee}} {{currency}} nel tuo portafoglio", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Il numero di Mix-in è troppo grande per lo stato corrente della blockchain. Non ci sono abbastanza output non spesi per mescolare con", - "TRANSACTION_IS_TO_BIG": "La transazione supera il limite di rete, invia l'importo richiesto con transazioni multiple", - "TRANSFER_ATTEMPT": "Non c'è connessione alla rete Zano", - "ACCESS_DENIED": "Accesso negato", - "TRANSACTION_ERROR": "Errore. Transazione non completata.", - "BAD_ARG": "Argomento non valido", - "WALLET_WRONG_ID": "ID portafoglio non valido", - "WRONG_PASSWORD": "Password non valida", - "FILE_RESTORED": "Il file del portafoglio è stato danneggiato. Abbiamo recuperato le chiavi e il portafoglio dalla blockchain", - "FILE_NOT_FOUND": "File non trovato", - "FILE_EXIST": "Esiste già un file con questo nome. Inserisci un altro nome per salvare il file", - "FILE_NOT_SAVED": "Non puoi salvare un file di portafoglio in questa cartella. Scegli un'altra cartella.", - "TX_TYPE_NORMAL": "Errore. Il pagamento dal portafoglio", - "TX_TYPE_NORMAL_TO": "a", - "TX_TYPE_NORMAL_END": "non è stato completato.", - "TX_TYPE_NEW_ALIAS": "Errore. Impossibile registrare l'alias in sicurezza", - "TX_TYPE_NEW_ALIAS_END": "Per favore riprova.", - "TX_TYPE_UPDATE_ALIAS": "Errore. Impossibile cambiare il commento all'alias in sicurezza", - "TX_TYPE_COIN_BASE": "Errore. Il pagamento non è stato completato." - }, - "CONTEXT_MENU": { - "COPY": "copia", - "PASTE": "incolla", - "SELECT": "seleziona tutto" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Esci", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Pagamento in arrivo (non confermato)", - "INCOME_TRANSFER_CONFIRMED": "Pagamento ricevuto", - "MINED": "Minato", - "LOCKED": "Bloccato", - "IS_MINIMIZE": "L'applicazione Zano è minimizzata nella barra di sistema", - "RESTORE": "Puoi recuperarlo cliccando o utilizzando il menu contestuale", - "TRAY_MENU_SHOW": "Ridimensiona", - "TRAY_MENU_MINIMIZE": "Minimizza" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ja.json b/src/gui/qt-daemon/html/assets/i18n/ja.json deleted file mode 100644 index 22a0de0e..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ja.json +++ /dev/null @@ -1,588 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ko.json b/src/gui/qt-daemon/html/assets/i18n/ko.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ko.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/nl.json b/src/gui/qt-daemon/html/assets/i18n/nl.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/nl.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/no.json b/src/gui/qt-daemon/html/assets/i18n/no.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/no.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/pl.json b/src/gui/qt-daemon/html/assets/i18n/pl.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/pl.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/pt.json b/src/gui/qt-daemon/html/assets/i18n/pt.json deleted file mode 100644 index d01a7b63..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/pt.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Configurar password mestra", - "SETUP_CONFIRM_PASS": "Confirmar a password", - "MASTER_PASS": "Password mestra", - "BUTTON_NEXT": "Próximo", - "BUTTON_SKIP": "Saltar", - "BUTTON_RESET": "Redefinir", - "INCORRECT_PASSWORD": "Password inválida", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password é obrigatória", - "CONFIRM_REQUIRED": "Confirmação é obrigatória", - "MISMATCH": "Não correspondem" - } - }, - "COMMON": { - "BACK": "Voltar" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Adicionar carteira", - "CREATE_WALLET": "Criar nova carteira", - "SAVE_PHRASE": "Guardar a sua frase semente", - "OPEN_WALLET": "Abrir carteira existente", - "RESTORE_WALLET": "Restaurar de cópia", - "WALLET_DETAILS": "Detalhes da carteira", - "ASSIGN_ALIAS": "Atribuir alias", - "EDIT_ALIAS": "Editar alias", - "TRANSFER_ALIAS": "Transferir alias", - "CONTRACTS": "Contratos", - "NEW_PURCHASE": "Nova compra", - "OLD_PURCHASE": "Compra" - }, - "SIDEBAR": { - "TITLE": "Carteiras", - "ADD_NEW": "+ Adicionar", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "Novas ofertas/Mensagens", - "SYNCING": "A sincronizar carteira" - }, - "CONTACTS": "Contactos", - "SETTINGS": "Definições", - "LOG_OUT": "Terminar sessão", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "Erro de sistema", - "COMPLETE": "Conclusão", - "SYNCING": "Syncing block", - "LOADING": "A carregar informação da blockchain" - }, - "UPDATE": { - "STANDARD": "Atualização disponível", - "STANDARD_TOOLTIP": "Obter nova atualização. É recomendado atualizar!", - "IMPORTANT": "Atualização disponível", - "IMPORTANT_HINT": "Atualização importante!", - "IMPORTANT_TOOLTIP": "Obter nova atualização. É recomendado atualizar!", - "CRITICAL": "Atualização disponível", - "CRITICAL_HINT": "Atualização crítica!", - "CRITICAL_TOOLTIP": "Atualização crítica disponível. É fortemente recomendado atualizar!", - "TIME": "Tempo de sistema difere da rede", - "TIME_TOOLTIP": "Tempo de sistema errado! Verifique e repare o seu tempo de sistema." - } - }, - "MAIN": { - "TITLE": "Crie ou abra a carteira para começar a usar Zano", - "BUTTON_NEW_WALLET": "Criar nova carteira", - "BUTTON_OPEN_WALLET": "Abrir carteira existente", - "BUTTON_RESTORE_BACKUP": "Restaurar de cópia", - "HELP": "Como criar carteira?", - "CHOOSE_PATH": "Por favor escolha um caminho" - }, - "CREATE_WALLET": { - "NAME": "Nome da carteira", - "PASS": "Definir password da carteira", - "CONFIRM": "Confirmar password da carteira", - "BUTTON_SELECT": "Escolher localização da carteira", - "BUTTON_CREATE": "Criar carteira", - "TITLE_SAVE": "Gravar o ficheiro de carteira.", - "ERROR_CANNOT_SAVE_TOP": "Ficheiros de carteira existentes não podem ser substituídos ou sobrescritos", - "ERROR_CANNOT_SAVE_SYSTEM": "Ficheiros da carteira não podem ser guardados na partição do sistema operativo", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_DUPLICATE": "Nome é duplicado", - "MAX_LENGTH": "Atingido comprimento máximo do nome", - "CONFIRM_NOT_MATCH": "Password de confirmação não corresponde" - } - }, - "OPEN_WALLET": { - "NAME": "Nome da carteira", - "PASS": "Password da carteira", - "BUTTON": "Abrir carteira", - "WITH_ADDRESS_ALREADY_OPEN": "Uma carteira com este endereço já está aberta", - "FILE_NOT_FOUND1": "Ficheiro de carteira não encontrado", - "FILE_NOT_FOUND2": "

      Pode ter sido renomeado ou movido.
      Para abri-lo, use o botão \"Abrir carteira\".", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_DUPLICATE": "Nome é duplicado", - "MAX_LENGTH": "Atingido comprimento máximo do nome" - }, - "MODAL": { - "TITLE": "Escrever password da carteira", - "LABEL": "Password para esta carteira", - "OPEN": "Abrir carteira", - "SKIP": "Saltar", - "NOT_FOUND": "Não encontrado" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Nome da carteira", - "LABEL_PHRASE_KEY": "Frase semente / chave privada", - "PASS": "Password da carteira", - "CONFIRM": "Confirmar password da carteira", - "BUTTON_SELECT": "Escolher localização da carteira", - "BUTTON_CREATE": "Criar carteira", - "NOT_CORRECT_FILE_OR_PASSWORD": "Ficheiro de carteira inválido ou senha não corresponde", - "CHOOSE_PATH": "Por favor escolha um caminho", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_DUPLICATE": "Nome é duplicado", - "MAX_LENGTH": "Atingido comprimento máximo do nome", - "CONFIRM_NOT_MATCH": "Password de confirmação não corresponde", - "KEY_REQUIRED": "Chave é necessária", - "KEY_NOT_VALID": "Chave inválida" - } - }, - "SEED_PHRASE": { - "TITLE": "Certifique-se de manter sua frase-semente num lugar seguro. Se see esquecer da sua frase-semente, não poderá recuperar a sua carteira.", - "BUTTON_CREATE_ACCOUNT": "Criar carteira", - "BUTTON_COPY": "Copiar" - }, - "PROGRESS": { - "ADD_WALLET": "Adicionar carteira", - "SELECT_LOCATION": "Escolher localização da carteira", - "CREATE_WALLET": "Criar nova carteira", - "RESTORE_WALLET": "Restaurar de cópia" - }, - "SETTINGS": { - "TITLE": "Definições", - "DARK_THEME": "Tema escuro", - "WHITE_THEME": "Tema branco", - "GRAY_THEME": "Tema cinzento", - "APP_LOCK": { - "TITLE": "Bloquear aplicação após:", - "TIME1": "5 minutos", - "TIME2": "15 minutos", - "TIME3": "1 hora", - "TIME4": "Nunca" - }, - "SCALE": { - "75": "75% escala", - "100": "100% escala", - "125": "125% escala", - "150": "150% escala" - }, - "MASTER_PASSWORD": { - "TITLE": "Atualizar password mestra", - "OLD": "Antiga password", - "NEW": "Nova password", - "CONFIRM": "Confirmação de nova password", - "BUTTON": "Guardar" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password é necessária", - "PASS_NOT_MATCH": "Antiga password não corresponde", - "CONFIRM_NOT_MATCH": "Password de confirmação não corresponde" - }, - "LAST_BUILD": "Versão atual: {{value}}", - "APP_LOG_TITLE": "Nível de registro:" - }, - "WALLET": { - "REGISTER_ALIAS": "Registar um alias", - "DETAILS": "Detalhes", - "LOCK": "Bloquear", - "AVAILABLE_BALANCE": "Disponível {{available}} {{currency}}", - "LOCKED_BALANCE": "Bloqueado {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "O que isso quer dizer?", - "TABS": { - "SEND": "Enviar", - "RECEIVE": "Receber", - "HISTORY": "Histórico", - "CONTRACTS": "Contratos", - "MESSAGES": "Mensagens", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Nome da carteira", - "LABEL_FILE_LOCATION": "Localização do ficheiro de carteira", - "LABEL_SEED_PHRASE": "Frase semente", - "SEED_PHRASE_HINT": "Clique para revelar a frase semente", - "BUTTON_SAVE": "Guardar", - "BUTTON_REMOVE": "Fechar carteira", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_DUPLICATE": "Nome é duplicado", - "MAX_LENGTH": "Atingido comprimento máximo do nome" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Introduzir alias", - "TOOLTIP": "Um alias é uma forma abreviada da sua conta. Um alias só pode incluir letras, números e caracteres latinos “.” e “-”. Deve começar com “@”." - }, - "COMMENT": { - "LABEL": "Comentar", - "PLACEHOLDER": "", - "TOOLTIP": "O comentário ficará visível para quem quiser efetuar um pagamento para o seu alias. Pode fornecer detalhes sobre sua empresa, contatos ou incluir qualquer texto. Os comentários podem ser editados posteriormente." - }, - "COST": "Taxa de Alias {{value}} {{currency}}", - "BUTTON_ASSIGN": "Atribuir", - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_WRONG": "Nome inválido: símbolos permitidos \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "O alias deve ter entre 6 e 25 caracteres", - "NAME_EXISTS": "Nome de alias já existe", - "NO_MONEY": "Não tem fundos suficientes para atribuir esse alias", - "MAX_LENGTH": "Atingido comprimento máximo do comentário" - }, - "ONE_ALIAS": "Pode criar apenas um alias por carteira", - "REQUEST_ADD_REG": "O alias será atribuído em 10 minutos" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Introduzir alias" - }, - "COMMENT": { - "LABEL": "Comentário", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "Não tem fundos suficientes para comentar esse alias", - "MAX_LENGTH": "Atingido comprimento máximo do comentário" - }, - "COST": "Taxa {{value}} {{currency}}", - "BUTTON_EDIT": "Editar" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Introduzir alias" - }, - "COMMENT": { - "LABEL": "Comentar", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transferir para", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "Não existe nenhuma carteira com esta conta", - "ALIAS_EXISTS": "Esta conta já tem um alias", - "NO_MONEY": "Não tem fundos suficientes para transferir esse alias" - }, - "COST": "Taxa de Transferência {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transferir", - "BUTTON_CANCEL": "Cancelar", - "REQUEST_SEND_REG": "O alias será transferido em 10 minutos" - }, - "SEND": { - "ADDRESS": "Endereço", - "AMOUNT": "Montante", - "COMMENT": "Comentar", - "DETAILS": "Detalhes adicionais", - "MIXIN": "Mixagem", - "FEE": "Taxa", - "HIDE": "Ocultar o seu endereço de carteira do recipiente", - "BUTTON": "Enviar", - "SUCCESS_SENT": "Transação enviada", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Endereço é necessário", - "ADDRESS_NOT_VALID": "Endereço inválido", - "ALIAS_NOT_VALID": "Alias inválido", - "AMOUNT_REQUIRED": "Montante é necessário", - "AMOUNT_ZERO": "Montante é zero", - "FEE_REQUIRED": "Taxa é necessária", - "FEE_MINIMUM": "Taxa mínima: {{fee}}", - "MAX_LENGTH": "Atingido comprimento máximo do comentário" - } - }, - "HISTORY": { - "STATUS": "Estado", - "STATUS_TOOLTIP": "Confirmações {{current}}/{{total}}", - "LOCK_TOOLTIP": "Bloqueado até {{date}}", - "SEND": "Enviado", - "RECEIVED": "Recebido", - "DATE": "Data", - "AMOUNT": "Montante", - "FEE": "Taxa", - "ADDRESS": "Endereço", - "DETAILS": { - "PAYMENT_ID": "ID de Pagamento", - "ID": "ID da transação", - "SIZE": "Tamanho da transação", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Altura", - "CONFIRMATION": "Confirmação", - "INPUTS": "Entradas", - "OUTPUTS": "Saídas", - "COMMENT": "Comentário" - }, - "TYPE_MESSAGES": { - "HIDDEN": "escondido", - "UNDEFINED": "Indefinido", - "COMPLETE_BUYER": "Contrato completado", - "COMPLETE_SELLER": "Contrato completado", - "CREATE_ALIAS": "Taxa para atribuição de alias", - "UPDATE_ALIAS": "Taxa para edição de alias", - "POW_REWARD": "Recompensa de POW", - "POS_REWARD": "Recompensa de POS", - "CREATE_CONTRACT": "Proposta de contrato", - "PLEDGE_CONTRACT": "Depósito de contrato", - "NULLIFY_CONTRACT": "Queimar depósitos", - "PROPOSAL_CANCEL_CONTRACT": "Cancelar pedido", - "CANCEL_CONTRACT": "Cancelar e retornar depósitos" - } - }, - "CONTRACTS": { - "EMPTY": "Sem contratos ativos", - "CONTRACTS": "Contratos", - "PURCHASE": "Compra", - "SELL": "Venda", - "DATE": "Data", - "AMOUNT": "Montante", - "STATUS": "Estado", - "COMMENTS": "Comentários", - "PURCHASE_BUTTON": "Nova Compra", - "LISTING_BUTTON": "Criar lista", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Menos de uma hora para responder", - "REMAINING_ONE": "Falta {{time}} hora\n", - "REMAINING_MANY": "Falta {{time}} horas\n", - "REMAINING_MANY_ALT": "Faltam {{time}} horas", - "REMAINING_ONE_RESPONSE": "Falta {{time}} hora", - "REMAINING_MANY_RESPONSE": "Faltam {{time}} horas\n", - "REMAINING_MANY_ALT_RESPONSE": "Faltam {{time}} horas\n", - "REMAINING_ONE_WAITING": "À espera à {{time}} hora", - "REMAINING_MANY_WAITING": "À espera à {{time}} horas", - "REMAINING_MANY_ALT_WAITING": "À espera à {{time}} horas" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "Nova proposta de contrato", - "IGNORED": "Ignorou uma proposta de contrato", - "ACCEPTED": "Contrato iniciado", - "WAIT": "À espera de confirmação de contrato", - "WAITING_BUYER": "À espera de entrega", - "COMPLETED": "Contrato completado", - "NOT_RECEIVED": "Entrega falhada", - "NULLIFIED": "Todos os depósitos queimados", - "PROPOSAL_CANCEL": "Nova proposta para cancelar contrato e retornar depósitos", - "BEING_CANCELLED": "Cancelamento em progresso", - "CANCELLED": "Contrato cancelado", - "IGNORED_CANCEL": "Ignorou uma proposta de cancelamento", - "EXPIRED": "Proposta de contrato expirou" - }, - "BUYER": { - "WAITING": "À espera de resposta", - "IGNORED": "O Vendedor ignorou a sua proposta de contrato", - "ACCEPTED": "O Vendedor aceitou a sua proposta de contrato", - "WAIT": "À espera de confirmação de depósitos", - "WAITING_SELLER": "À espera de entrega", - "COMPLETED": "Contrato completado", - "NOT_RECEIVED": "Entrega falhada", - "NULLIFIED": "Todos os depósitos queimados", - "WAITING_CANCEL": "À espera de cancelamento de contrato", - "BEING_CANCELLED": "Cancelamento em progresso", - "CANCELLED": "Contrato cancelado", - "IGNORED_CANCEL": "O vendedor ignorou a sua proposta para cancelar o contrato", - "EXPIRED": "A proposta de contrato expirou" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Descrição", - "SELLER": "Vendedor", - "AMOUNT": "Montante", - "YOUR_DEPOSIT": "O seu depósito", - "SELLER_DEPOSIT": "Depósito do vendedor", - "BUYER_DEPOSIT": "Depósito do comprador", - "SAME_AMOUNT": "Mesmo montante", - "COMMENT": "Comentário", - "DETAILS": "Detalhes adicionais", - "SEND_BUTTON": "Enviar", - "FORM_ERRORS": { - "DESC_REQUIRED": "Descrição necessária", - "DESC_MAXIMUM": "Atingido comprimento máximo do campo", - "SELLER_REQUIRED": "Endereço necessário", - "SELLER_NOT_VALID": "Endereço inválido", - "ALIAS_NOT_VALID": "Alias inválido", - "AMOUNT_REQUIRED": "Montante necessário", - "AMOUNT_ZERO": "Montante não pode ser zero", - "YOUR_DEPOSIT_REQUIRED": "Depósito necessário", - "SELLER_DEPOSIT_REQUIRED": "Necessário depósito de vendedor", - "SELLER_SAME": "Usar conta separada", - "COMMENT_MAXIMUM": "Atingido comprimento máximo do campo" - }, - "PROGRESS_NEW": "Nova compra", - "PROGRESS_WAIT": "À espera de resposta", - "PROGRESS_RECEIVE": "Resposta recebida", - "PROGRESS_COMPLETE": "Completado", - "FEE": "Taxa", - "PAYMENT": "ID de Pagamento", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "Nova compra", - "WAITING_SELLER": "À espera de resposta", - "WAITING_BUYER": "Proposta de contrato recebida", - "WAITING_CONFIRMATION": "À espera de confirmação de depósitos", - "WAITING_DELIVERY": "À espera de entrega", - "COMPLETED": "Contrato completado", - "IGNORED_BUYER": "Proposta de contrato ignorada", - "IGNORED_SELLER": "O vendedor ignorou a sua proposta de contrato", - "PROPOSAL_CANCEL_SELLER": "Pedido de cancelamento enviado", - "PROPOSAL_CANCEL_BUYER": "Pedido de cancelamento recebido", - "BEING_CANCELLED": "Cancelamento em progresso", - "IGNORED_CANCEL_SELLER": "O vendedor ignorou a sua proposta para cancelar o contrato", - "IGNORED_CANCEL_BUYER": "Proposta de cancelamento de contrato ignorada", - "CANCELLED": "Contrato cancelado", - "EXPIRED": "Proposta de contrato expirada", - "NOT_RECEIVED": "Entrega falhada", - "NULLIFIED": "Todos os depósitos queimados" - }, - "ACCEPT_STATE_WAIT_BIG": "Contrato iniciado", - "IGNORED_ACCEPT": "Proposta de contrato ignorada", - "BURN_PROPOSAL": "Depósitos queimados", - "SUCCESS_FINISH_PROPOSAL": "Contrato completado", - "SEND_CANCEL_PROPOSAL": "Pedido de cancelamento enviado", - "IGNORED_CANCEL": "Proposta de cancelamento de contrato ignorada", - "DEALS_CANCELED_WAIT": "Cancelamento em progresso", - "WAITING_TIME": "Tempo de resposta", - "NEED_MONEY": "Fundos insuficientes", - "BUTTON_MAKE_PLEDGE": "Aceitar e fazer depósito", - "BUTTON_IGNORE": "Ignorar e ocultar oferta", - "BUTTON_NULLIFY": "Terminar e queimar depósitos", - "BUTTON_RECEIVED": "Completar e libertar depósitos", - "BUTTON_CANCEL_BUYER": "Cancelar e retornar depósitos", - "BUTTON_NOT_CANCEL": "Ignorar pedido", - "BUTTON_CANCEL_SELLER": "Confirmar e retornar depósitos", - "HOUR": "hora", - "HOURS": "horas", - "CANCEL": "Cancelar", - "NULLIFY_QUESTION": "Tem a certeza que quer queimar ambos os depósitos?", - "BUTTON_NULLIFY_SHORT": "Queimar", - "WAITING_TIME_QUESTION": "Tem a certeza que quer cancelar o contrato?" - }, - "MESSAGES": { - "ADDRESS": "Endereço", - "MESSAGE": "Mensagem", - "SEND_PLACEHOLDER": "Escreva uma mensagem...", - "SEND_BUTTON": "Enviar" - }, - "MODALS": { - "ERROR": "Erro", - "SUCCESS": "Sucesso", - "INFO": "Informação", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Enviar", - "BUTTON_CANCEL": "Cancelar", - "TITLE": "Confirmar transação", - "MESSAGE": { - "SEND": "Enviar", - "FROM": "De", - "TO": "Para", - "COMMENT": "Comentário" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pendente", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Período de tempo:", - "PERIOD": { - "WEEK1": "1 semana", - "WEEK2": "2 semanas", - "MONTH1": "1 mês", - "MONTH3": "3 meses", - "MONTH6": "6 meses", - "YEAR": "1 ano", - "ALL": "Todo" - }, - "TITLE_GROUP": "Grupo:", - "GROUP": { - "DAY": "dia", - "WEEK": "semana", - "MONTH": "mês" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Lista de Contactos", - "IMPORT_EXPORT": "Importar ou exportar contactos", - "IMPORT": "Importar", - "EXPORT": "Exportar", - "ADD": "Adicionar/editar contacto", - "SEND": "Enviar", - "SEND_FROM": "Enviar de", - "SEND_TO": "Para", - "OPEN_ADD_WALLET": "Abrir/Adicionar carteira", - "COPY": "- Copiar", - "TABLE": { - "NAME": "Nome", - "ALIAS": "Alias", - "ADDRESS": "Endereço", - "NOTES": "Notas", - "EMPTY": "Lista de contactos está vazia" - }, - "FORM": { - "NAME": "Nome", - "ADDRESS": "Endereço", - "NOTES": "Notas" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Nome é necessário", - "NAME_DUBLICATED": "Nome está duplicado", - "ADDRESS_REQUIRED": "Endereço é necessário", - "ADDRESS_NOT_VALID": "Endereço inválido", - "SET_MASTER_PASSWORD": "Definir password mestra", - "ADDRESS_DUBLICATED": "Endereço está duplicado", - "MAX_LENGTH": "Atingido comprimento máximo das Notas", - "NAME_LENGTH": "O alias deve ter entre 4 e 25 caracteres" - }, - "BUTTON": { - "SEND": "Enviar", - "EDIT": "Editar", - "DELETE": "Eliminar", - "ADD": "Adicionar contacto", - "ADD_EDIT": "Adicionar/Guardar", - "GO_TO_WALLET": "Ir para carteira", - "IMPORT_EXPORT": "Importar/exportar" - }, - "SUCCESS_SENT": "Contacto adicionado", - "SUCCESS_SAVE": "Contacto editado", - "SUCCESS_IMPORT": "Contactos importados", - "SUCCESS_EXPORT": "Contactos exportados", - "ERROR_IMPORT": "Erro ocorrido na leitura de ficheiro!", - "ERROR_TYPE_FILE": "Por favor importe um ficheiro .csv válido", - "ERROR_EXPORT": "Tipo de ficheiro inválido. Guarde ficheiro como .csv", - "ERROR_EMPTY_LIST": "Lista de contactos está vazia", - "ERROR_IMPORT_EMPTY": "Ficheiro está vazio" - }, - "ERRORS": { - "NO_MONEY": "Sem dinheiro suficiente", - "NOT_ENOUGH_MONEY": "Fundos insuficientes na conta", - "CORE_BUSY": "Erro interno: core está ocupado", - "DAEMON_BUSY": "Erro interno: daemon está ocupado", - "NO_MONEY_REMOVE_OFFER": "Não há taxa para excluir uma oferta, mas para proteger a rede contra transações de inundação, é preciso ter pelo menos {{fee}} {{currency}} na sua carteira", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "O número de mixagem é muito grande para o estado atual da blockchain. Não há saídas não gastas suficientes para misturar", - "TRANSACTION_IS_TO_BIG": "Transação excede o limite de rede, envie quantidade necessária com várias transações", - "TRANSFER_ATTEMPT": "Sem conexão à rede Zano", - "ACCESS_DENIED": "Acesso negado", - "TRANSACTION_ERROR": "Erro. Transação não completada.", - "BAD_ARG": "Argumento inválido", - "WALLET_WRONG_ID": "ID de carteira inválido", - "WRONG_PASSWORD": "Password inválida", - "FILE_RESTORED": "O ficheiro de carteira estava corrompido. Recuperámos as chaves e a carteira a partir da blockchain", - "FILE_NOT_FOUND": "Ficheiro não encontrado", - "FILE_EXIST": "Já existe um ficheiro com esse nome. Insira outro nome para gravar o ficheiro sob", - "FILE_NOT_SAVED": "Não pode gravar um ficheiro de carteira nesta pasta. Por favor escolha outra pasta.", - "TX_TYPE_NORMAL": "Erro. O pagamento da carteira", - "TX_TYPE_NORMAL_TO": "para", - "TX_TYPE_NORMAL_END": "não foi completado.", - "TX_TYPE_NEW_ALIAS": "Erro. Falha ao registar alias para seguro", - "TX_TYPE_NEW_ALIAS_END": "Por favor tente novamente.", - "TX_TYPE_UPDATE_ALIAS": "Erro. Falha ao mudar comentário a um alias seguro", - "TX_TYPE_COIN_BASE": "Erro. Pagamento não foi completado." - }, - "CONTEXT_MENU": { - "COPY": "copiar", - "PASTE": "colar", - "SELECT": "selecionar tudo" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Sair", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Pagamento recebido (não confirmado)", - "INCOME_TRANSFER_CONFIRMED": "Pagamento recebido", - "MINED": "Minerado", - "LOCKED": "Bloqueado", - "IS_MINIMIZE": "Aplicação Zano foi minimizada na bandeja do sistema", - "RESTORE": "Pode recuperá-lo ao clicar ou usar o menu de contexto", - "TRAY_MENU_SHOW": "Redimensionar", - "TRAY_MENU_MINIMIZE": "Minimizar" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ro.json b/src/gui/qt-daemon/html/assets/i18n/ro.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ro.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/ru.json b/src/gui/qt-daemon/html/assets/i18n/ru.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/ru.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/sr.json b/src/gui/qt-daemon/html/assets/i18n/sr.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/sr.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/sv.json b/src/gui/qt-daemon/html/assets/i18n/sv.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/sv.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/tr.json b/src/gui/qt-daemon/html/assets/i18n/tr.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/tr.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/uk.json b/src/gui/qt-daemon/html/assets/i18n/uk.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/uk.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/vi.json b/src/gui/qt-daemon/html/assets/i18n/vi.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/vi.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/i18n/zh.json b/src/gui/qt-daemon/html/assets/i18n/zh.json deleted file mode 100644 index 59e88fa0..00000000 --- a/src/gui/qt-daemon/html/assets/i18n/zh.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "LOGIN": { - "SETUP_MASTER_PASS": "Setup master password", - "SETUP_CONFIRM_PASS": "Confirm the password", - "MASTER_PASS": "Master password", - "BUTTON_NEXT": "Next", - "BUTTON_SKIP": "Skip", - "BUTTON_RESET": "Reset", - "INCORRECT_PASSWORD": "Invalid password", - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "CONFIRM_REQUIRED": "Confirmation is required", - "MISMATCH": "Mismatch" - } - }, - "COMMON": { - "BACK": "Go back" - }, - "BREADCRUMBS": { - "ADD_WALLET": "Add wallet", - "CREATE_WALLET": "Create new wallet", - "SAVE_PHRASE": "Save your seed phrase", - "OPEN_WALLET": "Open existing wallet", - "RESTORE_WALLET": "Restore from backup", - "WALLET_DETAILS": "Wallet details", - "ASSIGN_ALIAS": "Assign alias", - "EDIT_ALIAS": "Edit alias", - "TRANSFER_ALIAS": "Transfer alias", - "CONTRACTS": "Contracts", - "NEW_PURCHASE": "New purchase", - "OLD_PURCHASE": "Purchase" - }, - "SIDEBAR": { - "TITLE": "Wallets", - "ADD_NEW": "+ Add", - "ACCOUNT": { - "STAKING": "Staking", - "MESSAGES": "New offers/Messages", - "SYNCING": "Syncing wallet" - }, - "CONTACTS": "Contacts", - "SETTINGS": "Settings", - "LOG_OUT": "Log out", - "SYNCHRONIZATION": { - "OFFLINE": "Offline", - "ONLINE": "Online", - "ERROR": "System error", - "COMPLETE": "Completion", - "SYNCING": "Syncing blockchain", - "LOADING": "Loading blockchain data" - }, - "UPDATE": { - "STANDARD": "Update available", - "STANDARD_TOOLTIP": "Get new update.
      Update is recommended!", - "IMPORTANT": "Update available", - "IMPORTANT_HINT": "Important update!", - "IMPORTANT_TOOLTIP": "Get new update.
      Important update!", - "CRITICAL": "Update available", - "CRITICAL_HINT": "Critical update!", - "CRITICAL_TOOLTIP": "Critical update available.Update strongly recommended!", - "TIME": "System time differs from network", - "TIME_TOOLTIP": "Wrong system time!
      Check and repair your system time." - } - }, - "MAIN": { - "TITLE": "Create or open the wallet to start using Zano", - "BUTTON_NEW_WALLET": "Create new wallet", - "BUTTON_OPEN_WALLET": "Open existing wallet", - "BUTTON_RESTORE_BACKUP": "Restore from backup", - "HELP": "How to create wallet?", - "CHOOSE_PATH": "Please choose a path" - }, - "CREATE_WALLET": { - "NAME": "Wallet name", - "PASS": "Set wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "TITLE_SAVE": "Save the wallet file.", - "ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten", - "ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match" - } - }, - "OPEN_WALLET": { - "NAME": "Wallet name", - "PASS": "Wallet password", - "BUTTON": "Open wallet", - "WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open", - "FILE_NOT_FOUND1": "Wallet file not found", - "FILE_NOT_FOUND2": "

      It might have been renamed or moved.
      To open it, use the \"Open wallet\" button.", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - }, - "MODAL": { - "TITLE": "Type wallet password", - "LABEL": "Password to this wallet", - "OPEN": "Open wallet", - "SKIP": "Skip", - "NOT_FOUND": "Not found" - } - }, - "RESTORE_WALLET": { - "LABEL_NAME": "Wallet name", - "LABEL_PHRASE_KEY": "Seed phrase / tracking seed", - "PASS": "Wallet password", - "CONFIRM": "Confirm wallet password", - "BUTTON_SELECT": "Select wallet location", - "BUTTON_CREATE": "Create wallet", - "NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match", - "CHOOSE_PATH": "Please choose a path", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached", - "CONFIRM_NOT_MATCH": "Confirm password not match", - "KEY_REQUIRED": "Key is required", - "KEY_NOT_VALID": "Key not valid" - } - }, - "SEED_PHRASE": { - "TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.", - "BUTTON_CREATE_ACCOUNT": "Create wallet", - "BUTTON_COPY": "Copy" - }, - "PROGRESS": { - "ADD_WALLET": "Add wallet", - "SELECT_LOCATION": "Select wallet location", - "CREATE_WALLET": "Create new wallet", - "RESTORE_WALLET": "Restore from backup" - }, - "SETTINGS": { - "TITLE": "Settings", - "DARK_THEME": "Dark theme", - "WHITE_THEME": "White theme", - "GRAY_THEME": "Grey theme", - "APP_LOCK": { - "TITLE": "Lock app after:", - "TIME1": "5 min", - "TIME2": "15 min", - "TIME3": "1 hour", - "TIME4": "Never" - }, - "SCALE": { - "75": "75% scale", - "100": "100% scale", - "125": "125% scale", - "150": "150% scale" - }, - "MASTER_PASSWORD": { - "TITLE": "Update master password", - "OLD": "Old password", - "NEW": "New password", - "CONFIRM": "New password confirmation", - "BUTTON": "Save" - }, - "FORM_ERRORS": { - "PASS_REQUIRED": "Password is required", - "PASS_NOT_MATCH": "Old password not match", - "CONFIRM_NOT_MATCH": "Confirm password not match" - }, - "LAST_BUILD": "Current build: {{value}}", - "APP_LOG_TITLE": "Log level:" - }, - "WALLET": { - "REGISTER_ALIAS": "Register an alias", - "DETAILS": "Details", - "LOCK": "Lock", - "AVAILABLE_BALANCE": "Available {{available}} {{currency}}", - "LOCKED_BALANCE": "Locked {{locked}} {{currency}}", - "LOCKED_BALANCE_LINK": "What does that mean?", - "TABS": { - "SEND": "Send", - "RECEIVE": "Receive", - "HISTORY": "History", - "CONTRACTS": "Contracts", - "MESSAGES": "Messages", - "STAKING": "Staking" - } - }, - "WALLET_DETAILS": { - "LABEL_NAME": "Wallet name", - "LABEL_FILE_LOCATION": "Wallet file location", - "LABEL_SEED_PHRASE": "Seed phrase", - "SEED_PHRASE_HINT": "Click to reveal the seed phrase", - "BUTTON_SAVE": "Save", - "BUTTON_REMOVE": "Close wallet", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUPLICATE": "Name is duplicate", - "MAX_LENGTH": "Maximum name length reached" - } - }, - "ASSIGN_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": " Enter alias", - "TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”." - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "", - "TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later." - }, - "COST": "Alias fee {{value}} {{currency}}", - "BUTTON_ASSIGN": "Assign", - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"", - "NAME_LENGTH": "The alias must be 6-25 characters long", - "NAME_EXISTS": "Alias name already exists", - "NO_MONEY": "You do not have enough funds to assign this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "ONE_ALIAS": "You can create only one alias per wallet", - "REQUEST_ADD_REG": "The alias will be assigned within 10 minutes" - }, - "EDIT_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "NO_MONEY": "You do not have enough funds to change the comment to this alias", - "MAX_LENGTH": "Maximum comment length reached" - }, - "COST": "Fee {{value}} {{currency}}", - "BUTTON_EDIT": "Edit" - }, - "TRANSFER_ALIAS": { - "NAME": { - "LABEL": "Alias", - "PLACEHOLDER": "@ Enter alias" - }, - "COMMENT": { - "LABEL": "Comment", - "PLACEHOLDER": "" - }, - "ADDRESS": { - "LABEL": "Transfer to", - "PLACEHOLDER": "" - }, - "FORM_ERRORS": { - "WRONG_ADDRESS": "No wallet with this account exists", - "ALIAS_EXISTS": "This account already has an alias", - "NO_MONEY": "You do not have enough funds to transfer this alias" - }, - "COST": "Transfer fee {{value}} {{currency}}", - "BUTTON_TRANSFER": "Transfer", - "BUTTON_CANCEL": "Cancel", - "REQUEST_SEND_REG": "The alias will be transferred within 10 minutes" - }, - "SEND": { - "ADDRESS": "Address", - "AMOUNT": "Amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "MIXIN": "Mixin", - "FEE": "Fee", - "HIDE": "Hide your wallet address from recipient", - "BUTTON": "Send", - "SUCCESS_SENT": "Transaction sent", - "FORM_ERRORS": { - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "ALIAS_NOT_VALID": "Alias not valid", - "AMOUNT_REQUIRED": "Amount is required", - "AMOUNT_ZERO": "Amount is zero", - "FEE_REQUIRED": "Fee is required", - "FEE_MINIMUM": "Minimum fee: {{fee}}", - "MAX_LENGTH": "Maximum comment length reached" - } - }, - "HISTORY": { - "STATUS": "Status", - "STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}", - "LOCK_TOOLTIP": "Locked till {{date}}", - "SEND": "Sent", - "RECEIVED": "Received", - "DATE": "Date", - "AMOUNT": "Amount", - "FEE": "Fee", - "ADDRESS": "Address", - "DETAILS": { - "PAYMENT_ID": "Payment ID", - "ID": "Transaction ID", - "SIZE": "Transaction size", - "SIZE_VALUE": "{{value}} bytes", - "HEIGHT": "Height", - "CONFIRMATION": "Confirmation", - "INPUTS": "Inputs", - "OUTPUTS": "Outputs", - "COMMENT": "Comment" - }, - "TYPE_MESSAGES": { - "HIDDEN": "hidden", - "UNDEFINED": "Undefined", - "COMPLETE_BUYER": "Contract completed", - "COMPLETE_SELLER": "Contract completed", - "CREATE_ALIAS": "Fee for assigning alias", - "UPDATE_ALIAS": "Fee for editing alias", - "POW_REWARD": "POW reward", - "POS_REWARD": "POS reward", - "CREATE_CONTRACT": "Contract proposal", - "PLEDGE_CONTRACT": "Contract deposit", - "NULLIFY_CONTRACT": "Burn deposits", - "PROPOSAL_CANCEL_CONTRACT": "Cancellation request", - "CANCEL_CONTRACT": "Cancel and return deposits" - } - }, - "CONTRACTS": { - "EMPTY": "No active contracts", - "CONTRACTS": "Contracts", - "PURCHASE": "Purchase", - "SELL": "Sell", - "DATE": "Date", - "AMOUNT": "Amount", - "STATUS": "Status", - "COMMENTS": "Comments", - "PURCHASE_BUTTON": "New Purchase", - "LISTING_BUTTON": "Create listing", - "TIME_LEFT": { - "REMAINING_LESS_ONE": "Less than an hour to respond", - "REMAINING_ONE": "{{time}} hour remains", - "REMAINING_MANY": "{{time}} hours remain", - "REMAINING_MANY_ALT": "{{time}} hours remain", - "REMAINING_ONE_RESPONSE": "{{time}} hour remains", - "REMAINING_MANY_RESPONSE": "{{time}} hours remain", - "REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain", - "REMAINING_ONE_WAITING": "Waiting for {{time}} hour", - "REMAINING_MANY_WAITING": "Waiting for {{time}} hours", - "REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours" - }, - "STATUS_MESSAGES": { - "SELLER": { - "NEW_CONTRACT": "New contract proposal", - "IGNORED": "You ignored contract proposal", - "ACCEPTED": "Contract started", - "WAIT": "Waiting for contract confirmation", - "WAITING_BUYER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "You ignored cancellation proposal", - "EXPIRED": "Contract proposal has expired" - }, - "BUYER": { - "WAITING": "Waiting for response", - "IGNORED": "Seller ignored your contract proposal", - "ACCEPTED": "Seller accepted your contract proposal", - "WAIT": "Waiting for deposits confirmation", - "WAITING_SELLER": "Waiting for delivery", - "COMPLETED": "Contract completed", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned", - "WAITING_CANCEL": "Waiting for contract cancellation", - "BEING_CANCELLED": "Cancellation in progress", - "CANCELLED": "Contract canceled", - "IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract", - "EXPIRED": "The contract proposal has expired" - } - } - }, - "PURCHASE": { - "DESCRIPTION": "Description", - "SELLER": "Seller", - "AMOUNT": "Amount", - "YOUR_DEPOSIT": "Your deposit", - "SELLER_DEPOSIT": "Seller deposit", - "BUYER_DEPOSIT": "Buyer deposit", - "SAME_AMOUNT": "Same amount", - "COMMENT": "Comment", - "DETAILS": "Additional details", - "SEND_BUTTON": "Send", - "FORM_ERRORS": { - "DESC_REQUIRED": "Description required", - "DESC_MAXIMUM": "Maximum field length reached", - "SELLER_REQUIRED": "Address required", - "SELLER_NOT_VALID": "Invalid address", - "ALIAS_NOT_VALID": "Invalid alias", - "AMOUNT_REQUIRED": "Amount required", - "AMOUNT_ZERO": "Amount cannot be zero", - "YOUR_DEPOSIT_REQUIRED": "Deposit required", - "SELLER_DEPOSIT_REQUIRED": "Seller deposit required", - "SELLER_SAME": "Use separate account", - "COMMENT_MAXIMUM": "Maximum field length reached" - }, - "PROGRESS_NEW": "New purchase", - "PROGRESS_WAIT": "Awaiting reply", - "PROGRESS_RECEIVE": "Reply received", - "PROGRESS_COMPLETE": "Completed", - "FEE": "Fee", - "PAYMENT": "Payment ID", - "STATUS_MESSAGES": { - "NEW_PURCHASE": "New purchase", - "WAITING_SELLER": "Waiting for response", - "WAITING_BUYER": "Contract proposal received", - "WAITING_CONFIRMATION": "Waiting for deposits confirmation", - "WAITING_DELIVERY": "Waiting for delivery", - "COMPLETED": "Contract completed", - "IGNORED_BUYER": "Contract proposal ignored", - "IGNORED_SELLER": "The seller ignored your contract proposal", - "PROPOSAL_CANCEL_SELLER": "Cancellation request sent", - "PROPOSAL_CANCEL_BUYER": "Cancellation request received", - "BEING_CANCELLED": "Cancellation in progress", - "IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract", - "IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored", - "CANCELLED": "Contract canceled", - "EXPIRED": "Contract proposal expired", - "NOT_RECEIVED": "Delivery failed", - "NULLIFIED": "All deposits burned" - }, - "ACCEPT_STATE_WAIT_BIG": "Contract started", - "IGNORED_ACCEPT": "Contract proposal ignored", - "BURN_PROPOSAL": "Deposits burned", - "SUCCESS_FINISH_PROPOSAL": "Contract completed", - "SEND_CANCEL_PROPOSAL": "Cancellation request sent", - "IGNORED_CANCEL": "Contract cancellation proposal ignored", - "DEALS_CANCELED_WAIT": "Cancellation in progress", - "WAITING_TIME": "Response time", - "NEED_MONEY": "Insufficient funds", - "BUTTON_MAKE_PLEDGE": "Accept and make deposit", - "BUTTON_IGNORE": "Ignore and hide offer", - "BUTTON_NULLIFY": "Terminate and burn deposits", - "BUTTON_RECEIVED": "Complete and release deposits", - "BUTTON_CANCEL_BUYER": "Cancel and return deposits", - "BUTTON_NOT_CANCEL": "Ignore request", - "BUTTON_CANCEL_SELLER": "Confirm and return deposits", - "HOUR": "hour", - "HOURS": "hours", - "CANCEL": "Cancel", - "NULLIFY_QUESTION": "Are you sure you want to burn both deposits?", - "BUTTON_NULLIFY_SHORT": "Burn", - "WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?" - }, - "MESSAGES": { - "ADDRESS": "Address", - "MESSAGE": "Message", - "SEND_PLACEHOLDER": "Type a message...", - "SEND_BUTTON": "Send" - }, - "MODALS": { - "ERROR": "Error", - "SUCCESS": "Success", - "INFO": "Information", - "OK": "OK" - }, - "CONFIRM": { - "BUTTON_CONFIRM": "Send", - "BUTTON_CANCEL": "Cancel", - "TITLE": "Confirm transaction", - "MESSAGE": { - "SEND": "Send", - "FROM": "From", - "TO": "To", - "COMMENT": "Comment" - } - }, - "STAKING": { - "TITLE": "Staking", - "TITLE_PENDING": "Pending", - "TITLE_TOTAL": "Total", - "TITLE_PERIOD": "Time period:", - "PERIOD": { - "WEEK1": "1 week", - "WEEK2": "2 week", - "MONTH1": "1 month", - "MONTH3": "3 month", - "MONTH6": "6 month", - "YEAR": "1 year", - "ALL": "All" - }, - "TITLE_GROUP": "Group:", - "GROUP": { - "DAY": "day", - "WEEK": "week", - "MONTH": "month" - }, - "SWITCH": { - "ON": "ON", - "OFF": "OFF" - } - }, - "CONTACTS": { - "TITLE": "Contact list", - "IMPORT_EXPORT": "Import or export contacts", - "IMPORT": "Import", - "EXPORT": "Export", - "ADD": "Add/edit contact", - "SEND": "Send", - "SEND_FROM": "Send from", - "SEND_TO": "To", - "OPEN_ADD_WALLET": "Open/Add wallet", - "COPY": "- Copy", - "TABLE": { - "NAME": "Name", - "ALIAS": "Alias", - "ADDRESS": "Address", - "NOTES": "Notes", - "EMPTY": "Contact list is empty" - }, - "FORM": { - "NAME": "Name", - "ADDRESS": "Address", - "NOTES": "Notes" - }, - "FORM_ERRORS": { - "NAME_REQUIRED": "Name is required", - "NAME_DUBLICATED": "Name is dublicated", - "ADDRESS_REQUIRED": "Address is required", - "ADDRESS_NOT_VALID": "Address not valid", - "SET_MASTER_PASSWORD": "Set master password", - "ADDRESS_DUBLICATED": "Address is dublicated", - "MAX_LENGTH": "Maximum notes length reached", - "NAME_LENGTH": "The name must be 4-25 characters long" - }, - "BUTTON": { - "SEND": "Send", - "EDIT": "Edit", - "DELETE": "Delete", - "ADD": "Add contact", - "ADD_EDIT": "Add/Save", - "GO_TO_WALLET": "Go to wallet", - "IMPORT_EXPORT": "Import/export" - }, - "SUCCESS_SENT": "Contact added", - "SUCCESS_SAVE": "Contact is edited", - "SUCCESS_IMPORT": "Contacts are imported", - "SUCCESS_EXPORT": "Contacts are exported", - "ERROR_IMPORT": "Error is occured while reading file!", - "ERROR_TYPE_FILE": "Please import valid .csv file", - "ERROR_EXPORT": "Invalid file type. Save file as .csv", - "ERROR_EMPTY_LIST": "Contact list is empty", - "ERROR_IMPORT_EMPTY": "File is empty" - }, - "ERRORS": { - "NO_MONEY": "Not enough money", - "NOT_ENOUGH_MONEY": "Insufficient funds in account", - "CORE_BUSY": "Internal error: core is busy", - "DAEMON_BUSY": "Internal error: daemon is busy", - "NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet", - "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with", - "TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions", - "TRANSFER_ATTEMPT": "There is no connection to Zano network", - "ACCESS_DENIED": "Access denied", - "TRANSACTION_ERROR": "Error. Transaction not completed.", - "BAD_ARG": "Invalid argument", - "WALLET_WRONG_ID": "Invalid wallet ID", - "WRONG_PASSWORD": "Invalid password", - "FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain", - "FILE_NOT_FOUND": "File not found", - "FILE_EXIST": "A file with that name already exists. Enter another name to save the file under", - "FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.", - "TX_TYPE_NORMAL": "Error. The payment from the wallet", - "TX_TYPE_NORMAL_TO": "to", - "TX_TYPE_NORMAL_END": "was not completed.", - "TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe", - "TX_TYPE_NEW_ALIAS_END": "Please try again.", - "TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe", - "TX_TYPE_COIN_BASE": "Error. The payment was not completed." - }, - "CONTEXT_MENU": { - "COPY": "copy", - "PASTE": "paste", - "SELECT": "select all" - }, - "BACKEND_LOCALIZATION": { - "QUIT": "Quit", - "IS_RECEIVED": "", - "IS_CONFIRMED": "", - "INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)", - "INCOME_TRANSFER_CONFIRMED": "Payment received", - "MINED": "Mined", - "LOCKED": "Blocked", - "IS_MINIMIZE": "Zano application is minimized to the system tray", - "RESTORE": "You can recover it by clicking or using the context menu", - "TRAY_MENU_SHOW": "Resize", - "TRAY_MENU_MINIMIZE": "Minimize" - } -} diff --git a/src/gui/qt-daemon/html/assets/icons/account.svg b/src/gui/qt-daemon/html/assets/icons/account.svg deleted file mode 100644 index b7b746fa..00000000 --- a/src/gui/qt-daemon/html/assets/icons/account.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/addnew.svg b/src/gui/qt-daemon/html/assets/icons/addnew.svg deleted file mode 100644 index 89bc1ca5..00000000 --- a/src/gui/qt-daemon/html/assets/icons/addnew.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/alert.svg b/src/gui/qt-daemon/html/assets/icons/alert.svg deleted file mode 100644 index b549fd95..00000000 --- a/src/gui/qt-daemon/html/assets/icons/alert.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/arrow-down.svg b/src/gui/qt-daemon/html/assets/icons/arrow-down.svg deleted file mode 100644 index d24a3aeb..00000000 --- a/src/gui/qt-daemon/html/assets/icons/arrow-down.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/arrow-right.svg b/src/gui/qt-daemon/html/assets/icons/arrow-right.svg deleted file mode 100644 index bd4269b3..00000000 --- a/src/gui/qt-daemon/html/assets/icons/arrow-right.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/arrow-up.svg b/src/gui/qt-daemon/html/assets/icons/arrow-up.svg deleted file mode 100644 index f6515fdd..00000000 --- a/src/gui/qt-daemon/html/assets/icons/arrow-up.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/back.svg b/src/gui/qt-daemon/html/assets/icons/back.svg deleted file mode 100644 index 0b00a610..00000000 --- a/src/gui/qt-daemon/html/assets/icons/back.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/close-wallet-blue.svg b/src/gui/qt-daemon/html/assets/icons/close-wallet-blue.svg deleted file mode 100644 index 080f7521..00000000 --- a/src/gui/qt-daemon/html/assets/icons/close-wallet-blue.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/close-wallet.svg b/src/gui/qt-daemon/html/assets/icons/close-wallet.svg deleted file mode 100644 index 8a9ba99e..00000000 --- a/src/gui/qt-daemon/html/assets/icons/close-wallet.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/close.svg b/src/gui/qt-daemon/html/assets/icons/close.svg deleted file mode 100644 index d39bed6d..00000000 --- a/src/gui/qt-daemon/html/assets/icons/close.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/complete-testwallet.svg b/src/gui/qt-daemon/html/assets/icons/complete-testwallet.svg deleted file mode 100644 index b5d04868..00000000 --- a/src/gui/qt-daemon/html/assets/icons/complete-testwallet.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/contacts.svg b/src/gui/qt-daemon/html/assets/icons/contacts.svg deleted file mode 100644 index e05516ae..00000000 --- a/src/gui/qt-daemon/html/assets/icons/contacts.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/contracts.svg b/src/gui/qt-daemon/html/assets/icons/contracts.svg deleted file mode 100644 index aa985ac7..00000000 --- a/src/gui/qt-daemon/html/assets/icons/contracts.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/copy.svg b/src/gui/qt-daemon/html/assets/icons/copy.svg deleted file mode 100644 index 4ec2ff7d..00000000 --- a/src/gui/qt-daemon/html/assets/icons/copy.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/delete.svg b/src/gui/qt-daemon/html/assets/icons/delete.svg deleted file mode 100644 index a057a1dc..00000000 --- a/src/gui/qt-daemon/html/assets/icons/delete.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/details-settings.svg b/src/gui/qt-daemon/html/assets/icons/details-settings.svg deleted file mode 100644 index 11803ccf..00000000 --- a/src/gui/qt-daemon/html/assets/icons/details-settings.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/details.svg b/src/gui/qt-daemon/html/assets/icons/details.svg deleted file mode 100644 index eb12cde2..00000000 --- a/src/gui/qt-daemon/html/assets/icons/details.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/edit.svg b/src/gui/qt-daemon/html/assets/icons/edit.svg deleted file mode 100644 index eb12cde2..00000000 --- a/src/gui/qt-daemon/html/assets/icons/edit.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/history.svg b/src/gui/qt-daemon/html/assets/icons/history.svg deleted file mode 100644 index c9945561..00000000 --- a/src/gui/qt-daemon/html/assets/icons/history.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/howto.svg b/src/gui/qt-daemon/html/assets/icons/howto.svg deleted file mode 100644 index 92362f78..00000000 --- a/src/gui/qt-daemon/html/assets/icons/howto.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/icons.json b/src/gui/qt-daemon/html/assets/icons/icons.json deleted file mode 100644 index 1ec5de9c..00000000 --- a/src/gui/qt-daemon/html/assets/icons/icons.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "logo": "", - "contacts": "", - "settings": "", - "exit": "", - "history": "", - "send": "", - "receive": "", - "contracts": "", - "messages": "", - "staking": "" -} diff --git a/src/gui/qt-daemon/html/assets/icons/import-export.svg b/src/gui/qt-daemon/html/assets/icons/import-export.svg deleted file mode 100644 index 48fd7073..00000000 --- a/src/gui/qt-daemon/html/assets/icons/import-export.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/info.svg b/src/gui/qt-daemon/html/assets/icons/info.svg deleted file mode 100644 index 083cdf38..00000000 --- a/src/gui/qt-daemon/html/assets/icons/info.svg +++ /dev/null @@ -1 +0,0 @@ -info \ No newline at end of file diff --git a/src/gui/qt-daemon/html/assets/icons/lock-transaction.svg b/src/gui/qt-daemon/html/assets/icons/lock-transaction.svg deleted file mode 100644 index 49a2e523..00000000 --- a/src/gui/qt-daemon/html/assets/icons/lock-transaction.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/lock.svg b/src/gui/qt-daemon/html/assets/icons/lock.svg deleted file mode 100644 index 021aae19..00000000 --- a/src/gui/qt-daemon/html/assets/icons/lock.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/logo.svg b/src/gui/qt-daemon/html/assets/icons/logo.svg deleted file mode 100644 index f99a43f5..00000000 --- a/src/gui/qt-daemon/html/assets/icons/logo.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/logout.svg b/src/gui/qt-daemon/html/assets/icons/logout.svg deleted file mode 100644 index b2f23e62..00000000 --- a/src/gui/qt-daemon/html/assets/icons/logout.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - exit - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/message.svg b/src/gui/qt-daemon/html/assets/icons/message.svg deleted file mode 100644 index 544888cc..00000000 --- a/src/gui/qt-daemon/html/assets/icons/message.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/modal-alert.svg b/src/gui/qt-daemon/html/assets/icons/modal-alert.svg deleted file mode 100644 index bb5c7d02..00000000 --- a/src/gui/qt-daemon/html/assets/icons/modal-alert.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/modal-info.svg b/src/gui/qt-daemon/html/assets/icons/modal-info.svg deleted file mode 100644 index 0119fcc7..00000000 --- a/src/gui/qt-daemon/html/assets/icons/modal-info.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/modal-success.svg b/src/gui/qt-daemon/html/assets/icons/modal-success.svg deleted file mode 100644 index 60ad5a5d..00000000 --- a/src/gui/qt-daemon/html/assets/icons/modal-success.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/new.svg b/src/gui/qt-daemon/html/assets/icons/new.svg deleted file mode 100644 index 89622385..00000000 --- a/src/gui/qt-daemon/html/assets/icons/new.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/not-allowed.svg b/src/gui/qt-daemon/html/assets/icons/not-allowed.svg deleted file mode 100644 index 4fdfa78e..00000000 --- a/src/gui/qt-daemon/html/assets/icons/not-allowed.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/purchase.svg b/src/gui/qt-daemon/html/assets/icons/purchase.svg deleted file mode 100644 index 46e904fc..00000000 --- a/src/gui/qt-daemon/html/assets/icons/purchase.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/receive-green.svg b/src/gui/qt-daemon/html/assets/icons/receive-green.svg deleted file mode 100644 index 1db438b2..00000000 --- a/src/gui/qt-daemon/html/assets/icons/receive-green.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/receive.svg b/src/gui/qt-daemon/html/assets/icons/receive.svg deleted file mode 100644 index fd7e85a9..00000000 --- a/src/gui/qt-daemon/html/assets/icons/receive.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/safety.svg b/src/gui/qt-daemon/html/assets/icons/safety.svg deleted file mode 100644 index f313f3af..00000000 --- a/src/gui/qt-daemon/html/assets/icons/safety.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/secured.svg b/src/gui/qt-daemon/html/assets/icons/secured.svg deleted file mode 100644 index dc1d801c..00000000 --- a/src/gui/qt-daemon/html/assets/icons/secured.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/sell.svg b/src/gui/qt-daemon/html/assets/icons/sell.svg deleted file mode 100644 index f28f0a20..00000000 --- a/src/gui/qt-daemon/html/assets/icons/sell.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/send-red.svg b/src/gui/qt-daemon/html/assets/icons/send-red.svg deleted file mode 100644 index d96d08f4..00000000 --- a/src/gui/qt-daemon/html/assets/icons/send-red.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/send.svg b/src/gui/qt-daemon/html/assets/icons/send.svg deleted file mode 100644 index 0c7e6136..00000000 --- a/src/gui/qt-daemon/html/assets/icons/send.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/settings.svg b/src/gui/qt-daemon/html/assets/icons/settings.svg deleted file mode 100644 index ce87d8bc..00000000 --- a/src/gui/qt-daemon/html/assets/icons/settings.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - settings - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/staking.svg b/src/gui/qt-daemon/html/assets/icons/staking.svg deleted file mode 100644 index 2f4337f6..00000000 --- a/src/gui/qt-daemon/html/assets/icons/staking.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/time.svg b/src/gui/qt-daemon/html/assets/icons/time.svg deleted file mode 100644 index 1e3108eb..00000000 --- a/src/gui/qt-daemon/html/assets/icons/time.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/unlock-transaction.svg b/src/gui/qt-daemon/html/assets/icons/unlock-transaction.svg deleted file mode 100644 index bbbc27ad..00000000 --- a/src/gui/qt-daemon/html/assets/icons/unlock-transaction.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/unsecured.svg b/src/gui/qt-daemon/html/assets/icons/unsecured.svg deleted file mode 100644 index 1b9b18d7..00000000 --- a/src/gui/qt-daemon/html/assets/icons/unsecured.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/update-alert.svg b/src/gui/qt-daemon/html/assets/icons/update-alert.svg deleted file mode 100644 index 22fa01c7..00000000 --- a/src/gui/qt-daemon/html/assets/icons/update-alert.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/assets/icons/update.svg b/src/gui/qt-daemon/html/assets/icons/update.svg deleted file mode 100644 index c612c84e..00000000 --- a/src/gui/qt-daemon/html/assets/icons/update.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/assets/images/Loading.png b/src/gui/qt-daemon/html/assets/images/Loading.png deleted file mode 100644 index 694d23306fbcf5cb6b3ebe2ddcaf4f4f09adf8ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3245 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 diff --git a/src/gui/qt-daemon/html/assets/images/background-dark.png b/src/gui/qt-daemon/html/assets/images/background-dark.png deleted file mode 100644 index 83290ff91cdaa0ef468e11343ebf631083cd4e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34583 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

      Iz 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�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 Y0ctXS;%ku-I{*Lx07*qoM6N<$g8B^n5&!@I diff --git a/src/gui/qt-daemon/html/assets/images/qr-code.png b/src/gui/qt-daemon/html/assets/images/qr-code.png deleted file mode 100644 index 4827e3296ee47da0a24422f31987051796c7eaf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5337 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 airTyM9P6$Z!3!)|lIds|Krw2zk^cj>LtSV9 diff --git a/src/gui/qt-daemon/html/assets/scss/base/_base.scss b/src/gui/qt-daemon/html/assets/scss/base/_base.scss deleted file mode 100644 index 7bbd92aa..00000000 --- a/src/gui/qt-daemon/html/assets/scss/base/_base.scss +++ /dev/null @@ -1,1045 +0,0 @@ -.app-content { - - .preloader { - - .loading-bar { - - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - } - } -} - -button { - border: none; - font-family: OpenSans, sans-serif; - font-size: 1.5rem; - font-weight: 600; - outline: none; - padding: 0 1rem; - height: 4.2rem; - - &:disabled:not(.transparent-button), - &.blue-button_reset{ - - @include themify($themes) { - background-color: themed(disabledButtonBackgroundColor); - color: themed(alternativeTextColor); - } - - &:hover { - - @include themify($themes) { - background-color: themed(disabledButtonHoverColor); - } - } - - &:focus { - - @include themify($themes) { - background-color: themed(disabledButtonFocusColor); - } - } - } - - &.blue-button:not(:disabled) { - - @include themify($themes) { - background-color: themed(blueButtonBackgroundColor); - color: themed(alternativeTextColor); - } - - &:hover { - - @include themify($themes) { - background-color: themed(blueButtonHoverColor); - } - } - - &:focus { - - @include themify($themes) { - background-color: themed(blueButtonFocusColor); - } - } - } - - &.green-button:not(:disabled) { - - @include themify($themes) { - background-color: themed(greenButtonBackgroundColor); - color: themed(alternativeTextColor); - } - - &:hover { - - @include themify($themes) { - background-color: themed(greenButtonHoverColor); - } - } - - &:focus { - - @include themify($themes) { - background-color: themed(greenButtonFocusColor); - } - } - } - - &.turquoise-button:not(:disabled) { - - @include themify($themes) { - background-color: themed(turquoiseButtonBackgroundColor); - color: themed(alternativeTextColor); - } - - &:hover { - - @include themify($themes) { - background-color: themed(turquoiseButtonHoverColor); - } - } - - &:focus { - - @include themify($themes) { - background-color: themed(turquoiseButtonFocusColor); - } - } - } - - &.transparent-button { - display: flex; - align-items: center; - justify-content: center; - - @include themify($themes) { - background-color: transparent; - border: 0.2rem solid themed(transparentButtonBorderColor); - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(mainTextColor); - } - - margin-right: 1rem; - mask: url(~src/assets/icons/complete-testwallet.svg) no-repeat center; - width: 1.7rem; - height: 1.7rem; - } - } - -} - -.input-block { - display: flex; - flex-direction: column; - align-items: flex-start; - margin-bottom: 0.4rem; - - .wrap-label { - display: flex; - align-items: center; - justify-content: flex-start; - min-height: 2.4rem; - } - - label { - font-size: 1.3rem; - line-height: 2.4rem; - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - input[type='text'], input[type='password'], select { - border: none; - font-size: 1.4rem; - outline: none; - padding: 0 1rem; - width: 100%; - height: 4.2rem; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor); - } - } - - &.textarea { - height: auto; - - textarea { - font-family: OpenSans, sans-serif; - border: none; - font-size: 1.4rem; - outline: none; - padding: 1rem; - width: 100%; - min-width: 100%; - height: 100%; - min-height: 7.5rem; - max-height: 7.5rem; - overflow: auto; - resize: none; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor); - } - } - } - - .error-block { - font-size: 1rem; - line-height: 1.4rem; - align-self: flex-end; - text-align: right; - - @include themify($themes) { - color: themed(redTextColor); - } - } - .success-block { - font-size: 1rem; - line-height: 1.4rem; - align-self: flex-end; - text-align: right; - - @include themify($themes) { - color: themed(greenTextColor); - } - } -} - -.error-text { - @include themify($themes) { - color: themed(redTextColor); - } -} - -input[type='radio'].style-radio { - - & + label { - display: flex; - align-items: center; - cursor: pointer; - font-weight: 400; - padding-left: 2.4rem; - - @include themify($themes) { - color: themed(optionalTextColor); - } - - @include unSelect; - } - - &:not(checked) { - position: absolute; - opacity: 0; - - & + label { - position: relative; - } - - & + label:before { - content: ''; - position: absolute; - top: 0.7rem; - left: 0; - background: transparent; - border-radius: 50%; - width: 1.4rem; - height: 1.4rem; - - @include themify($themes) { - border: 0.1rem solid themed(blueTextColor); - } - } - - & + label:after { - content: ''; - position: absolute; - top: 1rem; - left: 0.3rem; - border-radius: 50%; - opacity: 0; - width: 0.8rem; - height: 0.8rem; - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - &:checked { - - & + label:after { - opacity: 1; - } - } -} - -input[type='checkbox'].style-checkbox { - - & + label { - display: flex; - align-items: center; - cursor: pointer; - font-weight: 400; - padding-left: 3.6rem; - - @include themify($themes) { - color: themed(optionalTextColor); - } - - @include unSelect; - } - - &:not(checked) { - position: absolute; - top: 50%; - left: 1.6rem; - transform: translateY(-50%); - visibility: hidden; - - & + label { - position: relative; - } - - & + label:before { - content: ''; - position: absolute; - top: 50%; - left: 1.6rem; - transform: translateY(-50%); - background: transparent; - width: 1.4rem; - height: 1.4rem; - - @include themify($themes) { - border: 0.1rem solid themed(blueTextColor); - } - } - } - - &:checked { - - & + label:before { - background: url(~src/assets/icons/complete-testwallet.svg); - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } -} - -.switch { - - @include themify($themes) { - background-color: themed(switchBackgroundColor); - } - - .circle { - - &.on { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - &.off { - - @include themify($themes) { - background-color: themed(optionalTextColor); - } - } - } -} - -.table-tooltip { - padding: 1rem 2rem; - - @include themify($themes) { - background: themed(tooltipBackgroundColor); - box-shadow: themed(tooltipShadow); - color: themed(mainTextColor); - } - - .tooltip-inner { - font-size: 1.3rem; - line-height: 1.8rem; - white-space: pre-wrap; - } - - &.ng-tooltip-top { - margin-top: -1rem; - - &:after { - content: ""; - position: absolute; - bottom: -1rem; - left: calc(50% - 0.5rem); - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: themed(tooltipBackgroundColor) transparent transparent transparent; - } - } - } - - &.ng-tooltip-top-left { - margin-top: -1rem; - - &:after { - content: ""; - position: absolute; - bottom: -1rem; - left: 0.7rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: themed(tooltipBackgroundColor) transparent transparent themed(tooltipBackgroundColor); - } - } - } - - &.ng-tooltip-top-right { - margin-top: -1rem; - - &:after { - content: ""; - position: absolute; - bottom: -1rem; - right: 0.7rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: themed(tooltipBackgroundColor) themed(tooltipBackgroundColor) transparent transparent; - } - } - } - - &.ng-tooltip-bottom { - margin-top: 1rem; - - &:before { - content: ""; - position: absolute; - top: -1rem; - left: calc(50% - 0.5rem); - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent transparent themed(tooltipBackgroundColor) transparent; - } - } - } - - &.ng-tooltip-bottom-left { - margin-top: 1rem; - - &:before { - content: ""; - position: absolute; - top: -1rem; - left: 0.7rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent transparent themed(tooltipBackgroundColor) themed(tooltipBackgroundColor); - } - } - } - - &.ng-tooltip-bottom-right { - margin-top: 1rem; - - &:before { - content: ""; - position: absolute; - top: -1rem; - right: 0.7rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent themed(tooltipBackgroundColor) themed(tooltipBackgroundColor) transparent; - } - } - } - - &.ng-tooltip-left { - margin-left: -1rem; - - &:after { - content: ""; - position: absolute; - top: calc(50% - 0.5rem); - right: -1rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent transparent transparent themed(tooltipBackgroundColor); - } - } - } - - &.ng-tooltip-right { - margin-left: 1rem; - - &:before { - content: ""; - position: absolute; - top: calc(50% - 0.5rem); - left: -1rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent themed(tooltipBackgroundColor) transparent transparent; - } - } - } -} - -.table-tooltip-dimensions { - - .tooltip-inner { - overflow: auto; - max-width: 20rem; - max-height: 10rem; - } -} - -.balance-tooltip { - padding: 1.3rem; - - @include themify($themes) { - background: themed(tooltipBackgroundColor); - box-shadow: themed(tooltipShadow); - color: themed(mainTextColor); - } - - .tooltip-inner { - display: flex; - flex-direction: column; - font-size: 1.3rem; - - .available { - margin-bottom: 1.7rem; - - b { - font-weight: 600; - } - } - - .locked { - margin-bottom: 0.7rem; - - b { - font-weight: 600; - } - } - - .link { - cursor: pointer; - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } - - &.ng-tooltip-top { - margin-top: -1rem; - } - - &.ng-tooltip-bottom { - margin-top: 1rem; - } - - &.ng-tooltip-left { - margin-left: -1rem; - } - - &.ng-tooltip-right { - margin-left: 1rem; - } -} - -.account-tooltip { - - .tooltip-inner { - word-break: break-word; - max-width: 18rem; - } -} - -.comment-tooltip { - - .tooltip-inner { - overflow: auto; - word-break: break-word; - max-width: 50rem; - max-height: 25rem; - } -} - -.update-tooltip { - padding: 1.5rem; - - @include themify($themes) { - background: themed(tooltipBackgroundColor); - box-shadow: themed(tooltipShadow); - color: themed(mainTextColor); - } - - &.important { - - @include themify($themes) { - background: themed(tooltipImportantBackgroundColor); - color: themed(accountMainTextColor); - } - - &.ng-tooltip-left-bottom { - - &:after { - - @include themify($themes) { - border-color: transparent transparent themed(tooltipImportantBackgroundColor) themed(tooltipImportantBackgroundColor); - } - } - } - - &.ng-tooltip-right-bottom { - - &:before { - - @include themify($themes) { - border-color: transparent themed(tooltipImportantBackgroundColor) themed(tooltipImportantBackgroundColor) transparent; - } - } - } - } - - &.critical { - padding: 2.5rem; - - @include themify($themes) { - background: themed(tooltipCriticalBackgroundColor); - color: themed(accountMainTextColor); - } - - .tooltip-inner { - display: flex; - flex-direction: column; - align-items: center; - } - - &.ng-tooltip-left-bottom { - - &:after { - - @include themify($themes) { - border-color: transparent transparent themed(tooltipCriticalBackgroundColor) themed(tooltipCriticalBackgroundColor); - } - } - } - - &.ng-tooltip-right-bottom { - - &:before { - - @include themify($themes) { - border-color: transparent themed(tooltipCriticalBackgroundColor) themed(tooltipCriticalBackgroundColor) transparent; - } - } - } - } - - .tooltip-inner { - font-size: 1.3rem; - line-height: 1.8rem; - white-space: pre-wrap; - - .standard-update { - font-size: 1.5rem; - line-height: 2.7rem; - - @include themify($themes) { - color: themed(blueTextColor); - } - } - - .important-update { - font-size: 1.5rem; - line-height: 2.7rem; - - @include themify($themes) { - color: themed(tooltipImportantTextColor); - } - } - - .critical-update { - font-size: 1.5rem; - line-height: 2.7rem; - text-align: center; - } - - .wrong-time { - font-size: 1.5rem; - line-height: 2.7rem; - - @include themify($themes) { - color: themed(tooltipImportantTextColor); - } - } - - .icon { - margin: 1.5rem 0; - width: 5rem; - height: 5rem; - - @include themify($themes) { - background-color: themed(tooltipCriticalTextColor); - } - } - } - - &.ng-tooltip-left-bottom { - margin-left: -1.5rem; - - &:after { - content: ""; - position: absolute; - bottom: 0.6rem; - right: -1rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent transparent themed(tooltipBackgroundColor) themed(tooltipBackgroundColor); - } - } - } - - &.ng-tooltip-right-bottom { - margin-left: 1.5rem; - - &:before { - content: ""; - position: absolute; - bottom: 0.6rem; - left: -1rem; - border-width: 0.5rem; - border-style: solid; - - @include themify($themes) { - border-color: transparent themed(tooltipBackgroundColor) themed(tooltipBackgroundColor) transparent; - } - } - } -} - -.ngx-contextmenu { - - .dropdown-menu { - border: none; - padding: 0; - - @include themify($themes) { - background-color: themed(chartOptionsBackgroundColor); - box-shadow: themed(tooltipShadow); - } - } - - li { - display: block; - font-family: OpenSans, sans-serif; - font-size: 1.3rem; - text-transform: uppercase; - text-align: center; - } - - a { - display: block; - padding: 0.5em 1em; - - @include themify($themes) { - color: themed(mainTextColor); - } - - &:hover { - - @include themify($themes) { - background-color: themed(chartOptionsHoverColor); - color: themed(mainTextColor); - } - } - } -} - -.ng-select { - - &.custom-select { - width: 100%; - - &.ng-select-single { - .ng-select-container { - .ng-value-container { - .ng-value { - line-height: 1.8rem; - } - } - } - } - - .ng-select-container { - border: none; - border-radius: 0; - cursor: pointer; - font-size: 1.4rem; - outline: none; - padding: 0 1rem; - height: 4.2rem; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor); - } - - .ng-value-container { - padding: 0; - - .ng-input { - top: auto; - } - } - } - - .ng-dropdown-panel { - border: none; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - } - - .ng-dropdown-panel-items { - - .ng-option { - font-size: 1.4rem; - padding: 1rem; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor); - } - - &.ng-option-marked { - - @include themify($themes) { - background-color: themed(selectHoverColor); - color: themed(mainTextColor); - } - } - - &.ng-option-selected { - - @include themify($themes) { - background-color: themed(selectSelectedColor); - color: themed(mainTextColor); - } - } - } - - &::-webkit-scrollbar { - background-color: transparent; - cursor: default; - width: 1rem; - height: 1rem; - } - - &::-webkit-scrollbar-track { - background: transparent; - } - - &::-webkit-scrollbar-thumb { - background-color: #556576; - background-clip: padding-box; - border: 0.25rem solid transparent; - border-radius: 0.5rem; - } - - &::-webkit-scrollbar-thumb:hover { - background-color: #556576; - } - } - } - } -} - -app-modal-container, app-confirm-modal { - - .modal { - - @include themify($themes) { - background: themed(modalBackground); - color: themed(mainTextColor); - } - - .content { - - .icon.error { - - @include themify($themes) { - background-color: themed(redTextColor); - } - } - - .icon.success { - - @include themify($themes) { - background-color: themed(greenTextColor); - } - } - - .icon.info { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - .action-button { - - @include themify($themes) { - background-color: themed(blueTextColor); - color: themed(alternativeTextColor); - } - } - - .close-button { - - .icon { - - @include themify($themes) { - background-color: themed(closeButtonColor); - } - } - } - } -} - -app-transaction-details { - - .table { - - @include themify($themes) { - border-top: 0.2rem solid themed(transparentButtonBorderColor); - } - - .row { - - .cell { - - &.label { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - &.value { - - @include themify($themes) { - color: themed(mainTextColor); - } - } - - &.key-value { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } - } - } -} - -app-progress-container { - - .progress-bar-container { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .progress-bar { - - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - - .progress-bar-full { - - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - } - } - } -} - -app-open-wallet-modal { - - .modal { - - @include themify($themes) { - background: themed(modalBackground); - color: themed(mainTextColor); - } - } -} - -app-send-modal { - .modal { - - @include themify($themes) { - background: themed(modalBackground); - color: themed(mainTextColor); - } - - .title { - - @include themify($themes) { - border-bottom: 0.2rem solid themed(transparentButtonBorderColor); - } - - } - - .action-button { - - @include themify($themes) { - background-color: themed(blueTextColor); - color: themed(alternativeTextColor); - } - } - } -} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/assets/scss/base/_mixins.scss b/src/gui/qt-daemon/html/assets/scss/base/_mixins.scss deleted file mode 100644 index 9b355f0f..00000000 --- a/src/gui/qt-daemon/html/assets/scss/base/_mixins.scss +++ /dev/null @@ -1,98 +0,0 @@ -@mixin text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -@mixin textWrap { - white-space: normal; - overflow-wrap: break-word; - word-wrap: break-word; - word-break: break-all; - line-break: strict; - -webkit-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto; -} -@mixin coverBox { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -@mixin abs ($top: auto, $right: auto, $bottom: auto, $left: auto) { - top: $top; - right: $right; - bottom: $bottom; - left: $left; - position: absolute; -} -@mixin coverImg { - background-repeat: no-repeat; - -webkit-background-size: cover; - -o-background-size: cover; - background-size: cover; - background-position: 50% 50%; -} -@mixin valingBox { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} -@mixin unSelect { - -webkit-touch-collout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -@mixin max1199 { // maket 1171 - @media (max-width: 1199px) { @content; } -} -@mixin max1170 { // makets 992 - @media (max-width: 1170px) { @content; } -} -@mixin max991 { // makets 762 - @media (max-width: 991px) { @content; } -} -@mixin max761 { // makets 576 - @media (max-width: 761px) { @content; } -} -@mixin max575 { // makets 400 - @media (max-width: 575px) { @content; } -} -@mixin mobile { - @media (max-width: 399px) { @content; } -} -@mixin icoCenter { - background-repeat: no-repeat; - background-position: center center; -} -@mixin pseudo ($display: block, $pos: absolute, $content: ''){ - content: $content; - display: $display; - position: $pos; -} - -/* -* Implementation of themes -*/ -@mixin themify($themes: $themes) { - @each $theme, $map in $themes { - .theme-#{$theme} & { - $theme-map: () !global; - @each $key, $submap in $map { - $value: map-get(map-get($themes, $theme), '#{$key}'); - $theme-map: map-merge($theme-map, ($key: $value)) !global; - } - @content; - $theme-map: null !global; - } - } -} - -@function themed($key) { - @return map-get($theme-map, $key); -} diff --git a/src/gui/qt-daemon/html/assets/scss/base/_null.scss b/src/gui/qt-daemon/html/assets/scss/base/_null.scss deleted file mode 100644 index 9c476f5d..00000000 --- a/src/gui/qt-daemon/html/assets/scss/base/_null.scss +++ /dev/null @@ -1,128 +0,0 @@ -//* ******* reset & normalize ******* *// - -// box-sizing the same for all elements -html { - box-sizing: border-box; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; -} -*, *:before, *:after { - box-sizing: inherit; - -webkit-box-sizing: inherit; - -moz-box-sizing: inherit; - margin: 0; - padding: 0; - @include unSelect; -} - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -body { - line-height: 1; - font-style: normal; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: none; -} - -//table -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} - -//forms element -input { - outline: none; - &:-webkit-autofill { - -webkit-box-shadow: 0 0 0 1000px white inset; - } -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; - outline: none; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="search"] { - -webkit-appearance: textfield; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - - -//link -a { - text-decoration: none; - &:active, - &:hover, - &:focus { - outline: 0; - } -} - -i { font-style: italic; } -b, strong { font-weight: 700; } - -// images -img { - width: auto; - max-width: 100%; - height: auto; - vertical-align: top; - border: 0; -} - -.hidden { - display: none !important; -} diff --git a/src/gui/qt-daemon/html/assets/scss/base/_theme.scss b/src/gui/qt-daemon/html/assets/scss/base/_theme.scss deleted file mode 100644 index e12eca73..00000000 --- a/src/gui/qt-daemon/html/assets/scss/base/_theme.scss +++ /dev/null @@ -1,187 +0,0 @@ -$themes: ( - dark: ( - bodyBackgroundColor: #131921, - sidebarBackgroundColor: rgba(23, 31, 39, 1), - sidebarBorderColor: #1f2833, - onlineColor: #5cda9d, - offlineColor: #ff5252, - contentBackgroundColor: rgba(43, 54, 68, 0.5), - mainTextColor: #e0e0e0, - alternativeTextColor: #111921, - optionalTextColor: #556576, - blueTextColor: #4db1ff, - greenTextColor: #5cda9d, - orangeTextColor: #ff6f00, - redTextColor: #ff5252, - blueButtonBackgroundColor: #4db1ff, - blueButtonHoverColor: #82d7ff, - blueButtonFocusColor: #59b5fd, - disabledButtonBackgroundColor: #9cadb7, - disabledButtonHoverColor: #b7d1e0, - disabledButtonFocusColor: #a7b9c2, - greenButtonBackgroundColor: #5cda9d, - greenButtonHoverColor: #8dfcc6, - greenButtonFocusColor: #62e0b2, - turquoiseButtonBackgroundColor: #4dd0e1, - turquoiseButtonHoverColor: #87f4f5, - turquoiseButtonFocusColor: #42d5e8, - transparentButtonBorderColor: #2b3644, - inputBackgroundColor: #171e27, - selectHoverColor: rgba(58, 69, 85, 0.5), - selectSelectedColor: rgba(43, 54, 68, 0.5), - switchBackgroundColor: #000000, - accountBackgroundColor: rgba(43, 54, 68, 0.5), - accountHoverBackgroundColor: rgba(58, 69, 85, 0.5), - accountMainTextColor: #e0e0e0, - securedSeed: #e0e0e0, - seedItemText: #e0e0e0, - seedItemBackgroundColor: #18202a, - accountOptionalTextColor: #556576, - accountIndicatorTextColor: #111921, - accountSwitchBackgroundColor: #000000, - accountIndicatorBackgroundColor: #4db1ff, - tabInactiveBackgroundColor: rgba(23, 31, 39, 0.5), - tabHoverBackgroundColor: rgba(58, 69, 85, 0.5), - tableBackgroundColor: #18202a, - messageMyBackgroundColor: #2a3544, - messageBuddyBackgroundColor: #18202a, - progressBarBackgroundColor: #343f4a, - progressBarFullBackgroundColor: #5cda9d, - chartOptionsBackgroundColor: #2b3644, - chartOptionsHoverColor: #556576, - tooltipBackgroundColor: #42505f, - tooltipImportantTextColor: #ff6f00, - tooltipImportantBackgroundColor: #5f2b11, - tooltipCriticalTextColor: #ff5252, - tooltipCriticalBackgroundColor: #5f1d1d, - tooltipShadow: 0 0 1rem rgba(0, 0, 0, 0.5), - modalBackground: url(~src/assets/images/background-dark.png), - closeButtonColor: #556576, - hoverPage: #3a485a - ), - gray: ( - bodyBackgroundColor: #101417, - sidebarBackgroundColor: rgba(28, 30, 33, 1), - sidebarBorderColor: #2e3337, - onlineColor: #47cf8d, - offlineColor: #ff5252, - contentBackgroundColor: rgba(37, 40, 43, 0.5), - mainTextColor: #e0e0e0, - alternativeTextColor: #1a1a1a, - optionalTextColor: #565c62, - blueTextColor: #42a5f5, - greenTextColor: #47cf8d, - orangeTextColor: #ff6f00, - redTextColor: #ff5252, - blueButtonBackgroundColor: #42a5f5, - blueButtonHoverColor: #86d6ff, - blueButtonFocusColor: #5fb6fc, - disabledButtonBackgroundColor: #79848f, - disabledButtonHoverColor: #a1aebb, - disabledButtonFocusColor: #8a959f, - greenButtonBackgroundColor: #47cf8d, - greenButtonHoverColor: #7bf6c6, - greenButtonFocusColor: #5cdc9e, - turquoiseButtonBackgroundColor: #3ec5d7, - turquoiseButtonHoverColor: #72edfe, - turquoiseButtonFocusColor: #50d0e1, - transparentButtonBorderColor: #2f3438, - inputBackgroundColor: #292d31, - selectHoverColor: rgba(58, 62, 66, 0.5), - selectSelectedColor: rgba(37, 40, 43, 0.5), - switchBackgroundColor: #000000, - accountBackgroundColor: rgba(37, 40, 43, 0.5), - accountHoverBackgroundColor: rgba(58, 62, 66, 0.5), - accountMainTextColor: #e0e0e0, - securedSeed: #e0e0e0, - seedItemText: #e0e0e0, - seedItemBackgroundColor: #292d31, - accountOptionalTextColor: #565c62, - accountIndicatorTextColor: #1a1a1a, - accountSwitchBackgroundColor: #000000, - accountIndicatorBackgroundColor: #42a5f5, - tabInactiveBackgroundColor: rgba(28, 30, 33, 0.5), - tabHoverBackgroundColor: rgba(58, 62, 66, 0.5), - tableBackgroundColor: #25292d, - messageMyBackgroundColor: #30363c, - messageBuddyBackgroundColor: #25292d, - progressBarBackgroundColor: #363a3e, - progressBarFullBackgroundColor: #47cf8d, - chartOptionsBackgroundColor: #292d31, - chartOptionsHoverColor: #515960, - tooltipBackgroundColor: #3e464c, - tooltipImportantTextColor: #ff6f00, - tooltipImportantBackgroundColor: #55240d, - tooltipCriticalTextColor: #ff5252, - tooltipCriticalBackgroundColor: #4c1919, - tooltipShadow: 0 0 1rem rgba(0, 0, 0, 0.5), - modalBackground: url(~src/assets/images/background-gray.png), - closeButtonColor: #515960, - hoverPage: #383e43 - ), - white: ( - bodyBackgroundColor: #eeeeee, - sidebarBackgroundColor: rgba(255, 255, 255, 1), - sidebarBorderColor: #ebebeb, - onlineColor: #46c172, - offlineColor: #ff5252, - contentBackgroundColor: rgba(255, 255, 255, 0.5), - mainTextColor: #43454b, - alternativeTextColor: #fefefe, - optionalTextColor: #a0a5ab, - blueTextColor: #2c95f1, - greenTextColor: #46c172, - orangeTextColor: #ff6f00, - redTextColor: #ff5252, - blueButtonBackgroundColor: #2c95f1, - blueButtonHoverColor: #5cb3ff, - blueButtonFocusColor: #379ffa, - disabledButtonBackgroundColor: #90a4ae, - disabledButtonHoverColor: #aebec6, - disabledButtonFocusColor: #a7b9c2, - greenButtonBackgroundColor: #46c172, - greenButtonHoverColor: #5ad586, - greenButtonFocusColor: #53c77c, - turquoiseButtonBackgroundColor: #26b6c7, - turquoiseButtonHoverColor: #52cbd9, - turquoiseButtonFocusColor: #31becf, - transparentButtonBorderColor: #ebebeb, - inputBackgroundColor: #e6e6e6, - selectHoverColor: rgba(240, 240, 240, 0.5), - selectSelectedColor: rgba(224, 224, 224, 0.5), - switchBackgroundColor: #e0e0e0, - accountBackgroundColor: rgba(30, 136, 229, 1), - accountHoverBackgroundColor: rgba(240, 240, 240, 0.5), - accountMainTextColor: #ffffff, - securedSeed: #a0a5ab, - seedItemText: #43454b, - seedItemBackgroundColor: #e6e6e6, - accountOptionalTextColor: #91baf1, - accountIndicatorTextColor: #43454b, - accountSwitchBackgroundColor: #ffffff, - accountIndicatorBackgroundColor: #ffffff, - tabInactiveBackgroundColor: rgba(224, 224, 224, 0.5), - tabHoverBackgroundColor: #ffffff, - tableBackgroundColor: #ffffff, - messageMyBackgroundColor: #fff, - messageBuddyBackgroundColor: #ededed, - progressBarBackgroundColor: #dcdcdc, - progressBarFullBackgroundColor: #46c172, - chartOptionsBackgroundColor: #e0e0e0, - chartOptionsHoverColor: #ffffff, - tooltipBackgroundColor: #ffffff, - tooltipImportantTextColor: #ffffff, - tooltipImportantBackgroundColor: #ef6c00, - tooltipCriticalTextColor: #ffffff, - tooltipCriticalBackgroundColor: #e53935, - tooltipShadow: 0 0 1rem rgba(120, 120, 120, 0.5), - modalBackground: url(~src/assets/images/background-white.png), - closeButtonColor: #43454b, - hoverPage: #ffffff - ) -); - - - - - diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_contact.scss b/src/gui/qt-daemon/html/assets/scss/layout/_contact.scss deleted file mode 100644 index 1d9f4747..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_contact.scss +++ /dev/null @@ -1,88 +0,0 @@ -app-contacts, app-add-contacts, -app-contact-send, app-export-import { - flex: 1 1 auto; - padding: 3rem; - min-width: 85rem; - - .content { - position: relative; - padding: 3rem; - min-height: 100%; - - @include themify($themes) { - background-color: themed(contentBackgroundColor); - color: themed(mainTextColor); - } - - .head { - position: absolute; - top: 0; - left: 0; - } - } -} - -app-contacts { - - table { - - .alias { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - - button { - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - span { - - @include themify($themes) { - color: themed(mainTextColor) - } - } - } - } - - .footer { - - @include themify($themes) { - color: themed(blueTextColor); - } - - .import-btn { - - @include themify($themes) { - color: themed(blueTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - -} - -app-contact-send { - - .wallets-selection { - - button { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } -} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_main.scss b/src/gui/qt-daemon/html/assets/scss/layout/_main.scss deleted file mode 100644 index 527258cb..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_main.scss +++ /dev/null @@ -1,119 +0,0 @@ -app-main, app-create-wallet, app-open-wallet, app-restore-wallet, app-seed-phrase, app-wallet-details, app-assign-alias, app-edit-alias, app-transfer-alias, app-settings, app-login { - flex: 1 1 auto; - padding: 3rem; - min-width: 85rem; - - .content { - position: relative; - padding: 3rem; - min-height: 100%; - - @include themify($themes) { - background-color: themed(contentBackgroundColor); - color: themed(mainTextColor); - } - - .head { - position: absolute; - top: 0; - left: 0; - } - } -} - -app-main { - - .content { - - .add-wallet { - - .add-wallet-help { - - @include themify($themes) { - color: themed(blueTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - } -} - -app-seed-phrase { - - .seed-phrase-content { - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor) - } - } -} - -app-wallet-details { - - .seed-phrase { - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - } - } -} - -app-settings { - - .content { - height: 100%; - overflow-y: auto; - display: flex; - justify-content: space-between; - flex-direction: column; - - .theme-selection { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - .scale-selection { - - .button-block { - - @include themify($themes) { - background-color: themed(tabInactiveBackgroundColor); - } - - .label { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - &.active { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - - .label { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } - } - } - } -} - -app-login { - min-width: inherit; -} diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_seed-phrase.scss b/src/gui/qt-daemon/html/assets/scss/layout/_seed-phrase.scss deleted file mode 100644 index 8a2b1e90..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_seed-phrase.scss +++ /dev/null @@ -1,258 +0,0 @@ -.form-details { - margin-top: 1.8rem; - - .input-block { - - &:first-child { - width: 50%; - } - } - - .wallet-buttons { - display: flex; - align-items: center; - justify-content: space-between; - - button { - margin: 2.9rem 0; - width: 100%; - max-width: 15rem; - } - } -} - -.form-seed { - - label { - @include themify($themes) { - color: themed(optionalTextColor); - } - - font-size: 1.3rem; - line-height: 2.4rem; - } - - .form-content { - @include themify($themes) { - border: 2px solid themed(transparentButtonBorderColor); - } - - display: flex; - justify-content: center; - padding: 3rem; - width: 100%; - } - - .text-coral { - @include themify($themes) { - color: themed(blueTextColor); - } - text-decoration: none; - } - - .seed-phrase-form { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - max-width: 38rem; - width: 100%; - - .input-block, - button { - width: 100%; - } - - .error-message { - margin-top: 1rem; - @include themify($themes) { - color: themed(orangeTextColor); - } - } - - .secured-seed { - @include themify($themes) { - color: themed(securedSeed); - } - font-size: 1.2rem; - line-height: 2.4rem; - text-decoration: none; - display: flex; - align-items: center; - cursor: pointer; - - .icon { - margin-right: 1.2rem; - } - } - - button { - display: flex; - justify-content: center; - align-items: center; - margin-top: 3rem; - margin-bottom: 2rem; - - .icon { - margin-right: 1.2rem; - } - } - - } -} - -.seed-phrase { - display: flex; - flex-direction: column; - width: 100%; - background-color: transparent !important; - - &-title { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - @include themify($themes) { - color: themed(optionalTextColor); - } - .right-part { - display: inline-flex; - align-items: center; - - .icon { - cursor: pointer; - width: 1.7rem; - height: 1.7rem; - - &.copy { - @include themify($themes) { - background-color: themed(blueTextColor); - } - margin-right: 1.2rem; - mask: url(~src/assets/icons/copy.svg) no-repeat center; - - &:hover { - opacity: 0.75; - } - } - - &.copied { - @include themify($themes) { - background-color: themed(blueTextColor); - } - margin-right: 1.2rem; - mask: url(~src/assets/icons/complete-testwallet.svg) no-repeat center; - } - - &.secured, - &.unsecured { - margin-left: 1.2rem; - } - } - - span { - font-size: 1.3rem; - line-height: 2.4rem; - display: inline-flex; - align-items: center; - - .icon { - margin-left: 1.2rem; - } - } - } - } - - &-content { - @include themify($themes) { - border-top: 2px solid themed(transparentButtonBorderColor); - border-bottom: 2px solid themed(transparentButtonBorderColor); - } - padding: 1rem 0 1rem; - display: flex; - align-items: center; - justify-content: center; - flex-wrap: wrap; - margin-bottom: 1rem; - - .item { - @include themify($themes) { - color: themed(seedItemText); - } - display: flex; - align-items: center; - padding: 0 2rem; - width: calc(100% / 7); - min-height: 35px; - font-size: 1.3rem; - - &.dark { - @include themify($themes) { - background-color: themed(seedItemBackgroundColor); - } - } - } - } - - &-footer { - text-align: center; - - .title { - @include themify($themes) { - color: themed(seedItemText); - } - font-size: 1.3rem; - line-height: 2.4rem; - } - } -} - -.icon { - display: inline-flex; - width: 1.6rem; - height: 1.6rem; - - &.secured { - @include themify($themes) { - background-color: themed(greenTextColor); - } - mask: url(~src/assets/icons/secured.svg) no-repeat center; - } - - &.info { - @include themify($themes) { - background-color: themed(blueTextColor); - } - mask: url(~src/assets/icons/info.svg) no-repeat center; - } - - &.unsecured { - @include themify($themes) { - background-color: themed(orangeTextColor); - } - mask: url(~src/assets/icons/unsecured.svg) no-repeat center; - } - - &.safety { - @include themify($themes) { - background-color: themed(alternativeTextColor); - } - mask: url(~src/assets/icons/safety.svg) no-repeat center; - } -} - -.wrap-buttons { - display: flex; - - .seed-phrase-button { - margin: 2.8rem 0; - width: 25%; - min-width: 1.5rem; - } - - .copy-button { - margin: 2.8rem 1rem; - width: 25%; - min-width: 1.5rem; - } -} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_settings.scss b/src/gui/qt-daemon/html/assets/scss/layout/_settings.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_sidebar.scss b/src/gui/qt-daemon/html/assets/scss/layout/_sidebar.scss deleted file mode 100644 index cfc382fb..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_sidebar.scss +++ /dev/null @@ -1,191 +0,0 @@ -app-sidebar { - - @include themify($themes) { - background-color: themed(sidebarBackgroundColor); - } - - .sidebar-accounts { - - .sidebar-accounts-header { - - h3 { - - @include themify($themes) { - color: themed(mainTextColor); - } - } - - button { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } - - .sidebar-accounts-list { - - .sidebar-account { - - @include themify($themes) { - background-color: transparent; - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - .sidebar-account-row { - - .text { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - .indicator { - - @include themify($themes) { - background-color: themed(blueButtonBackgroundColor); - color: themed(alternativeTextColor); - } - } - - .progress-bar-container { - - .progress-bar { - - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - - .fill { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - - &.account-synchronization { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - } - - &.active { - - @include themify($themes) { - background-color: themed(accountBackgroundColor); - color: themed(accountMainTextColor); - } - - .sidebar-account-row { - - .text { - - @include themify($themes) { - color: themed(accountOptionalTextColor); - } - } - - .indicator { - - @include themify($themes) { - background-color: themed(accountIndicatorBackgroundColor); - color: themed(accountIndicatorTextColor); - } - } - - .switch { - - @include themify($themes) { - background-color: themed(accountSwitchBackgroundColor); - color: themed(mainTextColor); - } - } - - &.account-synchronization { - - @include themify($themes) { - color: themed(accountOptionalTextColor); - } - } - } - } - - &:hover:not(.active) { - - @include themify($themes) { - background-color: themed(accountHoverBackgroundColor); - } - } - } - } - - &:after { - - @include themify($themes) { - background: linear-gradient(to bottom, transparent 0%, themed(sidebarBackgroundColor) 100%); - } - } - } - - .sidebar-settings { - - @include themify($themes) { - border-bottom: 0.2rem solid themed(sidebarBorderColor); - } - - .wrap-button { - - button { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - &.active { - - button { - - @include themify($themes) { - background-color: themed(accountBackgroundColor)!important; - color: themed(accountMainTextColor)!important; - } - - .icon { - - @include themify($themes) { - background-color: themed(accountIndicatorBackgroundColor)!important; - } - } - } - } - } - } - -} diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_status.scss b/src/gui/qt-daemon/html/assets/scss/layout/_status.scss deleted file mode 100644 index b109e1d5..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_status.scss +++ /dev/null @@ -1,232 +0,0 @@ -.synchronization-status { - display: flex; - align-items: center; - justify-content: flex-start; - flex: 0 0 7rem; - font-size: 1.3rem; - @include themify($themes) { - color: themed(optionalTextColor); - } - - .status-container { - position: relative; - flex-grow: 1; - text-align: left; - - .offline, .online { - position: relative; - display: block; - line-height: 1.2rem; - padding-left: 2.2rem; - - &:before { - content: ''; - position: absolute; - top: 0; - left: 0; - border-radius: 50%; - width: 1.2rem; - height: 1.2rem; - } - } - - .offline:before { - - @include themify($themes) { - background-color: themed(offlineColor); - } - } - - .online:before { - - @include themify($themes) { - background-color: themed(onlineColor); - } - } - - .syncing, .loading { - line-height: 5rem; - } - - .progress-bar-container { - position: absolute; - bottom: 0; - left: 0; - height: 0.7rem; - width: 100%; - - .syncing { - display: flex; - - .progress-bar { - flex: 1 0 auto; - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - .fill { - height: 100%; - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - } - } - &.downloading { - - .progress-bar { - - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - - .fill { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - .progress-percent { - flex: 0 0 auto; - font-size: 1.3rem; - line-height: 0.7rem; - padding-left: 0.7rem; - } - } - - .loading { - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - animation: move 5s linear infinite; - background-image: - -webkit-gradient( - linear, 0 0, 100% 100%, - color-stop(.125, rgba(0, 0, 0, .15)), color-stop(.125, transparent), - color-stop(.250, transparent), color-stop(.250, rgba(0, 0, 0, .10)), - color-stop(.375, rgba(0, 0, 0, .10)), color-stop(.375, transparent), - color-stop(.500, transparent), color-stop(.500, rgba(0, 0, 0, .15)), - color-stop(.625, rgba(0, 0, 0, .15)), color-stop(.625, transparent), - color-stop(.750, transparent), color-stop(.750, rgba(0, 0, 0, .10)), - color-stop(.875, rgba(0, 0, 0, .10)), color-stop(.875, transparent), - to(transparent) - ), - -webkit-gradient( - linear, 0 100%, 100% 0, - color-stop(.125, rgba(0, 0, 0, .30)), color-stop(.125, transparent), - color-stop(.250, transparent), color-stop(.250, rgba(0, 0, 0, .25)), - color-stop(.375, rgba(0, 0, 0, .25)), color-stop(.375, transparent), - color-stop(.500, transparent), color-stop(.500, rgba(0, 0, 0, .30)), - color-stop(.625, rgba(0, 0, 0, .30)), color-stop(.625, transparent), - color-stop(.750, transparent), color-stop(.750, rgba(0, 0, 0, .25)), - color-stop(.875, rgba(0, 0, 0, .25)), color-stop(.875, transparent), - to(transparent) - ); - background-size: 7rem 7rem; - height: 100%; - } - } - } - - .update-container { - display: flex; - flex-grow: 1; - margin-left: 1rem; - text-align: right; - - .update-text { - flex: 1 1 auto; - font-size: 1.2rem; - line-height: 1.8rem; - text-align: left; - - &.time { - font-size: 1.1rem; - } - } - - .icon { - flex: 1 0 auto; - margin: 0.3rem 0 0 0.6rem; - width: 1.2rem; - height: 1.2rem; - - &.update { - mask: url(./assets/icons/update.svg) no-repeat center; - } - - &.time { - mask: url(./assets/icons/time.svg) no-repeat center; - } - } - - .standard { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - - .important { - - @include themify($themes) { - color: themed(orangeTextColor); - } - } - - .critical { - - @include themify($themes) { - color: themed(redTextColor); - } - } - - .time { - - @include themify($themes) { - color: themed(orangeTextColor); - } - } - - .icon { - - &.standard { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - &.important { - - @include themify($themes) { - background-color: themed(orangeTextColor); - } - } - - &.critical { - - @include themify($themes) { - background-color: themed(redTextColor); - } - } - - &.time { - - @include themify($themes) { - background-color: themed(orangeTextColor); - } - } - } - - } -} - -@keyframes move { - 0% { - background-position: 100% -7rem; - } - 100% { - background-position: 100% 7rem; - } -} diff --git a/src/gui/qt-daemon/html/assets/scss/layout/_wallet.scss b/src/gui/qt-daemon/html/assets/scss/layout/_wallet.scss deleted file mode 100644 index 201c02c4..00000000 --- a/src/gui/qt-daemon/html/assets/scss/layout/_wallet.scss +++ /dev/null @@ -1,531 +0,0 @@ -app-wallet { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .header { - - button { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - &:disabled { - background-color: transparent !important; - .icon { - @include themify($themes) { - background-color: themed(accountOptionalTextColor); - } - } - } - } - - .alias { - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - - .address { - - @include themify($themes) { - color: themed(blueTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - .tabs { - - .tabs-header { - - .tab { - - @include themify($themes) { - background-color: themed(tabInactiveBackgroundColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - .indicator { - - @include themify($themes) { - background-color: themed(accountIndicatorBackgroundColor); - color: themed(accountIndicatorTextColor); - } - } - - &.active { - - @include themify($themes) { - background-color: themed(contentBackgroundColor); - } - } - - &:hover:not(.active):not(.disabled) { - - @include themify($themes) { - background-color: themed(tabHoverBackgroundColor); - } - } - } - } - - .tabs-content { - - @include themify($themes) { - background-color: themed(contentBackgroundColor); - } - } - - .pagination-wrapper { - - @include themify($themes) { - background-color: themed(contentBackgroundColor); - } - - .pagination { - - @include themify($themes) { - border-top: 0.2rem solid themed(transparentButtonBorderColor); - } - - button { - @include themify($themes) { - background-color: themed(transparentButtonBorderColor); - color: themed(mainTextColor); - } - - &.active { - @include themify($themes) { - background-color: themed(tableBackgroundColor); - color: themed(mainTextColor); - } - } - - &:hover { - @include themify($themes) { - background-color: themed(hoverPage); - color: themed(mainTextColor); - } - } - } - } - } - } -} - -app-send { - - .form-send { - - .send-select { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - .additional-details { - - @include themify($themes) { - border: 0.2rem solid themed(transparentButtonBorderColor); - } - } - } -} - -app-receive { - - .btn-copy-address { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } -} - -app-history { - - table { - - tbody { - - tr { - - &.locked-transaction { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - &:nth-child(4n+1) { - - @include themify($themes) { - background-color: themed(tableBackgroundColor); - } - } - - &:nth-child(4n+2) { - - @include themify($themes) { - background-color: themed(tableBackgroundColor); - } - } - - &:nth-child(4n+3) { - - @include themify($themes) { - background-color: transparent; - } - } - - &:nth-child(4n+4) { - - @include themify($themes) { - background-color: transparent; - } - } - - .status { - - .confirmation { - - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - - .fill { - - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - } - } - } - - .lock-transaction { - - @include themify($themes) { - background-color: themed(orangeTextColor); - } - } - - .unlock-transaction { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - - .status.send { - - .status-transaction { - - @include themify($themes) { - background-color: themed(redTextColor); - } - } - } - - .status.received { - - .status-transaction { - - @include themify($themes) { - background-color: themed(greenTextColor); - } - } - } - } - } - } -} - -app-contracts { - - .wrap-table { - - .contract { - - .icon { - - &.new, &.alert { - - @include themify($themes) { - background-color: themed(redTextColor); - } - } - - &.purchase, &.sell { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - } -} - -app-purchase { - - .form-purchase { - - .purchase-select { - - @include themify($themes) { - color: themed(mainTextColor); - } - - .icon { - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - - .purchase-states { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - - .additional-details { - - @include themify($themes) { - border: 0.2rem solid themed(transparentButtonBorderColor); - } - } - } - - .progress-bar-container { - - .progress-bar { - - @include themify($themes) { - background-color: themed(progressBarBackgroundColor); - } - - .progress-bar-full { - - @include themify($themes) { - background-color: themed(progressBarFullBackgroundColor); - } - } - } - } -} - -app-messages { - - table { - - tbody { - - tr { - - td:first-child { - - span { - @include text-truncate; - } - - .icon { - - @include themify($themes) { - background-color: themed(redTextColor); - } - } - } - } - } - } -} - -app-typing-message { - - .head { - - .interlocutor { - - @include themify($themes) { - color: themed(blueTextColor); - } - } - } - - .messages-content { - - .messages-list { - - div { - - &.date { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - &.my { - - @include themify($themes) { - background-color: themed(messageMyBackgroundColor); - } - - &:before { - - @include pseudo; - top: 0; - left: -1.1rem; - border: 1.2rem solid transparent; - - @include themify($themes) { - border-top-color: themed(messageMyBackgroundColor); - } - } - } - - &.buddy { - - @include themify($themes) { - background-color: themed(messageBuddyBackgroundColor); - } - - &:after { - - @include pseudo; - right: -1.1rem; - top: 0; - border: 1.2rem solid transparent; - - @include themify($themes) { - border-top-color: themed(messageBuddyBackgroundColor); - } - } - } - } - } - } -} - -app-staking { - - .chart-header { - - .general { - - .label { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - .options { - - @include themify($themes) { - color: themed(mainTextColor); - } - } - } - - .selected { - display: flex; - align-items: center; - justify-content: flex-end; - flex-grow: 1; - font-size: 1.6rem; - } - } - - .chart-options { - - .title { - - @include themify($themes) { - color: themed(optionalTextColor); - } - } - - .options { - - button { - - @include themify($themes) { - color: themed(mainTextColor); - background-color: themed(chartOptionsBackgroundColor); - } - - &.active { - - @include themify($themes) { - background-color: themed(chartOptionsHoverColor); - } - } - } - } - } -} - -.input-block-alias { - position: relative; - - .alias-dropdown { - position: absolute; - top: 6.5rem; - max-height: 10rem; - overflow: auto; - width: 100%; - - @include themify($themes) { - background-color: themed(inputBackgroundColor); - color: themed(mainTextColor); - } - - div { - font-size: 1.4rem; - padding: 1rem; - - &:hover { - @include themify($themes) { - background-color: themed(selectHoverColor); - } - } - } - } -} diff --git a/src/gui/qt-daemon/html/assets/scss/modules/_head.scss b/src/gui/qt-daemon/html/assets/scss/modules/_head.scss deleted file mode 100644 index a03e41b0..00000000 --- a/src/gui/qt-daemon/html/assets/scss/modules/_head.scss +++ /dev/null @@ -1,64 +0,0 @@ -.head { - display: flex; - align-items: flex-end; - justify-content: space-between; - font-size: 1.3rem; - padding: 0 3rem; - width: 100%; - height: 3rem; - - @include themify($themes) { - color: themed(blueTextColor); - } - - .breadcrumbs { - - > span, a { - - &:not(:last-child) { - position: relative; - cursor: pointer; - margin-right: 20px; - outline-style: none; - - &:after { - - @include pseudo; - top: 0.5rem; - right: -1.5rem; - width: 0.9rem; - height: 0.9rem; - mask: url(~src/assets/icons/arrow-right.svg) no-repeat center; - mask-size: cover; - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } - } - } - - .back-btn { - display: flex; - align-items: center; - background-color: transparent; - color: #4db1ff; - font-size: inherit; - font-weight: 400; - line-height: 1.3rem; - padding: 0; - height: auto; - - .icon { - margin-right: 0.7rem; - mask: url(~src/assets/icons/back.svg) no-repeat center; - width: 0.9rem; - height: 0.9rem; - - @include themify($themes) { - background-color: themed(blueTextColor); - } - } - } -} diff --git a/src/gui/qt-daemon/html/assets/scss/modules/_scroll.scss b/src/gui/qt-daemon/html/assets/scss/modules/_scroll.scss deleted file mode 100644 index bbd97645..00000000 --- a/src/gui/qt-daemon/html/assets/scss/modules/_scroll.scss +++ /dev/null @@ -1,24 +0,0 @@ -.scrolled-content { - - &::-webkit-scrollbar { - background-color: transparent; - cursor: default; - width: 1rem; - height: 1rem; - } - - &::-webkit-scrollbar-track { - background: transparent; - } - - &::-webkit-scrollbar-thumb { - background-color: #556576; - background-clip: padding-box; - border: 0.25rem solid transparent; - border-radius: 0.5rem; - } - - &::-webkit-scrollbar-thumb:hover { - background-color: #556576; - } -} diff --git a/src/gui/qt-daemon/html/assets/scss/modules/_table.scss b/src/gui/qt-daemon/html/assets/scss/modules/_table.scss deleted file mode 100644 index 589637b6..00000000 --- a/src/gui/qt-daemon/html/assets/scss/modules/_table.scss +++ /dev/null @@ -1,64 +0,0 @@ -table { - font-size: 1.3rem; - width: 100%; - - thead { - text-align: left; - - @include themify($themes) { - color: themed(optionalTextColor); - } - - tr { - height: 4rem; - - th { - padding: 1rem; - vertical-align: bottom; - - &:first-child { - padding-left: 3rem; - } - - &:last-child { - padding-right: 3rem; - } - } - } - } - - tbody { - text-align: left; - - @include themify($themes) { - color: themed(mainTextColor); - } - - tr { - height: 3.5rem; - - &:nth-child(odd) { - - @include themify($themes) { - background-color: themed(tableBackgroundColor); - } - } - - td { - line-height: 1.7rem; - padding: 0 1rem; - vertical-align: middle; - white-space: nowrap; - max-width: 20rem; - - &:first-child { - padding-left: 3rem; - } - - &:last-child { - padding-right: 3rem; - } - } - } - } -} diff --git a/src/gui/qt-daemon/html/back.svg b/src/gui/qt-daemon/html/back.svg deleted file mode 100644 index 0b00a610..00000000 --- a/src/gui/qt-daemon/html/back.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/background-dark.png b/src/gui/qt-daemon/html/background-dark.png deleted file mode 100644 index 83290ff91cdaa0ef468e11343ebf631083cd4e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34583 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

      Iz z4@RIioQ+JjY@ldU1&HL&)nzZKpZG7qJaRPYS*9dN1$*bTxADu!`X*`!3(U)GM6DlY zmpYn}lq>%W#VVGg9u@9cra1`3-(yDGfmC3ba#Uwq+J9~p@iW8S>RySXeb25DzTbh!D$UhnzAD*DL>qP2^)C_ zQ}56Eatd5*8-sr~b!IaKbSoluQk^7T9x5l;g6hXXDC+zkE2}t22a9iRYqupBEBkww z{tCTz=6a0tj+(KO%wz_-@ePSKrsW@?GY2f_-BkI5Ab7UjCE*$9qQtQ8+Wi-=wM=xN z9-b=#@oEYDf>w6?{+psTn{tV<2de)Siik)9(@d3HiRQZ+VA`$Xz5Zqn{0_Y)T@+gm zM0{(_PFB!$rsIX!pAGK1+wOcR(d^2eY;K%k@VQhQHpv`BMAUSl>+=aHeG0p;f45*} zboL`q3CBXCx`s8kKL))x4dtEycGx84T`9fS(?DpmPpG5srDCaWiox@h*VNQBE&b{E zP~JsG^mAEiHUibIw;kAOkH9r0t^CZzLsQem~CC7ZRu2|Y1XgVA2|wve@?PjjE2&HW13)9P(_kON}P^3S-YAk@JQxzH=M$ufN@w5!`hmAH>53 z{J}R>P#sK$_WQc~K>FinXmu!B+nqc4VTJwg>PVF&a4@ONSB)r*>}qRHpCY02?4Cke`%u!^y`JRpyk4*>yOPbbm{{?ayB3zlPSF#aKPOzdHL) zE@bK8`~{3UyLOYXBK%gP8>Z(>m9iSFFPEfuSNdp#!^+Po(kt~_PLx=o(fa$}KO!H# zj+8zm{GN|f0v24-ib=VO2S#BkMXs_7hXPSGsn$!_yP|GmPLrfmS}~nCOt}#F=uGHt zgc#7b)>>Q=GR!mjBj1$_41(<{inxqL;ZeZc9Eiw^Gv_0d-#Fx0hvE3E_-U9AHedu6Dx-6OQ-ymd_X0zjo_=nR zdx`?=oeH|X_WD<|3T*Yb&S64{V;dSs2<3JWl)w6eB@(*W0L>@*y%r5N9guNbk+%X6 z&c6RXD}$SNQk5^aV#60rSv@DLAE6!Zc`^yBu3}bIw=-8M>)@+)h{mt{&hEXgQwea8#x$mcKx)yEdE_lT@oTt8-kA6b07ew^ZsFB zO&SYRfEgtV$2#*;2pVKcp*RKV>^=uz)xP-lwU}2}=IXjhzv3gqXRw|_969hafB`X~ zn1>GYfs-Qa%4xf&4n7n|hM_XRma+YZ`H(JUDhvh)&&4ZR4FaKHU~W)aRxG#@+?99i z(0e#MwO`w_984%XN=bSvNDq8JF~~DFrRhlf)NS5@VC{9`HYy z78DBPsVXRS@_;T3za1&ljqe3lOPGxGMchHHgEs*%cA3t(Q8>ORrV%W)&#_LxG1gJi zFh98~DCb^Udh3GX9-1^5xJqLP0i=8#ed(oK@*XjQiPPH3Jm<_ARgHU5PlTzo_RX(5 znkJ4D>31@#y1u2hy572#x_uOg*d!ziOmZ+VoN&ILeX(cBU@l)XMa-yweXA2LdZwnM ze@HI+NCKp;U-PgP4vmQ$p6?9w4t|C^+XH-;Z9um>B1$V z)`A9PoLoPIX4;FAc?$sdEb0SeyuQWW8plG-v`|R zj2o*{=OVnEw6Y9>%e?WfTB6@GgV5rxgYW$Q;$?;ilPZ%tYTGRi^6ny`6t5{nr%YIX zzEkF=t1=pnSn)i+xpBJmj!3LNb?To6Bj!^-wXM2{{^GL2JC`|Nsb#*BWTm^Sr0A3i z`VN@tHl*h(sSRa&Xac0Tp9*YlDtpr|uB~bDJD9$nsECC6s%QHbYbD4M>qLWm(d&0F zigq?us;n~d(t|R)p)cowQ&gWqq6GUrbsk0`T4{CD-;BDU`3iTh&y}h8A~sb8W%SgK zYS)Vbb~~3m7fQfJC{=9nvg-N&lEPGCb#1T}%y?rknvb=*y>o}Yu1CxmzB3Yz_s3N@ zXUN!x0B(bw{myeSCZuGl09dBRlJKY1rc+=mpCAbb5nzM!1dF})%Y$0!&i@ZjbD%%O`U%bdS_6ks&`9 zV9+pQ?MEm*vEzVJcG1EfrB7EMRFo=Pwx!pQCmvNe5fekwUHv}~!8#OR*fD_wHkbER zhQWJSufRE@a6~9dn+hE0iKfjH_#BzXO4dkxqv_(yU$hd3GE6^>Xw)=~y!Iff(2i0k z(F~QEo{r^yK|W419TQz0z5GkNCTv~YBuSUf{YzFA2F(FHcqFYC7@Uw#|M_qC%Qk^Z zKQyi8M94oh`aW}UKt9B8_xI;f`hX^^W#kM% zl@xBI2RbF2U4qK*c)lf(NwjqC%b1KU64BF26A6WJ^mslV`x&jTq!I*yw!y@~jJ-Z1 zcNHunO`rX-WWks@m!==fZ=WyQN0%xmRv!EJ_W2K`UuNGAJZ*mzJx8Bx+kYj;N~fK^ zD{W%Mh{<_i?q%Z@I+?-K9?*Q(qyR9Bym;va<;MP{N`dv#%*MGpp|9!V)w2 zvQBJ~ADE}#T@RF6c9oq?ap7gGX?j{#bG-cO<|DMIu9erRZ8eX)mfZgJh_Z4~wKJP9 zhuAi==RzvP%4Yf4>CB~VB+)P7O+&y4BmiKLQML?R;23G$^L3o>|803PaC)M7|7GS% z_OB@Qx^;h$RR?4~755~B&zU|P)r%0xwRLsrINI?f5i3*nrqeNRG`W3^8uUD~|5)IH zJ)1aBs8jzM+S!0z=A&naXVJGYcy{9T#Vg)eg7)rHm%?_GhJ{AtSyY$-Qr$)?KC=F* zU!L%Gm^oX_>Z1u83r_Kfg~0Is4CJgdS_g&t_&V4iMu2$(+<`@`G^l{zxiRA$J& zW*c&Bk+SbgV}>vkbIc$#71>IQ>``O+esABozW3jGuj{?ucb?z!+|T{HZz3`UxmltS zJv-d21l&+)G(IRyyHXQAWqdoG@&=01un|_TqVK(W3Hsf-{dM9`BT`rqdhMpcypv-o zlUikr$;mSGma+v5a#i>{WYscZw7@gmJKIUGH-1KW4DK@pQtJ)njJI9E-A1o+aH;c0 zV7tV0W-Y4xHNDWBK`}mHPVAzW_EpN=6{xD`+%hxY2tYpO39LI#{9kc>zhO1l?=NKV{{_a&whubcD$)joTKt;5G@3CSBv69f??-fc1vJvar_tk;)Q=^Zpvz- z%(2}0V%PSIJ_ITw)}8y**v%SrEm3^lho9aLwn>P-^Fg^F8qVHNvp7G`>PAC+E46ns z^=!C_rf`!!j=}p?1*_IR(+u{}0Ma~lia|*mw70!2H6R>3cZ(Ku1cM6k zdA%%wf|CtHcTWSP)taTsF+d|CA03-M{F#aGDP4F`6}aCI(T`fb6znWjcOB|QtOAm! zQ}Kq503BpbB5TDkTWX`lJ3hUTMhKZM(=Ryd4sJ6wJJ6Q0?K-TJDG}&fJoH1VC>d1? z9{=SvRqp&o)Pt_+n_@qW(c0Ghipz;3)~;`2NXC)7Jb8RHAK4z>1Y3&c7oR+aq=f?w z*xweaQ$VIYyOHjoQy@p_KJV&i_9g)YLNgK##a&yS^HimZN&eMhQrL0FFXeLHOY^|^h zJ6MEr^SNw07&hO3>t%LQX5oCOJ~u@GKX)!JAox@?Z4FE;Z<6&Mx7Z6URs(*%LREcEu(Nj}I{rN*PIt3Sd>o<$b~C^hTOx3vA+hb04J&i8cltV}l|jeLn7lt_rp$=86^Jm;+o0D#OBF0yy>TIM3_I!24e{Q|df z?TYW(hxHv4tglb7=G;f*<5NYkpLD97d6?aeQ=^1;(Kr1Y&oze@%5?t~PV9*~CaP41 zHZ+6DPj9VgqWJQc0!DfL|3lG^I^8MlwObsk5@aeH($P6Pi?KZP>u}W}9qo09Lj~S0 z4Xkh0<-d^EU6y#kkdQkD)|;jpiMuc|m3W8G^O##o4@Z10<@sDViRFUv`e8da#8_j) znRa*v!IiOR?un$YqRZZXp5d3GsyY%GBccO#8#Awl!igQDc4Yr-0dZ2d_+da*=qCS* zM#$XuWbQz{f2GHxi$lY$N`WaKO)mR!%-QI7DDKd7IqI*#lsp|!XL+v=V_ETZEV-LA z&FvixSXyN&{P2jX*K$EfmundsLqS@g^7*FU?f1}xa$aZB_S6x!`d;sYSDEtPWj+rl zmbLUL-|~dkxt^EzwsKSP0GBuMK;7p-?3=JlsAx>bAoDNR??+~SRIhK1cfqJ{4iGy?!@=lP7bB7XbW z$runthb$Bi{=@}G;$tI*$RQWf5(086kUDo-$n{yUvasob>A=F0*-ISrnp*Bknw#dC zz&jFxFd5}{$64)?9uk�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 - - - - - diff --git a/src/gui/qt-daemon/html/close-wallet.svg b/src/gui/qt-daemon/html/close-wallet.svg deleted file mode 100644 index 8a9ba99e..00000000 --- a/src/gui/qt-daemon/html/close-wallet.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/close.svg b/src/gui/qt-daemon/html/close.svg deleted file mode 100644 index d39bed6d..00000000 --- a/src/gui/qt-daemon/html/close.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/complete-testwallet.svg b/src/gui/qt-daemon/html/complete-testwallet.svg deleted file mode 100644 index b5d04868..00000000 --- a/src/gui/qt-daemon/html/complete-testwallet.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/src/gui/qt-daemon/html/contacts.svg b/src/gui/qt-daemon/html/contacts.svg deleted file mode 100644 index e05516ae..00000000 --- a/src/gui/qt-daemon/html/contacts.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/src/gui/qt-daemon/html/contracts.svg b/src/gui/qt-daemon/html/contracts.svg deleted file mode 100644 index aa985ac7..00000000 --- a/src/gui/qt-daemon/html/contracts.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/copy.svg b/src/gui/qt-daemon/html/copy.svg deleted file mode 100644 index 4ec2ff7d..00000000 --- a/src/gui/qt-daemon/html/copy.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/delete.svg b/src/gui/qt-daemon/html/delete.svg deleted file mode 100644 index a057a1dc..00000000 --- a/src/gui/qt-daemon/html/delete.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/src/gui/qt-daemon/html/details-settings.svg b/src/gui/qt-daemon/html/details-settings.svg deleted file mode 100644 index 11803ccf..00000000 --- a/src/gui/qt-daemon/html/details-settings.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/details.svg b/src/gui/qt-daemon/html/details.svg deleted file mode 100644 index eb12cde2..00000000 --- a/src/gui/qt-daemon/html/details.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/edit.svg b/src/gui/qt-daemon/html/edit.svg deleted file mode 100644 index eb12cde2..00000000 --- a/src/gui/qt-daemon/html/edit.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/favicon.ico b/src/gui/qt-daemon/html/favicon.ico deleted file mode 100644 index 366c5f9be407961d6828a15913dd0870388572f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145619 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 diff --git a/src/gui/qt-daemon/html/files/Zano.desktop b/src/gui/qt-daemon/html/files/Zano.desktop deleted file mode 100644 index 8f26e0b9..00000000 --- a/src/gui/qt-daemon/html/files/Zano.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Version=1.0 -Name=Zano -Exec=Zano -Icon=/usr/share/pixmaps/desktop_linux_icon.png -MimeType=application/x-desktop -Terminal=true -Type=Application \ No newline at end of file diff --git a/src/gui/qt-daemon/html/files/app22macos.png b/src/gui/qt-daemon/html/files/app22macos.png deleted file mode 100644 index 450317e765b820ec8008017168be214f4824b59b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)AIv^c59dJ_tw*w~?I2|~6#-6$3u@)hnT?;rnvwu8(9!aZjcLmNe8jTia zIVI4wVf2n>jz}kNF^9O;?x5sE8Yd(m3_akM&ZEP2ZA1F_}9R-1}p`xHf z;Z_Rb-hE&^4!7Pz;0w_$9?N{ZqGa>1>?Fip*W(No5mhSS_pUf|S{7dTjlY z&}|p_Lw$k&>*#O5u;l7K|G9Z8_D=(yEM`|V^YdTjL213Tqql~ML6^9=!Ht3`EUSzX z1E~v=g4deWvd#$IibTcjLpQn3F*0wrjqGuDJuC9OkNyQH@-YMtw1IsRW@*r- zKDSy{B!X_alEALd?9gx61||k2I38ObU@6f98dEK^N(?Lyu$-*0%!dkc!`Wrg1!=6Y zEOvIGYr2{TSfo&-ie<5h0UF)3lAR7+)Iv5fr)s*$c&u@Nr9g+DxmXtaCDG`H?t=8_ zRnaR6VO7&bc0nriWQ)PFlxn&qXvHLjWwDzl8r@=(od!J_5LmVpbej?>M`PI@h-E3E zTj+{O8p~2cx4A2(L}1zO0ij$Y^KKsVl$-vHe-4>A(n zh-EhD#ye{ppc}DF5#9I~5{l?XEK^1|Vwobk5zCZA1^>x_Mhmk40t^5iYN9WZS=mGY O0000D}$Q zyX{@8A+1CLQKFI<6vPB$f+UEdMnj0Gi70;%0vZt1nD`3?2}&d=#zbfD=XQFX)PV7y z+2ro_&71FgyPtV)ZvWZMZLO>3mfv0u0GQj-9BN0u4(l^}7Wy_uM=ztFvP5%_0l=IE z)~5t)f3Xq({(H5v+w2an7Gy2vmK3cIx>KS8`G$ltW7L6N1s?M2?E1+|0m~lGN zQ_R6SXM>f{(H(AcG-^6@_}qS%%y|QjTHek1_<*Noxx>S9eum{4uExc30?P|5=g1z; zU^zMybtNLShgN3OA*;?gV44YmVUo$DJLz?6dOySQJkPKm#^Z6J87^ZaZb~Uv+^EU~ z$;AmlL)O)VscLbD6<6xhhRiyr(@K;-viB8BEIUMzNl6KYbF)k_ks{|ci6K3j zzBENKjXr^WiXj7!jyQfTy)+8Lx=Pr7^u~^a6hS@ZX5M+@SRT`Zm z3COfVLmSd%*ffl8rK;H7n`)%6I1?gSo++;#rqn59mM0@imqKQRM0Br0qYfog(>paS z8q8E#TMnV4vC*okT1RzQlGV7y^ zENcsrnTf>+Yl<2fDHa1&wZ|UAHWQD5I!KXBXdwqT$M$!<&VY_@%=#VB4S^bg?t)S3c4JUIlit1;*ysO6RQ(O`! zv#vlO;P>!6M0uoKXq$Xe=m&Kb?R8SrHpja9f19F6m`SOcRRdM%h^=x_{ib)b4*1B# z(VQcyrgx=;q#MxcxjJXA>GIoHewVT|>E0D2+1k&7vegn$5t#|2h0Dq-vodw^0#1)| zCcaHRb&li!jFTEF6DmDx>L7*|F_V%G8~RaAOt0HBaVHA#1R`Vo14PyTU?~h~_}Ug? zdYyEQ3t``t{?COdRI)rE#rvTWWO7BE8<^hOWma@zcjY#P$=xVge@X)CWK>mBx`Q~8 znKV|&oSENkb!2oXJ-^n&qJ!bA@2u4B#-%-EsojlB3(BszY6d;oY}l|(W&LwzHuVnl zkOzZ)pU>+P8GIO5w5cf=?GCAE_cg3N#fvhfHMpawuxBcv&5;#mmdf@xmhQsLD0lqb`MU!Aa$R@=_=7V`DE({3Sq`1g@FfYZ00U?_d7nu*{ zrMNI4WRv0|^TE6n7Y2lEQe0#{n3v+hfRIg!i_8b}Qd}4ivPp4~`Cwj(3j;znDK0V} z%u8`$K*%P=MdpKfDJ~2M*`&D0d@wJ?g#jU(6c?Ef=B2nWAY_x`BJ;t#6c+}BY*Jig zKA4x{!hn!Xii^w#^HN+G5VA>ek@;X=iVFimHYqMLAIwW}VL-?x#YN_Wc_}Uo2-&2# z$b2v_#f1SOn-mwB59Xz~Fd$@;h^xHt>L!e%_cfE~#mu31UALi^IvsLzdl-PxB>;?V z0O0E1==U4|Lo5L2djSxh2jEt1>$<}$0Vuh-CDhQF`r^Wx59e-RZxpL$9jSimctz!S zMP-S9*B$#?-fH;s)jg|2dpdUSS$25qlF)^(&K#OIZ^hWDk^rb0TXg@X$A0i_d%M3h zb@K;zf=@1%T<$3YmCk3LD0}$yqwAN-8<)>a8E4L3y!)LeKmKgT>|c+*2a*r$+}pSK z*oxkTC(W|abD^&X?s}u^%~z^-7`5TOx0Igmc}e|o`M&XE;-}%~8joH{J^Ry%jq|D( z?cB6@?8}3HyV`EH{*A+} zp@pY+Km9vDf7i+xm&6WTxv*}qcm1V@A~O$s`!g5aa&_%*pPzVnd~tns*NoS$oLY8r g`~Wz6(|18Izx(J%o$9)3>*d&%rq z4TN623%CrYs2iY3{cpEzh&40k&fd?e^BY|83yFgXxsXc#!GRk6@Ej z!J8c|RY_%(J{-LFxf>nu2*&1ooHuFK%-6*zF=n4k(1VGA?|*d}#G-!GPiLE!3nIPs!!+y5C|greMKx21vg( zeg!>gN8b6@d-kx<3|zJS$Y7(kq7B|=8R8l#I(voIUEFt@t%vjFZt!03}Qn>!AF};_^*&aK)yo?}JjDI$_x=2c0TIvT2AJair?| zK!;;}*-NB#Uzs!i^jypruIWZA2il}xW>}I4rBqqgRr8gpJy|*Ek{PgxP-JZ6hWBH` z3|zeBP0B1AE_!dPJR64PK<}RXC~*ju3y0gCioZ0!1Q-CqqWJ_Biu7Rs0000& z4@~tH^{G)^Hu&znpv#9$frTjozBOih&`A ztV^*J=#(Q;LQX~Fdq7l_l7c7;Qamh5P?Vu4frXD})?A|m3yQj6i|x{UnNkM|LZwoP zRALe0jtG)0%YqmcqR}uT!rr7!ksr3bwweY7d%9~n)Fd_tG@@ZLPSZT|bp8sKQ&($y z3t?gb6MW)^q-k~hpK2|uPJ6U~7w`5@ z+AB^vSSVnRjJrBZa;YtF%Yj)JBTC#NA!D_O_m>GJUYR%`n++n|33h5oH|^kX*AgkL zAd1sGBT`{WVhJcpaVSP%taCRTMR6Y0h+&o{|3(=Rhf?$plof!1DEcpK=&(dw3$ZMi zLCp$|JyNx%X)tel6xlk?D`}oxFk+epR25Z?CsajAsFEb*Qkje@rs8ren(IkqbFoBC zRw4R$kc*nEu_&8sC>vCDkS(ZS*POtH>Jkf7GXl-VzGNEeTaYyx`;u)aD==q-phlO} zZ0(3OLa?lNAluY?7~8CIUDlz8pHBqO#dKcjDf+LUTsX644y;wQ9nOujA9~Nd*s%3! z=;f;purYfkv#xpjwaYh8O+PLl8Xio}ypgZWs@})e{Vgrv(roJP!K)AaFWmi!WOAVQ z8wXd0xT8Nqp!H;V*}jYSxVP8W_lU-Oa)Jhp6Wcl){6+=flFYhV3X e_2|UA_Bn3gdGp!L&F80sCnullQ|@Groc;}6Hix+Y diff --git a/src/gui/qt-daemon/html/files/desktop_linux_icon.png b/src/gui/qt-daemon/html/files/desktop_linux_icon.png deleted file mode 100644 index c48284bf61612d98b8def242332b20bc1f2dbe61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1293 zcmV+o1@iidP)*+eW^m(oKZF&8zDg1R*@1KW2mOMvVS0lfkaZouWqxEzWk5v;YY2W#0Q1oEyl;;M zr%VP~z8MN!jQ;K(!{|rJWZrM> zlX}S(RxAUp2Tuh#Kp$B#lXUF8_lC_CA+YS@Q~mVOtN~YxB7xAd=l<(sWhJouqu*Ld z$gf2Wms)hO*48Z-`G$+-e#QL<23 z2!Md46l;^7as-$u*f=QAL|RfM=UcV@!#}@B8{+K}`7dl8S$*J->&W#-FNuB*qiKPv zSLID0Sr5qAizLIrv?)%PpaA}|C7_t_xQ+AKG!O~Ix>}XrC^_vlDuW)w#HGdfPJuYL zYuUBwJOXR>o|!}1pEDr=LPp>x^nw+d!ga~nZw7@$E~G_|bntcGbSm6>a(=|E z1BS^)QVe%f7S_q`G-^NzngSC7+1UaDddqepqr$CsqWg(3J|^B&HJC@5zDw><0=kbW zi;{-<=_Dm{bmzJmC-VrjMbBH&7sU{;kV@k-x&mKO5~j;_B|cL_ywwo+Q(oMG{X-w` z+m55?^J1OPEpWmEtwi9U>?<@>0z#OyPO@{C_563YZH5@2~A_tJ_!9k<#@R z(SQ)m+?PF4N))x?5zO>cc#mw`G;Lo=FSeXu%O+n84c0-%WQ`e|QxGk5L}bBGBDN=PX|+UO|h#g+^@clZ({hb6+W>cW+Eckb}UD^9?| z^HJ{+BGH8z%7`15L1(k_l3O)0Uk;*M7~ewRX_=@hL&T zLU*rrX=_cmX`5ArwfAKP$ii%@;;BWM0K3}puK)u8lO{;~qDb@g00000NkvXXu0mjf D-w0`U diff --git a/src/gui/qt-daemon/html/history.svg b/src/gui/qt-daemon/html/history.svg deleted file mode 100644 index c9945561..00000000 --- a/src/gui/qt-daemon/html/history.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/howto.svg b/src/gui/qt-daemon/html/howto.svg deleted file mode 100644 index 92362f78..00000000 --- a/src/gui/qt-daemon/html/howto.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/import-export.svg b/src/gui/qt-daemon/html/import-export.svg deleted file mode 100644 index 48fd7073..00000000 --- a/src/gui/qt-daemon/html/import-export.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/index.html b/src/gui/qt-daemon/html/index.html deleted file mode 100644 index 9e31e8c1..00000000 --- a/src/gui/qt-daemon/html/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Zano - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/info.svg b/src/gui/qt-daemon/html/info.svg deleted file mode 100644 index 083cdf38..00000000 --- a/src/gui/qt-daemon/html/info.svg +++ /dev/null @@ -1 +0,0 @@ -info \ No newline at end of file diff --git a/src/gui/qt-daemon/html/lock-transaction.svg b/src/gui/qt-daemon/html/lock-transaction.svg deleted file mode 100644 index 49a2e523..00000000 --- a/src/gui/qt-daemon/html/lock-transaction.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/lock.svg b/src/gui/qt-daemon/html/lock.svg deleted file mode 100644 index 021aae19..00000000 --- a/src/gui/qt-daemon/html/lock.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/logout.svg b/src/gui/qt-daemon/html/logout.svg deleted file mode 100644 index b2f23e62..00000000 --- a/src/gui/qt-daemon/html/logout.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - exit - - - - - diff --git a/src/gui/qt-daemon/html/main.js b/src/gui/qt-daemon/html/main.js deleted file mode 100644 index 2defe0dd..00000000 --- a/src/gui/qt-daemon/html/main.js +++ /dev/null @@ -1,9788 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ - -/***/ "./src/$$_lazy_route_resource lazy recursive": -/*!**********************************************************!*\ - !*** ./src/$$_lazy_route_resource lazy namespace object ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function webpackEmptyAsyncContext(req) { - // Here Promise.resolve().then() is used instead of new Promise() to prevent - // uncaught exception popping up in devtools - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); -} -webpackEmptyAsyncContext.keys = function() { return []; }; -webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; -module.exports = webpackEmptyAsyncContext; -webpackEmptyAsyncContext.id = "./src/$$_lazy_route_resource lazy recursive"; - -/***/ }), - -/***/ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.html": -/*!********************************************************************************!*\ - !*** ./src/app/_helpers/directives/confirm-modal/confirm-modal.component.html ***! - \********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "

      \r\n
      \r\n \r\n
      \r\n {{title}}\r\n {{message}}\r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      " - -/***/ }), - -/***/ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.scss": -/*!********************************************************************************!*\ - !*** ./src/app/_helpers/directives/confirm-modal/confirm-modal.component.scss ***! - \********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.25);\n z-index: 5; }\n\n.modal {\n position: relative;\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: 200%;\n padding: 3rem;\n min-width: 34rem;\n max-width: 60rem; }\n\n.modal .content {\n display: flex; }\n\n.modal .content .icon {\n flex: 0 0 auto;\n width: 4.4rem;\n height: 4.4rem; }\n\n.modal .content .icon.info {\n -webkit-mask: url('modal-info.svg') no-repeat center;\n mask: url('modal-info.svg') no-repeat center; }\n\n.modal .content .message-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n margin-left: 2rem; }\n\n.modal .content .message-container .title {\n font-size: 1.8rem;\n font-weight: 600;\n line-height: 2.2rem; }\n\n.modal .content .message-container .message {\n font-size: 1.3rem;\n line-height: 1.8rem;\n margin-top: 0.4rem; }\n\n.modal .wrap-btn {\n display: flex;\n justify-content: space-between;\n width: 100%;\n margin-top: 3.5rem; }\n\n.modal .action-button {\n width: 10rem;\n height: 2.4rem; }\n\n.modal .close-button {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n margin: 0;\n padding: 0;\n width: 2.4rem;\n height: 2.4rem; }\n\n.modal .close-button .icon {\n -webkit-mask: url('close.svg') no-repeat center;\n mask: url('close.svg') no-repeat center;\n width: 2.4rem;\n height: 2.4rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9jb25maXJtLW1vZGFsL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXF9oZWxwZXJzXFxkaXJlY3RpdmVzXFxjb25maXJtLW1vZGFsXFxjb25maXJtLW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUM7RUFDckMsVUFBVSxFQUFBOztBQUVaO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsMkJBQTJCO0VBQzNCLHFCQUFxQjtFQUNyQixhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGdCQUFnQixFQUFBOztBQVJsQjtJQVdJLGFBQWEsRUFBQTs7QUFYakI7TUFjTSxjQUFjO01BQ2QsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUFoQnBCO1FBbUJRLG9EQUE0RDtnQkFBNUQsNENBQTRELEVBQUE7O0FBbkJwRTtNQXdCTSxhQUFhO01BQ2Isc0JBQXNCO01BQ3RCLHVCQUF1QjtNQUN2Qix1QkFBdUI7TUFDdkIsaUJBQWlCLEVBQUE7O0FBNUJ2QjtRQStCUSxpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFBOztBQWpDM0I7UUFxQ1EsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixrQkFBa0IsRUFBQTs7QUF2QzFCO0lBNkNJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLGtCQUFrQixFQUFBOztBQWhEdEI7SUFvREksWUFBWTtJQUNaLGNBQWMsRUFBQTs7QUFyRGxCO0lBeURJLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjLEVBQUE7O0FBbkVsQjtNQXNFTSwrQ0FBdUQ7Y0FBdkQsdUNBQXVEO01BQ3ZELGFBQWE7TUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9faGVscGVycy9kaXJlY3RpdmVzL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgdG9wOiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xyXG4gIHotaW5kZXg6IDU7XHJcbn1cclxuLm1vZGFsIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDIwMCU7XHJcbiAgcGFkZGluZzogM3JlbTtcclxuICBtaW4td2lkdGg6IDM0cmVtO1xyXG4gIG1heC13aWR0aDogNjByZW07XHJcblxyXG4gIC5jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgd2lkdGg6IDQuNHJlbTtcclxuICAgICAgaGVpZ2h0OiA0LjRyZW07XHJcblxyXG4gICAgICAmLmluZm8ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9tb2RhbC1pbmZvLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5tZXNzYWdlLWNvbnRhaW5lciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDJyZW07XHJcblxyXG4gICAgICAudGl0bGUge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIuMnJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLm1lc3NhZ2Uge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC40cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAud3JhcC1idG4ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luLXRvcDogMy41cmVtO1xyXG4gIH1cclxuICBcclxuICAuYWN0aW9uLWJ1dHRvbiB7XHJcbiAgICB3aWR0aDogMTByZW07XHJcbiAgICBoZWlnaHQ6IDIuNHJlbTtcclxuICB9XHJcblxyXG4gIC5jbG9zZS1idXR0b24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgd2lkdGg6IDIuNHJlbTtcclxuICAgIGhlaWdodDogMi40cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDIuNHJlbTtcclxuICAgICAgaGVpZ2h0OiAyLjRyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.ts": -/*!******************************************************************************!*\ - !*** ./src/app/_helpers/directives/confirm-modal/confirm-modal.component.ts ***! - \******************************************************************************/ -/*! exports provided: ConfirmModalComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfirmModalComponent", function() { return ConfirmModalComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var ConfirmModalComponent = /** @class */ (function () { - function ConfirmModalComponent() { - this.confirmed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); - } - ConfirmModalComponent.prototype.ngOnInit = function () { - this.button.nativeElement.focus(); - }; - ConfirmModalComponent.prototype.onSubmit = function () { - this.confirmed.emit(true); - }; - ConfirmModalComponent.prototype.onClose = function () { - this.confirmed.emit(false); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], ConfirmModalComponent.prototype, "title", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], ConfirmModalComponent.prototype, "message", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]) - ], ConfirmModalComponent.prototype, "confirmed", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('btn'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], ConfirmModalComponent.prototype, "button", void 0); - ConfirmModalComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-confirm-modal', - template: __webpack_require__(/*! ./confirm-modal.component.html */ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.html"), - styles: [__webpack_require__(/*! ./confirm-modal.component.scss */ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.scss")] - }), - __metadata("design:paramtypes", []) - ], ConfirmModalComponent); - return ConfirmModalComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.ts": -/*!**************************************************************************************************!*\ - !*** ./src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.ts ***! - \**************************************************************************************************/ -/*! exports provided: InputDisableSelectionDirective */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputDisableSelectionDirective", function() { return InputDisableSelectionDirective; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var InputDisableSelectionDirective = /** @class */ (function () { - function InputDisableSelectionDirective() { - } - InputDisableSelectionDirective.prototype.handleInput = function (event) { - if (event.target.readOnly) { - event.preventDefault(); - } - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('mousedown', ['$event']), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Event]), - __metadata("design:returntype", void 0) - ], InputDisableSelectionDirective.prototype, "handleInput", null); - InputDisableSelectionDirective = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ - selector: 'input' - }), - __metadata("design:paramtypes", []) - ], InputDisableSelectionDirective); - return InputDisableSelectionDirective; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/input-validate/input-validate.directive.ts": -/*!********************************************************************************!*\ - !*** ./src/app/_helpers/directives/input-validate/input-validate.directive.ts ***! - \********************************************************************************/ -/*! exports provided: InputValidateDirective */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InputValidateDirective", function() { return InputValidateDirective; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var InputValidateDirective = /** @class */ (function () { - function InputValidateDirective(el, variablesService) { - this.el = el; - this.variablesService = variablesService; - } - Object.defineProperty(InputValidateDirective.prototype, "defineInputType", { - set: function (type) { - this.type = type; - }, - enumerable: true, - configurable: true - }); - InputValidateDirective.prototype.handleInput = function (event) { - if (this.type === 'money') { - this.moneyValidation(event); - } - else if (this.type === 'integer') { - this.integerValidation(event); - } - }; - InputValidateDirective.prototype.moneyValidation = function (event) { - var currentValue = event.target.value; - var originalValue = currentValue; - var OnlyD = /[^\d\.]/g; - var _has_error = currentValue.match(OnlyD); - if (_has_error && _has_error.length) { - currentValue = currentValue.replace(',', '.').replace(OnlyD, ''); - } - var _double_separator = currentValue.match(/\./g); - if (_double_separator && _double_separator.length > 1) { - currentValue = currentValue.substr(0, currentValue.lastIndexOf('.')); - } - if (currentValue.indexOf('.') === 0) { - currentValue = '0' + currentValue; - } - var _zero_fill = currentValue.split('.'); - if (_zero_fill[0].length > 7) { - _zero_fill[0] = _zero_fill[0].substr(0, 7); - } - if (1 in _zero_fill && _zero_fill[1].length) { - _zero_fill[1] = _zero_fill[1].substr(0, this.variablesService.digits); - } - currentValue = _zero_fill.join('.'); - if (currentValue !== originalValue) { - event.target.value = currentValue; - var cursorPosition = event.target.selectionEnd; - event.target.setSelectionRange(cursorPosition, cursorPosition); - event.target.dispatchEvent(new Event('input')); - } - }; - InputValidateDirective.prototype.integerValidation = function (event) { - var currentValue = event.target.value; - var originalValue = currentValue; - var OnlyD = /[^\d]/g; - var _has_error = currentValue.match(OnlyD); - if (_has_error && _has_error.length) { - currentValue = currentValue.replace(OnlyD, ''); - } - if (currentValue !== originalValue) { - var cursorPosition = event.target.selectionEnd; - event.target.value = currentValue; - event.target.setSelectionRange(cursorPosition, cursorPosition); - } - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('appInputValidate'), - __metadata("design:type", String), - __metadata("design:paramtypes", [String]) - ], InputValidateDirective.prototype, "defineInputType", null); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('input', ['$event']), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Event]), - __metadata("design:returntype", void 0) - ], InputValidateDirective.prototype, "handleInput", null); - InputValidateDirective = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ - selector: '[appInputValidate]' - }), - __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"]]) - ], InputValidateDirective); - return InputValidateDirective; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/modal-container/modal-container.component.html": -/*!************************************************************************************!*\ - !*** ./src/app/_helpers/directives/modal-container/modal-container.component.html ***! - \************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n \r\n
      \r\n {{title}}\r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/_helpers/directives/modal-container/modal-container.component.scss": -/*!************************************************************************************!*\ - !*** ./src/app/_helpers/directives/modal-container/modal-container.component.scss ***! - \************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.25); }\n\n.modal {\n position: relative;\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: 200%;\n padding: 2rem;\n min-width: 34rem;\n max-width: 60rem; }\n\n.modal .content {\n display: flex;\n margin: 1.2rem 0; }\n\n.modal .content .icon {\n flex: 0 0 auto;\n width: 4.4rem;\n height: 4.4rem; }\n\n.modal .content .icon.error {\n -webkit-mask: url('modal-alert.svg') no-repeat center;\n mask: url('modal-alert.svg') no-repeat center; }\n\n.modal .content .icon.success {\n -webkit-mask: url('modal-success.svg') no-repeat center;\n mask: url('modal-success.svg') no-repeat center; }\n\n.modal .content .icon.info {\n -webkit-mask: url('modal-info.svg') no-repeat center;\n mask: url('modal-info.svg') no-repeat center; }\n\n.modal .content .message-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n margin-left: 2rem; }\n\n.modal .content .message-container .title {\n font-size: 1.8rem;\n font-weight: 600;\n line-height: 2.2rem; }\n\n.modal .content .message-container .message {\n font-size: 1.3rem;\n line-height: 1.8rem;\n margin-top: 0.4rem; }\n\n.modal .action-button {\n margin: 1.2rem auto 0.6rem;\n width: 10rem;\n height: 2.4rem; }\n\n.modal .close-button {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n margin: 0;\n padding: 0;\n width: 2.4rem;\n height: 2.4rem; }\n\n.modal .close-button .icon {\n -webkit-mask: url('close.svg') no-repeat center;\n mask: url('close.svg') no-repeat center;\n width: 2.4rem;\n height: 2.4rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9tb2RhbC1jb250YWluZXIvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcX2hlbHBlcnNcXGRpcmVjdGl2ZXNcXG1vZGFsLWNvbnRhaW5lclxcbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFFdkM7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IscUJBQXFCO0VBQ3JCLGFBQWE7RUFDYixnQkFBZ0I7RUFDaEIsZ0JBQWdCLEVBQUE7O0FBUmxCO0lBV0ksYUFBYTtJQUNiLGdCQUFnQixFQUFBOztBQVpwQjtNQWVNLGNBQWM7TUFDZCxhQUFhO01BQ2IsY0FBYyxFQUFBOztBQWpCcEI7UUFvQlEscURBQTZEO2dCQUE3RCw2Q0FBNkQsRUFBQTs7QUFwQnJFO1FBd0JRLHVEQUErRDtnQkFBL0QsK0NBQStELEVBQUE7O0FBeEJ2RTtRQTRCUSxvREFBNEQ7Z0JBQTVELDRDQUE0RCxFQUFBOztBQTVCcEU7TUFpQ00sYUFBYTtNQUNiLHNCQUFzQjtNQUN0Qix1QkFBdUI7TUFDdkIsdUJBQXVCO01BQ3ZCLGlCQUFpQixFQUFBOztBQXJDdkI7UUF3Q1EsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBQTs7QUExQzNCO1FBOENRLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsa0JBQWtCLEVBQUE7O0FBaEQxQjtJQXNESSwwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLGNBQWMsRUFBQTs7QUF4RGxCO0lBNERJLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjLEVBQUE7O0FBdEVsQjtNQXlFTSwrQ0FBdUQ7Y0FBdkQsdUNBQXVEO01BQ3ZELGFBQWE7TUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9faGVscGVycy9kaXJlY3RpdmVzL21vZGFsLWNvbnRhaW5lci9tb2RhbC1jb250YWluZXIuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBib3R0b206IDA7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcclxufVxyXG4ubW9kYWwge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJTtcclxuICBwYWRkaW5nOiAycmVtO1xyXG4gIG1pbi13aWR0aDogMzRyZW07XHJcbiAgbWF4LXdpZHRoOiA2MHJlbTtcclxuXHJcbiAgLmNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIG1hcmdpbjogMS4ycmVtIDA7XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgd2lkdGg6IDQuNHJlbTtcclxuICAgICAgaGVpZ2h0OiA0LjRyZW07XHJcblxyXG4gICAgICAmLmVycm9yIHtcclxuICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvbW9kYWwtYWxlcnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnN1Y2Nlc3Mge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9tb2RhbC1zdWNjZXNzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5pbmZvIHtcclxuICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvbW9kYWwtaW5mby5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubWVzc2FnZS1jb250YWluZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAycmVtO1xyXG5cclxuICAgICAgLnRpdGxlIHtcclxuICAgICAgICBmb250LXNpemU6IDEuOHJlbTtcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyLjJyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5tZXNzYWdlIHtcclxuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS44cmVtO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuNHJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFjdGlvbi1idXR0b24ge1xyXG4gICAgbWFyZ2luOiAxLjJyZW0gYXV0byAwLjZyZW07XHJcbiAgICB3aWR0aDogMTByZW07XHJcbiAgICBoZWlnaHQ6IDIuNHJlbTtcclxuICB9XHJcblxyXG4gIC5jbG9zZS1idXR0b24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgd2lkdGg6IDIuNHJlbTtcclxuICAgIGhlaWdodDogMi40cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDIuNHJlbTtcclxuICAgICAgaGVpZ2h0OiAyLjRyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/_helpers/directives/modal-container/modal-container.component.ts": -/*!**********************************************************************************!*\ - !*** ./src/app/_helpers/directives/modal-container/modal-container.component.ts ***! - \**********************************************************************************/ -/*! exports provided: ModalContainerComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModalContainerComponent", function() { return ModalContainerComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var ModalContainerComponent = /** @class */ (function () { - function ModalContainerComponent(translate) { - this.translate = translate; - this.close = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); - } - ModalContainerComponent.prototype.ngOnInit = function () { - this.button.nativeElement.focus(); - switch (this.type) { - case 'error': - this.title = this.translate.instant('MODALS.ERROR'); - break; - case 'success': - this.title = this.translate.instant('MODALS.SUCCESS'); - break; - case 'info': - this.title = this.translate.instant('MODALS.INFO'); - break; - } - }; - ModalContainerComponent.prototype.onClose = function () { - this.close.emit(); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], ModalContainerComponent.prototype, "type", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], ModalContainerComponent.prototype, "message", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), - __metadata("design:type", Object) - ], ModalContainerComponent.prototype, "close", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('btn'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], ModalContainerComponent.prototype, "button", void 0); - ModalContainerComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-modal-container', - template: __webpack_require__(/*! ./modal-container.component.html */ "./src/app/_helpers/directives/modal-container/modal-container.component.html"), - styles: [__webpack_require__(/*! ./modal-container.component.scss */ "./src/app/_helpers/directives/modal-container/modal-container.component.scss")] - }), - __metadata("design:paramtypes", [_ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__["TranslateService"]]) - ], ModalContainerComponent); - return ModalContainerComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/progress-container/progress-container.component.html": -/*!******************************************************************************************!*\ - !*** ./src/app/_helpers/directives/progress-container/progress-container.component.html ***! - \******************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n {{ label | translate }}\r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/_helpers/directives/progress-container/progress-container.component.scss": -/*!******************************************************************************************!*\ - !*** ./src/app/_helpers/directives/progress-container/progress-container.component.scss ***! - \******************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".progress-bar-container {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 0 3rem;\n width: 100%;\n height: 3rem; }\n .progress-bar-container .progress-bar {\n position: absolute;\n top: -0.7rem;\n left: 0;\n margin: 0 3rem;\n width: calc(100% - 6rem);\n height: 0.7rem; }\n .progress-bar-container .progress-bar .progress-bar-full {\n height: 0.7rem; }\n .progress-bar-container .progress-labels {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 1.2rem;\n height: 100%; }\n .progress-bar-container .progress-labels span {\n flex: 1 0 0;\n text-align: center; }\n .progress-bar-container .progress-labels span:first-child {\n text-align: left; }\n .progress-bar-container .progress-labels span:last-child {\n text-align: right; }\n .progress-bar-container .progress-time {\n position: absolute;\n top: -3rem;\n left: 50%;\n transform: translateX(-50%);\n font-size: 1.2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9wcm9ncmVzcy1jb250YWluZXIvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcX2hlbHBlcnNcXGRpcmVjdGl2ZXNcXHByb2dyZXNzLWNvbnRhaW5lclxccHJvZ3Jlc3MtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCxPQUFPO0VBQ1AsZUFBZTtFQUNmLFdBQVc7RUFDWCxZQUFZLEVBQUE7RUFOZDtJQVNJLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osT0FBTztJQUNQLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsY0FBYyxFQUFBO0VBZGxCO01BaUJNLGNBQWMsRUFBQTtFQWpCcEI7SUFzQkksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsaUJBQWlCO0lBQ2pCLFlBQVksRUFBQTtFQTFCaEI7TUE2Qk0sV0FBVztNQUNYLGtCQUFrQixFQUFBO0VBOUJ4QjtRQWlDUSxnQkFBZ0IsRUFBQTtFQWpDeEI7UUFxQ1EsaUJBQWlCLEVBQUE7RUFyQ3pCO0lBMkNJLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsU0FBUztJQUNULDJCQUEyQjtJQUMzQixpQkFBaUIsRUFBQSIsImZpbGUiOiJzcmMvYXBwL19oZWxwZXJzL2RpcmVjdGl2ZXMvcHJvZ3Jlc3MtY29udGFpbmVyL3Byb2dyZXNzLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcGFkZGluZzogMCAzcmVtO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogM3JlbTtcclxuXHJcbiAgLnByb2dyZXNzLWJhciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IC0wLjdyZW07XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgbWFyZ2luOiAwIDNyZW07XHJcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNnJlbSk7XHJcbiAgICBoZWlnaHQ6IDAuN3JlbTtcclxuXHJcbiAgICAucHJvZ3Jlc3MtYmFyLWZ1bGwge1xyXG4gICAgICBoZWlnaHQ6IDAuN3JlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy1sYWJlbHMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICBzcGFuIHtcclxuICAgICAgZmxleDogMSAwIDA7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy10aW1lIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTNyZW07XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/_helpers/directives/progress-container/progress-container.component.ts": -/*!****************************************************************************************!*\ - !*** ./src/app/_helpers/directives/progress-container/progress-container.component.ts ***! - \****************************************************************************************/ -/*! exports provided: ProgressContainerComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProgressContainerComponent", function() { return ProgressContainerComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var ProgressContainerComponent = /** @class */ (function () { - function ProgressContainerComponent() { - } - ProgressContainerComponent.prototype.ngOnInit = function () { }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], ProgressContainerComponent.prototype, "width", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Array) - ], ProgressContainerComponent.prototype, "labels", void 0); - ProgressContainerComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-progress-container', - template: __webpack_require__(/*! ./progress-container.component.html */ "./src/app/_helpers/directives/progress-container/progress-container.component.html"), - styles: [__webpack_require__(/*! ./progress-container.component.scss */ "./src/app/_helpers/directives/progress-container/progress-container.component.scss")] - }), - __metadata("design:paramtypes", []) - ], ProgressContainerComponent); - return ProgressContainerComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/staking-switch/staking-switch.component.html": -/*!**********************************************************************************!*\ - !*** ./src/app/_helpers/directives/staking-switch/staking-switch.component.html ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n {{ 'STAKING.SWITCH.ON' | translate }}\r\n \r\n {{ 'STAKING.SWITCH.OFF' | translate }}\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/_helpers/directives/staking-switch/staking-switch.component.scss": -/*!**********************************************************************************!*\ - !*** ./src/app/_helpers/directives/staking-switch/staking-switch.component.scss ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".switch {\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-radius: 1rem;\n cursor: pointer;\n font-size: 1rem;\n padding: 0.5rem;\n width: 5rem;\n height: 2rem; }\n .switch .circle {\n border-radius: 1rem;\n width: 1.2rem;\n height: 1.2rem; }\n .switch .option {\n margin: 0 0.2rem;\n line-height: 1.2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9zdGFraW5nLXN3aXRjaC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxfaGVscGVyc1xcZGlyZWN0aXZlc1xcc3Rha2luZy1zd2l0Y2hcXHN0YWtpbmctc3dpdGNoLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixlQUFlO0VBQ2YsZUFBZTtFQUNmLFdBQVc7RUFDWCxZQUFZLEVBQUE7RUFUZDtJQVlJLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsY0FBYyxFQUFBO0VBZGxCO0lBa0JJLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBQSIsImZpbGUiOiJzcmMvYXBwL19oZWxwZXJzL2RpcmVjdGl2ZXMvc3Rha2luZy1zd2l0Y2gvc3Rha2luZy1zd2l0Y2guY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuc3dpdGNoIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIGZvbnQtc2l6ZTogMXJlbTtcclxuICBwYWRkaW5nOiAwLjVyZW07XHJcbiAgd2lkdGg6IDVyZW07XHJcbiAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAuY2lyY2xlIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgfVxyXG5cclxuICAub3B0aW9uIHtcclxuICAgIG1hcmdpbjogMCAwLjJyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMS4ycmVtO1xyXG4gIH1cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/_helpers/directives/staking-switch/staking-switch.component.ts": -/*!********************************************************************************!*\ - !*** ./src/app/_helpers/directives/staking-switch/staking-switch.component.ts ***! - \********************************************************************************/ -/*! exports provided: StakingSwitchComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StakingSwitchComponent", function() { return StakingSwitchComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_backend_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var StakingSwitchComponent = /** @class */ (function () { - function StakingSwitchComponent(backend, variablesService) { - this.backend = backend; - this.variablesService = variablesService; - this.stakingChange = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); - } - StakingSwitchComponent.prototype.ngOnInit = function () { }; - StakingSwitchComponent.prototype.toggleStaking = function () { - var wallet = this.variablesService.getWallet(this.wallet_id); - if (wallet && wallet.loaded) { - this.stakingChange.emit(!this.staking); - if (!this.staking) { - this.backend.startPosMining(this.wallet_id); - } - else { - this.backend.stopPosMining(this.wallet_id); - } - } - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Boolean) - ], StakingSwitchComponent.prototype, "wallet_id", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Boolean) - ], StakingSwitchComponent.prototype, "staking", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), - __metadata("design:type", Object) - ], StakingSwitchComponent.prototype, "stakingChange", void 0); - StakingSwitchComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-staking-switch', - template: __webpack_require__(/*! ./staking-switch.component.html */ "./src/app/_helpers/directives/staking-switch/staking-switch.component.html"), - styles: [__webpack_require__(/*! ./staking-switch.component.scss */ "./src/app/_helpers/directives/staking-switch/staking-switch.component.scss")] - }), - __metadata("design:paramtypes", [_services_backend_service__WEBPACK_IMPORTED_MODULE_1__["BackendService"], _services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"]]) - ], StakingSwitchComponent); - return StakingSwitchComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/tooltip.directive.ts": -/*!**********************************************************!*\ - !*** ./src/app/_helpers/directives/tooltip.directive.ts ***! - \**********************************************************/ -/*! exports provided: TooltipDirective */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TooltipDirective", function() { return TooltipDirective; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var TooltipDirective = /** @class */ (function () { - function TooltipDirective(el, renderer, route) { - this.el = el; - this.renderer = renderer; - this.route = route; - this.timeout = 0; - this.timeDelay = 0; - this.delay = 0; - this.showWhenNoOverflow = true; - this.onHide = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); - } - TooltipDirective.prototype.onMouseEnter = function () { - var _this = this; - if (this.showWhenNoOverflow || (!this.showWhenNoOverflow && this.el.nativeElement.offsetWidth < this.el.nativeElement.scrollWidth)) { - this.cursor = 'pointer'; - if (!this.tooltip) { - if (this.timeDelay !== 0) { - this.removeTooltipTimeDelay = setTimeout(function () { - _this.show(); - }, this.timeDelay); - } - else { - this.show(); - } - } - else { - this.cancelHide(); - } - } - }; - TooltipDirective.prototype.onMouseLeave = function () { - clearTimeout(this.removeTooltipTimeDelay); - if (this.tooltip) { - this.hide(); - } - }; - TooltipDirective.prototype.show = function () { - this.create(); - this.placement = this.placement === null ? 'top' : this.placement; - this.setPosition(this.placement); - }; - TooltipDirective.prototype.hide = function () { - var _this = this; - this.removeTooltipTimeout = setTimeout(function () { - _this.renderer.setStyle(_this.tooltip, 'opacity', '0'); - _this.removeTooltipTimeoutInner = setTimeout(function () { - _this.renderer.removeChild(document.body, _this.tooltip); - _this.tooltip.removeEventListener('mouseenter', _this.enter); - _this.tooltip.removeEventListener('mouseleave', _this.leave); - _this.tooltip = null; - _this.onHide.emit(true); - }, _this.delay); - }, this.timeout); - }; - TooltipDirective.prototype.cancelHide = function () { - clearTimeout(this.removeTooltipTimeout); - clearTimeout(this.removeTooltipTimeoutInner); - this.renderer.setStyle(this.tooltip, 'opacity', '1'); - }; - TooltipDirective.prototype.create = function () { - var _this = this; - this.tooltip = this.renderer.createElement('div'); - var innerBlock = this.renderer.createElement('div'); - if (typeof this.tooltipInner === 'string') { - innerBlock.innerHTML = this.tooltipInner; - } - else { - innerBlock = this.tooltipInner; - } - this.renderer.addClass(innerBlock, 'tooltip-inner'); - this.renderer.addClass(innerBlock, 'scrolled-content'); - this.renderer.appendChild(this.tooltip, innerBlock); - this.renderer.appendChild(document.body, this.tooltip); - this.enter = function () { - _this.cancelHide(); - }; - this.tooltip.addEventListener('mouseenter', this.enter); - this.leave = function () { - if (_this.tooltip) { - _this.hide(); - } - }; - this.tooltip.addEventListener('mouseleave', this.leave); - this.renderer.setStyle(document.body, 'position', 'relative'); - this.renderer.setStyle(this.tooltip, 'position', 'absolute'); - if (this.tooltipClass !== null) { - var classes = this.tooltipClass.split(' '); - for (var i = 0; i < classes.length; i++) { - this.renderer.addClass(this.tooltip, classes[i]); - } - } - this.renderer.setStyle(this.tooltip, 'opacity', '0'); - this.renderer.setStyle(this.tooltip, '-webkit-transition', "opacity " + this.delay + "ms"); - this.renderer.setStyle(this.tooltip, '-moz-transition', "opacity " + this.delay + "ms"); - this.renderer.setStyle(this.tooltip, '-o-transition', "opacity " + this.delay + "ms"); - this.renderer.setStyle(this.tooltip, 'transition', "opacity " + this.delay + "ms"); - window.setTimeout(function () { - _this.renderer.setStyle(_this.tooltip, 'opacity', '1'); - }, 0); - }; - TooltipDirective.prototype.setPosition = function (placement) { - var hostPos = this.el.nativeElement.getBoundingClientRect(); - this.renderer.addClass(this.tooltip, 'ng-tooltip-' + placement); - var topExit = hostPos.top - this.tooltip.getBoundingClientRect().height - parseInt(getComputedStyle(this.tooltip).marginTop, 10) < 0; - var bottomExit = window.innerHeight < hostPos.bottom + this.tooltip.getBoundingClientRect().height + parseInt(getComputedStyle(this.tooltip).marginTop, 10); - switch (placement) { - case 'top': - if (topExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('bottom'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'left', hostPos.left + (hostPos.right - hostPos.left) / 2 - this.tooltip.getBoundingClientRect().width / 2 + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px'); - this.checkSides(); - } - break; - case 'top-left': - if (topExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('bottom-left'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'left', hostPos.left + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px'); - this.checkSides(); - } - break; - case 'top-right': - if (topExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('bottom-right'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'left', hostPos.right - this.tooltip.offsetWidth + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px'); - this.checkSides(); - } - break; - case 'bottom': - if (bottomExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('top'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px'); - this.renderer.setStyle(this.tooltip, 'left', hostPos.left + (hostPos.right - hostPos.left) / 2 - this.tooltip.getBoundingClientRect().width / 2 + 'px'); - this.checkSides(); - } - break; - case 'bottom-left': - if (bottomExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('top-left'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px'); - this.renderer.setStyle(this.tooltip, 'left', hostPos.left + 'px'); - this.checkSides(); - } - break; - case 'bottom-right': - if (bottomExit) { - this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement); - this.setPosition('top-right'); - return; - } - else { - this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px'); - this.renderer.setStyle(this.tooltip, 'left', hostPos.right - this.tooltip.offsetWidth + 'px'); - this.checkSides(); - } - break; - case 'left': - this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.top + (hostPos.bottom - hostPos.top) / 2 - this.tooltip.getBoundingClientRect().height / 2 + 'px'); - break; - case 'left-top': - this.renderer.setStyle(this.tooltip, 'top', hostPos.top + 'px'); - this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px'); - break; - case 'left-bottom': - this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom - this.tooltip.getBoundingClientRect().height + 'px'); - break; - case 'right': - this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.top + (hostPos.bottom - hostPos.top) / 2 - this.tooltip.getBoundingClientRect().height / 2 + 'px'); - break; - case 'right-top': - this.renderer.setStyle(this.tooltip, 'top', hostPos.top + 'px'); - this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px'); - break; - case 'right-bottom': - this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px'); - this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom - this.tooltip.getBoundingClientRect().height + 'px'); - break; - } - }; - TooltipDirective.prototype.checkSides = function () { - if (this.tooltip.getBoundingClientRect().left < 0) { - this.renderer.setStyle(this.tooltip, 'left', 0); - } - if (this.tooltip.getBoundingClientRect().right > window.innerWidth) { - this.renderer.setStyle(this.tooltip, 'left', window.innerWidth - this.tooltip.getBoundingClientRect().width + 'px'); - } - }; - TooltipDirective.prototype.ngOnDestroy = function () { - clearTimeout(this.removeTooltipTimeout); - clearTimeout(this.removeTooltipTimeoutInner); - clearTimeout(this.removeTooltipTimeDelay); - if (this.tooltip) { - this.renderer.removeChild(document.body, this.tooltip); - this.tooltip = null; - } - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostBinding"])('style.cursor'), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "cursor", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])('tooltip'), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "tooltipInner", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], TooltipDirective.prototype, "placement", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", String) - ], TooltipDirective.prototype, "tooltipClass", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "timeout", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "timeDelay", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "delay", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "showWhenNoOverflow", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), - __metadata("design:type", Object) - ], TooltipDirective.prototype, "onHide", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('mouseenter'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) - ], TooltipDirective.prototype, "onMouseEnter", null); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('mouseleave'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) - ], TooltipDirective.prototype, "onMouseLeave", null); - TooltipDirective = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ - selector: '[tooltip]' - }), - __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], _angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"]]) - ], TooltipDirective); - return TooltipDirective; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/directives/transaction-details/transaction-details.component.html": -/*!********************************************************************************************!*\ - !*** ./src/app/_helpers/directives/transaction-details/transaction-details.component.html ***! - \********************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n {{ 'HISTORY.DETAILS.ID' | translate }}\r\n {{transaction.tx_hash}}\r\n {{ 'HISTORY.DETAILS.SIZE' | translate }}\r\n {{ 'HISTORY.DETAILS.SIZE_VALUE' | translate : {value: transaction.tx_blob_size} }}\r\n
      \r\n
      \r\n {{ 'HISTORY.DETAILS.HEIGHT' | translate }}\r\n {{transaction.height}}\r\n {{ 'HISTORY.DETAILS.CONFIRMATION' | translate }}\r\n {{transaction.height === 0 ? 0 : variablesService.height_app - transaction.height}}\r\n
      \r\n
      \r\n {{ 'HISTORY.DETAILS.INPUTS' | translate }}\r\n {{inputs.join(', ')}}\r\n {{ 'HISTORY.DETAILS.OUTPUTS' | translate }}\r\n {{outputs.join(', ')}}\r\n
      \r\n
      \r\n {{ 'HISTORY.DETAILS.PAYMENT_ID' | translate }}\r\n \r\n {{transaction.payment_id}}\r\n \r\n
      \r\n
      \r\n {{ 'HISTORY.DETAILS.COMMENT' | translate }}\r\n \r\n {{transaction.comment}}\r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/_helpers/directives/transaction-details/transaction-details.component.scss": -/*!********************************************************************************************!*\ - !*** ./src/app/_helpers/directives/transaction-details/transaction-details.component.scss ***! - \********************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%; }\n\n.table {\n border-top: 0.2rem solid #ebebeb;\n margin: 0 3rem;\n padding: 0.5rem 0; }\n\n.table .row {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-top: none;\n line-height: 3rem;\n margin: 0 -3rem;\n width: 100%;\n height: 3rem; }\n\n.table .row .cell {\n flex-shrink: 0;\n flex-grow: 0;\n padding: 0 1rem;\n overflow: hidden;\n text-overflow: ellipsis; }\n\n.table .row .cell:first-child {\n padding-left: 3rem; }\n\n.table .row .cell:last-child {\n padding-right: 3rem; }\n\n.table .row .cell.key-value {\n cursor: pointer; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy90cmFuc2FjdGlvbi1kZXRhaWxzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXF9oZWxwZXJzXFxkaXJlY3RpdmVzXFx0cmFuc2FjdGlvbi1kZXRhaWxzXFx0cmFuc2FjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLE1BQU07RUFDTixPQUFPO0VBQ1AsV0FBVyxFQUFBOztBQUdiO0VBQ0UsZ0NBQWdDO0VBQ2hDLGNBQWM7RUFDZCxpQkFBaUIsRUFBQTs7QUFIbkI7SUFNSSxhQUFhO0lBQ2IsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQWJoQjtNQWdCTSxjQUFjO01BQ2QsWUFBWTtNQUNaLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCLEVBQUE7O0FBcEI3QjtRQXVCUSxrQkFBa0IsRUFBQTs7QUF2QjFCO1FBMkJRLG1CQUFtQixFQUFBOztBQTNCM0I7UUErQlEsZUFBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy90cmFuc2FjdGlvbi1kZXRhaWxzL3RyYW5zYWN0aW9uLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4udGFibGUge1xyXG4gIGJvcmRlci10b3A6IDAuMnJlbSBzb2xpZCAjZWJlYmViO1xyXG4gIG1hcmdpbjogMCAzcmVtO1xyXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xyXG5cclxuICAucm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgIGxpbmUtaGVpZ2h0OiAzcmVtO1xyXG4gICAgbWFyZ2luOiAwIC0zcmVtO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDNyZW07XHJcblxyXG4gICAgLmNlbGwge1xyXG4gICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgZmxleC1ncm93OiAwO1xyXG4gICAgICBwYWRkaW5nOiAwIDFyZW07XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG5cclxuICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcmVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDNyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYua2V5LXZhbHVlIHtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/_helpers/directives/transaction-details/transaction-details.component.ts": -/*!******************************************************************************************!*\ - !*** ./src/app/_helpers/directives/transaction-details/transaction-details.component.ts ***! - \******************************************************************************************/ -/*! exports provided: TransactionDetailsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TransactionDetailsComponent", function() { return TransactionDetailsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _models_transaction_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../models/transaction.model */ "./src/app/_helpers/models/transaction.model.ts"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../_shared/constants */ "./src/app/_shared/constants.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - -var TransactionDetailsComponent = /** @class */ (function () { - function TransactionDetailsComponent(variablesService, backendService, intToMoneyPipe) { - this.variablesService = variablesService; - this.backendService = backendService; - this.intToMoneyPipe = intToMoneyPipe; - this.inputs = []; - this.outputs = []; - } - TransactionDetailsComponent.prototype.ngOnInit = function () { - for (var input in this.transaction.td['spn']) { - if (this.transaction.td['spn'].hasOwnProperty(input)) { - this.inputs.push(this.intToMoneyPipe.transform(this.transaction.td['spn'][input])); - } - } - for (var output in this.transaction.td['rcv']) { - if (this.transaction.td['rcv'].hasOwnProperty(output)) { - this.outputs.push(this.intToMoneyPipe.transform(this.transaction.td['rcv'][output])); - } - } - }; - TransactionDetailsComponent.prototype.openInBrowser = function (tr) { - this.backendService.openUrlInBrowser((this.variablesService.testnet ? _shared_constants__WEBPACK_IMPORTED_MODULE_5__["BLOCK_EXPLORER_TN_TX_URL_PREFIX"] : _shared_constants__WEBPACK_IMPORTED_MODULE_5__["BLOCK_EXPLORER_TX_URL_PREFIX"]) + tr); - }; - TransactionDetailsComponent.prototype.ngOnDestroy = function () { }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", _models_transaction_model__WEBPACK_IMPORTED_MODULE_1__["Transaction"]) - ], TransactionDetailsComponent.prototype, "transaction", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Array) - ], TransactionDetailsComponent.prototype, "sizes", void 0); - TransactionDetailsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-transaction-details', - template: __webpack_require__(/*! ./transaction-details.component.html */ "./src/app/_helpers/directives/transaction-details/transaction-details.component.html"), - styles: [__webpack_require__(/*! ./transaction-details.component.scss */ "./src/app/_helpers/directives/transaction-details/transaction-details.component.scss")] - }), - __metadata("design:paramtypes", [_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"], _services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], _pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_4__["IntToMoneyPipe"]]) - ], TransactionDetailsComponent); - return TransactionDetailsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/models/transaction.model.ts": -/*!******************************************************!*\ - !*** ./src/app/_helpers/models/transaction.model.ts ***! - \******************************************************/ -/*! exports provided: Transaction */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transaction", function() { return Transaction; }); -var Transaction = /** @class */ (function () { - function Transaction() { - } - return Transaction; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/models/wallet.model.ts": -/*!*************************************************!*\ - !*** ./src/app/_helpers/models/wallet.model.ts ***! - \*************************************************/ -/*! exports provided: Wallet */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Wallet", function() { return Wallet; }); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_0__); - -var Wallet = /** @class */ (function () { - function Wallet(id, name, pass, path, address, balance, unlocked_balance, mined, tracking) { - if (mined === void 0) { mined = 0; } - if (tracking === void 0) { tracking = ''; } - this.updated = false; - this.history = []; - this.pages = []; - this.excluded_history = []; - this.contracts = []; - this.send_data = { - address: null, - amount: null, - comment: null, - mixin: null, - fee: null, - hide: null - }; - this.wallet_id = id; - this.name = name; - this.pass = pass; - this.path = path; - this.address = address; - this.balance = balance; - this.unlocked_balance = unlocked_balance; - this.mined_total = mined; - this.tracking_hey = tracking; - this.alias = {}; - this.staking = false; - this.new_messages = 0; - this.new_contracts = 0; - this.history = []; - this.excluded_history = []; - this.progress = 0; - this.loaded = false; - } - Wallet.prototype.getMoneyEquivalent = function (equivalent) { - return this.balance.multipliedBy(equivalent).toFixed(0); - }; - Wallet.prototype.havePass = function () { - return (this.pass !== '' && this.pass !== null); - }; - Wallet.prototype.isActive = function (id) { - return this.wallet_id === id; - }; - Wallet.prototype.prepareHistoryItem = function (item) { - if (item.tx_type === 4) { - item.sortFee = item.amount.plus(item.fee).negated(); - item.sortAmount = new bignumber_js__WEBPACK_IMPORTED_MODULE_0__["BigNumber"](0); - } - else if (item.tx_type === 3) { - item.sortFee = new bignumber_js__WEBPACK_IMPORTED_MODULE_0__["BigNumber"](0); - } - else if ((item.hasOwnProperty('contract') && (item.contract[0].state === 3 || item.contract[0].state === 6 || item.contract[0].state === 601) && !item.contract[0].is_a)) { - item.sortFee = item.fee.negated(); - item.sortAmount = item.amount; - } - else { - if (!item.is_income) { - item.sortFee = item.fee.negated(); - item.sortAmount = item.amount.negated(); - } - else { - item.sortAmount = item.amount; - } - } - return item; - }; - Wallet.prototype.prepareHistory = function (items) { - for (var i = 0; i < items.length; i++) { - if ((items[i].tx_type === 7 && items[i].is_income) || (items[i].tx_type === 11 && items[i].is_income) || (items[i].amount.eq(0) && items[i].fee.eq(0) && !items[i].is_mining)) { - var exists = false; - for (var j = 0; j < this.excluded_history.length; j++) { - if (this.excluded_history[j].tx_hash === items[i].tx_hash) { - exists = true; - if (this.excluded_history[j].height !== items[i].height) { - this.excluded_history[j] = items[i]; - } - break; - } - } - if (!exists) { - this.excluded_history.push(items[i]); - } - } - else { - var exists = false; - for (var j = 0; j < this.history.length; j++) { - if (this.history[j].tx_hash === items[i].tx_hash) { - exists = true; - if (this.history[j].height !== items[i].height) { - this.history[j] = this.prepareHistoryItem(items[i]); - } - break; - } - } - if (!exists) { - if (this.history.length && items[i].timestamp >= this.history[0].timestamp) { - this.history.unshift(this.prepareHistoryItem(items[i])); - } - else { - this.history.push(this.prepareHistoryItem(items[i])); - } - } - } - } - }; - Wallet.prototype.removeFromHistory = function (hash) { - for (var i = 0; i < this.history.length; i++) { - if (this.history[i].tx_hash === hash) { - this.history.splice(i, 1); - break; - } - } - }; - Wallet.prototype.prepareContractsAfterOpen = function (items, exp_med_ts, height_app, viewedContracts, notViewedContracts) { - var wallet = this; - var _loop_1 = function (i) { - var contract = items[i]; - var contractTransactionExist = false; - if (wallet && wallet.history) { - contractTransactionExist = wallet.history.some(function (elem) { return elem.contract && elem.contract.length && elem.contract[0].contract_id === contract.contract_id; }); - } - if (!contractTransactionExist && wallet && wallet.excluded_history) { - contractTransactionExist = wallet.excluded_history.some(function (elem) { return elem.contract && elem.contract.length && elem.contract[0].contract_id === contract.contract_id; }); - } - if (!contractTransactionExist) { - contract.state = 140; - } - else if (contract.state === 1 && contract.expiration_time < exp_med_ts) { - contract.state = 110; - } - else if (contract.state === 2 && contract.cancel_expiration_time !== 0 && contract.cancel_expiration_time < exp_med_ts && contract.height === 0) { - var searchResult1 = viewedContracts.some(function (elem) { return elem.state === 2 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id; }); - if (!searchResult1) { - contract.state = 130; - contract.is_new = true; - } - } - else if (contract.state === 1) { - var searchResult2 = notViewedContracts.find(function (elem) { return elem.state === 110 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id; }); - if (searchResult2) { - if (searchResult2.time === contract.expiration_time) { - contract.state = 110; - } - else { - for (var j = 0; j < notViewedContracts.length; j++) { - if (notViewedContracts[j].contract_id === contract.contract_id && notViewedContracts[j].is_a === contract.is_a) { - notViewedContracts.splice(j, 1); - break; - } - } - for (var j = 0; j < viewedContracts.length; j++) { - if (viewedContracts[j].contract_id === contract.contract_id && viewedContracts[j].is_a === contract.is_a) { - viewedContracts.splice(j, 1); - break; - } - } - } - } - } - else if (contract.state === 2 && (contract.height === 0 || (height_app - contract.height) < 10)) { - contract.state = 201; - } - else if (contract.state === 2) { - var searchResult3 = viewedContracts.some(function (elem) { return elem.state === 120 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id; }); - if (searchResult3) { - contract.state = 120; - } - } - else if (contract.state === 5) { - var searchResult4 = notViewedContracts.find(function (elem) { return elem.state === 130 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id; }); - if (searchResult4) { - if (searchResult4.time === contract.cancel_expiration_time) { - contract.state = 130; - } - else { - for (var j = 0; j < notViewedContracts.length; j++) { - if (notViewedContracts[j].contract_id === contract.contract_id && notViewedContracts[j].is_a === contract.is_a) { - notViewedContracts.splice(j, 1); - break; - } - } - for (var j = 0; j < viewedContracts.length; j++) { - if (viewedContracts[j].contract_id === contract.contract_id && viewedContracts[j].is_a === contract.is_a) { - viewedContracts.splice(j, 1); - break; - } - } - } - } - } - else if (contract.state === 6 && (contract.height === 0 || (height_app - contract.height) < 10)) { - contract.state = 601; - } - var searchResult = viewedContracts.some(function (elem) { return elem.state === contract.state && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id; }); - contract.is_new = !searchResult; - wallet.contracts.push(contract); - }; - for (var i = 0; i < items.length; i++) { - _loop_1(i); - } - this.recountNewContracts(); - }; - Wallet.prototype.recountNewContracts = function () { - this.new_contracts = (this.contracts.filter(function (item) { return item.is_new === true; })).length; - }; - Wallet.prototype.getContract = function (id) { - for (var i = 0; i < this.contracts.length; i++) { - if (this.contracts[i].contract_id === id) { - return this.contracts[i]; - } - } - return null; - }; - return Wallet; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/contract-status-messages.pipe.ts": -/*!*****************************************************************!*\ - !*** ./src/app/_helpers/pipes/contract-status-messages.pipe.ts ***! - \*****************************************************************/ -/*! exports provided: ContractStatusMessagesPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContractStatusMessagesPipe", function() { return ContractStatusMessagesPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var ContractStatusMessagesPipe = /** @class */ (function () { - function ContractStatusMessagesPipe(translate) { - this.translate = translate; - } - ContractStatusMessagesPipe.prototype.getStateSeller = function (stateNum) { - var state = { part1: '', part2: '' }; - switch (stateNum) { - case 1: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NEW_CONTRACT'); - break; - case 110: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.IGNORED'); - break; - case 201: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.ACCEPTED'); - state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.WAIT'); - break; - case 2: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.WAITING_BUYER'); - break; - case 3: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.COMPLETED'); - break; - case 4: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NOT_RECEIVED'); - state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NULLIFIED'); - break; - case 5: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.PROPOSAL_CANCEL'); - break; - case 601: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.BEING_CANCELLED'); - break; - case 6: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.CANCELLED'); - break; - case 130: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.IGNORED_CANCEL'); - break; - case 140: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.EXPIRED'); - break; - } - return state.part1 + (state.part2.length ? '. ' + state.part2 : ''); - }; - ContractStatusMessagesPipe.prototype.getStateBuyer = function (stateNum) { - var state = { part1: '', part2: '' }; - switch (stateNum) { - case 1: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING'); - break; - case 110: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.IGNORED'); - break; - case 201: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.ACCEPTED'); - state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAIT'); - break; - case 2: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.ACCEPTED'); - break; - case 120: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING_SELLER'); - break; - case 3: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.COMPLETED'); - break; - case 4: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.NOT_RECEIVED'); - state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.NULLIFIED'); - break; - case 5: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING_CANCEL'); - break; - case 601: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.BEING_CANCELLED'); - break; - case 6: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.CANCELLED'); - break; - case 130: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.IGNORED_CANCEL'); - break; - case 140: - state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.EXPIRED'); - break; - } - return state.part1 + (state.part2.length ? '. ' + state.part2 : ''); - }; - ContractStatusMessagesPipe.prototype.transform = function (state, is_a) { - if (is_a) { - return this.getStateBuyer(state); - } - else { - return this.getStateSeller(state); - } - }; - ContractStatusMessagesPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'contractStatusMessages' - }), - __metadata("design:paramtypes", [_ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__["TranslateService"]]) - ], ContractStatusMessagesPipe); - return ContractStatusMessagesPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/contract-time-left.pipe.ts": -/*!***********************************************************!*\ - !*** ./src/app/_helpers/pipes/contract-time-left.pipe.ts ***! - \***********************************************************/ -/*! exports provided: ContractTimeLeftPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContractTimeLeftPipe", function() { return ContractTimeLeftPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var ContractTimeLeftPipe = /** @class */ (function () { - function ContractTimeLeftPipe(service, translate) { - this.service = service; - this.translate = translate; - } - ContractTimeLeftPipe.prototype.transform = function (value, arg) { - var time = parseInt(((parseInt(value, 10) - this.service.exp_med_ts) / 3600).toFixed(0), 10); - var type = arg || 0; - if (time === 0) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_LESS_ONE'); - } - if (this.service.settings.language === 'en') { - if (type === 0) { - if (time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY', { time: time }); - } - } - else if (type === 1) { - if (time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_RESPONSE', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_RESPONSE', { time: time }); - } - } - else if (type === 2) { - if (time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_WAITING', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_WAITING', { time: time }); - } - } - } - else { - var rest = time % 10; - if (type === 0) { - if (((time > 20) && (rest === 1)) || time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE', { time: time }); - } - else if ((time > 1) && (time < 5) || ((time > 20) && (rest === 2 || rest === 3 || rest === 4))) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT', { time: time }); - } - } - else if (type === 1) { - if (((time > 20) && (rest === 1)) || time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_RESPONSE', { time: time }); - } - else if ((time > 1) && (time < 5) || ((time > 20) && (rest === 2 || rest === 3 || rest === 4))) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_RESPONSE', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT_RESPONSE', { time: time }); - } - } - else if (type === 2) { - if (((time > 20) && (rest === 1)) || time === 1) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_WAITING', { time: time }); - } - else if ((time > 1) && (time < 5) || ((time > 20) && (rest === 2 || rest === 3 || rest === 4))) { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_WAITING', { time: time }); - } - else { - return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT_WAITING', { time: time }); - } - } - } - return null; - }; - ContractTimeLeftPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'contractTimeLeft' - }), - __metadata("design:paramtypes", [_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"], _ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__["TranslateService"]]) - ], ContractTimeLeftPipe); - return ContractTimeLeftPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/history-type-messages.pipe.ts": -/*!**************************************************************!*\ - !*** ./src/app/_helpers/pipes/history-type-messages.pipe.ts ***! - \**************************************************************/ -/*! exports provided: HistoryTypeMessagesPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HistoryTypeMessagesPipe", function() { return HistoryTypeMessagesPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var HistoryTypeMessagesPipe = /** @class */ (function () { - function HistoryTypeMessagesPipe(translate) { - this.translate = translate; - } - HistoryTypeMessagesPipe.prototype.transform = function (item, args) { - if (item.tx_type === 0) { - if (item.remote_addresses && item.remote_addresses[0]) { - return item.remote_addresses[0]; - } - else { - if (item.is_income) { - return this.translate.instant('HISTORY.TYPE_MESSAGES.HIDDEN'); - } - else { - return this.translate.instant('HISTORY.TYPE_MESSAGES.UNDEFINED'); - } - } - } - else if (item.tx_type === 6 && item.height === 0) { - return 'unknown'; - } - else if (item.tx_type === 9) { - if (item.hasOwnProperty('contract') && item.contract[0].is_a) { - return this.translate.instant('HISTORY.TYPE_MESSAGES.COMPLETE_BUYER'); - } - else { - return this.translate.instant('HISTORY.TYPE_MESSAGES.COMPLETE_SELLER'); - } - } - else { - switch (item.tx_type) { - // case 0: - // return ''; - // case 1: - // return ''; - // case 2: - // return ''; - // case 3: - // return ''; - case 4: - return this.translate.instant('HISTORY.TYPE_MESSAGES.CREATE_ALIAS'); - case 5: - return this.translate.instant('HISTORY.TYPE_MESSAGES.UPDATE_ALIAS'); - case 6: - return (item.td['spn'] && item.td['spn'].length) ? this.translate.instant('HISTORY.TYPE_MESSAGES.POS_REWARD') : this.translate.instant('HISTORY.TYPE_MESSAGES.POW_REWARD'); - case 7: - return this.translate.instant('HISTORY.TYPE_MESSAGES.CREATE_CONTRACT'); - case 8: - return this.translate.instant('HISTORY.TYPE_MESSAGES.PLEDGE_CONTRACT'); - // case 9: - // return ''; - case 10: - return this.translate.instant('HISTORY.TYPE_MESSAGES.NULLIFY_CONTRACT'); - case 11: - return this.translate.instant('HISTORY.TYPE_MESSAGES.PROPOSAL_CANCEL_CONTRACT'); - case 12: - return this.translate.instant('HISTORY.TYPE_MESSAGES.CANCEL_CONTRACT'); - } - } - return this.translate.instant('HISTORY.TYPE_MESSAGES.UNDEFINED'); - }; - HistoryTypeMessagesPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'historyTypeMessages' - }), - __metadata("design:paramtypes", [_ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__["TranslateService"]]) - ], HistoryTypeMessagesPipe); - return HistoryTypeMessagesPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/int-to-money.pipe.ts": -/*!*****************************************************!*\ - !*** ./src/app/_helpers/pipes/int-to-money.pipe.ts ***! - \*****************************************************/ -/*! exports provided: IntToMoneyPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IntToMoneyPipe", function() { return IntToMoneyPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_2__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var IntToMoneyPipe = /** @class */ (function () { - function IntToMoneyPipe(variablesService) { - this.variablesService = variablesService; - } - IntToMoneyPipe.prototype.transform = function (value, args) { - if (value === 0 || value === undefined) { - return '0'; - } - var maxFraction = this.variablesService.digits; - if (args) { - maxFraction = parseInt(args, 10); - } - var power = Math.pow(10, this.variablesService.digits); - var str = (new bignumber_js__WEBPACK_IMPORTED_MODULE_2__["BigNumber"](value)).div(power).toFixed(maxFraction); - for (var i = str.length - 1; i >= 0; i--) { - if (str[i] !== '0') { - str = str.substr(0, i + 1); - break; - } - } - if (str[str.length - 1] === '.') { - str = str.substr(0, str.length - 1); - } - return str; - }; - IntToMoneyPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'intToMoney' - }), - __metadata("design:paramtypes", [_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"]]) - ], IntToMoneyPipe); - return IntToMoneyPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/money-to-int.pipe.ts": -/*!*****************************************************!*\ - !*** ./src/app/_helpers/pipes/money-to-int.pipe.ts ***! - \*****************************************************/ -/*! exports provided: MoneyToIntPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MoneyToIntPipe", function() { return MoneyToIntPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_2__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var MoneyToIntPipe = /** @class */ (function () { - function MoneyToIntPipe(variablesService) { - this.variablesService = variablesService; - } - MoneyToIntPipe.prototype.transform = function (value, args) { - var CURRENCY_DISPLAY_DECIMAL_POINT = this.variablesService.digits; - var result; - if (value) { - var am_str = value.toString().trim(); - var point_index = am_str.indexOf('.'); - var fraction_size = 0; - if (-1 !== point_index) { - fraction_size = am_str.length - point_index - 1; - while (CURRENCY_DISPLAY_DECIMAL_POINT < fraction_size && '0' === am_str[am_str.length - 1]) { - am_str = am_str.slice(0, am_str.length - 1); - --fraction_size; - } - if (CURRENCY_DISPLAY_DECIMAL_POINT < fraction_size) { - return undefined; - } - am_str = am_str.slice(0, point_index) + am_str.slice(point_index + 1, am_str.length); - } - else { - fraction_size = 0; - } - if (!am_str.length) { - return undefined; - } - if (fraction_size < CURRENCY_DISPLAY_DECIMAL_POINT) { - for (var i = 0; i !== CURRENCY_DISPLAY_DECIMAL_POINT - fraction_size; i++) { - am_str = am_str + '0'; - } - } - result = (new bignumber_js__WEBPACK_IMPORTED_MODULE_2__["BigNumber"](am_str)).integerValue(); - } - return result; - }; - MoneyToIntPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'moneyToInt' - }), - __metadata("design:paramtypes", [_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"]]) - ], MoneyToIntPipe); - return MoneyToIntPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/pipes/safe-html.pipe.ts": -/*!**************************************************!*\ - !*** ./src/app/_helpers/pipes/safe-html.pipe.ts ***! - \**************************************************/ -/*! exports provided: SafeHTMLPipe */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SafeHTMLPipe", function() { return SafeHTMLPipe; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm5/platform-browser.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var SafeHTMLPipe = /** @class */ (function () { - function SafeHTMLPipe(sanitizer) { - this.sanitizer = sanitizer; - } - SafeHTMLPipe.prototype.transform = function (html) { - return this.sanitizer.bypassSecurityTrustHtml(html); - }; - SafeHTMLPipe = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Pipe"])({ - name: 'safeHTML' - }), - __metadata("design:paramtypes", [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_1__["DomSanitizer"]]) - ], SafeHTMLPipe); - return SafeHTMLPipe; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/services/backend.service.ts": -/*!******************************************************!*\ - !*** ./src/app/_helpers/services/backend.service.ts ***! - \******************************************************/ -/*! exports provided: BackendService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BackendService", function() { return BackendService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../pipes/money-to-int.pipe */ "./src/app/_helpers/pipes/money-to-int.pipe.ts"); -/* harmony import */ var json_bignumber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! json-bignumber */ "./node_modules/json-bignumber/src/JSONBigNumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_7__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var BackendService = /** @class */ (function () { - function BackendService(translate, variablesService, modalService, moneyToIntPipe) { - this.translate = translate; - this.variablesService = variablesService; - this.modalService = modalService; - this.moneyToIntPipe = moneyToIntPipe; - this.backendLoaded = false; - } - BackendService_1 = BackendService; - BackendService.bigNumberParser = function (key, val) { - if (val.constructor.name === 'BigNumber' && ['balance', 'unlocked_balance', 'amount', 'fee', 'b_fee', 'to_pay', 'a_pledge', 'b_pledge', 'coast', 'a'].indexOf(key) === -1) { - return val.toNumber(); - } - if (key === 'rcv' || key === 'spn') { - for (var i = 0; i < val.length; i++) { - val[i] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](val[i]); - } - } - return val; - }; - BackendService.Debug = function (type, message) { - switch (type) { - case 0: - console.error(message); - break; - case 1: - console.warn(message); - break; - case 2: - console.log(message); - break; - default: - console.log(message); - break; - } - }; - BackendService.prototype.informerRun = function (error, params, command) { - var error_translate = ''; - switch (error) { - case 'NOT_ENOUGH_MONEY': - error_translate = 'ERRORS.NOT_ENOUGH_MONEY'; - // error_translate = 'ERRORS.NO_MONEY'; maybe that one? - if (command === 'cancel_offer') { - error_translate = this.translate.instant('ERRORS.NO_MONEY_REMOVE_OFFER', { - 'fee': this.variablesService.default_fee, - 'currency': this.variablesService.defaultCurrency - }); - } - break; - case 'CORE_BUSY': - error_translate = 'ERRORS.CORE_BUSY'; - break; - case 'BUSY': - error_translate = 'ERRORS.DAEMON_BUSY'; - break; - case 'OVERFLOW': - if (command !== 'get_all_aliases') { - error_translate = ''; - } - break; - case 'NOT_ENOUGH_OUTPUTS_FOR_MIXING': - error_translate = 'ERRORS.NOT_ENOUGH_OUTPUTS_TO_MIX'; - break; - case 'TX_IS_TOO_BIG': - error_translate = 'ERRORS.TRANSACTION_IS_TO_BIG'; - break; - case 'DISCONNECTED': - error_translate = 'ERRORS.TRANSFER_ATTEMPT'; - break; - case 'ACCESS_DENIED': - error_translate = 'ERRORS.ACCESS_DENIED'; - break; - case 'TX_REJECTED': - // if (command === 'request_alias_registration') { - // error_translate = 'INFORMER.ALIAS_IN_REGISTER'; - // } else { - error_translate = 'ERRORS.TRANSACTION_ERROR'; - // } - break; - case 'INTERNAL_ERROR': - error_translate = 'ERRORS.TRANSACTION_ERROR'; - break; - case 'BAD_ARG': - error_translate = 'ERRORS.BAD_ARG'; - break; - case 'WALLET_WRONG_ID': - error_translate = 'ERRORS.WALLET_WRONG_ID'; - break; - case 'WALLET_WATCH_ONLY_NOT_SUPPORTED': - error_translate = 'ERRORS.WALLET_WATCH_ONLY_NOT_SUPPORTED'; - break; - case 'WRONG_PASSWORD': - params = JSON.parse(params); - if (!params.testEmpty) { - error_translate = 'ERRORS.WRONG_PASSWORD'; - } - break; - case 'FILE_RESTORED': - if (command === 'open_wallet') { - error_translate = 'ERRORS.FILE_RESTORED'; - } - break; - case 'FILE_NOT_FOUND': - if (command !== 'open_wallet' && command !== 'get_alias_info_by_name' && command !== 'get_alias_info_by_address') { - error_translate = this.translate.instant('ERRORS.FILE_NOT_FOUND'); - params = JSON.parse(params); - if (params.path) { - error_translate += ': ' + params.path; - } - } - break; - case 'NOT_FOUND': - if (command !== 'open_wallet' && command !== 'get_alias_info_by_name' && command !== 'get_alias_info_by_address') { - error_translate = this.translate.instant('ERRORS.FILE_NOT_FOUND'); - params = JSON.parse(params); - if (params.path) { - error_translate += ': ' + params.path; - } - } - break; - case 'CANCELED': - case '': - break; - case 'FAIL': - if (command === 'create_proposal' || command === 'accept_proposal' || command === 'release_contract' || command === 'request_cancel_contract' || command === 'accept_cancel_contract') { - error_translate = ' '; - } - break; - case 'ALREADY_EXISTS': - error_translate = 'ERRORS.FILE_EXIST'; - break; - case 'FAILED': - BackendService_1.Debug(0, "Error: (" + error + ") was triggered by command: " + command); - break; - default: - error_translate = error; - } - if (error.indexOf('FAIL:failed to save file') > -1) { - error_translate = 'ERRORS.FILE_NOT_SAVED'; - } - if (error.indexOf('FAILED:failed to open binary wallet file for saving') > -1 && command === 'generate_wallet') { - error_translate = ''; - } - if (error_translate !== '') { - this.modalService.prepareModal('error', error_translate); - } - }; - BackendService.prototype.commandDebug = function (command, params, result) { - BackendService_1.Debug(2, '----------------- ' + command + ' -----------------'); - var debug = { - _send_params: params, - _result: result - }; - BackendService_1.Debug(2, debug); - try { - BackendService_1.Debug(2, json_bignumber__WEBPACK_IMPORTED_MODULE_6__["default"].parse(result, BackendService_1.bigNumberParser)); - } - catch (e) { - BackendService_1.Debug(2, { response_data: result, error_code: 'OK' }); - } - }; - BackendService.prototype.backendCallback = function (resultStr, params, callback, command) { - var _this = this; - var Result = resultStr; - if (command !== 'get_clipboard') { - if (!resultStr || resultStr === '') { - Result = {}; - } - else { - try { - Result = json_bignumber__WEBPACK_IMPORTED_MODULE_6__["default"].parse(resultStr, BackendService_1.bigNumberParser); - } - catch (e) { - Result = { response_data: resultStr, error_code: 'OK' }; - } - } - } - else { - Result = { - error_code: 'OK', - response_data: Result - }; - } - var core_busy = Result.error_code === 'CORE_BUSY'; - var Status = (Result.error_code === 'OK' || Result.error_code === 'TRUE'); - if (!Status && Status !== undefined && Result.error_code !== undefined) { - BackendService_1.Debug(1, 'API error for command: "' + command + '". Error code: ' + Result.error_code); - } - var data = ((typeof Result === 'object') && 'response_data' in Result) ? Result.response_data : Result; - var res_error_code = false; - if (typeof Result === 'object' && 'error_code' in Result && Result.error_code !== 'OK' && Result.error_code !== 'TRUE' && Result.error_code !== 'FALSE') { - if (core_busy) { - setTimeout(function () { - // this is will avoid update data when user - // on other wallet after CORE_BUSY (blink of data) - if (command !== 'get_recent_transfers') { - _this.runCommand(command, params, callback); - } - else { - var current_wallet_id = _this.variablesService.currentWallet.wallet_id; - if (current_wallet_id === params.wallet_id) { - _this.runCommand(command, params, callback); - } - } - }, 50); - } - else { - this.informerRun(Result.error_code, params, command); - res_error_code = Result.error_code; - } - } - // if ( command === 'get_offers_ex' ){ - // Service.printLog( "get_offers_ex offers count "+((data.offers)?data.offers.length:0) ); - // } - if (!core_busy) { - if (typeof callback === 'function') { - callback(Status, data, res_error_code); - } - else { - return data; - } - } - }; - BackendService.prototype.runCommand = function (command, params, callback) { - if (this.backendObject) { - if (command === 'get_recent_transfers') { - this.variablesService.get_recent_transfers = true; - } - var Action = this.backendObject[command]; - if (!Action) { - BackendService_1.Debug(0, 'Run Command Error! Command "' + command + '" don\'t found in backendObject'); - } - else { - var that_1 = this; - params = (typeof params === 'string') ? params : json_bignumber__WEBPACK_IMPORTED_MODULE_6__["default"].stringify(params); - if (params === undefined || params === '{}') { - if (command === 'get_recent_transfers') { - this.variablesService.get_recent_transfers = false; - } - Action(function (resultStr) { - that_1.commandDebug(command, params, resultStr); - return that_1.backendCallback(resultStr, params, callback, command); - }); - } - else { - Action(params, function (resultStr) { - that_1.commandDebug(command, params, resultStr); - return that_1.backendCallback(resultStr, params, callback, command); - }); - } - } - } - }; - BackendService.prototype.eventSubscribe = function (command, callback) { - if (command === 'on_core_event') { - this.backendObject[command].connect(callback); - } - else { - this.backendObject[command].connect(function (str) { - callback(json_bignumber__WEBPACK_IMPORTED_MODULE_6__["default"].parse(str, BackendService_1.bigNumberParser)); - }); - } - }; - BackendService.prototype.initService = function () { - var _this = this; - return new rxjs__WEBPACK_IMPORTED_MODULE_1__["Observable"](function (observer) { - if (!_this.backendLoaded) { - _this.backendLoaded = true; - var that_2 = _this; - window.QWebChannel(window.qt.webChannelTransport, function (channel) { - that_2.backendObject = channel.objects.mediator_object; - observer.next('ok'); - }); - } - else { - if (!_this.backendObject) { - observer.error('error'); - observer.error('error'); - } - } - }); - }; - BackendService.prototype.webkitLaunchedScript = function () { - return this.runCommand('webkit_launched_script'); - }; - BackendService.prototype.quitRequest = function () { - return this.runCommand('on_request_quit'); - }; - BackendService.prototype.getAppData = function (callback) { - this.runCommand('get_app_data', {}, callback); - }; - BackendService.prototype.storeAppData = function (callback) { - var _this = this; - if (this.variablesService.wallets.length) { - this.variablesService.settings.wallets = []; - this.variablesService.wallets.forEach(function (wallet) { - _this.variablesService.settings.wallets.push({ name: wallet.name, path: wallet.path }); - }); - } - this.runCommand('store_app_data', this.variablesService.settings, callback); - }; - BackendService.prototype.getSecureAppData = function (pass, callback) { - this.runCommand('get_secure_app_data', pass, callback); - }; - BackendService.prototype.setMasterPassword = function (pass, callback) { - this.runCommand('set_master_password', pass, callback); - }; - BackendService.prototype.checkMasterPassword = function (pass, callback) { - this.runCommand('check_master_password', pass, callback); - }; - BackendService.prototype.storeSecureAppData = function (callback) { - var _this = this; - var data; - var wallets = []; - var contacts = []; - this.variablesService.wallets.forEach(function (wallet) { - wallets.push({ name: wallet.name, pass: wallet.pass, path: wallet.path, staking: wallet.staking }); - }); - this.variablesService.contacts.forEach(function (contact) { - contacts.push({ name: contact.name, address: contact.address, notes: contact.notes }); - }); - data = { wallets: wallets, contacts: contacts }; - this.backendObject['store_secure_app_data'](JSON.stringify(data), this.variablesService.appPass, function (dataStore) { - _this.backendCallback(dataStore, {}, callback, 'store_secure_app_data'); - }); - }; - BackendService.prototype.dropSecureAppData = function (callback) { - var _this = this; - this.backendObject['drop_secure_app_data'](function (dataStore) { - _this.backendCallback(dataStore, {}, callback, 'drop_secure_app_data'); - }); - }; - BackendService.prototype.haveSecureAppData = function (callback) { - this.runCommand('have_secure_app_data', {}, callback); - }; - BackendService.prototype.saveFileDialog = function (caption, fileMask, default_path, callback) { - var dir = default_path ? default_path : '/'; - var params = { - caption: caption, - filemask: fileMask, - default_dir: dir - }; - this.runCommand('show_savefile_dialog', params, callback); - }; - BackendService.prototype.openFileDialog = function (caption, fileMask, default_path, callback) { - var dir = default_path ? default_path : '/'; - var params = { - caption: caption, - filemask: fileMask, - default_dir: dir - }; - this.runCommand('show_openfile_dialog', params, callback); - }; - BackendService.prototype.storeFile = function (path, buff) { - this.backendObject['store_to_file'](path, buff); - }; - BackendService.prototype.loadFile = function (path, callback) { - this.runCommand('load_from_file', path, callback); - }; - BackendService.prototype.generateWallet = function (path, pass, callback) { - var params = { - path: path, - pass: pass - }; - this.runCommand('generate_wallet', params, callback); - }; - BackendService.prototype.openWallet = function (path, pass, txs_to_return, testEmpty, callback) { - var params = { - path: path, - pass: pass, - txs_to_return: txs_to_return - }; - params['testEmpty'] = !!(testEmpty); - this.runCommand('open_wallet', params, callback); - }; - BackendService.prototype.closeWallet = function (wallet_id, callback) { - this.runCommand('close_wallet', { wallet_id: +wallet_id }, callback); - }; - BackendService.prototype.getSmartWalletInfo = function (_a, callback) { - var wallet_id = _a.wallet_id, seed_password = _a.seed_password; - this.runCommand('get_smart_wallet_info', { wallet_id: +wallet_id, seed_password: seed_password }, callback); - }; - BackendService.prototype.getSeedPhraseInfo = function (param, callback) { - this.runCommand('get_seed_phrase_info', param, callback); - }; - BackendService.prototype.runWallet = function (wallet_id, callback) { - this.runCommand('run_wallet', { wallet_id: +wallet_id }, callback); - }; - BackendService.prototype.isValidRestoreWalletText = function (param, callback) { - this.runCommand('is_valid_restore_wallet_text', param, callback); - }; - BackendService.prototype.restoreWallet = function (path, pass, seed_phrase, seed_pass, callback) { - var params = { - seed_phrase: seed_phrase, - path: path, - pass: pass, - seed_pass: seed_pass - }; - this.runCommand('restore_wallet', params, callback); - }; - BackendService.prototype.sendMoney = function (from_wallet_id, to_address, amount, fee, mixin, comment, hide, callback) { - var params = { - wallet_id: parseInt(from_wallet_id, 10), - destinations: [ - { - address: to_address, - amount: amount - } - ], - mixin_count: (mixin) ? parseInt(mixin, 10) : 0, - lock_time: 0, - fee: this.moneyToIntPipe.transform(fee), - comment: comment, - push_payer: !hide - }; - this.runCommand('transfer', params, callback); - }; - BackendService.prototype.validateAddress = function (address, callback) { - this.runCommand('validate_address', address, callback); - }; - BackendService.prototype.setClipboard = function (str, callback) { - return this.runCommand('set_clipboard', str, callback); - }; - BackendService.prototype.getClipboard = function (callback) { - return this.runCommand('get_clipboard', {}, callback); - }; - BackendService.prototype.createProposal = function (wallet_id, title, comment, a_addr, b_addr, to_pay, a_pledge, b_pledge, time, payment_id, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10), - details: { - t: title, - c: comment, - a_addr: a_addr, - b_addr: b_addr, - to_pay: this.moneyToIntPipe.transform(to_pay), - a_pledge: this.moneyToIntPipe.transform(a_pledge), - b_pledge: this.moneyToIntPipe.transform(b_pledge) - }, - payment_id: payment_id, - expiration_period: parseInt(time, 10) * 60 * 60, - fee: this.variablesService.default_fee_big, - b_fee: this.variablesService.default_fee_big - }; - BackendService_1.Debug(1, params); - this.runCommand('create_proposal', params, callback); - }; - BackendService.prototype.getContracts = function (wallet_id, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10) - }; - BackendService_1.Debug(1, params); - this.runCommand('get_contracts', params, callback); - }; - BackendService.prototype.acceptProposal = function (wallet_id, contract_id, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10), - contract_id: contract_id - }; - BackendService_1.Debug(1, params); - this.runCommand('accept_proposal', params, callback); - }; - BackendService.prototype.releaseProposal = function (wallet_id, contract_id, release_type, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10), - contract_id: contract_id, - release_type: release_type // "normal" or "burn" - }; - BackendService_1.Debug(1, params); - this.runCommand('release_contract', params, callback); - }; - BackendService.prototype.requestCancelContract = function (wallet_id, contract_id, time, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10), - contract_id: contract_id, - fee: this.variablesService.default_fee_big, - expiration_period: parseInt(time, 10) * 60 * 60 - }; - BackendService_1.Debug(1, params); - this.runCommand('request_cancel_contract', params, callback); - }; - BackendService.prototype.acceptCancelContract = function (wallet_id, contract_id, callback) { - var params = { - wallet_id: parseInt(wallet_id, 10), - contract_id: contract_id - }; - BackendService_1.Debug(1, params); - this.runCommand('accept_cancel_contract', params, callback); - }; - BackendService.prototype.getMiningHistory = function (wallet_id, callback) { - this.runCommand('get_mining_history', { wallet_id: parseInt(wallet_id, 10) }, callback); - }; - BackendService.prototype.startPosMining = function (wallet_id, callback) { - this.runCommand('start_pos_mining', { wallet_id: parseInt(wallet_id, 10) }, callback); - }; - BackendService.prototype.stopPosMining = function (wallet_id, callback) { - this.runCommand('stop_pos_mining', { wallet_id: parseInt(wallet_id, 10) }, callback); - }; - BackendService.prototype.openUrlInBrowser = function (url, callback) { - this.runCommand('open_url_in_browser', url, callback); - }; - BackendService.prototype.start_backend = function (node, host, port, callback) { - var params = { - configure_for_remote_node: node, - remote_node_host: host, - remote_node_port: parseInt(port, 10) - }; - this.runCommand('start_backend', params, callback); - }; - BackendService.prototype.getDefaultFee = function (callback) { - this.runCommand('get_default_fee', {}, callback); - }; - BackendService.prototype.setBackendLocalization = function (stringsArray, title, callback) { - var params = { - strings: stringsArray, - language_title: title - }; - this.runCommand('set_localization_strings', params, callback); - }; - BackendService.prototype.registerAlias = function (wallet_id, alias, address, fee, comment, reward, callback) { - var params = { - wallet_id: wallet_id, - alias: { - alias: alias, - address: address, - tracking_key: '', - comment: comment - }, - fee: this.moneyToIntPipe.transform(fee), - reward: this.moneyToIntPipe.transform(reward) - }; - this.runCommand('request_alias_registration', params, callback); - }; - BackendService.prototype.updateAlias = function (wallet_id, alias, fee, callback) { - var params = { - wallet_id: wallet_id, - alias: { - alias: alias.name.replace('@', ''), - address: alias.address, - tracking_key: '', - comment: alias.comment - }, - fee: this.moneyToIntPipe.transform(fee) - }; - this.runCommand('request_alias_update', params, callback); - }; - BackendService.prototype.getAllAliases = function (callback) { - this.runCommand('get_all_aliases', {}, callback); - }; - BackendService.prototype.getAliasByName = function (value, callback) { - return this.runCommand('get_alias_info_by_name', value, callback); - }; - BackendService.prototype.getAliasByAddress = function (value, callback) { - return this.runCommand('get_alias_info_by_address', value, callback); - }; - BackendService.prototype.getAliasCoast = function (alias, callback) { - this.runCommand('get_alias_coast', { v: alias }, callback); - }; - BackendService.prototype.getWalletAlias = function (address) { - var _this = this; - if (address !== null && this.variablesService.daemon_state === 2) { - if (this.variablesService.aliasesChecked[address] == null) { - this.variablesService.aliasesChecked[address] = {}; - if (this.variablesService.aliases.length) { - for (var i = 0, length_1 = this.variablesService.aliases.length; i < length_1; i++) { - if (i in this.variablesService.aliases && this.variablesService.aliases[i]['address'] === address) { - this.variablesService.aliasesChecked[address]['name'] = this.variablesService.aliases[i].name; - this.variablesService.aliasesChecked[address]['address'] = this.variablesService.aliases[i].address; - this.variablesService.aliasesChecked[address]['comment'] = this.variablesService.aliases[i].comment; - return this.variablesService.aliasesChecked[address]; - } - } - } - this.getAliasByAddress(address, function (status, data) { - if (status) { - _this.variablesService.aliasesChecked[data.address]['name'] = '@' + data.alias; - _this.variablesService.aliasesChecked[data.address]['address'] = data.address; - _this.variablesService.aliasesChecked[data.address]['comment'] = data.comment; - } - }); - } - return this.variablesService.aliasesChecked[address]; - } - return {}; - }; - BackendService.prototype.getContactAlias = function () { - var _this = this; - if (this.variablesService.contacts.length && this.variablesService.daemon_state === 2) { - this.variablesService.contacts.map(function (contact) { - _this.getAliasByAddress(contact.address, function (status, data) { - if (status) { - if (data.alias) { - contact.alias = '@' + data.alias; - } - } - else { - contact.alias = null; - } - }); - }); - } - }; - BackendService.prototype.getRecentTransfers = function (id, offset, count, exclude_mining_txs, callback) { - var params = { - wallet_id: id, - offset: offset, - count: count, - exclude_mining_txs: exclude_mining_txs - }; - this.runCommand('get_recent_transfers', params, callback); - }; - BackendService.prototype.getPoolInfo = function (callback) { - this.runCommand('get_tx_pool_info', {}, callback); - }; - BackendService.prototype.getVersion = function (callback) { - var _this = this; - this.runCommand('get_version', {}, function (status, version) { - _this.runCommand('get_network_type', {}, function (status, type) { - callback(version, type); - }); - }); - }; - BackendService.prototype.setLogLevel = function (level) { - return this.runCommand('set_log_level', { v: level }); - }; - var BackendService_1; - BackendService = BackendService_1 = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])(), - __metadata("design:paramtypes", [_ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__["TranslateService"], - _variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - _pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_5__["MoneyToIntPipe"]]) - ], BackendService); - return BackendService; -}()); - -/* - - toggleAutoStart: function (value) { - return this.runCommand('toggle_autostart', asVal(value)); - }, - - getOptions: function (callback) { - return this.runCommand('get_options', {}, callback); - }, - - isFileExist: function (path, callback) { - return this.runCommand('is_file_exist', path, callback); - }, - - isAutoStartEnabled: function (callback) { - this.runCommand('is_autostart_enabled', {}, function (status, data) { - if (angular.isFunction(callback)) { - callback('error_code' in data && data.error_code !== 'FALSE') - } - }); - }, - - resetWalletPass: function (wallet_id, pass, callback) { - this.runCommand('reset_wallet_password', {wallet_id: wallet_id, pass: pass}, callback); - }, - - - - getOsVersion: function (callback) { - this.runCommand('get_os_version', {}, function (status, version) { - callback(version) - }) - }, - - getLogFile: function (callback) { - this.runCommand('get_log_file', {}, function (status, version) { - callback(version) - }) - }, - - resync_wallet: function (wallet_id, callback) { - this.runCommand('resync_wallet', {wallet_id: wallet_id}, callback); - }, - - storeFile: function (path, buff, callback) { - this.backendObject['store_to_file'](path, (typeof buff === 'string' ? buff : JSON.stringify(buff)), function (data) { - backendCallback(data, {}, callback, 'store_to_file'); - }); - }, - - getMiningEstimate: function (amount_coins, time, callback) { - var params = { - "amount_coins": $filter('money_to_int')(amount_coins), - "time": parseInt(time) - }; - this.runCommand('get_mining_estimate', params, callback); - }, - - backupWalletKeys: function (wallet_id, path, callback) { - var params = { - "wallet_id": wallet_id, - "path": path - }; - this.runCommand('backup_wallet_keys', params, callback); - }, - - setBlockedIcon: function (enabled, callback) { - var mode = (enabled) ? "blocked" : "normal"; - Service.runCommand('bool_toggle_icon', mode, callback); - }, - - getWalletInfo: function (wallet_id, callback) { - this.runCommand('get_wallet_info', {wallet_id: wallet_id}, callback); - }, - - printText: function (content) { - return this.runCommand('print_text', {html_text: content}); - }, - - printLog: function (msg, log_level) { - return this.runCommand('print_log', {msg: msg, log_level: log_level}); - }, - -*/ - - -/***/ }), - -/***/ "./src/app/_helpers/services/modal.service.ts": -/*!****************************************************!*\ - !*** ./src/app/_helpers/services/modal.service.ts ***! - \****************************************************/ -/*! exports provided: ModalService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModalService", function() { return ModalService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _directives_modal_container_modal_container_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../directives/modal-container/modal-container.component */ "./src/app/_helpers/directives/modal-container/modal-container.component.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var ModalService = /** @class */ (function () { - function ModalService(componentFactoryResolver, appRef, injector, ngZone, translate) { - this.componentFactoryResolver = componentFactoryResolver; - this.appRef = appRef; - this.injector = injector; - this.ngZone = ngZone; - this.translate = translate; - this.components = []; - } - ModalService.prototype.prepareModal = function (type, message) { - var _this = this; - var length = this.components.push(this.componentFactoryResolver.resolveComponentFactory(_directives_modal_container_modal_container_component__WEBPACK_IMPORTED_MODULE_2__["ModalContainerComponent"]).create(this.injector)); - this.components[length - 1].instance['type'] = type; - this.components[length - 1].instance['message'] = message.length ? this.translate.instant(message) : ''; - this.components[length - 1].instance['close'].subscribe(function () { - _this.removeModal(length - 1); - }); - this.ngZone.run(function () { - _this.appendModal(length - 1); - }); - }; - ModalService.prototype.appendModal = function (index) { - this.appRef.attachView(this.components[index].hostView); - var domElem = this.components[index].hostView.rootNodes[0]; - document.body.appendChild(domElem); - }; - ModalService.prototype.removeModal = function (index) { - if (this.components[index]) { - this.appRef.detachView(this.components[index].hostView); - this.components[index].destroy(); - this.components.splice(index, 1); - } - else { - var last = this.components.length - 1; - this.appRef.detachView(this.components[last].hostView); - this.components[last].destroy(); - this.components.splice(last, 1); - } - }; - ModalService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])(), - __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ComponentFactoryResolver"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["ApplicationRef"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["Injector"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_1__["TranslateService"]]) - ], ModalService); - return ModalService; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/services/pagination.service.ts": -/*!*********************************************************!*\ - !*** ./src/app/_helpers/services/pagination.service.ts ***! - \*********************************************************/ -/*! exports provided: PaginationService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PaginationService", function() { return PaginationService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _pagination_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pagination.store */ "./src/app/_helpers/services/pagination.store.ts"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - -var PaginationService = /** @class */ (function () { - function PaginationService(variables, ngZone, paginationStore) { - this.variables = variables; - this.ngZone = ngZone; - this.paginationStore = paginationStore; - } - PaginationService.prototype.paginate = function (currentPage) { - var _this = this; - if (currentPage === void 0) { currentPage = 1; } - if (currentPage < 1) { - currentPage = 1; - } - else if (currentPage > this.variables.currentWallet.totalPages) { - currentPage = this.variables.currentWallet.totalPages; - } - var startPage, endPage; - if (this.variables.currentWallet.totalPages <= this.variables.maxPages) { - startPage = 1; - endPage = this.variables.currentWallet.totalPages; - } - else { - var maxPagesBeforeCurrentPage = Math.floor(this.variables.maxPages / 2); - var maxPagesAfterCurrentPage = Math.ceil(this.variables.maxPages / 2) - 1; - if (currentPage <= maxPagesBeforeCurrentPage) { - startPage = 1; - this.variables.currentWallet.totalPages > this.variables.maxPages - ? endPage = this.variables.maxPages - : endPage = this.variables.currentWallet.totalPages; - } - else if (currentPage + maxPagesAfterCurrentPage >= this.variables.currentWallet.totalPages) { - startPage = this.variables.currentWallet.totalPages - this.variables.maxPages + 1; - endPage = this.variables.currentWallet.totalPages; - } - else { - startPage = currentPage - maxPagesBeforeCurrentPage; - endPage = currentPage + maxPagesAfterCurrentPage; - } - } - this.ngZone.run(function () { - _this.variables.currentWallet.pages = Array.from(Array((endPage + 1) - startPage).keys()).map(function (i) { return startPage + i; }); - }); - }; - PaginationService.prototype.getOffset = function (walletID) { - var mining = this.variables.currentWallet.exclude_mining_txs; - var currentPage = (this.variables.currentWallet.currentPage); - var offset = ((currentPage - 1) * this.variables.count); - if (!mining) { - return offset; - } - var value = this.paginationStore.value; - var pages = value.filter(function (item) { return item.walletID === walletID; }); - if (pages && pages.length) { - var max = lodash__WEBPACK_IMPORTED_MODULE_3__["maxBy"](pages, 'page'); - var isForward = this.paginationStore.isForward(pages, currentPage); - if (isForward) { - offset = max.offset; - } - else { - var index = pages.findIndex(function (item) { return item.page === (currentPage); }); - offset = pages[index].offset; - } - } - return offset; - }; - PaginationService.prototype.calcPages = function (data) { - if (data.total_history_items && (data && data.history)) { - this.variables.currentWallet.totalPages = Math.ceil(data.total_history_items / this.variables.count); - this.variables.currentWallet.totalPages > this.variables.maxPages - ? this.variables.currentWallet.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : this.variables.currentWallet.pages = - new Array(this.variables.currentWallet.totalPages).fill(1).map(function (value, index) { return value + index; }); - } - else if (this.variables.currentWallet.restore) { - this.variables.currentWallet.totalPages = Math.ceil(data.history.length / this.variables.count); - this.variables.currentWallet.totalPages > this.variables.maxPages - ? this.variables.currentWallet.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : this.variables.currentWallet.pages = - new Array(this.variables.currentWallet.totalPages).fill(1).map(function (value, index) { return value + index; }); - } - }; - PaginationService.prototype.prepareHistory = function (data, status) { - var _this = this; - if (status && (data && data.total_history_items)) { - this.variables.currentWallet.history.splice(0, this.variables.currentWallet.history.length); - this.ngZone.run(function () { - _this.paginate(_this.variables.currentWallet.currentPage); - if (data.history.length !== 0) { - _this.variables.currentWallet.restore = false; - _this.variables.currentWallet.total_history_item = data.total_history_items; - _this.variables.currentWallet.prepareHistory(data.history); - if (_this.variables.currentWallet.currentPage === 1 && data.unconfirmed) { - _this.variables.currentWallet.prepareHistory(data.unconfirmed); - } - } - }); - } - }; - PaginationService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root', - }), - __metadata("design:paramtypes", [_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _pagination_store__WEBPACK_IMPORTED_MODULE_2__["PaginationStore"]]) - ], PaginationService); - return PaginationService; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/services/pagination.store.ts": -/*!*******************************************************!*\ - !*** ./src/app/_helpers/services/pagination.store.ts ***! - \*******************************************************/ -/*! exports provided: PaginationStore */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PaginationStore", function() { return PaginationStore; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var PaginationStore = /** @class */ (function () { - function PaginationStore() { - this.subject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.pages$ = this.subject.asObservable(); - } - PaginationStore.prototype.isForward = function (pages, currentPage) { - var max = lodash__WEBPACK_IMPORTED_MODULE_2__["maxBy"](pages, 'page'); - return !max || max.page < currentPage || max.page === currentPage; - }; - PaginationStore.prototype.setPage = function (pageNumber, offset, walletID) { - var newPages = []; - var pages = this.subject.getValue(); - if (pages && pages.length) { - newPages = pages.slice(0); - } - newPages.push({ page: pageNumber, offset: offset, walletID: walletID }); - this.subject.next(newPages); - }; - Object.defineProperty(PaginationStore.prototype, "value", { - get: function () { - return this.subject.value; - }, - enumerable: true, - configurable: true - }); - PaginationStore = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root' - }), - __metadata("design:paramtypes", []) - ], PaginationStore); - return PaginationStore; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/services/utils.service.ts": -/*!****************************************************!*\ - !*** ./src/app/_helpers/services/utils.service.ts ***! - \****************************************************/ -/*! exports provided: UtilsService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UtilsService", function() { return UtilsService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - -var UtilsService = /** @class */ (function () { - function UtilsService() { - } - UtilsService.prototype.getMinWidthByScale = function (scale) { - switch (scale) { - case 7.5: return 900; - case 10: return 1200; - case 12.5: return 1500; - case 15: return 1800; - default: return 1200; - } - }; - UtilsService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])() - ], UtilsService); - return UtilsService; -}()); - - - -/***/ }), - -/***/ "./src/app/_helpers/services/variables.service.ts": -/*!********************************************************!*\ - !*** ./src/app/_helpers/services/variables.service.ts ***! - \********************************************************/ -/*! exports provided: VariablesService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VariablesService", function() { return VariablesService; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var idlejs_dist__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! idlejs/dist */ "./node_modules/idlejs/dist/index.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var ngx_contextmenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ngx-contextmenu */ "./node_modules/ngx-contextmenu/fesm5/ngx-contextmenu.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_5__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var VariablesService = /** @class */ (function () { - function VariablesService(router, ngZone, contextMenuService) { - var _this = this; - this.router = router; - this.ngZone = ngZone; - this.contextMenuService = contextMenuService; - this.request_on_in = {}; - this.stop_paginate = {}; - this.sync_started = false; - this.digits = 12; - this.appPass = ''; - this.appLogin = false; - this.moneyEquivalent = 0; - this.defaultTheme = 'dark'; - this.defaultCurrency = 'ZANO'; - this.exp_med_ts = 0; - this.net_time_delta_median = 0; - this.height_app = 0; - this.height_max = 0; - this.downloaded = 0; - this.total = 0; - this.last_build_available = ''; - this.last_build_displaymode = 0; - this.daemon_state = 3; - this.sync = { - progress_value: 0, - progress_value_text: '0' - }; - this.download = { - progress_value: 0, - progress_value_text: '0' - }; - this.get_recent_transfers = false; // avoid of execute function before collback complete - this.default_fee = '0.010000000000'; - this.default_fee_big = new bignumber_js__WEBPACK_IMPORTED_MODULE_5__["BigNumber"]('10000000000'); - this.settings = { - appLockTime: 15, - appLog: 0, - theme: '', - scale: 10, - language: 'en', - default_path: '/', - viewedContracts: [], - notViewedContracts: [], - wallets: [] - }; - this.count = 40; - this.maxPages = 5; - this.testnet = false; - this.networkType = ''; // testnet of mainnet - this.wallets = []; - this.aliases = []; - this.aliasesChecked = {}; - this.enableAliasSearch = false; - this.maxWalletNameLength = 25; - this.maxCommentLength = 255; - this.dataIsLoaded = false; - this.contacts = []; - this.newContact = { name: null, address: null, notes: null }; - this.pattern = '^[a-zA-Z0-9_.\\\]\*\|\~\!\?\@\#\$\%\^\&\+\{\}\(\)\<\>\:\;\"\'\-\=\/\,\[\\\\]*$'; - this.after_sync_request = {}; - this.getExpMedTsEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getHeightAppEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getHeightMaxEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getDownloadedAppEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getTotalEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getRefreshStackingEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.getAliasChangedEvent = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](null); - this.idle = new idlejs_dist__WEBPACK_IMPORTED_MODULE_2__["Idle"]() - .whenNotInteractive() - .do(function () { - if (_this.appPass == '') { - _this.restartCountdown(); - } - else { - _this.ngZone.run(function () { - _this.idle.stop(); - _this.appPass = ''; - _this.appLogin = false; - _this.router.navigate(['/login'], { queryParams: { type: 'auth' } }); - }); - } - }); - } - VariablesService.prototype.setExpMedTs = function (timestamp) { - if (timestamp !== this.exp_med_ts) { - this.exp_med_ts = timestamp; - this.getExpMedTsEvent.next(timestamp); - } - }; - VariablesService.prototype.setHeightApp = function (height) { - if (height !== this.height_app) { - this.height_app = height; - this.getHeightAppEvent.next(height); - } - }; - VariablesService.prototype.setHeightMax = function (height) { - if (height !== this.height_max) { - this.height_max = height; - this.getHeightMaxEvent.next(height); - } - }; - VariablesService.prototype.setDownloadedBytes = function (bytes) { - if (bytes !== this.downloaded) { - this.downloaded = this.bytesToMb(bytes); - this.getDownloadedAppEvent.next(bytes); - } - }; - VariablesService.prototype.setTotalBytes = function (bytes) { - if (bytes !== this.total) { - this.total = this.bytesToMb(bytes); - this.getTotalEvent.next(bytes); - } - }; - VariablesService.prototype.setRefreshStacking = function (wallet_id) { - this.getHeightAppEvent.next(wallet_id); - }; - VariablesService.prototype.changeAliases = function () { - this.getAliasChangedEvent.next(true); - }; - VariablesService.prototype.setCurrentWallet = function (id) { - var _this = this; - this.wallets.forEach(function (wallet) { - if (wallet.wallet_id === id) { - _this.currentWallet = wallet; - } - }); - }; - VariablesService.prototype.getWallet = function (id) { - for (var i = 0; i < this.wallets.length; i++) { - if (this.wallets[i].wallet_id === id) { - return this.wallets[i]; - } - } - return null; - }; - VariablesService.prototype.getNotLoadedWallet = function () { - for (var i = 0; i < this.wallets.length; i++) { - if (!this.wallets[i].loaded) { - return this.wallets[i]; - } - } - return null; - }; - VariablesService.prototype.startCountdown = function () { - this.idle.within(this.settings.appLockTime).start(); - }; - VariablesService.prototype.stopCountdown = function () { - this.idle.stop(); - }; - VariablesService.prototype.restartCountdown = function () { - this.idle.within(this.settings.appLockTime).restart(); - }; - VariablesService.prototype.bytesToMb = function (bytes) { - return Number((bytes / Math.pow(1024, 2)).toFixed(1)); - }; - VariablesService.prototype.onContextMenu = function ($event) { - $event.target['contextSelectionStart'] = $event.target['selectionStart']; - $event.target['contextSelectionEnd'] = $event.target['selectionEnd']; - if ($event.target && ($event.target['nodeName'].toUpperCase() === 'TEXTAREA' || $event.target['nodeName'].toUpperCase() === 'INPUT') && !$event.target['readOnly']) { - this.contextMenuService.show.next({ - contextMenu: this.allContextMenu, - event: $event, - item: $event.target, - }); - $event.preventDefault(); - $event.stopPropagation(); - } - }; - VariablesService.prototype.onContextMenuOnlyCopy = function ($event, copyText) { - this.contextMenuService.show.next({ - contextMenu: this.onlyCopyContextMenu, - event: $event, - item: copyText - }); - $event.preventDefault(); - $event.stopPropagation(); - }; - VariablesService.prototype.onContextMenuPasteSelect = function ($event) { - $event.target['contextSelectionStart'] = $event.target['selectionStart']; - $event.target['contextSelectionEnd'] = $event.target['selectionEnd']; - console.warn($event.target); - console.warn($event.target['disabled']); - if ($event.target && ($event.target['nodeName'].toUpperCase() === 'TEXTAREA' || $event.target['nodeName'].toUpperCase() === 'INPUT') && !$event.target['readOnly']) { - this.contextMenuService.show.next({ - contextMenu: this.pasteSelectContextMenu, - event: $event, - item: $event.target, - }); - $event.preventDefault(); - $event.stopPropagation(); - } - }; - VariablesService = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({ - providedIn: 'root' - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_3__["Router"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], ngx_contextmenu__WEBPACK_IMPORTED_MODULE_4__["ContextMenuService"]]) - ], VariablesService); - return VariablesService; -}()); - - - -/***/ }), - -/***/ "./src/app/_shared/constants.ts": -/*!**************************************!*\ - !*** ./src/app/_shared/constants.ts ***! - \**************************************/ -/*! exports provided: MIXIN, RCV_ADDR_QR_SCALE, AUDITABLE_WALLET_HELP_PAGE, CREATE_NEW_WALLET_HELP_PAGE, LOCKED_BALANCE_HELP_PAGE, DOWNLOADS_PAGE_URL, BLOCK_EXPLORER_TX_URL_PREFIX, BLOCK_EXPLORER_TN_TX_URL_PREFIX */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MIXIN", function() { return MIXIN; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RCV_ADDR_QR_SCALE", function() { return RCV_ADDR_QR_SCALE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AUDITABLE_WALLET_HELP_PAGE", function() { return AUDITABLE_WALLET_HELP_PAGE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CREATE_NEW_WALLET_HELP_PAGE", function() { return CREATE_NEW_WALLET_HELP_PAGE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOCKED_BALANCE_HELP_PAGE", function() { return LOCKED_BALANCE_HELP_PAGE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOWNLOADS_PAGE_URL", function() { return DOWNLOADS_PAGE_URL; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BLOCK_EXPLORER_TX_URL_PREFIX", function() { return BLOCK_EXPLORER_TX_URL_PREFIX; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BLOCK_EXPLORER_TN_TX_URL_PREFIX", function() { return BLOCK_EXPLORER_TN_TX_URL_PREFIX; }); -var MIXIN = 10; // default mixin value -var RCV_ADDR_QR_SCALE = 2; // scale factor for QR code -var AUDITABLE_WALLET_HELP_PAGE = 'docs.zano.org/docs/auditable-wallets'; -var CREATE_NEW_WALLET_HELP_PAGE = 'docs.zano.org/docs/getting-started-1#section-create-new-wallet'; -var LOCKED_BALANCE_HELP_PAGE = 'docs.zano.org/docs/locked-balance'; -var DOWNLOADS_PAGE_URL = 'zano.org/downloads.html'; -var BLOCK_EXPLORER_TX_URL_PREFIX = 'explorer.zano.org/transaction/'; -var BLOCK_EXPLORER_TN_TX_URL_PREFIX = 'testnet-explorer.zano.org/transaction/'; - - -/***/ }), - -/***/ "./src/app/add-contacts/add-contacts.component.html": -/*!**********************************************************!*\ - !*** ./src/app/add-contacts/add-contacts.component.html ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n {{ 'CONTACTS.TITLE' | translate }}\r\n {{ 'CONTACTS.ADD' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.NAME_LENGTH' | translate }}\r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.NAME_DUBLICATED' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_DUBLICATED' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n {{ 'CONTACTS.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n
      \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/add-contacts/add-contacts.component.scss": -/*!**********************************************************!*\ - !*** ./src/app/add-contacts/add-contacts.component.scss ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-add {\n margin-top: 3rem; }\n .form-add .input-block-name {\n width: 50%; }\n .form-add button {\n margin-top: 3rem;\n width: 100%;\n max-width: 18rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYWRkLWNvbnRhY3RzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFkZC1jb250YWN0c1xcYWRkLWNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsZ0JBQWdCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9hZGQtY29udGFjdHMvYWRkLWNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tYWRkIHtcclxuICBtYXJnaW4tdG9wOiAzcmVtO1xyXG5cclxuICAuaW5wdXQtYmxvY2stbmFtZSB7XHJcbiAgICB3aWR0aDogNTAlO1xyXG4gIH1cclxuXHJcbiAgYnV0dG9uIHtcclxuICAgIG1hcmdpbi10b3A6IDNyZW07XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMThyZW07XHJcbiAgfVxyXG59Il19 */" - -/***/ }), - -/***/ "./src/app/add-contacts/add-contacts.component.ts": -/*!********************************************************!*\ - !*** ./src/app/add-contacts/add-contacts.component.ts ***! - \********************************************************/ -/*! exports provided: AddContactsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddContactsComponent", function() { return AddContactsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - -var AddContactsComponent = /** @class */ (function () { - function AddContactsComponent(route, backend, variablesService, modalService, ngZone, location) { - var _this = this; - this.route = route; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.location = location; - this.addContactForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - address: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [ - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, - function (g) { - if (g.value) { - _this.backend.validateAddress(g.value, function (valid_status) { - _this.ngZone.run(function () { - if (valid_status === false) { - g.setErrors(Object.assign({ address_not_valid: true }, g.errors)); - } - else { - if (g.hasError('address_not_valid')) { - delete g.errors['address_not_valid']; - if (Object.keys(g.errors).length === 0) { - g.setErrors(null); - } - } - } - }); - }); - return g.hasError('address_not_valid') - ? { address_not_valid: true } - : null; - } - return null; - }, - function (g) { - var isDublicated = _this.variablesService.contacts.findIndex(function (contact) { return contact.address === g.value; }); - if (isDublicated !== -1 && !(_this.id === isDublicated)) { - return { dublicated: true }; - } - return null; - } - ]), - notes: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [ - function (g) { - if (g.value) { - if (g.value.length > _this.variablesService.maxCommentLength) { - return { maxLength: true }; - } - else { - return null; - } - } - else { - return null; - } - } - ]), - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [ - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].minLength(4), - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].maxLength(25), - function (g) { - if (g.value) { - var isDublicated = _this.variablesService.contacts.findIndex(function (contact) { return contact.name === g.value.trim(); }); - if (isDublicated !== -1 && !(_this.id === isDublicated)) { - return { dublicated: true }; - } - return null; - } - } - ]) - }); - } - AddContactsComponent.prototype.ngOnInit = function () { - var _this = this; - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.id) { - _this.id = parseInt(params.id, 10); - _this.addContactForm.reset({ - name: _this.variablesService.contacts[params.id]['name'], - address: _this.variablesService.contacts[params.id]['address'], - notes: _this.variablesService.contacts[params.id]['notes'] - }); - } - else { - _this.addContactForm.reset({ - name: _this.variablesService.newContact['name'], - address: _this.variablesService.newContact['address'], - notes: _this.variablesService.newContact['notes'] - }); - } - }); - }; - AddContactsComponent.prototype.add = function () { - var _this = this; - if (!this.variablesService.appPass) { - this.modalService.prepareModal('error', 'CONTACTS.FORM_ERRORS.SET_MASTER_PASSWORD'); - } - else { - if (this.addContactForm.valid) { - this.backend.validateAddress(this.addContactForm.get('address').value, function (valid_status) { - if (valid_status === false) { - _this.ngZone.run(function () { - _this.addContactForm - .get('address') - .setErrors({ address_not_valid: true }); - }); - } - else { - if (_this.id || _this.id === 0) { - _this.variablesService.contacts.forEach(function (contact, index) { - if (index === _this.id) { - contact.name = _this.addContactForm.get('name').value.trim(); - contact.address = _this.addContactForm.get('address').value; - contact.notes = - _this.addContactForm.get('notes').value || ''; - } - }); - _this.backend.storeSecureAppData(); - _this.backend.getContactAlias(); - _this.modalService.prepareModal('success', 'CONTACTS.SUCCESS_SAVE'); - } - else { - _this.variablesService.contacts.push({ - name: _this.addContactForm.get('name').value.trim(), - address: _this.addContactForm.get('address').value, - notes: _this.addContactForm.get('notes').value || '' - }); - _this.backend.storeSecureAppData(); - _this.backend.getContactAlias(); - _this.modalService.prepareModal('success', 'CONTACTS.SUCCESS_SENT'); - _this.variablesService.newContact = { - name: null, - address: null, - notes: null - }; - _this.addContactForm.reset({ - name: null, - address: null, - notes: null - }); - } - } - }); - } - } - }; - AddContactsComponent.prototype.back = function () { - this.location.back(); - }; - AddContactsComponent.prototype.ngOnDestroy = function () { - if (!(this.id || this.id === 0)) { - this.variablesService.newContact = { - name: this.addContactForm.get('name').value, - address: this.addContactForm.get('address').value, - notes: this.addContactForm.get('notes').value - }; - } - this.queryRouting.unsubscribe(); - }; - AddContactsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-add-contacts', - template: __webpack_require__(/*! ./add-contacts.component.html */ "./src/app/add-contacts/add-contacts.component.html"), - styles: [__webpack_require__(/*! ./add-contacts.component.scss */ "./src/app/add-contacts/add-contacts.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_6__["ActivatedRoute"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _angular_common__WEBPACK_IMPORTED_MODULE_5__["Location"]]) - ], AddContactsComponent); - return AddContactsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/app-routing.module.ts": -/*!***************************************!*\ - !*** ./src/app/app-routing.module.ts ***! - \***************************************/ -/*! exports provided: AppRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function() { return AppRoutingModule; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _main_main_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./main/main.component */ "./src/app/main/main.component.ts"); -/* harmony import */ var _login_login_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./login/login.component */ "./src/app/login/login.component.ts"); -/* harmony import */ var _wallet_wallet_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./wallet/wallet.component */ "./src/app/wallet/wallet.component.ts"); -/* harmony import */ var _send_send_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./send/send.component */ "./src/app/send/send.component.ts"); -/* harmony import */ var _receive_receive_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./receive/receive.component */ "./src/app/receive/receive.component.ts"); -/* harmony import */ var _history_history_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./history/history.component */ "./src/app/history/history.component.ts"); -/* harmony import */ var _contracts_contracts_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./contracts/contracts.component */ "./src/app/contracts/contracts.component.ts"); -/* harmony import */ var _purchase_purchase_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./purchase/purchase.component */ "./src/app/purchase/purchase.component.ts"); -/* harmony import */ var _messages_messages_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./messages/messages.component */ "./src/app/messages/messages.component.ts"); -/* harmony import */ var _typing_message_typing_message_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./typing-message/typing-message.component */ "./src/app/typing-message/typing-message.component.ts"); -/* harmony import */ var _staking_staking_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./staking/staking.component */ "./src/app/staking/staking.component.ts"); -/* harmony import */ var _settings_settings_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./settings/settings.component */ "./src/app/settings/settings.component.ts"); -/* harmony import */ var _create_wallet_create_wallet_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./create-wallet/create-wallet.component */ "./src/app/create-wallet/create-wallet.component.ts"); -/* harmony import */ var _open_wallet_open_wallet_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./open-wallet/open-wallet.component */ "./src/app/open-wallet/open-wallet.component.ts"); -/* harmony import */ var _restore_wallet_restore_wallet_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./restore-wallet/restore-wallet.component */ "./src/app/restore-wallet/restore-wallet.component.ts"); -/* harmony import */ var _seed_phrase_seed_phrase_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./seed-phrase/seed-phrase.component */ "./src/app/seed-phrase/seed-phrase.component.ts"); -/* harmony import */ var _wallet_details_wallet_details_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./wallet-details/wallet-details.component */ "./src/app/wallet-details/wallet-details.component.ts"); -/* harmony import */ var _assign_alias_assign_alias_component__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./assign-alias/assign-alias.component */ "./src/app/assign-alias/assign-alias.component.ts"); -/* harmony import */ var _edit_alias_edit_alias_component__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./edit-alias/edit-alias.component */ "./src/app/edit-alias/edit-alias.component.ts"); -/* harmony import */ var _transfer_alias_transfer_alias_component__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./transfer-alias/transfer-alias.component */ "./src/app/transfer-alias/transfer-alias.component.ts"); -/* harmony import */ var _contacts_contacts_component__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./contacts/contacts.component */ "./src/app/contacts/contacts.component.ts"); -/* harmony import */ var _add_contacts_add_contacts_component__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./add-contacts/add-contacts.component */ "./src/app/add-contacts/add-contacts.component.ts"); -/* harmony import */ var _contact_send_contact_send_component__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./contact-send/contact-send.component */ "./src/app/contact-send/contact-send.component.ts"); -/* harmony import */ var _export_import_export_import_component__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./export-import/export-import.component */ "./src/app/export-import/export-import.component.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - -// Components - - - - - - - - - - - - - - - - - - - - - - - - -var routes = [ - { - path: '', - component: _main_main_component__WEBPACK_IMPORTED_MODULE_2__["MainComponent"] - }, - { - path: 'main', - component: _main_main_component__WEBPACK_IMPORTED_MODULE_2__["MainComponent"] - }, - { - path: 'login', - component: _login_login_component__WEBPACK_IMPORTED_MODULE_3__["LoginComponent"] - }, - { - path: 'wallet/:id', - component: _wallet_wallet_component__WEBPACK_IMPORTED_MODULE_4__["WalletComponent"], - children: [ - { - path: 'send', - component: _send_send_component__WEBPACK_IMPORTED_MODULE_5__["SendComponent"] - }, - { - path: 'receive', - component: _receive_receive_component__WEBPACK_IMPORTED_MODULE_6__["ReceiveComponent"] - }, - { - path: 'history', - component: _history_history_component__WEBPACK_IMPORTED_MODULE_7__["HistoryComponent"] - }, - { - path: 'contracts', - component: _contracts_contracts_component__WEBPACK_IMPORTED_MODULE_8__["ContractsComponent"], - }, - { - path: 'purchase', - component: _purchase_purchase_component__WEBPACK_IMPORTED_MODULE_9__["PurchaseComponent"] - }, - { - path: 'purchase/:id', - component: _purchase_purchase_component__WEBPACK_IMPORTED_MODULE_9__["PurchaseComponent"] - }, - { - path: 'messages', - component: _messages_messages_component__WEBPACK_IMPORTED_MODULE_10__["MessagesComponent"], - }, - { - path: 'messages/:id', - component: _typing_message_typing_message_component__WEBPACK_IMPORTED_MODULE_11__["TypingMessageComponent"], - }, - { - path: 'staking', - component: _staking_staking_component__WEBPACK_IMPORTED_MODULE_12__["StakingComponent"] - }, - { - path: '', - redirectTo: 'history', - pathMatch: 'full' - } - ] - }, - { - path: 'create', - component: _create_wallet_create_wallet_component__WEBPACK_IMPORTED_MODULE_14__["CreateWalletComponent"] - }, - { - path: 'open', - component: _open_wallet_open_wallet_component__WEBPACK_IMPORTED_MODULE_15__["OpenWalletComponent"] - }, - { - path: 'restore', - component: _restore_wallet_restore_wallet_component__WEBPACK_IMPORTED_MODULE_16__["RestoreWalletComponent"] - }, - { - path: 'seed-phrase', - component: _seed_phrase_seed_phrase_component__WEBPACK_IMPORTED_MODULE_17__["SeedPhraseComponent"] - }, - { - path: 'details', - component: _wallet_details_wallet_details_component__WEBPACK_IMPORTED_MODULE_18__["WalletDetailsComponent"] - }, - { - path: 'assign-alias', - component: _assign_alias_assign_alias_component__WEBPACK_IMPORTED_MODULE_19__["AssignAliasComponent"] - }, - { - path: 'edit-alias', - component: _edit_alias_edit_alias_component__WEBPACK_IMPORTED_MODULE_20__["EditAliasComponent"] - }, - { - path: 'transfer-alias', - component: _transfer_alias_transfer_alias_component__WEBPACK_IMPORTED_MODULE_21__["TransferAliasComponent"] - }, - { - path: 'settings', - component: _settings_settings_component__WEBPACK_IMPORTED_MODULE_13__["SettingsComponent"] - }, - { - path: 'contacts', - component: _contacts_contacts_component__WEBPACK_IMPORTED_MODULE_22__["ContactsComponent"] - }, - { - path: 'add-contacts', - component: _add_contacts_add_contacts_component__WEBPACK_IMPORTED_MODULE_23__["AddContactsComponent"] - }, - { - path: 'edit-contacts/:id', - component: _add_contacts_add_contacts_component__WEBPACK_IMPORTED_MODULE_23__["AddContactsComponent"] - }, - { - path: 'contact-send/:id', - component: _contact_send_contact_send_component__WEBPACK_IMPORTED_MODULE_24__["ContactSendComponent"] - }, - { - path: 'import', - component: _export_import_export_import_component__WEBPACK_IMPORTED_MODULE_25__["ExportImportComponent"] - }, - { - path: '', - redirectTo: '/', - pathMatch: 'full' - } -]; -var AppRoutingModule = /** @class */ (function () { - function AppRoutingModule() { - } - AppRoutingModule = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"].forRoot(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterModule"]] - }) - ], AppRoutingModule); - return AppRoutingModule; -}()); - - - -/***/ }), - -/***/ "./src/app/app.component.html": -/*!************************************!*\ - !*** ./src/app/app.component.html ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "\r\n\r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\r\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\r\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\r\n \r\n
      \r\n
      \r\n\r\n {{ 'CONTEXT_MENU.COPY' | translate }}\r\n {{ 'CONTEXT_MENU.PASTE' | translate }}\r\n {{ 'CONTEXT_MENU.SELECT' | translate }}\r\n\r\n\r\n\r\n {{ 'CONTEXT_MENU.COPY' | translate }}\r\n\r\n\r\n\r\n {{ 'CONTEXT_MENU.PASTE' | translate }}\r\n {{ 'CONTEXT_MENU.SELECT' | translate }}\r\n\r\n\r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/app.component.scss": -/*!************************************!*\ - !*** ./src/app/app.component.scss ***! - \************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "/*\r\n* Implementation of themes\r\n*/\n.app-content {\n display: flex;\n overflow-x: overlay;\n overflow-y: hidden;\n width: 100%; }\n.app-content .preloader {\n align-self: center;\n color: #fff;\n font-size: 2rem;\n margin: 0 auto;\n text-align: center;\n width: 50%; }\n.app-content .preloader .loading-bar {\n display: block;\n -webkit-animation: move 5s linear infinite;\n animation: move 5s linear infinite;\n background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.125, rgba(0, 0, 0, 0.15)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.1)), color-stop(0.375, rgba(0, 0, 0, 0.1)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.15)), color-stop(0.625, rgba(0, 0, 0, 0.15)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.1)), color-stop(0.875, rgba(0, 0, 0, 0.1)), color-stop(0.875, transparent), to(transparent)), -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.125, rgba(0, 0, 0, 0.3)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.25)), color-stop(0.375, rgba(0, 0, 0, 0.25)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.3)), color-stop(0.625, rgba(0, 0, 0, 0.3)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.25)), color-stop(0.875, rgba(0, 0, 0, 0.25)), color-stop(0.875, transparent), to(transparent));\n background-size: 10rem 10rem;\n margin-top: 2rem;\n width: 100%;\n height: 1rem; }\n@-webkit-keyframes move {\n 0% {\n background-position: 100% -10rem; }\n 100% {\n background-position: 100% 10rem; } }\n@keyframes move {\n 0% {\n background-position: 100% -10rem; }\n 100% {\n background-position: 100% 10rem; } }\n\r\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFzc2V0c1xcc2Nzc1xcYmFzZVxcX21peGlucy5zY3NzIiwic3JjL2FwcC9hcHAuY29tcG9uZW50LnNjc3MiLCJzcmMvYXBwL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFwcC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4RUE7O0NDNUVDO0FDQUQ7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQixXQUFXLEVBQUE7QUFKYjtJQU9JLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsVUFBVSxFQUFBO0FBWmQ7TUFlTSxjQUFjO01BQ2QsMENBQWtDO2NBQWxDLGtDQUFrQztNQUNsQywrbENBc0JHO01BQ0gsNEJBQTRCO01BQzVCLGdCQUFnQjtNQUNoQixXQUFXO01BQ1gsWUFBWSxFQUFBO0FBSWhCO0VBQ0U7SUFDRSxnQ0FBZ0MsRUFBQTtFQUVsQztJQUNFLCtCQUErQixFQUFBLEVBQUE7QUFMbkM7RUFDRTtJQUNFLGdDQUFnQyxFQUFBO0VBRWxDO0lBQ0UsK0JBQStCLEVBQUEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIkBtaXhpbiB0ZXh0LXRydW5jYXRlIHtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbn1cclxuQG1peGluIHRleHRXcmFwIHtcclxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XHJcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xyXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICBsaW5lLWJyZWFrOiBzdHJpY3Q7XHJcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xyXG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xyXG4gIGh5cGhlbnM6IGF1dG87XHJcbn1cclxuQG1peGluIGNvdmVyQm94IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbkBtaXhpbiBhYnMgKCR0b3A6IGF1dG8sICRyaWdodDogYXV0bywgJGJvdHRvbTogYXV0bywgJGxlZnQ6IGF1dG8pIHtcclxuICB0b3A6ICR0b3A7XHJcbiAgcmlnaHQ6ICRyaWdodDtcclxuICBib3R0b206ICRib3R0b207XHJcbiAgbGVmdDogJGxlZnQ7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG59XHJcbkBtaXhpbiBjb3ZlckltZyB7XHJcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxuXHQtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogY292ZXI7XHJcblx0LW8tYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuXHRiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xyXG5cdGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XHJcbn1cclxuQG1peGluIHZhbGluZ0JveCB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogIDUwJTtcclxuXHRsZWZ0OiA1MCU7XHJcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbn1cclxuQG1peGluIHVuU2VsZWN0IHtcclxuXHQtd2Via2l0LXRvdWNoLWNvbGxvdXQ6IG5vbmU7XHJcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcclxuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbn1cclxuQG1peGluIG1heDExOTkgeyAvLyBtYWtldCAxMTcxXHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgeyBAY29udGVudDsgfVxyXG59XHJcbkBtaXhpbiBtYXgxMTcwIHsgLy8gbWFrZXRzIDk5MlxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMTcwcHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbWF4OTkxIHsgLy8gbWFrZXRzIDc2MlxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkgeyBAY29udGVudDsgfVxyXG59XHJcbkBtaXhpbiBtYXg3NjEgeyAvLyBtYWtldHMgNTc2XHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2MXB4KSB7IEBjb250ZW50OyB9XHJcbn1cclxuQG1peGluIG1heDU3NSB7IC8vIG1ha2V0cyA0MDBcclxuICBAbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbW9iaWxlIHtcclxuICBAbWVkaWEgKG1heC13aWR0aDogMzk5cHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gaWNvQ2VudGVyIHtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xyXG59XHJcbkBtaXhpbiBwc2V1ZG8gKCRkaXNwbGF5OiBibG9jaywgJHBvczogYWJzb2x1dGUsICRjb250ZW50OiAnJyl7XHJcbiAgY29udGVudDogJGNvbnRlbnQ7XHJcbiAgZGlzcGxheTogJGRpc3BsYXk7XHJcbiAgcG9zaXRpb246ICRwb3M7XHJcbn1cclxuXHJcbi8qXHJcbiogSW1wbGVtZW50YXRpb24gb2YgdGhlbWVzXHJcbiovXHJcbkBtaXhpbiB0aGVtaWZ5KCR0aGVtZXM6ICR0aGVtZXMpIHtcclxuICBAZWFjaCAkdGhlbWUsICRtYXAgaW4gJHRoZW1lcyB7XHJcbiAgICAudGhlbWUtI3skdGhlbWV9ICYge1xyXG4gICAgICAkdGhlbWUtbWFwOiAoKSAhZ2xvYmFsO1xyXG4gICAgICBAZWFjaCAka2V5LCAkc3VibWFwIGluICRtYXAge1xyXG4gICAgICAgICR2YWx1ZTogbWFwLWdldChtYXAtZ2V0KCR0aGVtZXMsICR0aGVtZSksICcjeyRrZXl9Jyk7XHJcbiAgICAgICAgJHRoZW1lLW1hcDogbWFwLW1lcmdlKCR0aGVtZS1tYXAsICgka2V5OiAkdmFsdWUpKSAhZ2xvYmFsO1xyXG4gICAgICB9XHJcbiAgICAgIEBjb250ZW50O1xyXG4gICAgICAkdGhlbWUtbWFwOiBudWxsICFnbG9iYWw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AZnVuY3Rpb24gdGhlbWVkKCRrZXkpIHtcclxuICBAcmV0dXJuIG1hcC1nZXQoJHRoZW1lLW1hcCwgJGtleSk7XHJcbn1cclxuIiwiLypcclxuKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGVtZXNcclxuKi9cbi5hcHAtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLmFwcC1jb250ZW50IC5wcmVsb2FkZXIge1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBmb250LXNpemU6IDJyZW07XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgICAuYXBwLWNvbnRlbnQgLnByZWxvYWRlciAubG9hZGluZy1iYXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBhbmltYXRpb246IG1vdmUgNXMgbGluZWFyIGluZmluaXRlO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMTAwJSAxMDAlLCBjb2xvci1zdG9wKDAuMTI1LCByZ2JhKDAsIDAsIDAsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjEyNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjI1LCByZ2JhKDAsIDAsIDAsIDAuMSkpLCBjb2xvci1zdG9wKDAuMzc1LCByZ2JhKDAsIDAsIDAsIDAuMSkpLCBjb2xvci1zdG9wKDAuMzc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDAsIDAsIDAsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjYyNSwgcmdiYSgwLCAwLCAwLCAwLjE1KSksIGNvbG9yLXN0b3AoMC42MjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjg3NSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjg3NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpLCAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4xMjUsIHJnYmEoMCwgMCwgMCwgMC4zKSksIGNvbG9yLXN0b3AoMC4xMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgwLCAwLCAwLCAwLjI1KSksIGNvbG9yLXN0b3AoMC4zNzUsIHJnYmEoMCwgMCwgMCwgMC4yNSkpLCBjb2xvci1zdG9wKDAuMzc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDAsIDAsIDAsIDAuMykpLCBjb2xvci1zdG9wKDAuNjI1LCByZ2JhKDAsIDAsIDAsIDAuMykpLCBjb2xvci1zdG9wKDAuNjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNzUsIHJnYmEoMCwgMCwgMCwgMC4yNSkpLCBjb2xvci1zdG9wKDAuODc1LCByZ2JhKDAsIDAsIDAsIDAuMjUpKSwgY29sb3Itc3RvcCgwLjg3NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMHJlbSAxMHJlbTtcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMXJlbTsgfVxuXG5Aa2V5ZnJhbWVzIG1vdmUge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtMTByZW07IH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAxMHJlbTsgfSB9XG4iLCJAaW1wb3J0ICd+c3JjL2Fzc2V0cy9zY3NzL2Jhc2UvbWl4aW5zJztcclxuXHJcbi5hcHAtY29udGVudCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBvdmVyZmxvdy14OiBvdmVybGF5O1xyXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgLnByZWxvYWRlciB7XHJcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIGZvbnQtc2l6ZTogMnJlbTtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDUwJTtcclxuXHJcbiAgICAubG9hZGluZy1iYXIge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgYW5pbWF0aW9uOiBtb3ZlIDVzIGxpbmVhciBpbmZpbml0ZTtcclxuICAgICAgYmFja2dyb3VuZC1pbWFnZTpcclxuICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICBsaW5lYXIsIDAgMCwgMTAwJSAxMDAlLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4xMjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjEyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4zNzUsIHJnYmEoMCwgMCwgMCwgLjEwKSksIGNvbG9yLXN0b3AoLjM3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC41MDAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNTAwLCByZ2JhKDAsIDAsIDAsIC4xNSkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC43NTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNzUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC44NzUsIHJnYmEoMCwgMCwgMCwgLjEwKSksIGNvbG9yLXN0b3AoLjg3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICApLFxyXG4gICAgICAgIC13ZWJraXQtZ3JhZGllbnQoXHJcbiAgICAgICAgICAgIGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjEyNSwgcmdiYSgwLCAwLCAwLCAuMzApKSwgY29sb3Itc3RvcCguMTI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjI1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC4yNTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjUwMCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC41MDAsIHJnYmEoMCwgMCwgMCwgLjMwKSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjYyNSwgcmdiYSgwLCAwLCAwLCAuMzApKSwgY29sb3Itc3RvcCguNjI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjg3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguODc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIHRvKHRyYW5zcGFyZW50KVxyXG4gICAgICAgICk7XHJcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTByZW0gMTByZW07XHJcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDFyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIG1vdmUge1xyXG4gICAgMCUge1xyXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIC0xMHJlbTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDEwcmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/app.component.ts": -/*!**********************************!*\ - !*** ./src/app/app.component.ts ***! - \**********************************/ -/*! exports provided: AppComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppComponent", function() { return AppComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/fesm5/http.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var ngx_contextmenu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ngx-contextmenu */ "./node_modules/ngx-contextmenu/fesm5/ngx-contextmenu.js"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./_helpers/services/utils.service */ "./src/app/_helpers/services/utils.service.ts"); -/* harmony import */ var store__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! store */ "./src/store.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - - - - - -var AppComponent = /** @class */ (function () { - function AppComponent(http, renderer, translate, backend, router, variablesService, ngZone, intToMoneyPipe, modalService, utilsService, store) { - var _this = this; - this.http = http; - this.renderer = renderer; - this.translate = translate; - this.backend = backend; - this.router = router; - this.variablesService = variablesService; - this.ngZone = ngZone; - this.intToMoneyPipe = intToMoneyPipe; - this.modalService = modalService; - this.utilsService = utilsService; - this.store = store; - this.onQuitRequest = false; - this.firstOnlineState = false; - this.translateUsed = false; - this.needOpenWallets = []; - translate.addLangs(['en', 'fr', 'de', 'it', 'pt']); - translate.setDefaultLang('en'); - // const browserLang = translate.getBrowserLang(); - // translate.use(browserLang.match(/en|fr/) ? browserLang : 'en'); - translate.use('en').subscribe(function () { - _this.translateUsed = true; - }); - } - AppComponent.prototype.setBackendLocalization = function () { - var _this = this; - if (this.translateUsed) { - var stringsArray = [ - this.translate.instant('BACKEND_LOCALIZATION.QUIT'), - this.translate.instant('BACKEND_LOCALIZATION.IS_RECEIVED'), - this.translate.instant('BACKEND_LOCALIZATION.IS_CONFIRMED'), - this.translate.instant('BACKEND_LOCALIZATION.INCOME_TRANSFER_UNCONFIRMED'), - this.translate.instant('BACKEND_LOCALIZATION.INCOME_TRANSFER_CONFIRMED'), - this.translate.instant('BACKEND_LOCALIZATION.MINED'), - this.translate.instant('BACKEND_LOCALIZATION.LOCKED'), - this.translate.instant('BACKEND_LOCALIZATION.IS_MINIMIZE'), - this.translate.instant('BACKEND_LOCALIZATION.RESTORE'), - this.translate.instant('BACKEND_LOCALIZATION.TRAY_MENU_SHOW'), - this.translate.instant('BACKEND_LOCALIZATION.TRAY_MENU_MINIMIZE') - ]; - this.backend.setBackendLocalization(stringsArray, this.variablesService.settings.language); - } - else { - console.warn('wait translate use'); - setTimeout(function () { - _this.setBackendLocalization(); - }, 10000); - } - }; - AppComponent.prototype.ngOnInit = function () { - var _this = this; - this.variablesService.allContextMenu = this.allContextMenu; - this.variablesService.onlyCopyContextMenu = this.onlyCopyContextMenu; - this.backend.initService().subscribe(function (initMessage) { - console.log('Init message: ', initMessage); - _this.backend.webkitLaunchedScript(); - _this.backend.start_backend(false, '127.0.0.1', 11512, function (st2, dd2) { - console.log(st2, dd2); - }); - _this.backend.eventSubscribe('quit_requested', function () { - if (!_this.onQuitRequest) { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - _this.needOpenWallets = []; - _this.variablesService.daemon_state = 5; - var saveFunction_1 = function () { - _this.backend.storeAppData(function () { - var recursionCloseWallets = function () { - if (_this.variablesService.wallets.length) { - var lastIndex_1 = _this.variablesService.wallets.length - 1; - _this.backend.closeWallet(_this.variablesService.wallets[lastIndex_1].wallet_id, function () { - _this.variablesService.wallets.splice(lastIndex_1, 1); - recursionCloseWallets(); - }); - } - else { - _this.backend.quitRequest(); - } - }; - recursionCloseWallets(); - }); - }; - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(function () { - saveFunction_1(); - }); - } - else { - saveFunction_1(); - } - } - _this.onQuitRequest = true; - }); - _this.backend.eventSubscribe('update_wallet_status', function (data) { - console.log('----------------- update_wallet_status -----------------'); - console.log(data); - var wallet_state = data.wallet_state; - var is_mining = data.is_mining; - var wallet = _this.variablesService.getWallet(data.wallet_id); - // 1-synch, 2-ready, 3 - error - if (wallet) { - _this.ngZone.run(function () { - wallet.loaded = false; - wallet.staking = is_mining; - if (wallet_state === 2) { // ready - wallet.loaded = true; - } - if (wallet_state === 3) { // error - // wallet.error = true; - } - wallet.balance = data.balance; - wallet.unlocked_balance = data.unlocked_balance; - wallet.mined_total = data.minied_total; - wallet.alias_available = data.is_alias_operations_available; - }); - } - }); - _this.backend.eventSubscribe('wallet_sync_progress', function (data) { - console.log('----------------- wallet_sync_progress -----------------'); - console.log(data); - var wallet = _this.variablesService.getWallet(data.wallet_id); - if (wallet) { - _this.ngZone.run(function () { - wallet.progress = (data.progress < 0) ? 0 : ((data.progress > 100) ? 100 : data.progress); - if (!_this.variablesService.sync_started) { - _this.variablesService.sync_started = true; - } - _this.addToStore(wallet, true); // subscribe on data - if (wallet.progress === 0) { - wallet.loaded = false; - } - else if (wallet.progress === 100) { - wallet.loaded = true; - _this.addToStore(wallet, false); - } - }); - } - }); - _this.backend.eventSubscribe('update_daemon_state', function (data) { - console.log('----------------- update_daemon_state -----------------'); - console.log('DAEMON:' + data.daemon_network_state); - console.log(data); - // this.variablesService.exp_med_ts = data['expiration_median_timestamp'] + 600 + 1; - _this.variablesService.setExpMedTs(data['expiration_median_timestamp'] + 600 + 1); - _this.variablesService.net_time_delta_median = data.net_time_delta_median; - _this.variablesService.last_build_available = data.last_build_available; - _this.variablesService.last_build_displaymode = data.last_build_displaymode; - _this.variablesService.setHeightApp(data.height); - _this.variablesService.setHeightMax(data.max_net_seen_height); - _this.variablesService.setDownloadedBytes(data.downloaded_bytes); - _this.variablesService.setTotalBytes(data.download_total_data_size); - _this.backend.getContactAlias(); - _this.ngZone.run(function () { - _this.variablesService.daemon_state = data['daemon_network_state']; - if (data['daemon_network_state'] === 1) { - var max = data['max_net_seen_height'] - data['synchronization_start_height']; - var current = data.height - data['synchronization_start_height']; - var return_val = Math.floor((current * 100 / max) * 100) / 100; - if (max === 0 || return_val < 0) { - _this.variablesService.sync.progress_value = 0; - _this.variablesService.sync.progress_value_text = '0.00'; - } - else if (return_val >= 100) { - _this.variablesService.sync.progress_value = 100; - _this.variablesService.sync.progress_value_text = '99.99'; - } - else { - _this.variablesService.sync.progress_value = return_val; - _this.variablesService.sync.progress_value_text = return_val.toFixed(2); - } - } - if (data['daemon_network_state'] === 6) { - var max = data['download_total_data_size']; - var current = data['downloaded_bytes']; - var return_val = Math.floor((current / max) * 100); - if (max === 0 || return_val < 0) { - _this.variablesService.download.progress_value = 0; - _this.variablesService.download.progress_value_text = '0.00'; - } - else if (return_val >= 100) { - _this.variablesService.download.progress_value = 100; - _this.variablesService.download.progress_value_text = '99.99'; - } - else { - _this.variablesService.download.progress_value = return_val; - _this.variablesService.download.progress_value_text = return_val.toFixed(2); - } - } - }); - if (!_this.firstOnlineState && data['daemon_network_state'] === 2) { - _this.getAliases(); - _this.backend.getContactAlias(); - _this.backend.getDefaultFee(function (status_fee, data_fee) { - _this.variablesService.default_fee_big = new bignumber_js__WEBPACK_IMPORTED_MODULE_8__["BigNumber"](data_fee); - _this.variablesService.default_fee = _this.intToMoneyPipe.transform(data_fee); - }); - _this.firstOnlineState = true; - } - }); - _this.backend.eventSubscribe('money_transfer', function (data) { - console.log('----------------- money_transfer -----------------'); - console.log(data); - if (!data.ti) { - return; - } - var wallet_id = data.wallet_id; - var tr_info = data.ti; - var wallet = _this.variablesService.getWallet(wallet_id); - if (wallet) { - if (wallet.history.length > 40) { - wallet.history.splice(40, 1); - } - _this.ngZone.run(function () { - if (!wallet.loaded) { - wallet.balance = data.balance; - wallet.unlocked_balance = data.unlocked_balance; - } - else { - wallet.balance = data.balance; - wallet.unlocked_balance = data.unlocked_balance; - } - if (tr_info.tx_type === 6) { - _this.variablesService.setRefreshStacking(wallet_id); - } - var tr_exists = wallet.excluded_history.some(function (elem) { return elem.tx_hash === tr_info.tx_hash; }); - tr_exists = (!tr_exists) ? wallet.history.some(function (elem) { return elem.tx_hash === tr_info.tx_hash; }) : tr_exists; - if (wallet.currentPage === 1) { - wallet.prepareHistory([tr_info]); - if (wallet.restore) { - wallet.total_history_item = wallet.history.length; - wallet.totalPages = Math.ceil(wallet.total_history_item / _this.variablesService.count); - wallet.totalPages > _this.variablesService.maxPages - ? wallet.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : wallet.pages = new Array(wallet.totalPages).fill(1).map(function (value, index) { return value + index; }); - } - } - if (tr_info.hasOwnProperty('contract')) { - var exp_med_ts = _this.variablesService.exp_med_ts; - var height_app = _this.variablesService.height_app; - var contract_1 = tr_info.contract[0]; - if (tr_exists) { - for (var i = 0; i < wallet.contracts.length; i++) { - if (wallet.contracts[i].contract_id === contract_1.contract_id && wallet.contracts[i].is_a === contract_1.is_a) { - wallet.contracts[i].cancel_expiration_time = contract_1.cancel_expiration_time; - wallet.contracts[i].expiration_time = contract_1.expiration_time; - wallet.contracts[i].height = contract_1.height; - wallet.contracts[i].timestamp = contract_1.timestamp; - break; - } - } - // $rootScope.getContractsRecount(); - return; - } - if (contract_1.state === 1 && contract_1.expiration_time < exp_med_ts) { - contract_1.state = 110; - } - else if (contract_1.state === 5 && contract_1.cancel_expiration_time < exp_med_ts) { - contract_1.state = 130; - } - else if (contract_1.state === 1) { - var searchResult2 = _this.variablesService.settings.notViewedContracts.find(function (elem) { return elem.state === 110 && elem.is_a === contract_1.is_a && elem.contract_id === contract_1.contract_id; }); - if (searchResult2) { - if (searchResult2.time === contract_1.expiration_time) { - contract_1.state = 110; - } - else { - for (var j = 0; j < _this.variablesService.settings.notViewedContracts.length; j++) { - if (_this.variablesService.settings.notViewedContracts[j].contract_id === contract_1.contract_id && _this.variablesService.settings.notViewedContracts[j].is_a === contract_1.is_a) { - _this.variablesService.settings.notViewedContracts.splice(j, 1); - break; - } - } - for (var j = 0; j < _this.variablesService.settings.viewedContracts.length; j++) { - if (_this.variablesService.settings.viewedContracts[j].contract_id === contract_1.contract_id && _this.variablesService.settings.viewedContracts[j].is_a === contract_1.is_a) { - _this.variablesService.settings.viewedContracts.splice(j, 1); - break; - } - } - } - } - } - else if (contract_1.state === 2 && (contract_1.height === 0 || (height_app - contract_1.height) < 10)) { - contract_1.state = 201; - } - else if (contract_1.state === 2) { - var searchResult3 = _this.variablesService.settings.viewedContracts.some(function (elem) { return elem.state === 120 && elem.is_a === contract_1.is_a && elem.contract_id === contract_1.contract_id; }); - if (searchResult3) { - contract_1.state = 120; - } - } - else if (contract_1.state === 5) { - var searchResult4 = _this.variablesService.settings.notViewedContracts.find(function (elem) { return elem.state === 130 && elem.is_a === contract_1.is_a && elem.contract_id === contract_1.contract_id; }); - if (searchResult4) { - if (searchResult4.time === contract_1.cancel_expiration_time) { - contract_1.state = 130; - } - else { - for (var j = 0; j < _this.variablesService.settings.notViewedContracts.length; j++) { - if (_this.variablesService.settings.notViewedContracts[j].contract_id === contract_1.contract_id && _this.variablesService.settings.notViewedContracts[j].is_a === contract_1.is_a) { - _this.variablesService.settings.notViewedContracts.splice(j, 1); - break; - } - } - for (var j = 0; j < _this.variablesService.settings.viewedContracts.length; j++) { - if (_this.variablesService.settings.viewedContracts[j].contract_id === contract_1.contract_id && _this.variablesService.settings.viewedContracts[j].is_a === contract_1.is_a) { - _this.variablesService.settings.viewedContracts.splice(j, 1); - break; - } - } - } - } - } - else if (contract_1.state === 6 && (contract_1.height === 0 || (height_app - contract_1.height) < 10)) { - contract_1.state = 601; - } - var searchResult = _this.variablesService.settings.viewedContracts.some(function (elem) { return elem.state === contract_1.state && elem.is_a === contract_1.is_a && elem.contract_id === contract_1.contract_id; }); - contract_1.is_new = !searchResult; - var findContract = false; - for (var i = 0; i < wallet.contracts.length; i++) { - if (wallet.contracts[i].contract_id === contract_1.contract_id && wallet.contracts[i].is_a === contract_1.is_a) { - for (var prop in contract_1) { - if (contract_1.hasOwnProperty(prop)) { - wallet.contracts[i][prop] = contract_1[prop]; - } - } - findContract = true; - break; - } - } - if (findContract === false) { - wallet.contracts.push(contract_1); - } - wallet.recountNewContracts(); - } - }); - } - }); - _this.backend.eventSubscribe('money_transfer_cancel', function (data) { - console.log('----------------- money_transfer_cancel -----------------'); - console.log(data); - if (!data.ti) { - return; - } - var wallet_id = data.wallet_id; - var tr_info = data.ti; - var wallet = _this.variablesService.getWallet(wallet_id); - if (wallet) { - if (tr_info.hasOwnProperty('contract')) { - for (var i = 0; i < wallet.contracts.length; i++) { - if (wallet.contracts[i].contract_id === tr_info.contract[0].contract_id && wallet.contracts[i].is_a === tr_info.contract[0].is_a) { - if (wallet.contracts[i].state === 1 || wallet.contracts[i].state === 110) { - wallet.contracts[i].is_new = true; - wallet.contracts[i].state = 140; - wallet.recountNewContracts(); - } - break; - } - } - } - wallet.removeFromHistory(tr_info.tx_hash); - var error_tr = ''; - switch (tr_info.tx_type) { - case 0: - error_tr = _this.translate.instant('ERRORS.TX_TYPE_NORMAL') + '
      ' + - tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' + - _this.translate.instant('ERRORS.TX_TYPE_NORMAL_TO') + ' ' + _this.intToMoneyPipe.transform(tr_info.amount) + ' ' + - _this.translate.instant('ERRORS.TX_TYPE_NORMAL_END'); - break; - case 1: - // this.translate.instant('ERRORS.TX_TYPE_PUSH_OFFER'); - break; - case 2: - // this.translate.instant('ERRORS.TX_TYPE_UPDATE_OFFER'); - break; - case 3: - // this.translate.instant('ERRORS.TX_TYPE_CANCEL_OFFER'); - break; - case 4: - error_tr = _this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS') + '
      ' + - tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' + - _this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS_END'); - break; - case 5: - error_tr = _this.translate.instant('ERRORS.TX_TYPE_UPDATE_ALIAS') + '
      ' + - tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' + - _this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS_END'); - break; - case 6: - error_tr = _this.translate.instant('ERRORS.TX_TYPE_COIN_BASE'); - break; - } - if (error_tr) { - _this.modalService.prepareModal('error', error_tr); - } - } - }); - _this.backend.eventSubscribe('on_core_event', function (data) { - console.log('----------------- on_core_event -----------------'); - console.log(data); - data = JSON.parse(data); - if (data.events != null) { - var _loop_1 = function (i, length_1) { - switch (data.events[i].method) { - case 'CORE_EVENT_BLOCK_ADDED': - break; - case 'CORE_EVENT_ADD_ALIAS': - if (_this.variablesService.aliasesChecked[data.events[i].details.address] != null) { - _this.variablesService.aliasesChecked[data.events[i].details.address]['name'] = '@' + data.events[i].details.alias; - _this.variablesService.aliasesChecked[data.events[i].details.address]['address'] = data.events[i].details.address; - _this.variablesService.aliasesChecked[data.events[i].details.address]['comment'] = data.events[i].details.comment; - } - if (_this.variablesService.enableAliasSearch) { - var newAlias = { - name: '@' + data.events[i].details.alias, - address: data.events[i].details.address, - comment: data.events[i].details.comment - }; - _this.variablesService.aliases = _this.variablesService.aliases.concat(newAlias); - _this.variablesService.changeAliases(); - } - break; - case 'CORE_EVENT_UPDATE_ALIAS': - for (var address in _this.variablesService.aliasesChecked) { - if (_this.variablesService.aliasesChecked.hasOwnProperty(address)) { - if (_this.variablesService.aliasesChecked[address].name === '@' + data.events[i].details.alias) { - if (_this.variablesService.aliasesChecked[address].address !== data.events[i].details.details.address) { - delete _this.variablesService.aliasesChecked[address]['name']; - delete _this.variablesService.aliasesChecked[address]['address']; - delete _this.variablesService.aliasesChecked[address]['comment']; - } - else { - _this.variablesService.aliasesChecked[address].comment = data.events[i].details.details.comment; - } - break; - } - } - } - if (_this.variablesService.aliasesChecked[data.events[i].details.details.address] != null) { - _this.variablesService.aliasesChecked[data.events[i].details.details.address]['name'] = '@' + data.events[i].details.alias; - _this.variablesService.aliasesChecked[data.events[i].details.details.address]['address'] = data.events[i].details.details.address; - _this.variablesService.aliasesChecked[data.events[i].details.details.address]['comment'] = data.events[i].details.details.comment; - } - if (_this.variablesService.enableAliasSearch) { - var CurrentAlias = _this.variablesService.aliases.find(function (element) { return element.name === '@' + data.events[i].details.alias; }); - if (CurrentAlias) { - CurrentAlias.address = data.events[i].details.details.address; - CurrentAlias.comment = data.events[i].details.details.comment; - } - } - _this.variablesService.changeAliases(); - break; - default: - break; - } - }; - for (var i = 0, length_1 = data.events.length; i < length_1; i++) { - _loop_1(i, length_1); - } - } - }); - _this.intervalUpdateContractsState = setInterval(function () { - _this.variablesService.wallets.forEach(function (wallet) { - wallet.contracts.forEach(function (contract) { - if (contract.state === 201 && contract.height !== 0 && (_this.variablesService.height_app - contract.height) >= 10) { - contract.state = 2; - contract.is_new = true; - console.warn('need check state in contracts'); - } - else if (contract.state === 601 && contract.height !== 0 && (_this.variablesService.height_app - contract.height) >= 10) { - contract.state = 6; - contract.is_new = true; - } - }); - }); - }, 30000); - _this.expMedTsEvent = _this.variablesService.getExpMedTsEvent.subscribe(function (newTimestamp) { - _this.variablesService.wallets.forEach(function (wallet) { - wallet.contracts.forEach(function (contract) { - if (contract.state === 1 && contract.expiration_time <= newTimestamp) { - contract.state = 110; - contract.is_new = true; - wallet.recountNewContracts(); - } - else if (contract.state === 5 && contract.cancel_expiration_time <= newTimestamp) { - contract.state = 130; - contract.is_new = true; - wallet.recountNewContracts(); - } - }); - }); - }); - _this.backend.getAppData(function (status, data) { - if (data && Object.keys(data).length > 0) { - for (var key in data) { - if (data.hasOwnProperty(key) && _this.variablesService.settings.hasOwnProperty(key)) { - _this.variablesService.settings[key] = data[key]; - } - } - if (_this.variablesService.settings.hasOwnProperty('theme') && ['dark', 'white', 'gray'].indexOf(_this.variablesService.settings.theme) !== -1) { - _this.renderer.addClass(document.body, 'theme-' + _this.variablesService.settings.theme); - } - else { - _this.renderer.addClass(document.body, 'theme-' + _this.variablesService.defaultTheme); - } - if (_this.variablesService.settings.hasOwnProperty('scale') && [7.5, 10, 12.5, 15].indexOf(_this.variablesService.settings.scale) !== -1) { - var width = _this.utilsService.getMinWidthByScale(_this.variablesService.settings.scale); - var app = document.documentElement.querySelector('app-root'); - _this.renderer.setStyle(app, 'min-width', width + 'px'); - _this.renderer.setStyle(document.documentElement, 'font-size', _this.variablesService.settings.scale + 'px'); - } - } - else { - _this.variablesService.settings.theme = _this.variablesService.defaultTheme; - _this.renderer.addClass(document.body, 'theme-' + _this.variablesService.settings.theme); - } - _this.translate.use(_this.variablesService.settings.language); - _this.setBackendLocalization(); - _this.backend.setLogLevel(_this.variablesService.settings.appLog); - if (_this.router.url !== '/login') { - _this.backend.haveSecureAppData(function (statusPass) { - if (statusPass) { - _this.ngZone.run(function () { - _this.router.navigate(['/login'], { queryParams: { type: 'auth' } }); - }); - } - else { - if (Object.keys(data).length !== 0) { - _this.needOpenWallets = JSON.parse(JSON.stringify(_this.variablesService.settings.wallets)); - _this.ngZone.run(function () { - _this.variablesService.appLogin = true; - _this.router.navigate(['/']); - }); - } - else { - _this.ngZone.run(function () { - _this.router.navigate(['/login'], { queryParams: { type: 'reg' } }); - }); - } - } - }); - } - }); - }, function (error) { - console.log(error); - }); - this.getMoneyEquivalent(); - this.intervalUpdatePriceState = setInterval(function () { - _this.getMoneyEquivalent(); - }, 30000); - }; - AppComponent.prototype.getMoneyEquivalent = function () { - var _this = this; - this.http.get('https://api.coingecko.com/api/v3/ping').subscribe(function () { - _this.http.get('https://api.coingecko.com/api/v3/simple/price?ids=zano&vs_currencies=usd').subscribe(function (data) { - _this.variablesService.moneyEquivalent = data['zano']['usd']; - }, function (error) { - console.warn('api.coingecko.com price error: ', error); - }); - }, function (error) { - console.warn('api.coingecko.com error: ', error); - setTimeout(function () { - _this.getMoneyEquivalent(); - }, 30000); - }); - }; - AppComponent.prototype.getAliases = function () { - var _this = this; - this.backend.getAllAliases(function (status, data, error) { - console.warn(error); - if (error === 'CORE_BUSY') { - window.setTimeout(function () { - _this.getAliases(); - }, 10000); - } - else if (error === 'OVERFLOW') { - _this.variablesService.aliases = []; - _this.variablesService.enableAliasSearch = false; - _this.variablesService.wallets.forEach(function (wallet) { - wallet.alias = _this.backend.getWalletAlias(wallet.address); - }); - } - else { - _this.variablesService.enableAliasSearch = true; - if (data.aliases && data.aliases.length) { - _this.variablesService.aliases = []; - data.aliases.forEach(function (alias) { - var newAlias = { - name: '@' + alias.alias, - address: alias.address, - comment: alias.comment - }; - _this.variablesService.aliases.push(newAlias); - }); - _this.variablesService.wallets.forEach(function (wallet) { - wallet.alias = _this.backend.getWalletAlias(wallet.address); - }); - _this.variablesService.aliases = _this.variablesService.aliases.sort(function (a, b) { - if (a.name.length > b.name.length) { - return 1; - } - if (a.name.length < b.name.length) { - return -1; - } - if (a.name > b.name) { - return 1; - } - if (a.name < b.name) { - return -1; - } - return 0; - }); - _this.variablesService.changeAliases(); - } - } - }); - }; - AppComponent.prototype.contextMenuCopy = function (target) { - if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) { - var start = (target['contextSelectionStart']) ? 'contextSelectionStart' : 'selectionStart'; - var end = (target['contextSelectionEnd']) ? 'contextSelectionEnd' : 'selectionEnd'; - var canUseSelection = ((target[start]) || (target[start] === '0')); - var SelectedText = (canUseSelection) ? target['value'].substring(target[start], target[end]) : target['value']; - this.backend.setClipboard(String(SelectedText)); - } - }; - AppComponent.prototype.contextMenuOnlyCopy = function (text) { - if (text) { - this.backend.setClipboard(String(text)); - } - }; - AppComponent.prototype.contextMenuPaste = function (target) { - if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) { - this.backend.getClipboard(function (status, clipboard) { - clipboard = String(clipboard); - if (typeof clipboard !== 'string' || clipboard.length) { - var start = (target['contextSelectionStart']) ? 'contextSelectionStart' : 'selectionStart'; - var end = (target['contextSelectionEnd']) ? 'contextSelectionEnd' : 'selectionEnd'; - var _pre = target['value'].substring(0, target[start]); - var _aft = target['value'].substring(target[end], target['value'].length); - var text = _pre + clipboard + _aft; - var cursorPosition = (_pre + clipboard).length; - if (target['maxLength'] && parseInt(target['maxLength'], 10) > 0) { - text = text.substr(0, parseInt(target['maxLength'], 10)); - } - target['value'] = text; - target.setSelectionRange(cursorPosition, cursorPosition); - target.dispatchEvent(new Event('input')); - target['focus'](); - } - }); - } - }; - AppComponent.prototype.contextMenuSelect = function (target) { - if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) { - target['focus'](); - setTimeout(function () { - target['select'](); - }); - } - }; - AppComponent.prototype.addToStore = function (wallet, boolean) { - var value = this.store.value.sync; - if (value && value.length) { - var sync = value.filter(function (item) { return item.wallet_id === wallet.wallet_id; }); - if (sync && sync.length) { - var result = value.map(function (item) { - if (item.wallet_id === wallet.wallet_id) { - return { sync: boolean, wallet_id: wallet.wallet_id }; - } - else { - return item; - } - }); - this.store.set('sync', result); - } - else { - value.push({ sync: boolean, wallet_id: wallet.wallet_id }); - this.store.set('sync', value); - } - } - else { - this.store.set('sync', [{ sync: boolean, wallet_id: wallet.wallet_id }]); - } - }; - AppComponent.prototype.ngOnDestroy = function () { - if (this.intervalUpdateContractsState) { - clearInterval(this.intervalUpdateContractsState); - } - if (this.intervalUpdatePriceState) { - clearInterval(this.intervalUpdatePriceState); - } - this.expMedTsEvent.unsubscribe(); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('allContextMenu'), - __metadata("design:type", ngx_contextmenu__WEBPACK_IMPORTED_MODULE_6__["ContextMenuComponent"]) - ], AppComponent.prototype, "allContextMenu", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('onlyCopyContextMenu'), - __metadata("design:type", ngx_contextmenu__WEBPACK_IMPORTED_MODULE_6__["ContextMenuComponent"]) - ], AppComponent.prototype, "onlyCopyContextMenu", void 0); - AppComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-root', - template: __webpack_require__(/*! ./app.component.html */ "./src/app/app.component.html"), - providers: [_helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_10__["UtilsService"]], - styles: [__webpack_require__(/*! ./app.component.scss */ "./src/app/app.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_2__["TranslateService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _angular_router__WEBPACK_IMPORTED_MODULE_4__["Router"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_5__["VariablesService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_7__["IntToMoneyPipe"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_9__["ModalService"], - _helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_10__["UtilsService"], - store__WEBPACK_IMPORTED_MODULE_11__["Store"]]) - ], AppComponent); - return AppComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/app.module.ts": -/*!*******************************!*\ - !*** ./src/app/app.module.ts ***! - \*******************************/ -/*! exports provided: HttpLoaderFactory, highchartsFactory, AppModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpLoaderFactory", function() { return HttpLoaderFactory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "highchartsFactory", function() { return highchartsFactory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppModule", function() { return AppModule; }); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/fesm5/platform-browser.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app-routing.module */ "./src/app/app-routing.module.ts"); -/* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app.component */ "./src/app/app.component.ts"); -/* harmony import */ var _login_login_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./login/login.component */ "./src/app/login/login.component.ts"); -/* harmony import */ var _settings_settings_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings/settings.component */ "./src/app/settings/settings.component.ts"); -/* harmony import */ var _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sidebar/sidebar.component */ "./src/app/sidebar/sidebar.component.ts"); -/* harmony import */ var _main_main_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./main/main.component */ "./src/app/main/main.component.ts"); -/* harmony import */ var _create_wallet_create_wallet_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./create-wallet/create-wallet.component */ "./src/app/create-wallet/create-wallet.component.ts"); -/* harmony import */ var _open_wallet_open_wallet_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./open-wallet/open-wallet.component */ "./src/app/open-wallet/open-wallet.component.ts"); -/* harmony import */ var _open_wallet_modal_open_wallet_modal_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./open-wallet-modal/open-wallet-modal.component */ "./src/app/open-wallet-modal/open-wallet-modal.component.ts"); -/* harmony import */ var _restore_wallet_restore_wallet_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./restore-wallet/restore-wallet.component */ "./src/app/restore-wallet/restore-wallet.component.ts"); -/* harmony import */ var _seed_phrase_seed_phrase_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./seed-phrase/seed-phrase.component */ "./src/app/seed-phrase/seed-phrase.component.ts"); -/* harmony import */ var _wallet_details_wallet_details_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./wallet-details/wallet-details.component */ "./src/app/wallet-details/wallet-details.component.ts"); -/* harmony import */ var _assign_alias_assign_alias_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./assign-alias/assign-alias.component */ "./src/app/assign-alias/assign-alias.component.ts"); -/* harmony import */ var _edit_alias_edit_alias_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./edit-alias/edit-alias.component */ "./src/app/edit-alias/edit-alias.component.ts"); -/* harmony import */ var _transfer_alias_transfer_alias_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./transfer-alias/transfer-alias.component */ "./src/app/transfer-alias/transfer-alias.component.ts"); -/* harmony import */ var _wallet_wallet_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./wallet/wallet.component */ "./src/app/wallet/wallet.component.ts"); -/* harmony import */ var _send_send_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./send/send.component */ "./src/app/send/send.component.ts"); -/* harmony import */ var _receive_receive_component__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./receive/receive.component */ "./src/app/receive/receive.component.ts"); -/* harmony import */ var _history_history_component__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./history/history.component */ "./src/app/history/history.component.ts"); -/* harmony import */ var _contracts_contracts_component__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./contracts/contracts.component */ "./src/app/contracts/contracts.component.ts"); -/* harmony import */ var _purchase_purchase_component__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./purchase/purchase.component */ "./src/app/purchase/purchase.component.ts"); -/* harmony import */ var _messages_messages_component__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./messages/messages.component */ "./src/app/messages/messages.component.ts"); -/* harmony import */ var _typing_message_typing_message_component__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./typing-message/typing-message.component */ "./src/app/typing-message/typing-message.component.ts"); -/* harmony import */ var _staking_staking_component__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staking/staking.component */ "./src/app/staking/staking.component.ts"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/fesm5/http.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _ngx_translate_http_loader__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @ngx-translate/http-loader */ "./node_modules/@ngx-translate/http-loader/fesm5/ngx-translate-http-loader.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _ng_select_ng_select__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @ng-select/ng-select */ "./node_modules/@ng-select/ng-select/fesm5/ng-select.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _helpers_services_pagination_store__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./_helpers/services/pagination.store */ "./src/app/_helpers/services/pagination.store.ts"); -/* harmony import */ var store__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! store */ "./src/store.ts"); -/* harmony import */ var _helpers_pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./_helpers/pipes/money-to-int.pipe */ "./src/app/_helpers/pipes/money-to-int.pipe.ts"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var _helpers_pipes_history_type_messages_pipe__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./_helpers/pipes/history-type-messages.pipe */ "./src/app/_helpers/pipes/history-type-messages.pipe.ts"); -/* harmony import */ var _helpers_pipes_contract_status_messages_pipe__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./_helpers/pipes/contract-status-messages.pipe */ "./src/app/_helpers/pipes/contract-status-messages.pipe.ts"); -/* harmony import */ var _helpers_pipes_contract_time_left_pipe__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./_helpers/pipes/contract-time-left.pipe */ "./src/app/_helpers/pipes/contract-time-left.pipe.ts"); -/* harmony import */ var _helpers_pipes_safe_html_pipe__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./_helpers/pipes/safe-html.pipe */ "./src/app/_helpers/pipes/safe-html.pipe.ts"); -/* harmony import */ var _helpers_directives_tooltip_directive__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./_helpers/directives/tooltip.directive */ "./src/app/_helpers/directives/tooltip.directive.ts"); -/* harmony import */ var _helpers_directives_input_validate_input_validate_directive__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./_helpers/directives/input-validate/input-validate.directive */ "./src/app/_helpers/directives/input-validate/input-validate.directive.ts"); -/* harmony import */ var _helpers_directives_staking_switch_staking_switch_component__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./_helpers/directives/staking-switch/staking-switch.component */ "./src/app/_helpers/directives/staking-switch/staking-switch.component.ts"); -/* harmony import */ var _helpers_directives_modal_container_modal_container_component__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./_helpers/directives/modal-container/modal-container.component */ "./src/app/_helpers/directives/modal-container/modal-container.component.ts"); -/* harmony import */ var _helpers_directives_transaction_details_transaction_details_component__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./_helpers/directives/transaction-details/transaction-details.component */ "./src/app/_helpers/directives/transaction-details/transaction-details.component.ts"); -/* harmony import */ var ngx_contextmenu__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ngx-contextmenu */ "./node_modules/ngx-contextmenu/fesm5/ngx-contextmenu.js"); -/* harmony import */ var angular_highcharts__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! angular-highcharts */ "./node_modules/angular-highcharts/fesm5/angular-highcharts.js"); -/* harmony import */ var highcharts__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! highcharts */ "./node_modules/highcharts/highcharts.js"); -/* harmony import */ var highcharts__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(highcharts__WEBPACK_IMPORTED_MODULE_48__); -/* harmony import */ var highcharts_modules_exporting_src__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! highcharts/modules/exporting.src */ "./node_modules/highcharts/modules/exporting.src.js"); -/* harmony import */ var highcharts_modules_exporting_src__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(highcharts_modules_exporting_src__WEBPACK_IMPORTED_MODULE_49__); -/* harmony import */ var _helpers_directives_progress_container_progress_container_component__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./_helpers/directives/progress-container/progress-container.component */ "./src/app/_helpers/directives/progress-container/progress-container.component.ts"); -/* harmony import */ var _helpers_directives_input_disable_selection_input_disable_selection_directive__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./_helpers/directives/input-disable-selection/input-disable-selection.directive */ "./src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.ts"); -/* harmony import */ var _send_modal_send_modal_component__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./send-modal/send-modal.component */ "./src/app/send-modal/send-modal.component.ts"); -/* harmony import */ var _contacts_contacts_component__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./contacts/contacts.component */ "./src/app/contacts/contacts.component.ts"); -/* harmony import */ var _add_contacts_add_contacts_component__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./add-contacts/add-contacts.component */ "./src/app/add-contacts/add-contacts.component.ts"); -/* harmony import */ var _contact_send_contact_send_component__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./contact-send/contact-send.component */ "./src/app/contact-send/contact-send.component.ts"); -/* harmony import */ var _export_import_export_import_component__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./export-import/export-import.component */ "./src/app/export-import/export-import.component.ts"); -/* harmony import */ var _helpers_directives_confirm_modal_confirm_modal_component__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./_helpers/directives/confirm-modal/confirm-modal.component */ "./src/app/_helpers/directives/confirm-modal/confirm-modal.component.ts"); -/* harmony import */ var ngx_papaparse__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ngx-papaparse */ "./node_modules/ngx-papaparse/fesm5/ngx-papaparse.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// SERVICES - - - -// SERVICES -// Feature module - -// Feature module - - - - - - - - - - - - - - - - - - - - - - - -function HttpLoaderFactory(httpClient) { - return new _ngx_translate_http_loader__WEBPACK_IMPORTED_MODULE_28__["TranslateHttpLoader"](httpClient, './assets/i18n/', '.json'); -} - -// import * as more from 'highcharts/highcharts-more.src'; -// import * as exporting from 'highcharts/modules/exporting.src'; -// import * as highstock from 'highcharts/modules/stock.src'; -function highchartsFactory() { - // Default options. - highcharts__WEBPACK_IMPORTED_MODULE_48__["setOptions"]({ - time: { - useUTC: false - } - }); - return [highcharts_modules_exporting_src__WEBPACK_IMPORTED_MODULE_49___default.a]; -} -var AppModule = /** @class */ (function () { - function AppModule() { - } - AppModule = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - declarations: [ - _app_component__WEBPACK_IMPORTED_MODULE_3__["AppComponent"], - _login_login_component__WEBPACK_IMPORTED_MODULE_4__["LoginComponent"], - _settings_settings_component__WEBPACK_IMPORTED_MODULE_5__["SettingsComponent"], - _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_6__["SidebarComponent"], - _main_main_component__WEBPACK_IMPORTED_MODULE_7__["MainComponent"], - _create_wallet_create_wallet_component__WEBPACK_IMPORTED_MODULE_8__["CreateWalletComponent"], - _open_wallet_open_wallet_component__WEBPACK_IMPORTED_MODULE_9__["OpenWalletComponent"], - _open_wallet_modal_open_wallet_modal_component__WEBPACK_IMPORTED_MODULE_10__["OpenWalletModalComponent"], - _restore_wallet_restore_wallet_component__WEBPACK_IMPORTED_MODULE_11__["RestoreWalletComponent"], - _seed_phrase_seed_phrase_component__WEBPACK_IMPORTED_MODULE_12__["SeedPhraseComponent"], - _wallet_details_wallet_details_component__WEBPACK_IMPORTED_MODULE_13__["WalletDetailsComponent"], - _assign_alias_assign_alias_component__WEBPACK_IMPORTED_MODULE_14__["AssignAliasComponent"], - _edit_alias_edit_alias_component__WEBPACK_IMPORTED_MODULE_15__["EditAliasComponent"], - _transfer_alias_transfer_alias_component__WEBPACK_IMPORTED_MODULE_16__["TransferAliasComponent"], - _wallet_wallet_component__WEBPACK_IMPORTED_MODULE_17__["WalletComponent"], - _send_send_component__WEBPACK_IMPORTED_MODULE_18__["SendComponent"], - _receive_receive_component__WEBPACK_IMPORTED_MODULE_19__["ReceiveComponent"], - _history_history_component__WEBPACK_IMPORTED_MODULE_20__["HistoryComponent"], - _contracts_contracts_component__WEBPACK_IMPORTED_MODULE_21__["ContractsComponent"], - _purchase_purchase_component__WEBPACK_IMPORTED_MODULE_22__["PurchaseComponent"], - _messages_messages_component__WEBPACK_IMPORTED_MODULE_23__["MessagesComponent"], - _staking_staking_component__WEBPACK_IMPORTED_MODULE_25__["StakingComponent"], - _typing_message_typing_message_component__WEBPACK_IMPORTED_MODULE_24__["TypingMessageComponent"], - _helpers_pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_35__["MoneyToIntPipe"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_36__["IntToMoneyPipe"], - _helpers_directives_staking_switch_staking_switch_component__WEBPACK_IMPORTED_MODULE_43__["StakingSwitchComponent"], - _helpers_pipes_history_type_messages_pipe__WEBPACK_IMPORTED_MODULE_37__["HistoryTypeMessagesPipe"], - _helpers_pipes_contract_status_messages_pipe__WEBPACK_IMPORTED_MODULE_38__["ContractStatusMessagesPipe"], - _helpers_pipes_contract_time_left_pipe__WEBPACK_IMPORTED_MODULE_39__["ContractTimeLeftPipe"], - _helpers_directives_tooltip_directive__WEBPACK_IMPORTED_MODULE_41__["TooltipDirective"], - _helpers_directives_input_validate_input_validate_directive__WEBPACK_IMPORTED_MODULE_42__["InputValidateDirective"], - _helpers_directives_modal_container_modal_container_component__WEBPACK_IMPORTED_MODULE_44__["ModalContainerComponent"], - _helpers_directives_transaction_details_transaction_details_component__WEBPACK_IMPORTED_MODULE_45__["TransactionDetailsComponent"], - _helpers_directives_progress_container_progress_container_component__WEBPACK_IMPORTED_MODULE_50__["ProgressContainerComponent"], - _helpers_directives_input_disable_selection_input_disable_selection_directive__WEBPACK_IMPORTED_MODULE_51__["InputDisableSelectionDirective"], - _send_modal_send_modal_component__WEBPACK_IMPORTED_MODULE_52__["SendModalComponent"], - _contacts_contacts_component__WEBPACK_IMPORTED_MODULE_53__["ContactsComponent"], - _add_contacts_add_contacts_component__WEBPACK_IMPORTED_MODULE_54__["AddContactsComponent"], - _contact_send_contact_send_component__WEBPACK_IMPORTED_MODULE_55__["ContactSendComponent"], - _export_import_export_import_component__WEBPACK_IMPORTED_MODULE_56__["ExportImportComponent"], - _helpers_pipes_safe_html_pipe__WEBPACK_IMPORTED_MODULE_40__["SafeHTMLPipe"], - _helpers_directives_confirm_modal_confirm_modal_component__WEBPACK_IMPORTED_MODULE_57__["ConfirmModalComponent"] - ], - imports: [ - _angular_platform_browser__WEBPACK_IMPORTED_MODULE_0__["BrowserModule"], - _app_routing_module__WEBPACK_IMPORTED_MODULE_2__["AppRoutingModule"], - _angular_common_http__WEBPACK_IMPORTED_MODULE_26__["HttpClientModule"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_27__["TranslateModule"].forRoot({ - loader: { - provide: _ngx_translate_core__WEBPACK_IMPORTED_MODULE_27__["TranslateLoader"], - useFactory: HttpLoaderFactory, - deps: [_angular_common_http__WEBPACK_IMPORTED_MODULE_26__["HttpClient"]] - } - }), - _angular_forms__WEBPACK_IMPORTED_MODULE_29__["FormsModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_29__["ReactiveFormsModule"], - _ng_select_ng_select__WEBPACK_IMPORTED_MODULE_30__["NgSelectModule"], - angular_highcharts__WEBPACK_IMPORTED_MODULE_47__["ChartModule"], - ngx_papaparse__WEBPACK_IMPORTED_MODULE_58__["PapaParseModule"], - ngx_contextmenu__WEBPACK_IMPORTED_MODULE_46__["ContextMenuModule"].forRoot() - ], - providers: [ - store__WEBPACK_IMPORTED_MODULE_34__["Store"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_31__["BackendService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_32__["ModalService"], - _helpers_services_pagination_store__WEBPACK_IMPORTED_MODULE_33__["PaginationStore"], - _helpers_pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_35__["MoneyToIntPipe"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_36__["IntToMoneyPipe"], - { provide: angular_highcharts__WEBPACK_IMPORTED_MODULE_47__["HIGHCHARTS_MODULES"], useFactory: highchartsFactory } - // {provide: HIGHCHARTS_MODULES, useFactory: () => [ highstock, more, exporting ] } - ], - entryComponents: [ - _helpers_directives_modal_container_modal_container_component__WEBPACK_IMPORTED_MODULE_44__["ModalContainerComponent"], - _send_modal_send_modal_component__WEBPACK_IMPORTED_MODULE_52__["SendModalComponent"], - _helpers_directives_confirm_modal_confirm_modal_component__WEBPACK_IMPORTED_MODULE_57__["ConfirmModalComponent"] - ], - bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_3__["AppComponent"]] - }) - ], AppModule); - return AppModule; -}()); - - - -/***/ }), - -/***/ "./src/app/assign-alias/assign-alias.component.html": -/*!**********************************************************!*\ - !*** ./src/app/assign-alias/assign-alias.component.html ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ wallet.name }}\r\n {{ 'BREADCRUMBS.ASSIGN_ALIAS' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      6 && assignForm.get('name').value.length <= 25\">\r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_WRONG' | translate }}\r\n
      \r\n
      25\">\r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_LENGTH' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_EXISTS' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      = variablesService.maxCommentLength\">\r\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      {{ \"ASSIGN_ALIAS.COST\" | translate : {value: alias.price | intToMoney, currency: variablesService.defaultCurrency} }}
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n" - -/***/ }), - -/***/ "./src/app/assign-alias/assign-alias.component.scss": -/*!**********************************************************!*\ - !*** ./src/app/assign-alias/assign-alias.component.scss ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-assign {\n margin: 2.4rem 0; }\n .form-assign .alias-name {\n width: 50%; }\n .form-assign .alias-cost {\n font-size: 1.3rem;\n margin-top: 2rem; }\n .form-assign .wrap-buttons {\n display: flex;\n justify-content: space-between;\n margin: 2.5rem -0.7rem; }\n .form-assign .wrap-buttons button {\n margin: 0 0.7rem;\n width: 15rem; }\n .assign-alias-tooltip {\n font-size: 1.3rem;\n line-height: 2rem;\n padding: 1rem 1.5rem;\n max-width: 46rem; }\n .has-no-edit-symbol {\n position: relative;\n width: 100%; }\n .has-no-edit-symbol input {\n padding-left: 2.35rem; }\n .has-no-edit-symbol:after {\n content: '@';\n position: absolute;\n display: inline-block;\n top: 50%;\n left: 1rem;\n transform: translateY(-50%); }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYXNzaWduLWFsaWFzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFzc2lnbi1hbGlhc1xcYXNzaWduLWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQTtFQUtsQjtFQUNFLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGdCQUFnQixFQUFBO0VBR2xCO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVcsRUFBQTtFQUZiO0lBSUkscUJBQXFCLEVBQUE7RUFKekI7SUFPSSxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixRQUFRO0lBQ1IsVUFBVTtJQUNWLDJCQUEyQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvYXNzaWduLWFsaWFzL2Fzc2lnbi1hbGlhcy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLWFzc2lnbiB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuXHJcbiAgLmFsaWFzLW5hbWUge1xyXG4gICAgd2lkdGg6IDUwJTtcclxuICB9XHJcblxyXG4gIC5hbGlhcy1jb3N0IHtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbWFyZ2luLXRvcDogMnJlbTtcclxuICB9XHJcblxyXG4gIC53cmFwLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIG1hcmdpbjogMi41cmVtIC0wLjdyZW07XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgbWFyZ2luOiAwIDAuN3JlbTtcclxuICAgICAgd2lkdGg6IDE1cmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmFzc2lnbi1hbGlhcy10b29sdGlwIHtcclxuICBmb250LXNpemU6IDEuM3JlbTtcclxuICBsaW5lLWhlaWdodDogMnJlbTtcclxuICBwYWRkaW5nOiAxcmVtIDEuNXJlbTtcclxuICBtYXgtd2lkdGg6IDQ2cmVtO1xyXG59XHJcblxyXG4uaGFzLW5vLWVkaXQtc3ltYm9sIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaW5wdXQge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyLjM1cmVtO1xyXG4gIH1cclxuICAmOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICdAJztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogMXJlbTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/assign-alias/assign-alias.component.ts": -/*!********************************************************!*\ - !*** ./src/app/assign-alias/assign-alias.component.ts ***! - \********************************************************/ -/*! exports provided: AssignAliasComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AssignAliasComponent", function() { return AssignAliasComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _helpers_pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_helpers/pipes/money-to-int.pipe */ "./src/app/_helpers/pipes/money-to-int.pipe.ts"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_9__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - - - -var AssignAliasComponent = /** @class */ (function () { - function AssignAliasComponent(ngZone, location, router, backend, variablesService, modalService, moneyToInt, intToMoney) { - var _this = this; - this.ngZone = ngZone; - this.location = location; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.moneyToInt = moneyToInt; - this.intToMoney = intToMoney; - this.assignForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(/^@?[a-z0-9\.\-]{6,25}$/)]), - comment: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [function (g) { - if (g.value > _this.variablesService.maxCommentLength) { - return { 'maxLength': true }; - } - else { - return null; - } - }]) - }); - this.alias = { - name: '', - fee: this.variablesService.default_fee, - price: new bignumber_js__WEBPACK_IMPORTED_MODULE_9___default.a(0), - reward: '0', - rewardOriginal: '0', - comment: '', - exists: false - }; - this.canRegister = false; - this.notEnoughMoney = false; - } - AssignAliasComponent.prototype.ngOnInit = function () { - var _this = this; - this.wallet = this.variablesService.currentWallet; - this.assignFormSubscription = this.assignForm.get('name').valueChanges.subscribe(function (value) { - _this.canRegister = false; - _this.alias.exists = false; - var newName = value.toLowerCase().replace('@', ''); - if (!(_this.assignForm.controls['name'].errors && _this.assignForm.controls['name'].errors.hasOwnProperty('pattern')) && newName.length >= 6 && newName.length <= 25) { - _this.backend.getAliasByName(newName, function (status) { - _this.ngZone.run(function () { - _this.alias.exists = status; - }); - if (!status) { - _this.alias.price = new bignumber_js__WEBPACK_IMPORTED_MODULE_9___default.a(0); - _this.backend.getAliasCoast(newName, function (statusPrice, dataPrice) { - _this.ngZone.run(function () { - if (statusPrice) { - _this.alias.price = bignumber_js__WEBPACK_IMPORTED_MODULE_9___default.a.sum(dataPrice['coast'], _this.variablesService.default_fee_big); - } - _this.notEnoughMoney = _this.alias.price.isGreaterThan(_this.wallet.unlocked_balance); - _this.alias.reward = _this.intToMoney.transform(_this.alias.price, false); - _this.alias.rewardOriginal = _this.intToMoney.transform(dataPrice['coast'], false); - _this.canRegister = !_this.notEnoughMoney; - }); - }); - } - else { - _this.notEnoughMoney = false; - _this.alias.reward = '0'; - _this.alias.rewardOriginal = '0'; - } - }); - } - else { - _this.notEnoughMoney = false; - _this.alias.reward = '0'; - _this.alias.rewardOriginal = '0'; - } - _this.alias.name = newName; - }); - }; - AssignAliasComponent.prototype.assignAlias = function () { - var _this = this; - var alias = this.backend.getWalletAlias(this.wallet.address); - if (alias.hasOwnProperty('name')) { - this.modalService.prepareModal('info', 'ASSIGN_ALIAS.ONE_ALIAS'); - } - else { - this.alias.comment = this.assignForm.get('comment').value; - this.backend.registerAlias(this.wallet.wallet_id, this.alias.name, this.wallet.address, this.alias.fee, this.alias.comment, this.alias.rewardOriginal, function (status, data) { - if (status) { - _this.wallet.wakeAlias = true; - _this.modalService.prepareModal('info', 'ASSIGN_ALIAS.REQUEST_ADD_REG'); - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.wallet.wallet_id]); - }); - } - }); - } - }; - AssignAliasComponent.prototype.back = function () { - this.location.back(); - }; - AssignAliasComponent.prototype.ngOnDestroy = function () { - this.assignFormSubscription.unsubscribe(); - }; - AssignAliasComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-assign-alias', - template: __webpack_require__(/*! ./assign-alias.component.html */ "./src/app/assign-alias/assign-alias.component.html"), - styles: [__webpack_require__(/*! ./assign-alias.component.scss */ "./src/app/assign-alias/assign-alias.component.scss")] - }), - __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _angular_common__WEBPACK_IMPORTED_MODULE_2__["Location"], - _angular_router__WEBPACK_IMPORTED_MODULE_3__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_4__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_5__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_6__["ModalService"], - _helpers_pipes_money_to_int_pipe__WEBPACK_IMPORTED_MODULE_7__["MoneyToIntPipe"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_8__["IntToMoneyPipe"]]) - ], AssignAliasComponent); - return AssignAliasComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/contact-send/contact-send.component.html": -/*!**********************************************************!*\ - !*** ./src/app/contact-send/contact-send.component.html ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n {{\r\n 'CONTACTS.TITLE' | translate\r\n }}\r\n {{ 'CONTACTS.SEND' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/contact-send/contact-send.component.scss": -/*!**********************************************************!*\ - !*** ./src/app/contact-send/contact-send.component.scss ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".wallets-selection {\n display: flex;\n align-items: center;\n margin-top: 2rem; }\n .wallets-selection .input-block {\n width: 18rem; }\n .wallets-selection button {\n padding: 2rem;\n background: transparent;\n border: none;\n outline: none; }\n .input-block {\n width: 44rem; }\n .input-block input {\n overflow: hidden;\n text-overflow: ellipsis; }\n .blue-button {\n margin-top: 2.5rem;\n width: 100%;\n max-width: 18rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udGFjdC1zZW5kL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGNvbnRhY3Qtc2VuZFxcY29udGFjdC1zZW5kLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixnQkFBZ0IsRUFBQTtFQUhsQjtJQU1JLFlBQVksRUFBQTtFQU5oQjtJQVVJLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGFBQWEsRUFBQTtFQUlqQjtFQUNFLFlBQVksRUFBQTtFQURkO0lBSUksZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFBO0VBSTNCO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2NvbnRhY3Qtc2VuZC9jb250YWN0LXNlbmQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIud2FsbGV0cy1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBtYXJnaW4tdG9wOiAycmVtO1xyXG4gIFxyXG4gIC5pbnB1dC1ibG9jayB7XHJcbiAgICB3aWR0aDogMThyZW07XHJcbiAgfVxyXG5cclxuICBidXR0b24ge1xyXG4gICAgcGFkZGluZzogMnJlbTtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICB9XHJcbn1cclxuXHJcbi5pbnB1dC1ibG9jayB7XHJcbiAgd2lkdGg6IDQ0cmVtO1xyXG5cclxuICBpbnB1dCB7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgfVxyXG59XHJcblxyXG4uYmx1ZS1idXR0b24ge1xyXG4gIG1hcmdpbi10b3A6IDIuNXJlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBtYXgtd2lkdGg6IDE4cmVtO1xyXG59XHJcblxyXG5cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/contact-send/contact-send.component.ts": -/*!********************************************************!*\ - !*** ./src/app/contact-send/contact-send.component.ts ***! - \********************************************************/ -/*! exports provided: ContactSendComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactSendComponent", function() { return ContactSendComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - -var ContactSendComponent = /** @class */ (function () { - function ContactSendComponent(location, variablesService, route) { - this.location = location; - this.variablesService = variablesService; - this.route = route; - } - ContactSendComponent.prototype.ngOnInit = function () { - var _this = this; - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.address) { - _this.address = params.address; - } - }); - }; - ContactSendComponent.prototype.goToWallet = function (id) { - this.variablesService.setCurrentWallet(id); - this.variablesService.currentWallet.send_data['address'] = this.address; - }; - ContactSendComponent.prototype.back = function () { - this.location.back(); - }; - ContactSendComponent.prototype.ngOnDestroy = function () { - this.queryRouting.unsubscribe(); - }; - ContactSendComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-contact-send', - template: __webpack_require__(/*! ./contact-send.component.html */ "./src/app/contact-send/contact-send.component.html"), - styles: [__webpack_require__(/*! ./contact-send.component.scss */ "./src/app/contact-send/contact-send.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"], - _angular_router__WEBPACK_IMPORTED_MODULE_3__["ActivatedRoute"]]) - ], ContactSendComponent); - return ContactSendComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/contacts/contacts.component.html": -/*!**************************************************!*\ - !*** ./src/app/contacts/contacts.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n \r\n
      \r\n\r\n

      {{ 'CONTACTS.TITLE' | translate }}

      \r\n\r\n
      \r\n \r\n \r\n \r\n \r\n {{ 'CONTACTS.TABLE.NAME' | translate }}\r\n {{ 'CONTACTS.TABLE.ALIAS' | translate }}\r\n {{ 'CONTACTS.TABLE.ADDRESS' | translate }}\r\n {{ 'CONTACTS.TABLE.NOTES' | translate }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ contact.name }}\r\n \r\n \r\n \r\n {{ contact.alias }}\r\n \r\n \r\n \r\n {{ contact.address }}\r\n \r\n \r\n {{ contact.notes }}\r\n \r\n \r\n
      \r\n \r\n \r\n {{ 'CONTACTS.BUTTON.SEND' | translate }}\r\n \r\n \r\n \r\n {{ 'CONTACTS.BUTTON.EDIT' | translate }}\r\n \r\n \r\n
      \r\n \r\n \r\n
      \r\n \r\n \r\n \r\n\r\n \r\n
      \r\n {{ 'CONTACTS.TABLE.EMPTY' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/contacts/contacts.component.scss": -/*!**************************************************!*\ - !*** ./src/app/contacts/contacts.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n min-width: 95rem;\n width: 100%;\n height: 100%; }\n\n.head {\n justify-content: flex-end; }\n\n.contacts-title {\n font-size: 1.7rem; }\n\n.wrap-table {\n margin: 1rem -3rem; }\n\n.wrap-table table tbody tr td {\n padding: 0 3rem 0 1rem;\n overflow: hidden;\n text-overflow: ellipsis; }\n\n.wrap-table table tbody tr td:first-child {\n max-width: 10rem;\n padding: 0 3rem 0 3rem; }\n\n.wrap-table table tbody tr td:nth-child(2) {\n max-width: 10rem; }\n\n.wrap-table table tbody tr td .alias {\n cursor: pointer; }\n\n.wrap-table table tbody tr td .button-wrapper {\n display: flex; }\n\n.wrap-table table tbody tr td .button-wrapper button {\n display: flex;\n align-items: center;\n background: transparent;\n border: none;\n font-size: 1.3rem;\n font-weight: 400;\n line-height: 3rem;\n outline: none;\n padding: 0;\n height: auto;\n margin-right: 1.8rem; }\n\n.wrap-table table tbody tr td .button-wrapper button .icon {\n cursor: pointer;\n margin-right: 0.8rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.wrap-table table tbody tr td .button-wrapper button .icon.edit {\n -webkit-mask: url('edit.svg') no-repeat center;\n mask: url('edit.svg') no-repeat center; }\n\n.wrap-table table tbody tr td .button-wrapper button .icon.transfer {\n -webkit-mask: url('send.svg') no-repeat center;\n mask: url('send.svg') no-repeat center; }\n\n.wrap-table table tbody tr td .button-wrapper button .icon.delete {\n -webkit-mask: url('delete.svg') no-repeat center;\n mask: url('delete.svg') no-repeat center; }\n\n.wrap-table .empty-list {\n margin: 2.5rem 3rem; }\n\n.blue-button {\n width: 100%;\n max-width: 18rem;\n margin-top: 3rem; }\n\n.footer {\n position: absolute;\n bottom: 3rem;\n font-size: 1.3rem; }\n\n.footer .import-btn {\n display: flex;\n align-items: center;\n background-color: transparent;\n font-size: inherit;\n font-weight: 400;\n line-height: 1.3rem;\n padding: 0;\n height: auto; }\n\n.footer .import-btn .icon {\n margin-right: 0.7rem;\n -webkit-mask: url('import-export.svg') no-repeat center;\n mask: url('import-export.svg') no-repeat center;\n width: 0.9rem;\n height: 0.9rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udGFjdHMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcY29udGFjdHNcXGNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVc7RUFDWCxZQUFZLEVBQUE7O0FBR2Q7RUFDRSx5QkFBeUIsRUFBQTs7QUFHM0I7RUFDRSxpQkFBaUIsRUFBQTs7QUFHbkI7RUFDRSxrQkFBa0IsRUFBQTs7QUFEcEI7SUFVVSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFBOztBQVpqQztNQWVZLGdCQUFnQjtNQUNoQixzQkFBc0IsRUFBQTs7QUFoQmxDO01Bb0JZLGdCQUFnQixFQUFBOztBQXBCNUI7TUF3QlksZUFBZSxFQUFBOztBQXhCM0I7TUE0QlksYUFBYSxFQUFBOztBQTVCekI7UUErQmMsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixVQUFVO1FBQ1YsWUFBWTtRQUNaLG9CQUFvQixFQUFBOztBQXpDbEM7VUE0Q2dCLGVBQWU7VUFDZixvQkFBb0I7VUFDcEIsYUFBYTtVQUNiLGNBQWMsRUFBQTs7QUEvQzlCO1lBa0RrQiw4Q0FBdUQ7b0JBQXZELHNDQUF1RCxFQUFBOztBQWxEekU7WUFzRGtCLDhDQUF1RDtvQkFBdkQsc0NBQXVELEVBQUE7O0FBdER6RTtZQTBEa0IsZ0RBQXlEO29CQUF6RCx3Q0FBeUQsRUFBQTs7QUExRDNFO0lBcUVJLG1CQUFtQixFQUFBOztBQUl2QjtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7RUFDaEIsZ0JBQWdCLEVBQUE7O0FBSWxCO0VBQ0Usa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixpQkFBaUIsRUFBQTs7QUFIbkI7SUFNSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsWUFBWSxFQUFBOztBQWJoQjtNQWdCTSxvQkFBb0I7TUFDcEIsdURBQWdFO2NBQWhFLCtDQUFnRTtNQUNoRSxhQUFhO01BQ2IsY0FBYyxFQUFBIiwiZmlsZSI6InNyYy9hcHAvY29udGFjdHMvY29udGFjdHMuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgbWluLXdpZHRoOiA5NXJlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbn1cclxuXHJcbi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uY29udGFjdHMtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG59XHJcblxyXG4ud3JhcC10YWJsZSB7XHJcbiAgbWFyZ2luOiAxcmVtIC0zcmVtO1xyXG5cclxuICB0YWJsZSB7XHJcblxyXG4gICAgdGJvZHl7XHJcblxyXG4gICAgICB0ciB7XHJcblxyXG4gICAgICAgIHRkIHtcclxuICAgICAgICAgIHBhZGRpbmc6IDAgM3JlbSAwIDFyZW07XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcblxyXG4gICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMTByZW07XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgM3JlbSAwIDNyZW07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJjpudGgtY2hpbGQoMikge1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5hbGlhcyB7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuYnV0dG9uLXdyYXBwZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgYnV0dG9uIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OyAgXHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgICAgICAgICAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS44cmVtO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjhyZW07XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMS43cmVtO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxLjdyZW07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgJi5lZGl0IHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAmLnRyYW5zZmVyIHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9zZW5kLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICYuZGVsZXRlIHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9kZWxldGUuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAuZW1wdHktbGlzdCB7XHJcbiAgICBtYXJnaW46IDIuNXJlbSAzcmVtO1xyXG4gIH0gIFxyXG59XHJcblxyXG4uYmx1ZS1idXR0b24ge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIG1heC13aWR0aDogMThyZW07XHJcbiAgbWFyZ2luLXRvcDogM3JlbTtcclxufVxyXG5cclxuXHJcbi5mb290ZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBib3R0b206IDNyZW07XHJcbiAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgXHJcbiAgLmltcG9ydC1idG4ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogYXV0bztcclxuXHJcbiAgICAuaWNvbiB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMC43cmVtO1xyXG4gICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2ltcG9ydC1leHBvcnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB3aWR0aDogMC45cmVtO1xyXG4gICAgICBoZWlnaHQ6IDAuOXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/contacts/contacts.component.ts": -/*!************************************************!*\ - !*** ./src/app/contacts/contacts.component.ts ***! - \************************************************/ -/*! exports provided: ContactsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContactsComponent", function() { return ContactsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - -var ContactsComponent = /** @class */ (function () { - function ContactsComponent(location, variablesService, backend) { - this.location = location; - this.variablesService = variablesService; - this.backend = backend; - this.calculatedWidth = []; - } - ContactsComponent.prototype.ngOnInit = function () { - this.backend.getContactAlias(); - }; - ContactsComponent.prototype.delete = function (index) { - if (this.variablesService.appPass) { - this.variablesService.contacts.splice(index, 1); - this.backend.storeSecureAppData(); - } - }; - ContactsComponent.prototype.calculateWidth = function () { - this.calculatedWidth = []; - this.calculatedWidth.push(this.head.nativeElement.childNodes[0].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[1].clientWidth + - this.head.nativeElement.childNodes[2].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[3].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[4].clientWidth); - }; - // openInBrowser(alias: string) { - // if (alias !== null) { - // this.backend.openUrlInBrowser( - // `explorer.zano.org/aliases/${alias.slice(1)}#modalOpen` - // ); - // } - // } - ContactsComponent.prototype.back = function () { - this.location.back(); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('head'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], ContactsComponent.prototype, "head", void 0); - ContactsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-contacts', - template: __webpack_require__(/*! ./contacts.component.html */ "./src/app/contacts/contacts.component.html"), - styles: [__webpack_require__(/*! ./contacts.component.scss */ "./src/app/contacts/contacts.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"]]) - ], ContactsComponent); - return ContactsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/contracts/contracts.component.html": -/*!****************************************************!*\ - !*** ./src/app/contracts/contracts.component.html ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n {{ 'CONTRACTS.EMPTY' | translate }}\r\n
      \r\n\r\n
      \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      {{ 'CONTRACTS.CONTRACTS' | translate }}{{ 'CONTRACTS.DATE' | translate }}{{ 'CONTRACTS.AMOUNT' | translate }}{{ 'CONTRACTS.STATUS' | translate }}{{ 'CONTRACTS.COMMENTS' | translate }}
      \r\n
      \r\n \r\n \r\n \r\n {{item.private_detailes.t}}\r\n
      \r\n
      \r\n
      {{item.timestamp * 1000 | date : 'dd-MM-yyyy HH:mm'}}
      \r\n
      \r\n
      {{item.private_detailes.to_pay | intToMoney}} {{variablesService.defaultCurrency}}
      \r\n
      \r\n
      \r\n {{item.state | contractStatusMessages : item.is_a}}\r\n
      \r\n
      \r\n
      \r\n {{item.private_detailes.c}}\r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/contracts/contracts.component.scss": -/*!****************************************************!*\ - !*** ./src/app/contracts/contracts.component.scss ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.empty-contracts {\n font-size: 1.5rem; }\n\n.wrap-table {\n margin: -3rem -3rem 0 -3rem;\n overflow-x: auto; }\n\n.wrap-table table tbody tr {\n cursor: pointer;\n outline: none !important; }\n\n.wrap-table table tbody tr .contract {\n position: relative;\n display: flex;\n align-items: center; }\n\n.wrap-table table tbody tr .contract .icon {\n flex-shrink: 0; }\n\n.wrap-table table tbody tr .contract .icon.new, .wrap-table table tbody tr .contract .icon.alert {\n position: absolute;\n top: 0; }\n\n.wrap-table table tbody tr .contract .icon.new {\n left: -2.3rem;\n -webkit-mask: url('new.svg') no-repeat center;\n mask: url('new.svg') no-repeat center;\n width: 1.7rem;\n height: 1.7rem; }\n\n.wrap-table table tbody tr .contract .icon.alert {\n top: 0.2rem;\n left: -2.1rem;\n -webkit-mask: url('alert.svg') no-repeat center;\n mask: url('alert.svg') no-repeat center;\n width: 1.2rem;\n height: 1.2rem; }\n\n.wrap-table table tbody tr .contract .icon.purchase, .wrap-table table tbody tr .contract .icon.sell {\n margin-right: 1rem;\n width: 1.5rem;\n height: 1.5rem; }\n\n.wrap-table table tbody tr .contract .icon.purchase {\n -webkit-mask: url('purchase.svg') no-repeat center;\n mask: url('purchase.svg') no-repeat center; }\n\n.wrap-table table tbody tr .contract .icon.sell {\n -webkit-mask: url('sell.svg') no-repeat center;\n mask: url('sell.svg') no-repeat center; }\n\n.wrap-table table tbody tr .contract span {\n text-overflow: ellipsis;\n overflow: hidden; }\n\n.wrap-table table tbody tr .status, .wrap-table table tbody tr .comment {\n display: inline-block;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 100%; }\n\n.contracts-buttons {\n display: flex;\n margin: 3rem 0;\n width: 50%; }\n\n.contracts-buttons button {\n flex: 0 1 50%;\n margin-right: 1.5rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udHJhY3RzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGNvbnRyYWN0c1xcY29udHJhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsaUJBQWlCLEVBQUE7O0FBR25CO0VBQ0UsMkJBQTJCO0VBQzNCLGdCQUFnQixFQUFBOztBQUZsQjtJQVNRLGVBQWU7SUFDZix3QkFBd0IsRUFBQTs7QUFWaEM7TUFhVSxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLG1CQUFtQixFQUFBOztBQWY3QjtRQWtCWSxjQUFjLEVBQUE7O0FBbEIxQjtVQXFCYyxrQkFBa0I7VUFDbEIsTUFBTSxFQUFBOztBQXRCcEI7VUEwQmMsYUFBYTtVQUNiLDZDQUFzRDtrQkFBdEQscUNBQXNEO1VBQ3RELGFBQWE7VUFDYixjQUFjLEVBQUE7O0FBN0I1QjtVQWlDYyxXQUFXO1VBQ1gsYUFBYTtVQUNiLCtDQUF3RDtrQkFBeEQsdUNBQXdEO1VBQ3hELGFBQWE7VUFDYixjQUFjLEVBQUE7O0FBckM1QjtVQXlDYyxrQkFBa0I7VUFDbEIsYUFBYTtVQUNiLGNBQWMsRUFBQTs7QUEzQzVCO1VBK0NjLGtEQUEyRDtrQkFBM0QsMENBQTJELEVBQUE7O0FBL0N6RTtVQW1EYyw4Q0FBdUQ7a0JBQXZELHNDQUF1RCxFQUFBOztBQW5EckU7UUF3RFksdUJBQXVCO1FBQ3ZCLGdCQUFnQixFQUFBOztBQXpENUI7TUE4RFUscUJBQXFCO01BQ3JCLHVCQUF1QjtNQUN2QixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFBOztBQU96QjtFQUNFLGFBQWE7RUFDYixjQUFjO0VBQ2QsVUFBVSxFQUFBOztBQUhaO0lBTUksYUFBYTtJQUNiLG9CQUFvQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvY29udHJhY3RzL2NvbnRyYWN0cy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmVtcHR5LWNvbnRyYWN0cyB7XHJcbiAgZm9udC1zaXplOiAxLjVyZW07XHJcbn1cclxuXHJcbi53cmFwLXRhYmxlIHtcclxuICBtYXJnaW46IC0zcmVtIC0zcmVtIDAgLTNyZW07XHJcbiAgb3ZlcmZsb3cteDogYXV0bztcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xyXG5cclxuICAgICAgICAuY29udHJhY3Qge1xyXG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICBmbGV4LXNocmluazogMDtcclxuXHJcbiAgICAgICAgICAgICYubmV3LCAmLmFsZXJ0IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLm5ldyB7XHJcbiAgICAgICAgICAgICAgbGVmdDogLTIuM3JlbTtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL25ldy5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEuN3JlbTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEuN3JlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5hbGVydCB7XHJcbiAgICAgICAgICAgICAgdG9wOiAwLjJyZW07XHJcbiAgICAgICAgICAgICAgbGVmdDogLTIuMXJlbTtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2FsZXJ0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLnB1cmNoYXNlLCAmLnNlbGwge1xyXG4gICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMXJlbTtcclxuICAgICAgICAgICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMS41cmVtO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLnB1cmNoYXNlIHtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3B1cmNoYXNlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5zZWxsIHtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbGwuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3BhbiB7XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cywgLmNvbW1lbnQge1xyXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmNvbnRyYWN0cy1idXR0b25zIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIG1hcmdpbjogM3JlbSAwO1xyXG4gIHdpZHRoOiA1MCU7XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBmbGV4OiAwIDEgNTAlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW07XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/contracts/contracts.component.ts": -/*!**************************************************!*\ - !*** ./src/app/contracts/contracts.component.ts ***! - \**************************************************/ -/*! exports provided: ContractsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContractsComponent", function() { return ContractsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var ContractsComponent = /** @class */ (function () { - function ContractsComponent(route, variablesService) { - this.route = route; - this.variablesService = variablesService; - } - Object.defineProperty(ContractsComponent.prototype, "sortedArrayContracts", { - get: function () { - return this.variablesService.currentWallet.contracts.sort(function (a, b) { - if (a.is_new < b.is_new) { - return 1; - } - if (a.is_new > b.is_new) { - return -1; - } - if (a.timestamp < b.timestamp) { - return 1; - } - if (a.timestamp > b.timestamp) { - return -1; - } - if (a.contract_id < b.contract_id) { - return 1; - } - if (a.contract_id > b.contract_id) { - return -1; - } - return 0; - }); - }, - enumerable: true, - configurable: true - }); - ContractsComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function (params) { - if (params.hasOwnProperty('id')) { - _this.walletId = params['id']; - } - }); - }; - ContractsComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - }; - ContractsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-contracts', - template: __webpack_require__(/*! ./contracts.component.html */ "./src/app/contracts/contracts.component.html"), - styles: [__webpack_require__(/*! ./contracts.component.scss */ "./src/app/contracts/contracts.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"]]) - ], ContractsComponent); - return ContractsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/create-wallet/create-wallet.component.html": -/*!************************************************************!*\ - !*** ./src/app/create-wallet/create-wallet.component.html ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\r\n {{ 'BREADCRUMBS.CREATE_WALLET' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'CREATE_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'CREATE_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\r\n
      \r\n
      \r\n
      = variablesService.maxWalletNameLength\">\r\n {{ 'CREATE_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'CREATE_WALLET.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/create-wallet/create-wallet.component.scss": -/*!************************************************************!*\ - !*** ./src/app/create-wallet/create-wallet.component.scss ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: relative; }\n\n.form-create {\n margin: 2.4rem 0;\n width: 50%; }\n\n.form-create .wrap-buttons {\n display: flex;\n margin: 2.5rem -0.7rem; }\n\n.form-create .wrap-buttons button {\n margin: 0 0.7rem; }\n\n.form-create .wrap-buttons button.transparent-button {\n flex-basis: 50%; }\n\n.form-create .wrap-buttons button.select-button {\n flex-basis: 60%; }\n\n.form-create .wrap-buttons button.create-button {\n flex: 1 1 50%; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY3JlYXRlLXdhbGxldC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxjcmVhdGUtd2FsbGV0XFxjcmVhdGUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTs7QUFGWjtJQUtJLGFBQWE7SUFDYixzQkFBc0IsRUFBQTs7QUFOMUI7TUFTTSxnQkFBZ0IsRUFBQTs7QUFUdEI7UUFZUSxlQUFlLEVBQUE7O0FBWnZCO1FBZ0JRLGVBQWUsRUFBQTs7QUFoQnZCO1FBb0JRLGFBQWEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2NyZWF0ZS13YWxsZXQvY3JlYXRlLXdhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5mb3JtLWNyZWF0ZSB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogNTAlO1xyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcblxyXG4gICAgICAmLnRyYW5zcGFyZW50LWJ1dHRvbiB7XHJcbiAgICAgICAgZmxleC1iYXNpczogNTAlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnNlbGVjdC1idXR0b24ge1xyXG4gICAgICAgIGZsZXgtYmFzaXM6IDYwJTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5jcmVhdGUtYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAxIDEgNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/create-wallet/create-wallet.component.ts": -/*!**********************************************************!*\ - !*** ./src/app/create-wallet/create-wallet.component.ts ***! - \**********************************************************/ -/*! exports provided: CreateWalletComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateWalletComponent", function() { return CreateWalletComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/models/wallet.model */ "./src/app/_helpers/models/wallet.model.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var CreateWalletComponent = /** @class */ (function () { - function CreateWalletComponent(router, backend, variablesService, modalService, ngZone, translate) { - var _this = this; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.translate = translate; - this.createForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, function (g) { - for (var i = 0; i < _this.variablesService.wallets.length; i++) { - if (g.value === _this.variablesService.wallets[i].name) { - return { 'duplicate': true }; - } - } - return null; - }]), - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - confirm: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('') - }, function (g) { - return g.get('password').value === g.get('confirm').value ? null : { 'confirm_mismatch': true }; - }); - this.wallet = { - id: '' - }; - this.walletSaved = false; - this.walletSavedName = ''; - this.progressWidth = '9rem'; - } - CreateWalletComponent.prototype.ngOnInit = function () { - }; - CreateWalletComponent.prototype.createWallet = function () { - var _this = this; - this.ngZone.run(function () { - _this.progressWidth = '100%'; - _this.router.navigate(['/seed-phrase'], { queryParams: { wallet_id: _this.wallet.id } }); - }); - }; - CreateWalletComponent.prototype.saveWallet = function () { - var _this = this; - if (this.createForm.valid && this.createForm.get('name').value.length <= this.variablesService.maxWalletNameLength) { - this.backend.saveFileDialog(this.translate.instant('CREATE_WALLET.TITLE_SAVE'), '*', this.variablesService.settings.default_path, function (file_status, file_data) { - if (file_status) { - _this.variablesService.settings.default_path = file_data.path.substr(0, file_data.path.lastIndexOf('/')); - _this.walletSavedName = file_data.path.substr(file_data.path.lastIndexOf('/') + 1, file_data.path.length - 1); - _this.backend.generateWallet(file_data.path, _this.createForm.get('password').value, function (generate_status, generate_data, errorCode) { - if (generate_status) { - _this.wallet.id = generate_data.wallet_id; - _this.variablesService.opening_wallet = new _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__["Wallet"](generate_data.wallet_id, _this.createForm.get('name').value, _this.createForm.get('password').value, generate_data['wi'].path, generate_data['wi'].address, generate_data['wi'].balance, generate_data['wi'].unlocked_balance, generate_data['wi'].mined_total, generate_data['wi'].tracking_hey); - _this.variablesService.opening_wallet.alias = _this.backend.getWalletAlias(generate_data['wi'].address); - _this.variablesService.opening_wallet.total_history_item = 0; - _this.variablesService.opening_wallet.pages = new Array(1).fill(1); - _this.variablesService.opening_wallet.totalPages = 1; - _this.variablesService.opening_wallet.currentPage = 1; - _this.ngZone.run(function () { - _this.walletSaved = true; - _this.progressWidth = '33%'; - }); - } - else { - if (errorCode && errorCode === 'ALREADY_EXISTS') { - _this.modalService.prepareModal('error', 'CREATE_WALLET.ERROR_CANNOT_SAVE_TOP'); - } - else { - _this.modalService.prepareModal('error', 'CREATE_WALLET.ERROR_CANNOT_SAVE_SYSTEM'); - } - } - }); - } - }); - } - }; - CreateWalletComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-create-wallet', - template: __webpack_require__(/*! ./create-wallet.component.html */ "./src/app/create-wallet/create-wallet.component.html"), - styles: [__webpack_require__(/*! ./create-wallet.component.scss */ "./src/app/create-wallet/create-wallet.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_5__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__["TranslateService"]]) - ], CreateWalletComponent); - return CreateWalletComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/edit-alias/edit-alias.component.html": -/*!******************************************************!*\ - !*** ./src/app/edit-alias/edit-alias.component.html ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ wallet.name }}\r\n {{ 'BREADCRUMBS.EDIT_ALIAS' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      0 && notEnoughMoney\">\r\n {{ 'EDIT_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\r\n
      \r\n
      = variablesService.maxCommentLength\">\r\n {{ 'EDIT_ALIAS.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      {{ \"EDIT_ALIAS.COST\" | translate : {value: variablesService.default_fee, currency: variablesService.defaultCurrency} }}
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/edit-alias/edit-alias.component.scss": -/*!******************************************************!*\ - !*** ./src/app/edit-alias/edit-alias.component.scss ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-edit {\n margin: 2.4rem 0; }\n .form-edit .alias-name {\n width: 50%; }\n .form-edit .alias-cost {\n font-size: 1.3rem;\n margin-top: 2rem; }\n .form-edit .wrap-buttons {\n display: flex;\n justify-content: space-between;\n margin: 2.5rem -0.7rem; }\n .form-edit .wrap-buttons button {\n margin: 0 0.7rem;\n width: 15rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZWRpdC1hbGlhcy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxlZGl0LWFsaWFzXFxlZGl0LWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQSIsImZpbGUiOiJzcmMvYXBwL2VkaXQtYWxpYXMvZWRpdC1hbGlhcy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLWVkaXQge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcblxyXG4gIC5hbGlhcy1uYW1lIHtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgfVxyXG5cclxuICAuYWxpYXMtY29zdCB7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgfVxyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcbiAgICAgIHdpZHRoOiAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/edit-alias/edit-alias.component.ts": -/*!****************************************************!*\ - !*** ./src/app/edit-alias/edit-alias.component.ts ***! - \****************************************************/ -/*! exports provided: EditAliasComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EditAliasComponent", function() { return EditAliasComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var EditAliasComponent = /** @class */ (function () { - function EditAliasComponent(location, router, backend, variablesService, modalService, ngZone) { - this.location = location; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.requestProcessing = false; - } - EditAliasComponent.prototype.ngOnInit = function () { - this.wallet = this.variablesService.currentWallet; - var alias = this.backend.getWalletAlias(this.wallet.address); - this.alias = { - name: alias.name, - address: alias.address, - comment: alias.comment - }; - this.oldAliasComment = alias.comment; - this.notEnoughMoney = this.wallet.unlocked_balance.isLessThan(this.variablesService.default_fee_big); - }; - EditAliasComponent.prototype.updateAlias = function () { - var _this = this; - if (this.requestProcessing || this.notEnoughMoney || this.oldAliasComment === this.alias.comment || this.alias.comment.length > this.variablesService.maxCommentLength) { - return; - } - this.requestProcessing = true; - this.backend.updateAlias(this.wallet.wallet_id, this.alias, this.variablesService.default_fee, function (status) { - if (status) { - _this.modalService.prepareModal('success', ''); - _this.wallet.alias['comment'] = _this.alias.comment; - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.wallet.wallet_id]); - }); - } - _this.requestProcessing = false; - }); - }; - EditAliasComponent.prototype.back = function () { - this.location.back(); - }; - EditAliasComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-edit-alias', - template: __webpack_require__(/*! ./edit-alias.component.html */ "./src/app/edit-alias/edit-alias.component.html"), - styles: [__webpack_require__(/*! ./edit-alias.component.scss */ "./src/app/edit-alias/edit-alias.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _angular_router__WEBPACK_IMPORTED_MODULE_2__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], EditAliasComponent); - return EditAliasComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/export-import/export-import.component.html": -/*!************************************************************!*\ - !*** ./src/app/export-import/export-import.component.html ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n \r\n
      \r\n\r\n

      {{ 'CONTACTS.IMPORT_EXPORT' | translate }}

      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/export-import/export-import.component.scss": -/*!************************************************************!*\ - !*** ./src/app/export-import/export-import.component.scss ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.head {\n justify-content: flex-end; }\n\n.contacts-title {\n font-size: 1.7rem;\n margin-bottom: 1rem; }\n\n.btn-wrapper {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 0 -0.5rem;\n padding: 1.5rem 0; }\n\n.btn-wrapper button {\n flex: 1 0 auto;\n margin: 0 0.5rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZXhwb3J0LWltcG9ydC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxleHBvcnQtaW1wb3J0XFxleHBvcnQtaW1wb3J0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UseUJBQXlCLEVBQUE7O0FBRzNCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQixFQUFBOztBQUdyQjtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBQTs7QUFMbkI7SUFRSSxjQUFjO0lBQ2QsZ0JBQWdCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9leHBvcnQtaW1wb3J0L2V4cG9ydC1pbXBvcnQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uY29udGFjdHMtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbn1cclxuXHJcbi5idG4td3JhcHBlciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBtYXJnaW46IDAgLTAuNXJlbTtcclxuICBwYWRkaW5nOiAxLjVyZW0gMDtcclxuXHJcbiAgYnV0dG9uIHtcclxuICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgbWFyZ2luOiAwIDAuNXJlbTtcclxuICB9XHJcbn0iXX0= */" - -/***/ }), - -/***/ "./src/app/export-import/export-import.component.ts": -/*!**********************************************************!*\ - !*** ./src/app/export-import/export-import.component.ts ***! - \**********************************************************/ -/*! exports provided: ExportImportComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExportImportComponent", function() { return ExportImportComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var ngx_papaparse__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ngx-papaparse */ "./node_modules/ngx-papaparse/fesm5/ngx-papaparse.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var ExportImportComponent = /** @class */ (function () { - function ExportImportComponent(location, variablesService, backend, modalService, papa, translate, router, ngZone) { - this.location = location; - this.variablesService = variablesService; - this.backend = backend; - this.modalService = modalService; - this.papa = papa; - this.translate = translate; - this.router = router; - this.ngZone = ngZone; - } - ExportImportComponent.prototype.ngOnInit = function () { }; - ExportImportComponent.prototype.import = function () { - var _this = this; - this.backend.openFileDialog('', '*', this.variablesService.settings.default_path, function (file_status, file_data) { - if (file_status) { - _this.variablesService.settings.default_path = file_data.path.substr(0, file_data.path.lastIndexOf('/')); - if (_this.isValid(file_data.path)) { - _this.backend.loadFile(file_data.path, function (status, data) { - if (!status) { - _this.modalService.prepareModal('error', 'CONTACTS.ERROR_IMPORT_EMPTY'); - } - else { - var options = { - header: true - }; - var elements = _this.papa.parse(data, options); - var isArray = Array.isArray(elements.data); - if (isArray && elements.data.length !== 0 && !elements.errors.length) { - if (!_this.variablesService.contacts.length) { - elements.data.forEach(function (element) { - _this.variablesService.contacts.push(element); - }); - } - else { - elements.data.forEach(function (element) { - var indexName = _this.variablesService.contacts.findIndex(function (contact) { return contact.name === element.name; }); - var indexAddress = _this.variablesService.contacts.findIndex(function (contact) { return contact.address === element.address; }); - if (indexAddress === -1 && indexName === -1) { - _this.variablesService.contacts.push(element); - } - if (indexName !== -1 && indexAddress === -1) { - _this.variablesService.contacts.push({ - name: element.name + " " + _this.translate.instant('CONTACTS.COPY'), - address: element.address, - notes: element.notes - }); - } - }); - } - _this.backend.getContactAlias(); - _this.ngZone.run(function () { - _this.router.navigate(['/contacts']); - }); - } - if (elements.errors.length) { - _this.modalService.prepareModal('error', 'CONTACTS.ERROR_IMPORT'); - console.log(elements.errors); - } - } - }); - } - else { - _this.modalService.prepareModal('error', 'CONTACTS.ERROR_TYPE_FILE'); - } - } - }); - }; - ExportImportComponent.prototype.export = function () { - var _this = this; - var contacts = []; - this.variablesService.contacts.forEach(function (contact) { - delete contact.alias; - contacts.push(contact); - }); - this.backend.saveFileDialog('', '*', this.variablesService.settings.default_path, function (file_status, file_data) { - if (!_this.variablesService.contacts.length && !(file_data.error_code === 'CANCELED')) { - _this.modalService.prepareModal('error', 'CONTACTS.ERROR_EMPTY_LIST'); - } - var path = _this.isValid(file_data.path) ? file_data.path : file_data.path + ".csv"; - if (file_status && _this.isValid(path) && _this.variablesService.contacts.length) { - _this.backend.storeFile(path, _this.papa.unparse(contacts)); - } - if (!(file_data.error_code === 'CANCELED') && !_this.isValid(path)) { - _this.modalService.prepareModal('error', 'CONTACTS.ERROR_EXPORT'); - } - }); - }; - ExportImportComponent.prototype.isValid = function (file) { - return file.endsWith('.csv'); - }; - ExportImportComponent.prototype.back = function () { - this.location.back(); - }; - ExportImportComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-export-import', - template: __webpack_require__(/*! ./export-import.component.html */ "./src/app/export-import/export-import.component.html"), - styles: [__webpack_require__(/*! ./export-import.component.scss */ "./src/app/export-import/export-import.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - ngx_papaparse__WEBPACK_IMPORTED_MODULE_5__["Papa"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_6__["TranslateService"], - _angular_router__WEBPACK_IMPORTED_MODULE_7__["Router"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], ExportImportComponent); - return ExportImportComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/history/history.component.html": -/*!************************************************!*\ - !*** ./src/app/history/history.component.html ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      {{ 'HISTORY.STATUS' | translate }}{{ 'HISTORY.DATE' | translate }}{{ 'HISTORY.AMOUNT' | translate }}{{ 'HISTORY.FEE' | translate }}{{ 'HISTORY.ADDRESS' | translate }}
      \r\n
      \r\n 0\">\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n \r\n \r\n 0\">\r\n \r\n 500000000\">\r\n 0\">\r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n\r\n \r\n \r\n {{ (item.is_income ? 'HISTORY.RECEIVED' : 'HISTORY.SEND') | translate }}\r\n
      \r\n
      {{item.timestamp * 1000 | date : 'dd-MM-yyyy HH:mm'}}\r\n {{item.sortAmount | intToMoney}} {{variablesService.defaultCurrency}}\r\n \r\n {{item.sortFee | intToMoney}} {{variablesService.defaultCurrency}}\r\n \r\n {{item | historyTypeMessages}}\r\n {{item.remote_addresses[0]}}\r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/history/history.component.scss": -/*!************************************************!*\ - !*** ./src/app/history/history.component.scss ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.wrap-table {\n margin: -3rem; }\n\n.wrap-table table tbody tr td {\n min-width: 10rem; }\n\n.wrap-table table tbody tr .status {\n position: relative;\n display: flex;\n align-items: center; }\n\n.wrap-table table tbody tr .status .confirmation {\n position: absolute;\n top: 50%;\n left: -2rem;\n transform: translateY(-50%);\n display: flex;\n align-items: flex-end;\n width: 0.7rem;\n height: 1.5rem; }\n\n.wrap-table table tbody tr .status .confirmation .fill {\n width: 100%; }\n\n.wrap-table table tbody tr .status .lock-transaction {\n position: absolute;\n left: -2rem;\n -webkit-mask: url('lock-transaction.svg') no-repeat center;\n mask: url('lock-transaction.svg') no-repeat center;\n width: 1.2rem;\n height: 1.2rem;\n margin-right: 1.1rem; }\n\n.wrap-table table tbody tr .status .unlock-transaction {\n position: absolute;\n left: -2rem;\n -webkit-mask: url('unlock-transaction.svg') no-repeat center;\n mask: url('unlock-transaction.svg') no-repeat center;\n width: 1.2rem;\n height: 1.2rem;\n margin-right: 1.1rem; }\n\n.wrap-table table tbody tr .status .position {\n position: static; }\n\n.wrap-table table tbody tr .status .status-transaction {\n margin-right: 1rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.wrap-table table tbody tr .status.send .status-transaction {\n background-color: transparent; }\n\n.wrap-table table tbody tr .status.send .status-transaction::after {\n display: block;\n content: '';\n background: url('send-red.svg') no-repeat center;\n width: 13px;\n height: 13px; }\n\n.wrap-table table tbody tr .status.received .status-transaction {\n background-color: transparent; }\n\n.wrap-table table tbody tr .status.received .status-transaction::after {\n display: block;\n content: '';\n background: url('receive-green.svg') no-repeat center;\n width: 13px;\n height: 13px; }\n\n.wrap-table table tbody tr .remote-address {\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 25vw; }\n\n.wrap-table table tbody tr:not(.transaction-details) {\n cursor: pointer; }\n\n.wrap-table table tbody tr.transaction-details {\n transition: 0.5s height linear, 0s font-size;\n transition-delay: 0s, 0.5s;\n height: 0; }\n\n.wrap-table table tbody tr.transaction-details.open {\n height: 16.2rem; }\n\n.wrap-table table tbody tr.transaction-details td {\n position: relative;\n overflow: hidden;\n line-height: inherit;\n padding-top: 0;\n padding-bottom: 0; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvaGlzdG9yeS9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxoaXN0b3J5XFxoaXN0b3J5LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYSxFQUFBOztBQURmO0lBVVUsZ0JBQWdCLEVBQUE7O0FBVjFCO0lBY1Usa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixtQkFBbUIsRUFBQTs7QUFoQjdCO01BbUJZLGtCQUFrQjtNQUNsQixRQUFRO01BQ1IsV0FBVztNQUNYLDJCQUEyQjtNQUMzQixhQUFhO01BQ2IscUJBQXFCO01BQ3JCLGFBQWE7TUFDYixjQUFjLEVBQUE7O0FBMUIxQjtRQTZCYyxXQUFXLEVBQUE7O0FBN0J6QjtNQWtDWSxrQkFBa0I7TUFDbEIsV0FBVztNQUNYLDBEQUFtRTtjQUFuRSxrREFBbUU7TUFDbkUsYUFBYTtNQUNiLGNBQWM7TUFDZCxvQkFBb0IsRUFBQTs7QUF2Q2hDO01BMkNZLGtCQUFrQjtNQUNsQixXQUFXO01BQ1gsNERBQXFFO2NBQXJFLG9EQUFxRTtNQUNyRSxhQUFhO01BQ2IsY0FBYztNQUNkLG9CQUFvQixFQUFBOztBQWhEaEM7TUFvRFksZ0JBQWdCLEVBQUE7O0FBcEQ1QjtNQXdEWSxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUExRDFCO01BK0RjLDZCQUE2QixFQUFBOztBQS9EM0M7TUFtRWMsY0FBYztNQUNkLFdBQVU7TUFDVixnREFBa0U7TUFDbEUsV0FBVztNQUNYLFlBQVksRUFBQTs7QUF2RTFCO01BNkVjLDZCQUE2QixFQUFBOztBQTdFM0M7TUFpRmMsY0FBYztNQUNkLFdBQVU7TUFDVixxREFBdUU7TUFDdkUsV0FBVztNQUNYLFlBQVksRUFBQTs7QUFyRjFCO0lBMkZVLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsZUFBZSxFQUFBOztBQTdGekI7SUFpR1UsZUFBZSxFQUFBOztBQWpHekI7SUFzR1UsNENBQTRDO0lBQzVDLDBCQUEwQjtJQUMxQixTQUFTLEVBQUE7O0FBeEduQjtNQTJHWSxlQUFlLEVBQUE7O0FBM0czQjtNQStHWSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQixjQUFjO01BQ2QsaUJBQWlCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9oaXN0b3J5L2hpc3RvcnkuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi53cmFwLXRhYmxlIHtcclxuICBtYXJnaW46IC0zcmVtO1xyXG5cclxuICB0YWJsZSB7XHJcblxyXG4gICAgdGJvZHkge1xyXG5cclxuICAgICAgdHIge1xyXG5cclxuICAgICAgICB0ZCB7XHJcbiAgICAgICAgICBtaW4td2lkdGg6IDEwcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cyB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgICAgICAgICAuY29uZmlybWF0aW9uIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgbGVmdDogLTJyZW07XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xyXG4gICAgICAgICAgICB3aWR0aDogMC43cmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuNXJlbTtcclxuXHJcbiAgICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5sb2NrLXRyYW5zYWN0aW9uIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICBsZWZ0OiAtMnJlbTtcclxuICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9sb2NrLXRyYW5zYWN0aW9uLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS4xcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC51bmxvY2stdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIGxlZnQ6IC0ycmVtO1xyXG4gICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3VubG9jay10cmFuc2FjdGlvbi5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxLjJyZW07XHJcbiAgICAgICAgICAgIGhlaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMXJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAucG9zaXRpb24ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5zdGF0dXMtdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgICAgICAgIGhlaWdodDogMS43cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICYuc2VuZCAge1xyXG4gICAgICAgICAgICAuc3RhdHVzLXRyYW5zYWN0aW9uIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLnN0YXR1cy10cmFuc2FjdGlvbjo6YWZ0ZXIge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6Jyc7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDp1cmwoXCIuLi8uLi9hc3NldHMvaWNvbnMvc2VuZC1yZWQuc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEzcHg7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxM3B4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJi5yZWNlaXZlZCB7XHJcbiAgICAgICAgICAgIC5zdGF0dXMtdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAuc3RhdHVzLXRyYW5zYWN0aW9uOjphZnRlciB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgY29udGVudDonJztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOnVybChcIi4uLy4uL2Fzc2V0cy9pY29ucy9yZWNlaXZlLWdyZWVuLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxM3B4O1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTNweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJlbW90ZS1hZGRyZXNzIHtcclxuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgICAgIG1heC13aWR0aDogMjV2dztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bm90KC50cmFuc2FjdGlvbi1kZXRhaWxzKSB7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnRyYW5zYWN0aW9uLWRldGFpbHMge1xyXG4gICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjVzIGhlaWdodCBsaW5lYXIsIDBzIGZvbnQtc2l6ZTtcclxuICAgICAgICAgIHRyYW5zaXRpb246IDAuNXMgaGVpZ2h0IGxpbmVhciwgMHMgZm9udC1zaXplO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMHMsIDAuNXM7XHJcbiAgICAgICAgICBoZWlnaHQ6IDA7XHJcblxyXG4gICAgICAgICAgJi5vcGVuIHtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxNi4ycmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRkIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcclxuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/history/history.component.ts": -/*!**********************************************!*\ - !*** ./src/app/history/history.component.ts ***! - \**********************************************/ -/*! exports provided: HistoryComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HistoryComponent", function() { return HistoryComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var HistoryComponent = /** @class */ (function () { - function HistoryComponent(route, variablesService) { - this.route = route; - this.variablesService = variablesService; - this.openedDetails = false; - this.calculatedWidth = []; - } - HistoryComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function () { - _this.openedDetails = false; - }); - }; - HistoryComponent.prototype.ngAfterViewChecked = function () { - this.calculateWidth(); - }; - HistoryComponent.prototype.getHeight = function (item) { - if ((this.variablesService.height_app - item.height >= 10 && item.height !== 0) || (item.is_mining === true && item.height === 0)) { - return 100; - } - else { - if (item.height === 0 || this.variablesService.height_app - item.height < 0) { - return 0; - } - else { - return (this.variablesService.height_app - item.height) * 10; - } - } - }; - HistoryComponent.prototype.openDetails = function (tx_hash) { - if (tx_hash === this.openedDetails) { - this.openedDetails = false; - } - else { - this.openedDetails = tx_hash; - } - }; - HistoryComponent.prototype.calculateWidth = function () { - this.calculatedWidth = []; - this.calculatedWidth.push(this.head.nativeElement.childNodes[0].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[1].clientWidth + this.head.nativeElement.childNodes[2].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[3].clientWidth); - this.calculatedWidth.push(this.head.nativeElement.childNodes[4].clientWidth); - }; - HistoryComponent.prototype.time = function (item) { - var now = new Date().getTime(); - var unlockTime = now + ((item.unlock_time - this.variablesService.height_max) * 60 * 1000); - return unlockTime; - }; - HistoryComponent.prototype.isLocked = function (item) { - if ((item.unlock_time > 500000000) && (item.unlock_time > new Date().getTime() / 1000)) { - return true; - } - if ((item.unlock_time < 500000000) && (item.unlock_time > this.variablesService.height_max)) { - return true; - } - return false; - }; - HistoryComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('head'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], HistoryComponent.prototype, "head", void 0); - HistoryComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-history', - template: __webpack_require__(/*! ./history.component.html */ "./src/app/history/history.component.html"), - styles: [__webpack_require__(/*! ./history.component.scss */ "./src/app/history/history.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_2__["ActivatedRoute"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"]]) - ], HistoryComponent); - return HistoryComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/login/login.component.html": -/*!********************************************!*\ - !*** ./src/app/login/login.component.html ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'LOGIN.FORM_ERRORS.MISMATCH' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.OFFLINE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.SYNCING' | translate }} {{ variablesService.height_app }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.height_max }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.ONLINE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.DOWNLOADING' | translate }} {{ variablesService.downloaded }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.total }}{{ 'SIDEBAR.SYNCHRONIZATION.MB' | translate }}\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      {{ variablesService.sync.progress_value_text }}%
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      {{ variablesService.download.progress_value_text }}%
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.STANDARD' | translate }}\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT' | translate }}\r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.CRITICAL' | translate }}\r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n {{ 'SIDEBAR.UPDATE.TIME' | translate }}\r\n
      \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/login/login.component.scss": -/*!********************************************!*\ - !*** ./src/app/login/login.component.scss ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; }\n :host .content {\n display: flex; }\n :host .content .wrap-login {\n margin: auto;\n width: 100%;\n max-width: 40rem; }\n :host .content .wrap-login .logo {\n display: flex;\n justify-content: center; }\n :host .content .wrap-login .logo::ng-deep svg {\n width: 15rem; }\n :host .content .wrap-login .form-login {\n display: flex;\n flex-direction: column; }\n :host .content .wrap-login .form-login .wrap-button {\n display: flex;\n align-items: center;\n justify-content: space-between; }\n :host .content .wrap-login .form-login .wrap-button button {\n margin: 2.5rem 0; }\n :host .content .wrap-login .form-login button {\n margin: 2.5rem auto;\n width: 100%;\n max-width: 15rem; }\n .synchronization-status {\n position: absolute;\n bottom: 3rem;\n left: 3rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbG9naW4vRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcbG9naW5cXGxvZ2luLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixPQUFPO0VBQ1AsV0FBVztFQUNYLFlBQVksRUFBQTtFQUxkO0lBUUksYUFBYSxFQUFBO0VBUmpCO01BV00sWUFBWTtNQUNaLFdBQVc7TUFDWCxnQkFBZ0IsRUFBQTtFQWJ0QjtRQWdCUSxhQUFhO1FBQ2IsdUJBQXVCLEVBQUE7RUFqQi9CO1VBb0JVLFlBQVksRUFBQTtFQXBCdEI7UUF5QlEsYUFBYTtRQUNiLHNCQUFzQixFQUFBO0VBMUI5QjtVQTZCVSxhQUFhO1VBQ2IsbUJBQW1CO1VBQ25CLDhCQUE4QixFQUFBO0VBL0J4QztZQWtDWSxnQkFBZ0IsRUFBQTtFQWxDNUI7VUF1Q1UsbUJBQW1CO1VBQ25CLFdBQVc7VUFDWCxnQkFBZ0IsRUFBQTtFQU0xQjtFQUNFLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osVUFBVSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvbG9naW4vbG9naW4uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuXHJcbiAgLmNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAud3JhcC1sb2dpbiB7XHJcbiAgICAgIG1hcmdpbjogYXV0bztcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1heC13aWR0aDogNDByZW07XHJcblxyXG4gICAgICAubG9nbyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHJcbiAgICAgICAgJjo6bmctZGVlcCBzdmcge1xyXG4gICAgICAgICAgd2lkdGg6IDE1cmVtO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmZvcm0tbG9naW4ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHJcbiAgICAgICAgLndyYXAtYnV0dG9uIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMi41cmVtIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgbWFyZ2luOiAyLjVyZW0gYXV0bztcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAxNXJlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuLnN5bmNocm9uaXphdGlvbi1zdGF0dXMge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBib3R0b206IDNyZW07XHJcbiAgbGVmdDogM3JlbTtcclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/login/login.component.ts": -/*!******************************************!*\ - !*** ./src/app/login/login.component.ts ***! - \******************************************/ -/*! exports provided: LoginComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginComponent", function() { return LoginComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/models/wallet.model */ "./src/app/_helpers/models/wallet.model.ts"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -/* harmony import */ var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json"); -var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_8___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json", 1); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - - -var LoginComponent = /** @class */ (function () { - function LoginComponent(route, router, backend, variablesService, modalService, ngZone) { - this.route = route; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.regForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - confirmation: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('') - }, [function (g) { - return g.get('password').value === g.get('confirmation').value ? null : { 'mismatch': true }; - } - ]); - this.authForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('') - }); - this.type = 'reg'; - this.logo = _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_8__.logo; - } - LoginComponent.prototype.ngOnInit = function () { - var _this = this; - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.type) { - _this.type = params.type; - } - }); - }; - LoginComponent.prototype.onSubmitCreatePass = function () { - var _this = this; - if (this.regForm.valid) { - this.variablesService.appPass = this.regForm.get('password').value; // the pass what was written in input of login form by user - this.backend.setMasterPassword({ pass: this.variablesService.appPass }, function (status, data) { - if (status) { - _this.backend.storeSecureAppData({ pass: _this.variablesService.appPass }); - _this.variablesService.appLogin = true; - _this.variablesService.dataIsLoaded = true; - if (_this.variablesService.settings.appLockTime) { - _this.variablesService.startCountdown(); - } - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - else { - console.log(data['error_code']); - } - }); - } - }; - LoginComponent.prototype.onSkipCreatePass = function () { - var _this = this; - this.variablesService.appPass = ''; - this.ngZone.run(function () { - _this.variablesService.appLogin = true; - _this.router.navigate(['/']); - }); - }; - LoginComponent.prototype.dropSecureAppData = function () { - var _this = this; - this.backend.dropSecureAppData(function () { - _this.onSkipCreatePass(); - }); - this.variablesService.wallets = []; - this.variablesService.contacts = []; - }; - LoginComponent.prototype.onSubmitAuthPass = function () { - var _this = this; - if (this.authForm.valid) { - this.variablesService.appPass = this.authForm.get('password').value; - if (this.variablesService.dataIsLoaded) { - this.backend.checkMasterPassword({ pass: this.variablesService.appPass }, function (status, data) { - if (status) { - _this.variablesService.appLogin = true; - if (_this.variablesService.settings.appLockTime) { - _this.variablesService.startCountdown(); - } - _this.ngZone.run(function () { - _this.router.navigate(['/'], { queryParams: { prevUrl: 'login' } }); - }); - } - }); - } - else { - this.getData(this.variablesService.appPass); - } - } - }; - LoginComponent.prototype.getData = function (appPass) { - var _this = this; - this.backend.getSecureAppData({ pass: appPass }, function (status, data) { - if (!data.error_code) { - _this.variablesService.appLogin = true; - _this.variablesService.dataIsLoaded = true; - if (_this.variablesService.settings.appLockTime) { - _this.variablesService.startCountdown(); - } - _this.variablesService.appPass = appPass; - var isEmptyObject = Object.keys(data).length === 0 && data.constructor === Object; - if (_this.variablesService.wallets.length) { - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.variablesService.wallets[0].wallet_id]); - }); - return; - } - if (data.hasOwnProperty('contacts')) { - if (Object.keys(data['contacts']).length !== 0) { - data['contacts'].map(function (contact) { - _this.variablesService.contacts.push(contact); - }); - } - } - if (data.hasOwnProperty('wallets')) { - if (Object.keys(data['wallets']).length !== 0) { - _this.getWalletData(data['wallets']); - } - else { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - } - if (!data.hasOwnProperty('wallets') && !data.hasOwnProperty('contacts')) { - if (data.length !== 0 && !isEmptyObject) { - _this.getWalletData(data); - } - else { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - } - } - }); - }; - LoginComponent.prototype.getWalletData = function (walletData) { - var _this = this; - var openWallets = 0; - var runWallets = 0; - walletData.forEach(function (wallet, wallet_index) { - _this.backend.openWallet(wallet.path, wallet.pass, _this.variablesService.count, true, function (open_status, open_data, open_error) { - if (open_status || open_error === 'FILE_RESTORED') { - openWallets++; - _this.ngZone.run(function () { - var new_wallet = new _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__["Wallet"](open_data.wallet_id, wallet.name, wallet.pass, open_data['wi'].path, open_data['wi'].address, open_data['wi'].balance, open_data['wi'].unlocked_balance, open_data['wi'].mined_total, open_data['wi'].tracking_hey); - new_wallet.alias = _this.backend.getWalletAlias(new_wallet.address); - if (wallet.staking) { - new_wallet.staking = true; - _this.backend.startPosMining(new_wallet.wallet_id); - } - else { - new_wallet.staking = false; - } - new_wallet.is_auditable = open_data['wi'].is_auditable; - new_wallet.is_watch_only = open_data['wi'].is_watch_only; - new_wallet.currentPage = 1; - new_wallet.exclude_mining_txs = false; - if (open_data.recent_history && open_data.recent_history.history) { - new_wallet.total_history_item = open_data.recent_history.total_history_items; - new_wallet.totalPages = Math.ceil(open_data.recent_history.total_history_items / _this.variablesService.count); - new_wallet.totalPages > _this.variablesService.maxPages - ? new_wallet.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : new_wallet.pages = new Array(new_wallet.totalPages).fill(1).map(function (value, index) { return value + index; }); - new_wallet.prepareHistory(open_data.recent_history.history); - } - else { - new_wallet.total_history_item = 0; - new_wallet.pages = new Array(1).fill(1); - new_wallet.totalPages = 1; - } - _this.backend.getContracts(open_data.wallet_id, function (contracts_status, contracts_data) { - if (contracts_status && contracts_data.hasOwnProperty('contracts')) { - _this.ngZone.run(function () { - new_wallet.prepareContractsAfterOpen(contracts_data.contracts, _this.variablesService.exp_med_ts, _this.variablesService.height_app, _this.variablesService.settings.viewedContracts, _this.variablesService.settings.notViewedContracts); - }); - } - }); - _this.variablesService.wallets.push(new_wallet); - if (_this.variablesService.wallets.length === 1) { - _this.router.navigate(['/wallet/' + _this.variablesService.wallets[0].wallet_id]); - } - }); - _this.backend.runWallet(open_data.wallet_id, function (run_status) { - if (run_status) { - runWallets++; - } - else { - if (wallet_index === walletData.length - 1 && runWallets === 0) { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - } - }); - } - else { - if (wallet_index === walletData.length - 1 && openWallets === 0) { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - } - }); - }); - }; - LoginComponent.prototype.getUpdate = function () { - this.backend.openUrlInBrowser(_shared_constants__WEBPACK_IMPORTED_MODULE_7__["DOWNLOADS_PAGE_URL"]); - }; - LoginComponent.prototype.ngOnDestroy = function () { - this.queryRouting.unsubscribe(); - }; - LoginComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-login', - template: __webpack_require__(/*! ./login.component.html */ "./src/app/login/login.component.html"), - styles: [__webpack_require__(/*! ./login.component.scss */ "./src/app/login/login.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_2__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_2__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], LoginComponent); - return LoginComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/main/main.component.html": -/*!******************************************!*\ - !*** ./src/app/main/main.component.html ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      0 && prevUrl !== 'login'\">\r\n \r\n
      \r\n\r\n
      \r\n

      {{ 'MAIN.TITLE' | translate }}

      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n {{ 'MAIN.HELP' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/main/main.component.scss": -/*!******************************************!*\ - !*** ./src/app/main/main.component.scss ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n flex: 1 0 auto;\n padding: 3rem; }\n\n.content {\n padding: 3rem;\n min-height: 100%; }\n\n.content .head {\n justify-content: flex-end; }\n\n.add-wallet .add-wallet-title {\n margin-bottom: 1rem; }\n\n.add-wallet .add-wallet-buttons {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 0 -0.5rem;\n padding: 1.5rem 0; }\n\n.add-wallet .add-wallet-buttons button {\n flex: 1 0 auto;\n margin: 0 0.5rem; }\n\n.add-wallet .add-wallet-help {\n display: flex;\n cursor: pointer;\n font-size: 1.3rem;\n line-height: 1.5rem; }\n\n.add-wallet .add-wallet-help .icon {\n -webkit-mask: url('howto.svg') no-repeat center;\n mask: url('howto.svg') no-repeat center;\n margin-right: 0.8rem;\n width: 1.5rem;\n height: 1.5rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbWFpbi9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxtYWluXFxtYWluLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsY0FBYztFQUNkLGFBQWEsRUFBQTs7QUFHZjtFQUNFLGFBQWE7RUFDYixnQkFBZ0IsRUFBQTs7QUFGbEI7SUFLSSx5QkFBeUIsRUFBQTs7QUFJN0I7RUFHSSxtQkFBbUIsRUFBQTs7QUFIdkI7RUFPSSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDhCQUE4QjtFQUM5QixpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUE7O0FBWHJCO0lBY00sY0FBYztJQUNkLGdCQUFnQixFQUFBOztBQWZ0QjtFQW9CSSxhQUFhO0VBQ2IsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixtQkFBbUIsRUFBQTs7QUF2QnZCO0lBMEJNLCtDQUF3RDtZQUF4RCx1Q0FBd0Q7SUFDeEQsb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9tYWluL21haW4uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZmxleDogMSAwIGF1dG87XHJcbiAgcGFkZGluZzogM3JlbTtcclxufVxyXG5cclxuLmNvbnRlbnQge1xyXG4gIHBhZGRpbmc6IDNyZW07XHJcbiAgbWluLWhlaWdodDogMTAwJTtcclxuXHJcbiAgLmhlYWQge1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICB9XHJcbn1cclxuXHJcbi5hZGQtd2FsbGV0IHtcclxuXHJcbiAgLmFkZC13YWxsZXQtdGl0bGUge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcblxyXG4gIC5hZGQtd2FsbGV0LWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDAgLTAuNXJlbTtcclxuICAgIHBhZGRpbmc6IDEuNXJlbSAwO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICBtYXJnaW46IDAgMC41cmVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZC13YWxsZXQtaGVscCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9ob3d0by5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMC44cmVtO1xyXG4gICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/main/main.component.ts": -/*!****************************************!*\ - !*** ./src/app/main/main.component.ts ***! - \****************************************/ -/*! exports provided: MainComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MainComponent", function() { return MainComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - -var MainComponent = /** @class */ (function () { - function MainComponent(route, router, location, backend, variablesService, ngZone, translate) { - this.route = route; - this.router = router; - this.location = location; - this.backend = backend; - this.variablesService = variablesService; - this.ngZone = ngZone; - this.translate = translate; - this.prevUrl = ''; - } - MainComponent.prototype.ngOnInit = function () { - if (this.route.snapshot.queryParams && this.route.snapshot.queryParams.prevUrl) { - this.prevUrl = this.route.snapshot.queryParams.prevUrl; - } - }; - MainComponent.prototype.openWallet = function () { - var _this = this; - this.backend.openFileDialog(this.translate.instant('MAIN.CHOOSE_PATH'), '*', this.variablesService.settings.default_path, function (file_status, file_data) { - if (file_status) { - _this.variablesService.settings.default_path = file_data.path.substr(0, file_data.path.lastIndexOf('/')); - _this.ngZone.run(function () { - _this.router.navigate(['/open'], { queryParams: { path: file_data.path } }); - }); - } - else { - console.log(file_data['error_code']); - } - }); - }; - MainComponent.prototype.openInBrowser = function () { - this.backend.openUrlInBrowser(_shared_constants__WEBPACK_IMPORTED_MODULE_6__["CREATE_NEW_WALLET_HELP_PAGE"]); - }; - MainComponent.prototype.back = function () { - this.location.back(); - }; - MainComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-main', - template: __webpack_require__(/*! ./main.component.html */ "./src/app/main/main.component.html"), - styles: [__webpack_require__(/*! ./main.component.scss */ "./src/app/main/main.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_4__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_4__["Router"], - _angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_5__["TranslateService"]]) - ], MainComponent); - return MainComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/messages/messages.component.html": -/*!**************************************************!*\ - !*** ./src/app/messages/messages.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      {{ 'MESSAGES.ADDRESS' | translate }}{{ 'MESSAGES.MESSAGE' | translate }}
      \r\n {{message.address}}\r\n \r\n \r\n {{message.message}}\r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/messages/messages.component.scss": -/*!**************************************************!*\ - !*** ./src/app/messages/messages.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.wrap-table {\n margin: -3rem; }\n\n.wrap-table table tbody tr td:first-child {\n position: relative;\n padding-right: 5rem;\n width: 18rem; }\n\n.wrap-table table tbody tr td:first-child span {\n display: block;\n line-height: 3.5rem;\n max-width: 10rem; }\n\n.wrap-table table tbody tr td:first-child .icon {\n position: absolute;\n top: 50%;\n right: 1rem;\n transform: translateY(-50%);\n display: block;\n -webkit-mask: url('alert.svg') no-repeat 0;\n mask: url('alert.svg') no-repeat 0;\n width: 1.2rem;\n height: 1.2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbWVzc2FnZXMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcbWVzc2FnZXNcXG1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYSxFQUFBOztBQURmO0lBWVksa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixZQUFZLEVBQUE7O0FBZHhCO01BaUJjLGNBQWM7TUFDZCxtQkFBbUI7TUFDbkIsZ0JBQWdCLEVBQUE7O0FBbkI5QjtNQXVCYyxrQkFBa0I7TUFDbEIsUUFBUTtNQUNSLFdBQVc7TUFDWCwyQkFBMkI7TUFDM0IsY0FBYztNQUNkLDBDQUFtRDtjQUFuRCxrQ0FBbUQ7TUFDbkQsYUFBYTtNQUNiLGNBQWMsRUFBQSIsImZpbGUiOiJzcmMvYXBwL21lc3NhZ2VzL21lc3NhZ2VzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ud3JhcC10YWJsZSB7XHJcbiAgbWFyZ2luOiAtM3JlbTtcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuXHJcbiAgICAgICAgdGQge1xyXG5cclxuICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDVyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxOHJlbTtcclxuXHJcbiAgICAgICAgICAgIHNwYW4ge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzLjVyZW07XHJcbiAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMHJlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgICByaWdodDogMXJlbTtcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9hbGVydC5zdmcpIG5vLXJlcGVhdCAwO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxLjJyZW07XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/messages/messages.component.ts": -/*!************************************************!*\ - !*** ./src/app/messages/messages.component.ts ***! - \************************************************/ -/*! exports provided: MessagesComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessagesComponent", function() { return MessagesComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var MessagesComponent = /** @class */ (function () { - function MessagesComponent() { - this.messages = [ - { - is_new: true, - address: '@bitmap', - message: 'No more miners for you!' - }, - { - is_new: false, - address: 'Hjkwey36gHasdhkajshd4bxnb5mcvowyefb2633FdsFGGWbb', - message: 'Hey! What’s with our BBR deal?' - }, - { - is_new: false, - address: '@john', - message: 'I’m coming!' - } - ]; - } - MessagesComponent.prototype.ngOnInit = function () { }; - MessagesComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-messages', - template: __webpack_require__(/*! ./messages.component.html */ "./src/app/messages/messages.component.html"), - styles: [__webpack_require__(/*! ./messages.component.scss */ "./src/app/messages/messages.component.scss")] - }), - __metadata("design:paramtypes", []) - ], MessagesComponent); - return MessagesComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/open-wallet-modal/open-wallet-modal.component.html": -/*!********************************************************************!*\ - !*** ./src/app/open-wallet-modal/open-wallet-modal.component.html ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n

      {{ 'OPEN_WALLET.MODAL.TITLE' | translate }}

      \r\n
      \r\n
      {{ wallet.name }}
      \r\n
      {{ wallet.path }}
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'OPEN_WALLET.MODAL.NOT_FOUND' | translate }}\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/open-wallet-modal/open-wallet-modal.component.scss": -/*!********************************************************************!*\ - !*** ./src/app/open-wallet-modal/open-wallet-modal.component.scss ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.25); }\n\n.modal {\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: 200%;\n padding: 2rem;\n min-width: 34rem;\n max-width: 64rem; }\n\n.modal .title {\n font-size: 1.8rem;\n text-align: center; }\n\n.modal .open-form .wallet-path {\n font-size: 1.3rem;\n margin: 5rem 0 2rem;\n word-wrap: break-word;\n line-height: 2rem; }\n\n.modal .open-form .wrap-button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 2rem -2rem 0; }\n\n.modal .open-form .wrap-button button {\n flex: 1 0 0;\n margin: 0 2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvb3Blbi13YWxsZXQtbW9kYWwvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcb3Blbi13YWxsZXQtbW9kYWxcXG9wZW4td2FsbGV0LW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFHdkM7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLDJCQUEyQjtFQUMzQixxQkFBcUI7RUFDckIsYUFBYTtFQUNiLGdCQUFnQjtFQUNoQixnQkFBZ0IsRUFBQTs7QUFQbEI7SUFVSSxpQkFBaUI7SUFDakIsa0JBQWtCLEVBQUE7O0FBWHRCO0lBaUJNLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLGlCQUFpQixFQUFBOztBQXBCdkI7SUF3Qk0sYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsb0JBQW9CLEVBQUE7O0FBM0IxQjtNQThCUSxXQUFXO01BQ1gsY0FBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvb3Blbi13YWxsZXQtbW9kYWwvb3Blbi13YWxsZXQtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBib3R0b206IDA7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcclxufVxyXG5cclxuLm1vZGFsIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJTtcclxuICBwYWRkaW5nOiAycmVtO1xyXG4gIG1pbi13aWR0aDogMzRyZW07XHJcbiAgbWF4LXdpZHRoOiA2NHJlbTtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLm9wZW4tZm9ybSB7XHJcblxyXG4gICAgLndhbGxldC1wYXRoIHtcclxuICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgIG1hcmdpbjogNXJlbSAwIDJyZW07XHJcbiAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDJyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLndyYXAtYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBtYXJnaW46IDJyZW0gLTJyZW0gMDtcclxuXHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgZmxleDogMSAwIDA7XHJcbiAgICAgICAgbWFyZ2luOiAwIDJyZW0gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/open-wallet-modal/open-wallet-modal.component.ts": -/*!******************************************************************!*\ - !*** ./src/app/open-wallet-modal/open-wallet-modal.component.ts ***! - \******************************************************************/ -/*! exports provided: OpenWalletModalComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OpenWalletModalComponent", function() { return OpenWalletModalComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/models/wallet.model */ "./src/app/_helpers/models/wallet.model.ts"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var OpenWalletModalComponent = /** @class */ (function () { - function OpenWalletModalComponent(variablesService, backend, translate, modalService, ngZone) { - this.variablesService = variablesService; - this.backend = backend; - this.translate = translate; - this.modalService = modalService; - this.ngZone = ngZone; - this.wallet = { - name: '', - path: '', - pass: '', - notFound: false, - emptyPass: false - }; - } - OpenWalletModalComponent.prototype.ngOnInit = function () { - if (this.wallets.length) { - this.wallet = this.wallets[0]; - this.wallet.pass = ''; - } - }; - OpenWalletModalComponent.prototype.openWallet = function () { - var _this = this; - if (this.wallets.length === 0) { - return; - } - this.backend.openWallet(this.wallet.path, this.wallet.pass, this.variablesService.count, false, function (open_status, open_data, open_error) { - if (open_error && open_error === 'FILE_NOT_FOUND') { - _this.ngZone.run(function () { - _this.wallet.notFound = true; - }); - var error_translate = _this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND1'); - error_translate += ':
      ' + _this.wallet.path; - error_translate += _this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND2'); - _this.modalService.prepareModal('error', error_translate); - } - else { - if (open_status || open_error === 'FILE_RESTORED') { - var exists_1 = false; - _this.variablesService.wallets.forEach(function (wallet) { - if (wallet.address === open_data['wi'].address) { - exists_1 = true; - } - }); - if (exists_1) { - _this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN'); - _this.backend.closeWallet(open_data.wallet_id); - } - else { - var new_wallet_1 = new _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_2__["Wallet"](open_data.wallet_id, _this.wallet.name, _this.wallet.pass, open_data['wi'].path, open_data['wi'].address, open_data['wi'].balance, open_data['wi'].unlocked_balance, open_data['wi'].mined_total, open_data['wi'].tracking_hey); - new_wallet_1.alias = _this.backend.getWalletAlias(new_wallet_1.address); - new_wallet_1.is_auditable = open_data['wi'].is_auditable; - new_wallet_1.is_watch_only = open_data['wi'].is_watch_only; - new_wallet_1.currentPage = 1; - new_wallet_1.exclude_mining_txs = false; - if (open_data.recent_history && open_data.recent_history.history) { - new_wallet_1.total_history_item = open_data.recent_history.total_history_items; - new_wallet_1.totalPages = Math.ceil(open_data.recent_history.total_history_items / _this.variablesService.count); - new_wallet_1.totalPages > _this.variablesService.maxPages - ? new_wallet_1.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : new_wallet_1.pages = new Array(new_wallet_1.totalPages).fill(1).map(function (value, index) { return value + index; }); - new_wallet_1.prepareHistory(open_data.recent_history.history); - } - else { - new_wallet_1.total_history_item = 0; - new_wallet_1.pages = new Array(1).fill(1); - new_wallet_1.totalPages = 1; - } - _this.backend.getContracts(open_data.wallet_id, function (contracts_status, contracts_data) { - if (contracts_status && contracts_data.hasOwnProperty('contracts')) { - _this.ngZone.run(function () { - new_wallet_1.prepareContractsAfterOpen(contracts_data.contracts, _this.variablesService.exp_med_ts, _this.variablesService.height_app, _this.variablesService.settings.viewedContracts, _this.variablesService.settings.notViewedContracts); - }); - } - }); - _this.variablesService.wallets.push(new_wallet_1); - _this.backend.runWallet(open_data.wallet_id); - _this.skipWallet(); - } - } - } - }); - }; - OpenWalletModalComponent.prototype.skipWallet = function () { - var _this = this; - this.ngZone.run(function () { - if (_this.wallets.length) { - _this.wallets.splice(0, 1); - _this.ngOnInit(); - } - }); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", Object) - ], OpenWalletModalComponent.prototype, "wallets", void 0); - OpenWalletModalComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-open-wallet-modal', - template: __webpack_require__(/*! ./open-wallet-modal.component.html */ "./src/app/open-wallet-modal/open-wallet-modal.component.html"), - styles: [__webpack_require__(/*! ./open-wallet-modal.component.scss */ "./src/app/open-wallet-modal/open-wallet-modal.component.scss")] - }), - __metadata("design:paramtypes", [_helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_4__["TranslateService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], OpenWalletModalComponent); - return OpenWalletModalComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/open-wallet/open-wallet.component.html": -/*!********************************************************!*\ - !*** ./src/app/open-wallet/open-wallet.component.html ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\r\n {{ 'BREADCRUMBS.OPEN_WALLET' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'OPEN_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'OPEN_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\r\n
      \r\n
      \r\n
      = variablesService.maxWalletNameLength\">\r\n {{ 'OPEN_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n" - -/***/ }), - -/***/ "./src/app/open-wallet/open-wallet.component.scss": -/*!********************************************************!*\ - !*** ./src/app/open-wallet/open-wallet.component.scss ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-open {\n margin: 2.4rem 0;\n width: 50%; }\n .form-open .wrap-buttons {\n display: flex;\n margin: 2.5rem -0.7rem; }\n .form-open .wrap-buttons button {\n margin: 0 0.7rem; }\n .form-open .wrap-buttons button.create-button {\n flex: 1 1 50%; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvb3Blbi13YWxsZXQvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcb3Blbi13YWxsZXRcXG9wZW4td2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTtFQUZaO0lBS0ksYUFBYTtJQUNiLHNCQUFzQixFQUFBO0VBTjFCO01BU00sZ0JBQWdCLEVBQUE7RUFUdEI7UUFZUSxhQUFhLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9vcGVuLXdhbGxldC9vcGVuLXdhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLW9wZW4ge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcbiAgd2lkdGg6IDUwJTtcclxuXHJcbiAgLndyYXAtYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAyLjVyZW0gLTAuN3JlbTtcclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBtYXJnaW46IDAgMC43cmVtO1xyXG5cclxuICAgICAgJi5jcmVhdGUtYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAxIDEgNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/open-wallet/open-wallet.component.ts": -/*!******************************************************!*\ - !*** ./src/app/open-wallet/open-wallet.component.ts ***! - \******************************************************/ -/*! exports provided: OpenWalletComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OpenWalletComponent", function() { return OpenWalletComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/models/wallet.model */ "./src/app/_helpers/models/wallet.model.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var OpenWalletComponent = /** @class */ (function () { - function OpenWalletComponent(route, router, backend, variablesService, modalService, ngZone, translate) { - var _this = this; - this.route = route; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.translate = translate; - this.openForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, function (g) { - for (var i = 0; i < _this.variablesService.wallets.length; i++) { - if (g.value === _this.variablesService.wallets[i].name) { - return { 'duplicate': true }; - } - } - return null; - }]), - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('') - }); - } - OpenWalletComponent.prototype.ngOnInit = function () { - var _this = this; - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.path) { - _this.filePath = params.path; - var filename = ''; - if (params.path.lastIndexOf('.') === -1) { - filename = params.path.substr(params.path.lastIndexOf('/') + 1); - } - else { - filename = params.path.substr(params.path.lastIndexOf('/') + 1, params.path.lastIndexOf('.') - 1 - params.path.lastIndexOf('/')); - } - if (filename.length > 25) { - filename = filename.slice(0, 25); - } - _this.openForm.get('name').setValue(filename); - _this.openForm.get('name').markAsTouched(); - } - }); - }; - OpenWalletComponent.prototype.openWallet = function () { - var _this = this; - if (this.openForm.valid && this.openForm.get('name').value.length <= this.variablesService.maxWalletNameLength) { - this.backend.openWallet(this.filePath, this.openForm.get('password').value, this.variablesService.count, false, function (open_status, open_data, open_error) { - if (open_error && open_error === 'FILE_NOT_FOUND') { - var error_translate = _this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND1'); - error_translate += ':
      ' + _this.filePath; - error_translate += _this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND2'); - _this.modalService.prepareModal('error', error_translate); - } - else { - if (open_status || open_error === 'FILE_RESTORED') { - var exists_1 = false; - _this.variablesService.wallets.forEach(function (wallet) { - if (wallet.address === open_data['wi'].address) { - exists_1 = true; - } - }); - if (exists_1) { - _this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN'); - _this.backend.closeWallet(open_data.wallet_id, function () { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - }); - } - else { - var new_wallet_1 = new _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__["Wallet"](open_data.wallet_id, _this.openForm.get('name').value, _this.openForm.get('password').value, open_data['wi'].path, open_data['wi'].address, open_data['wi'].balance, open_data['wi'].unlocked_balance, open_data['wi'].mined_total, open_data['wi'].tracking_hey); - new_wallet_1.alias = _this.backend.getWalletAlias(new_wallet_1.address); - new_wallet_1.currentPage = 1; - new_wallet_1.open_from_exist = true; - new_wallet_1.exclude_mining_txs = false; - new_wallet_1.is_auditable = open_data['wi'].is_auditable; - new_wallet_1.is_watch_only = open_data['wi'].is_watch_only; - if (open_data.recent_history && open_data.recent_history.history) { - new_wallet_1.total_history_item = open_data.recent_history.total_history_items; - new_wallet_1.totalPages = Math.ceil(open_data.recent_history.total_history_items / _this.variablesService.count); - new_wallet_1.totalPages > _this.variablesService.maxPages - ? new_wallet_1.pages = new Array(5).fill(1).map(function (value, index) { return value + index; }) - : new_wallet_1.pages = new Array(new_wallet_1.totalPages).fill(1).map(function (value, index) { return value + index; }); - new_wallet_1.prepareHistory(open_data.recent_history.history); - } - else { - new_wallet_1.total_history_item = 0; - new_wallet_1.pages = new Array(1).fill(1); - new_wallet_1.totalPages = 1; - } - _this.backend.getContracts(open_data.wallet_id, function (contracts_status, contracts_data) { - if (contracts_status && contracts_data.hasOwnProperty('contracts')) { - _this.ngZone.run(function () { - new_wallet_1.prepareContractsAfterOpen(contracts_data.contracts, _this.variablesService.exp_med_ts, _this.variablesService.height_app, _this.variablesService.settings.viewedContracts, _this.variablesService.settings.notViewedContracts); - }); - } - }); - _this.variablesService.wallets.push(new_wallet_1); - _this.backend.runWallet(open_data.wallet_id, function (run_status, run_data) { - if (run_status) { - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(); - } - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + open_data.wallet_id]); - }); - } - else { - console.log(run_data['error_code']); - } - }); - } - } - } - }); - } - }; - OpenWalletComponent.prototype.ngOnDestroy = function () { - this.queryRouting.unsubscribe(); - }; - OpenWalletComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-open-wallet', - template: __webpack_require__(/*! ./open-wallet.component.html */ "./src/app/open-wallet/open-wallet.component.html"), - styles: [__webpack_require__(/*! ./open-wallet.component.scss */ "./src/app/open-wallet/open-wallet.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_5__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_5__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__["TranslateService"]]) - ], OpenWalletComponent); - return OpenWalletComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/purchase/purchase.component.html": -/*!**************************************************!*\ - !*** ./src/app/purchase/purchase.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n {{ 'BREADCRUMBS.CONTRACTS' | translate }}\r\n {{ 'BREADCRUMBS.NEW_PURCHASE' | translate }}\r\n {{ 'BREADCRUMBS.OLD_PURCHASE' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.DESC_REQUIRED' | translate }}\r\n
      \r\n
      \r\n
      = 100\">\r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.COMMENT_MAXIMUM' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      {{item.name}}
      \r\n
      \r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.SELLER_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.SELLER_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.SELLER_SAME' | translate }}\r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.ALIAS_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.AMOUNT_ZERO' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.YOUR_DEPOSIT_REQUIRED' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.SELLER_DEPOSIT_REQUIRED' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      = 100\">\r\n
      \r\n {{ 'PURCHASE.FORM_ERRORS.COMMENT_MAXIMUM' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n 1 {{ 'PURCHASE.HOUR' | translate }}\r\n \r\n {{title}} {{ 'PURCHASE.HOURS' | translate }}\r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n \r\n {{ 'PURCHASE.NEED_MONEY' | translate }}\r\n \r\n
      \r\n\r\n
      \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
      \r\n\r\n
      \r\n
      {{'PURCHASE.NULLIFY_QUESTION' | translate}}
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n
      {{ 'PURCHASE.WAITING_TIME_QUESTION' | translate }}
      \r\n \r\n
      \r\n \r\n 1 {{ 'PURCHASE.HOUR' | translate }}\r\n \r\n {{title}} {{ 'PURCHASE.HOURS' | translate }}\r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.NEW_PURCHASE' | translate }}\r\n \r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_SELLER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_SELLER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_DELIVERY' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_CANCEL_SELLER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.EXPIRED' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_SELLER' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_CONFIRMATION' | translate }}\r\n (0/10)\r\n ({{variablesService.height_app - currentContract.height}}/10)\r\n \r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.COMPLETED' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.NOT_RECEIVED' | translate }}. {{ 'PURCHASE.STATUS_MESSAGES.NULLIFIED' | translate }}\r\n \r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.PROPOSAL_CANCEL_SELLER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.CANCELLED' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.BEING_CANCELLED' | translate }}\r\n (0/10)\r\n ({{variablesService.height_app - currentContract.height}}/10)\r\n \r\n \r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_BUYER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_BUYER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_CANCEL_BUYER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.EXPIRED' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_DELIVERY' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_CONFIRMATION' | translate }}\r\n (0/10)\r\n ({{variablesService.height_app - currentContract.height}}/10)\r\n \r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.COMPLETED' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.NOT_RECEIVED' | translate }}. {{ 'PURCHASE.STATUS_MESSAGES.NULLIFIED' | translate }}\r\n \r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.PROPOSAL_CANCEL_BUYER' | translate }}\r\n\r\n {{ 'PURCHASE.STATUS_MESSAGES.CANCELLED' | translate }}\r\n\r\n \r\n {{ 'PURCHASE.STATUS_MESSAGES.BEING_CANCELLED' | translate }}\r\n (0/10)\r\n ({{variablesService.height_app - currentContract.height}}/10)\r\n \r\n \r\n\r\n
      \r\n
      \r\n {{currentContract.expiration_time | contractTimeLeft: 0}}\r\n {{currentContract.cancel_expiration_time | contractTimeLeft: 2}}\r\n {{currentContract.expiration_time | contractTimeLeft: 1}}\r\n {{currentContract.cancel_expiration_time | contractTimeLeft: 1}}\r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/purchase/purchase.component.scss": -/*!**************************************************!*\ - !*** ./src/app/purchase/purchase.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.head {\n flex: 0 0 auto;\n box-sizing: content-box;\n margin: -3rem -3rem 0; }\n\n.form-purchase {\n flex: 1 1 auto;\n margin: 1.5rem -3rem 0;\n padding: 0 3rem;\n overflow-y: overlay; }\n\n.form-purchase .input-blocks-row {\n display: flex; }\n\n.form-purchase .input-blocks-row .input-block {\n flex-basis: 50%; }\n\n.form-purchase .input-blocks-row .input-block:first-child {\n margin-right: 1.5rem; }\n\n.form-purchase .input-blocks-row .input-block:last-child {\n margin-left: 1.5rem; }\n\n.form-purchase .input-blocks-row .input-block .checkbox-block {\n display: flex; }\n\n.form-purchase .purchase-select {\n display: flex;\n align-items: center;\n background: transparent;\n border: none;\n font-size: 1.3rem;\n line-height: 1.3rem;\n margin: 1.5rem 0 0;\n padding: 0;\n width: 100%;\n max-width: 15rem;\n height: 1.3rem; }\n\n.form-purchase .purchase-select .arrow {\n margin-left: 1rem;\n width: 0.8rem;\n height: 0.8rem; }\n\n.form-purchase .purchase-select .arrow.down {\n -webkit-mask: url('arrow-down.svg') no-repeat center;\n mask: url('arrow-down.svg') no-repeat center; }\n\n.form-purchase .purchase-select .arrow.up {\n -webkit-mask: url('arrow-up.svg') no-repeat center;\n mask: url('arrow-up.svg') no-repeat center; }\n\n.form-purchase .additional-details {\n display: flex;\n margin-top: 1.5rem;\n padding: 0.5rem 0 2rem; }\n\n.form-purchase .additional-details > div {\n flex-basis: 25%; }\n\n.form-purchase .additional-details > div:first-child {\n padding-left: 1.5rem;\n padding-right: 1rem; }\n\n.form-purchase .additional-details > div:last-child {\n padding-left: 1rem;\n padding-right: 1.5rem; }\n\n.form-purchase .purchase-states {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n line-height: 2.9rem; }\n\n.form-purchase .send-button {\n margin: 2.4rem 0;\n width: 100%;\n max-width: 15rem; }\n\n.form-purchase .purchase-buttons {\n display: flex;\n justify-content: flex-start;\n margin: 2.4rem -0.5rem; }\n\n.form-purchase .purchase-buttons button {\n flex: 0 1 33%;\n margin: 0 0.5rem; }\n\n.form-purchase .nullify-block-row {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center; }\n\n.form-purchase .nullify-block-row .nullify-block-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 1rem 0;\n width: 100%; }\n\n.form-purchase .nullify-block-row .nullify-block-buttons button {\n flex: 0 1 25%;\n margin: 0 0.5rem; }\n\n.form-purchase .time-cancel-block-row {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center; }\n\n.form-purchase .time-cancel-block-row .time-cancel-block-question {\n margin-bottom: 1rem; }\n\n.form-purchase .time-cancel-block-row .input-block {\n width: 25%; }\n\n.form-purchase .time-cancel-block-row label {\n margin-bottom: 1rem; }\n\n.form-purchase .time-cancel-block-row .time-cancel-block-buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 1rem 0;\n width: 100%; }\n\n.form-purchase .time-cancel-block-row .time-cancel-block-buttons button {\n flex: 0 1 25%;\n margin: 0 0.5rem; }\n\n.progress-bar-container {\n position: absolute;\n bottom: 0;\n left: 0;\n padding: 0 3rem;\n width: 100%;\n height: 3rem; }\n\n.progress-bar-container .progress-bar {\n position: absolute;\n top: -0.7rem;\n left: 0;\n margin: 0 3rem;\n width: calc(100% - 6rem);\n height: 0.7rem; }\n\n.progress-bar-container .progress-bar .progress-bar-full {\n height: 0.7rem; }\n\n.progress-bar-container .progress-labels {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n height: 100%; }\n\n.progress-bar-container .progress-time {\n position: absolute;\n top: -3rem;\n left: 50%;\n transform: translateX(-50%);\n font-size: 1.2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcHVyY2hhc2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxccHVyY2hhc2VcXHB1cmNoYXNlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxjQUFjO0VBQ2QsdUJBQXVCO0VBQ3ZCLHFCQUFxQixFQUFBOztBQUd2QjtFQUNFLGNBQWM7RUFDZCxzQkFBc0I7RUFDdEIsZUFBZTtFQUNmLG1CQUFtQixFQUFBOztBQUpyQjtJQU9JLGFBQWEsRUFBQTs7QUFQakI7TUFVTSxlQUFlLEVBQUE7O0FBVnJCO1FBYVEsb0JBQW9CLEVBQUE7O0FBYjVCO1FBaUJRLG1CQUFtQixFQUFBOztBQWpCM0I7UUFxQlEsYUFBYSxFQUFBOztBQXJCckI7SUEyQkksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGNBQWMsRUFBQTs7QUFyQ2xCO01Bd0NNLGlCQUFpQjtNQUNqQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQTFDcEI7UUE2Q1Esb0RBQTREO2dCQUE1RCw0Q0FBNEQsRUFBQTs7QUE3Q3BFO1FBaURRLGtEQUEwRDtnQkFBMUQsMENBQTBELEVBQUE7O0FBakRsRTtJQXVESSxhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLHNCQUFzQixFQUFBOztBQXpEMUI7TUE0RE0sZUFBZSxFQUFBOztBQTVEckI7UUErRFEsb0JBQW9CO1FBQ3BCLG1CQUFtQixFQUFBOztBQWhFM0I7UUFvRVEsa0JBQWtCO1FBQ2xCLHFCQUFxQixFQUFBOztBQXJFN0I7SUEyRUksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBQTs7QUFoRnZCO0lBb0ZJLGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsZ0JBQWdCLEVBQUE7O0FBdEZwQjtJQTBGSSxhQUFhO0lBQ2IsMkJBQTJCO0lBQzNCLHNCQUFzQixFQUFBOztBQTVGMUI7TUErRk0sYUFBYTtNQUNiLGdCQUFnQixFQUFBOztBQWhHdEI7SUFxR0ksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUE7O0FBeEczQjtNQTJHTSxhQUFhO01BQ2IsbUJBQW1CO01BQ25CLHVCQUF1QjtNQUN2QixjQUFjO01BQ2QsV0FBVyxFQUFBOztBQS9HakI7UUFrSFEsYUFBYTtRQUNiLGdCQUFnQixFQUFBOztBQW5IeEI7SUF5SEksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUE7O0FBNUgzQjtNQStITSxtQkFBbUIsRUFBQTs7QUEvSHpCO01BbUlNLFVBQVUsRUFBQTs7QUFuSWhCO01BdUlNLG1CQUFtQixFQUFBOztBQXZJekI7TUEySU0sYUFBYTtNQUNiLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsY0FBYztNQUNkLFdBQVcsRUFBQTs7QUEvSWpCO1FBa0pRLGFBQWE7UUFDYixnQkFBZ0IsRUFBQTs7QUFPeEI7RUFDRSxrQkFBa0I7RUFDbEIsU0FBUztFQUNULE9BQU87RUFDUCxlQUFlO0VBQ2YsV0FBVztFQUNYLFlBQVksRUFBQTs7QUFOZDtJQVNJLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osT0FBTztJQUNQLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsY0FBYyxFQUFBOztBQWRsQjtNQWlCTSxjQUFjLEVBQUE7O0FBakJwQjtJQXNCSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixpQkFBaUI7SUFDakIsWUFBWSxFQUFBOztBQTFCaEI7SUE4Qkksa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLGlCQUFpQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvcHVyY2hhc2UvcHVyY2hhc2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZCB7XHJcbiAgZmxleDogMCAwIGF1dG87XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgbWFyZ2luOiAtM3JlbSAtM3JlbSAwO1xyXG59XHJcblxyXG4uZm9ybS1wdXJjaGFzZSB7XHJcbiAgZmxleDogMSAxIGF1dG87XHJcbiAgbWFyZ2luOiAxLjVyZW0gLTNyZW0gMDtcclxuICBwYWRkaW5nOiAwIDNyZW07XHJcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcclxuXHJcbiAgLmlucHV0LWJsb2Nrcy1yb3cge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcblxyXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMS41cmVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuY2hlY2tib3gtYmxvY2sge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wdXJjaGFzZS1zZWxlY3Qge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogMS41cmVtIDAgMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICBoZWlnaHQ6IDEuM3JlbTtcclxuXHJcbiAgICAuYXJyb3cge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICAgICAgd2lkdGg6IDAuOHJlbTtcclxuICAgICAgaGVpZ2h0OiAwLjhyZW07XHJcblxyXG4gICAgICAmLmRvd24ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1kb3duLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi51cCB7XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Fycm93LXVwLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZGl0aW9uYWwtZGV0YWlscyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMS41cmVtO1xyXG4gICAgcGFkZGluZzogMC41cmVtIDAgMnJlbTtcclxuXHJcbiAgICA+IGRpdiB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDI1JTtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnB1cmNoYXNlLXN0YXRlcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuOXJlbTtcclxuICB9XHJcblxyXG4gIC5zZW5kLWJ1dHRvbiB7XHJcbiAgICBtYXJnaW46IDIuNHJlbSAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gIH1cclxuXHJcbiAgLnB1cmNoYXNlLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIG1hcmdpbjogMi40cmVtIC0wLjVyZW07XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgZmxleDogMCAxIDMzJTtcclxuICAgICAgbWFyZ2luOiAwIDAuNXJlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5udWxsaWZ5LWJsb2NrLXJvdyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHJcbiAgICAubnVsbGlmeS1ibG9jay1idXR0b25zIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbjogMXJlbSAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgZmxleDogMCAxIDI1JTtcclxuICAgICAgICBtYXJnaW46IDAgMC41cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGltZS1jYW5jZWwtYmxvY2stcm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG5cclxuICAgIC50aW1lLWNhbmNlbC1ibG9jay1xdWVzdGlvbiB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LWJsb2NrIHtcclxuICAgICAgd2lkdGg6IDI1JTtcclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLnRpbWUtY2FuY2VsLWJsb2NrLWJ1dHRvbnMge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luOiAxcmVtIDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICAgYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAwIDEgMjUlO1xyXG4gICAgICAgIG1hcmdpbjogMCAwLjVyZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG4ucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHBhZGRpbmc6IDAgM3JlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDNyZW07XHJcblxyXG4gIC5wcm9ncmVzcy1iYXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtMC43cmVtO1xyXG4gICAgbGVmdDogMDtcclxuICAgIG1hcmdpbjogMCAzcmVtO1xyXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDZyZW0pO1xyXG4gICAgaGVpZ2h0OiAwLjdyZW07XHJcblxyXG4gICAgLnByb2dyZXNzLWJhci1mdWxsIHtcclxuICAgICAgaGVpZ2h0OiAwLjdyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucHJvZ3Jlc3MtbGFiZWxzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy10aW1lIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTNyZW07XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/purchase/purchase.component.ts": -/*!************************************************!*\ - !*** ./src/app/purchase/purchase.component.ts ***! - \************************************************/ -/*! exports provided: PurchaseComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PurchaseComponent", function() { return PurchaseComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var PurchaseComponent = /** @class */ (function () { - function PurchaseComponent(route, backend, variablesService, modalService, ngZone, location, intToMoneyPipe) { - var _this = this; - this.route = route; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.location = location; - this.intToMoneyPipe = intToMoneyPipe; - this.isOpen = false; - this.localAliases = []; - this.newPurchase = false; - this.purchaseForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormGroup"]({ - description: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required), - seller: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]('', [_angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required, function (g) { - if (g.value === _this.variablesService.currentWallet.address) { - return { 'address_same': true }; - } - return null; - }, function (g) { - _this.localAliases = []; - if (g.value) { - if (g.value.indexOf('@') !== 0) { - _this.isOpen = false; - _this.backend.validateAddress(g.value, function (valid_status) { - _this.ngZone.run(function () { - if (valid_status === false) { - g.setErrors(Object.assign({ 'address_not_valid': true }, g.errors)); - } - else { - if (g.hasError('address_not_valid')) { - delete g.errors['address_not_valid']; - if (Object.keys(g.errors).length === 0) { - g.setErrors(null); - } - } - } - }); - }); - return (g.hasError('address_not_valid')) ? { 'address_not_valid': true } : null; - } - else { - _this.isOpen = true; - _this.localAliases = _this.variablesService.aliases.filter(function (item) { - return item.name.indexOf(g.value) > -1; - }); - if (!(/^@?[a-z0-9\.\-]{6,25}$/.test(g.value))) { - g.setErrors(Object.assign({ 'alias_not_valid': true }, g.errors)); - } - else { - _this.backend.getAliasByName(g.value.replace('@', ''), function (alias_status, alias_data) { - _this.ngZone.run(function () { - if (alias_status) { - if (alias_data.address === _this.variablesService.currentWallet.address) { - g.setErrors(Object.assign({ 'address_same': true }, g.errors)); - } - if (g.hasError('alias_not_valid')) { - delete g.errors['alias_not_valid']; - if (Object.keys(g.errors).length === 0) { - g.setErrors(null); - } - } - } - else { - g.setErrors(Object.assign({ 'alias_not_valid': true }, g.errors)); - } - }); - }); - } - return (g.hasError('alias_not_valid')) ? { 'alias_not_valid': true } : null; - } - } - return null; - }]), - amount: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"](null, [_angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required, function (g) { - if (parseFloat(g.value) === 0) { - return { 'amount_zero': true }; - } - return null; - }]), - yourDeposit: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"](null, _angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required), - sellerDeposit: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"](null, _angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required), - sameAmount: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]({ value: false, disabled: false }), - comment: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"](''), - fee: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"](this.variablesService.default_fee), - time: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]({ value: 12, disabled: false }), - timeCancel: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]({ value: 12, disabled: false }), - payment: new _angular_forms__WEBPACK_IMPORTED_MODULE_2__["FormControl"]('') - }); - this.additionalOptions = false; - this.currentContract = null; - this.showTimeSelect = false; - this.showNullify = false; - } - PurchaseComponent.prototype.checkAndChangeHistory = function () { - var _this = this; - if (this.currentContract.state === 201) { - this.historyBlock = this.variablesService.currentWallet.history.find(function (item) { return item.tx_type === 8 && item.contract[0].contract_id === _this.currentContract.contract_id && item.contract[0].is_a === _this.currentContract.is_a; }); - } - else if (this.currentContract.state === 601) { - this.historyBlock = this.variablesService.currentWallet.history.find(function (item) { return item.tx_type === 12 && item.contract[0].contract_id === _this.currentContract.contract_id && item.contract[0].is_a === _this.currentContract.is_a; }); - } - }; - PurchaseComponent.prototype.addressMouseDown = function (e) { - if (e['button'] === 0 && this.purchaseForm.get('seller').value && this.purchaseForm.get('seller').value.indexOf('@') === 0) { - this.isOpen = true; - } - }; - PurchaseComponent.prototype.setAlias = function (alias) { - this.purchaseForm.get('seller').setValue(alias); - }; - PurchaseComponent.prototype.onClick = function (targetElement) { - if (targetElement.id !== 'purchase-seller' && this.isOpen) { - this.isOpen = false; - } - }; - PurchaseComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function (params) { - _this.currentWalletId = params['id']; - }); - this.subRouting = this.route.params.subscribe(function (params) { - if (params.hasOwnProperty('id')) { - _this.currentContract = _this.variablesService.currentWallet.getContract(params['id']); - _this.purchaseForm.controls['seller'].setValidators([]); - _this.purchaseForm.updateValueAndValidity(); - _this.purchaseForm.setValue({ - description: _this.currentContract.private_detailes.t, - seller: _this.currentContract.private_detailes.b_addr, - amount: _this.intToMoneyPipe.transform(_this.currentContract.private_detailes.to_pay), - yourDeposit: _this.intToMoneyPipe.transform(_this.currentContract.private_detailes.a_pledge), - sellerDeposit: _this.intToMoneyPipe.transform(_this.currentContract.private_detailes.b_pledge), - sameAmount: _this.currentContract.private_detailes.to_pay.isEqualTo(_this.currentContract.private_detailes.b_pledge), - comment: _this.currentContract.private_detailes.c, - fee: _this.variablesService.default_fee, - time: 12, - timeCancel: 12, - payment: _this.currentContract.payment_id - }); - _this.purchaseForm.get('sameAmount').disable(); - _this.newPurchase = false; - if (_this.currentContract.is_new) { - if (_this.currentContract.is_a && _this.currentContract.state === 2) { - _this.currentContract.state = 120; - } - if (_this.currentContract.state === 130 && _this.currentContract.cancel_expiration_time !== 0 && _this.currentContract.cancel_expiration_time < _this.variablesService.exp_med_ts) { - _this.currentContract.state = 2; - } - _this.variablesService.settings.viewedContracts = (_this.variablesService.settings.viewedContracts) ? _this.variablesService.settings.viewedContracts : []; - var findViewedCont = false; - for (var j = 0; j < _this.variablesService.settings.viewedContracts.length; j++) { - if (_this.variablesService.settings.viewedContracts[j].contract_id === _this.currentContract.contract_id && _this.variablesService.settings.viewedContracts[j].is_a === _this.currentContract.is_a) { - _this.variablesService.settings.viewedContracts[j].state = _this.currentContract.state; - findViewedCont = true; - break; - } - } - if (!findViewedCont) { - _this.variablesService.settings.viewedContracts.push({ - contract_id: _this.currentContract.contract_id, - is_a: _this.currentContract.is_a, - state: _this.currentContract.state - }); - } - _this.currentContract.is_new = false; - setTimeout(function () { - _this.variablesService.currentWallet.recountNewContracts(); - }, 0); - } - _this.checkAndChangeHistory(); - } - else { - _this.newPurchase = true; - } - }); - this.heightAppEvent = this.variablesService.getHeightAppEvent.subscribe(function (newHeight) { - if (_this.currentContract && _this.currentContract.state === 201 && _this.currentContract.height !== 0 && (newHeight - _this.currentContract.height) >= 10) { - _this.currentContract.state = 2; - _this.currentContract.is_new = true; - _this.variablesService.currentWallet.recountNewContracts(); - } - else if (_this.currentContract && _this.currentContract.state === 601 && _this.currentContract.height !== 0 && (newHeight - _this.currentContract.height) >= 10) { - _this.currentContract.state = 6; - _this.currentContract.is_new = true; - _this.variablesService.currentWallet.recountNewContracts(); - } - }); - }; - PurchaseComponent.prototype.toggleOptions = function () { - this.additionalOptions = !this.additionalOptions; - }; - PurchaseComponent.prototype.getProgressBarWidth = function () { - var progress = '0'; - if (!this.newPurchase) { - if (this.currentContract) { - if (this.currentContract.state === 1) { - progress = '10%'; - } - if (this.currentContract.state === 201) { - progress = '25%'; - } - if ([120, 2].indexOf(this.currentContract.state) !== -1) { - progress = '50%'; - } - if ([5, 601].indexOf(this.currentContract.state) !== -1) { - progress = '75%'; - } - if ([110, 130, 140, 3, 4, 6].indexOf(this.currentContract.state) !== -1) { - progress = '100%'; - } - } - } - return progress; - }; - PurchaseComponent.prototype.sameAmountChange = function () { - if (this.purchaseForm.get('sameAmount').value) { - this.purchaseForm.get('sellerDeposit').clearValidators(); - this.purchaseForm.get('sellerDeposit').updateValueAndValidity(); - } - else { - this.purchaseForm.get('sellerDeposit').setValidators([_angular_forms__WEBPACK_IMPORTED_MODULE_2__["Validators"].required]); - this.purchaseForm.get('sellerDeposit').updateValueAndValidity(); - } - }; - PurchaseComponent.prototype.createPurchase = function () { - var _this = this; - if (this.purchaseForm.valid) { - var sellerDeposit_1 = this.purchaseForm.get('sameAmount').value ? this.purchaseForm.get('amount').value : this.purchaseForm.get('sellerDeposit').value; - if (this.purchaseForm.get('seller').value.indexOf('@') !== 0) { - this.backend.createProposal(this.variablesService.currentWallet.wallet_id, this.purchaseForm.get('description').value, this.purchaseForm.get('comment').value, this.variablesService.currentWallet.address, this.purchaseForm.get('seller').value, this.purchaseForm.get('amount').value, this.purchaseForm.get('yourDeposit').value, sellerDeposit_1, this.purchaseForm.get('time').value, this.purchaseForm.get('payment').value, function (create_status) { - if (create_status) { - _this.back(); - } - }); - } - else { - this.backend.getAliasByName(this.purchaseForm.get('seller').value.replace('@', ''), function (alias_status, alias_data) { - _this.ngZone.run(function () { - if (alias_status === false) { - _this.ngZone.run(function () { - _this.purchaseForm.get('seller').setErrors({ 'alias_not_valid': true }); - }); - } - else { - _this.backend.createProposal(_this.variablesService.currentWallet.wallet_id, _this.purchaseForm.get('description').value, _this.purchaseForm.get('comment').value, _this.variablesService.currentWallet.address, alias_data.address, _this.purchaseForm.get('amount').value, _this.purchaseForm.get('yourDeposit').value, sellerDeposit_1, _this.purchaseForm.get('time').value, _this.purchaseForm.get('payment').value, function (create_status) { - if (create_status) { - _this.back(); - } - }); - } - }); - }); - } - } - }; - PurchaseComponent.prototype.back = function () { - this.location.back(); - }; - PurchaseComponent.prototype.acceptState = function () { - var _this = this; - this.backend.acceptProposal(this.currentWalletId, this.currentContract.contract_id, function (accept_status) { - if (accept_status) { - _this.modalService.prepareModal('info', 'PURCHASE.ACCEPT_STATE_WAIT_BIG'); - _this.back(); - } - }); - }; - PurchaseComponent.prototype.ignoredContract = function () { - this.variablesService.settings.notViewedContracts = (this.variablesService.settings.notViewedContracts) ? this.variablesService.settings.notViewedContracts : []; - var findViewedCont = false; - for (var j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) { - if (this.variablesService.settings.notViewedContracts[j].contract_id === this.currentContract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === this.currentContract.is_a) { - this.variablesService.settings.notViewedContracts[j].state = 110; - this.variablesService.settings.notViewedContracts[j].time = this.currentContract.expiration_time; - findViewedCont = true; - break; - } - } - if (!findViewedCont) { - this.variablesService.settings.notViewedContracts.push({ - contract_id: this.currentContract.contract_id, - is_a: this.currentContract.is_a, - state: 110, - time: this.currentContract.expiration_time - }); - } - this.currentContract.is_new = true; - this.currentContract.state = 110; - this.currentContract.time = this.currentContract.expiration_time; - this.variablesService.currentWallet.recountNewContracts(); - this.modalService.prepareModal('info', 'PURCHASE.IGNORED_ACCEPT'); - this.back(); - }; - PurchaseComponent.prototype.productNotGot = function () { - var _this = this; - this.backend.releaseProposal(this.currentWalletId, this.currentContract.contract_id, 'REL_B', function (release_status) { - if (release_status) { - _this.modalService.prepareModal('info', 'PURCHASE.BURN_PROPOSAL'); - _this.back(); - } - }); - }; - PurchaseComponent.prototype.dealsDetailsFinish = function () { - var _this = this; - this.backend.releaseProposal(this.currentWalletId, this.currentContract.contract_id, 'REL_N', function (release_status) { - if (release_status) { - _this.modalService.prepareModal('success', 'PURCHASE.SUCCESS_FINISH_PROPOSAL'); - _this.back(); - } - }); - }; - PurchaseComponent.prototype.dealsDetailsCancel = function () { - var _this = this; - this.backend.requestCancelContract(this.currentWalletId, this.currentContract.contract_id, this.purchaseForm.get('timeCancel').value, function (cancel_status) { - if (cancel_status) { - _this.modalService.prepareModal('info', 'PURCHASE.SEND_CANCEL_PROPOSAL'); - _this.back(); - } - }); - }; - PurchaseComponent.prototype.dealsDetailsDontCanceling = function () { - this.variablesService.settings.notViewedContracts = this.variablesService.settings.notViewedContracts ? this.variablesService.settings.notViewedContracts : []; - var findViewedCont = false; - for (var j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) { - if (this.variablesService.settings.notViewedContracts[j].contract_id === this.currentContract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === this.currentContract.is_a) { - this.variablesService.settings.notViewedContracts[j].state = 130; - this.variablesService.settings.notViewedContracts[j].time = this.currentContract.cancel_expiration_time; - findViewedCont = true; - break; - } - } - if (!findViewedCont) { - this.variablesService.settings.notViewedContracts.push({ - contract_id: this.currentContract.contract_id, - is_a: this.currentContract.is_a, - state: 130, - time: this.currentContract.cancel_expiration_time - }); - } - this.currentContract.is_new = true; - this.currentContract.state = 130; - this.currentContract.time = this.currentContract.cancel_expiration_time; - this.variablesService.currentWallet.recountNewContracts(); - this.modalService.prepareModal('info', 'PURCHASE.IGNORED_CANCEL'); - this.back(); - }; - PurchaseComponent.prototype.dealsDetailsSellerCancel = function () { - var _this = this; - this.backend.acceptCancelContract(this.currentWalletId, this.currentContract.contract_id, function (accept_status) { - if (accept_status) { - _this.modalService.prepareModal('info', 'PURCHASE.DEALS_CANCELED_WAIT'); - _this.back(); - } - }); - }; - PurchaseComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - this.subRouting.unsubscribe(); - this.heightAppEvent.unsubscribe(); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('document:click', ['$event.target']), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) - ], PurchaseComponent.prototype, "onClick", null); - PurchaseComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-purchase', - template: __webpack_require__(/*! ./purchase.component.html */ "./src/app/purchase/purchase.component.html"), - styles: [__webpack_require__(/*! ./purchase.component.scss */ "./src/app/purchase/purchase.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _angular_common__WEBPACK_IMPORTED_MODULE_6__["Location"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_7__["IntToMoneyPipe"]]) - ], PurchaseComponent); - return PurchaseComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/receive/receive.component.html": -/*!************************************************!*\ - !*** ./src/app/receive/receive.component.html ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n \"qr-code\"\r\n
      \r\n
      {{variablesService.currentWallet.address}}
      \r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/receive/receive.component.scss": -/*!************************************************!*\ - !*** ./src/app/receive/receive.component.scss ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.wrap-qr {\n display: flex;\n flex-direction: column;\n align-items: center; }\n\n.wrap-qr img {\n margin: 4rem 0; }\n\n.wrap-qr .wrap-address {\n display: flex;\n align-items: center;\n font-size: 1.4rem;\n line-height: 2.7rem; }\n\n.wrap-qr .wrap-address .btn-copy-address {\n margin-left: 1.2rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.wrap-qr .wrap-address .btn-copy-address.copy {\n -webkit-mask: url('copy.svg') no-repeat center;\n mask: url('copy.svg') no-repeat center; }\n\n.wrap-qr .wrap-address .btn-copy-address.copy:hover {\n opacity: 0.75; }\n\n.wrap-qr .wrap-address .btn-copy-address.copied {\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\n mask: url('complete-testwallet.svg') no-repeat center; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcmVjZWl2ZS9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxyZWNlaXZlXFxyZWNlaXZlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixtQkFBbUIsRUFBQTs7QUFIckI7SUFNSSxjQUFjLEVBQUE7O0FBTmxCO0lBVUksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUE7O0FBYnZCO01BZ0JNLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQWxCcEI7UUFxQlEsOENBQXVEO2dCQUF2RCxzQ0FBdUQsRUFBQTs7QUFyQi9EO1VBd0JVLGFBQWEsRUFBQTs7QUF4QnZCO1FBNkJRLDZEQUFzRTtnQkFBdEUscURBQXNFLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9yZWNlaXZlL3JlY2VpdmUuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi53cmFwLXFyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgaW1nIHtcclxuICAgIG1hcmdpbjogNHJlbSAwO1xyXG4gIH1cclxuXHJcbiAgLndyYXAtYWRkcmVzcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuXHJcbiAgICAuYnRuLWNvcHktYWRkcmVzcyB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5jb3B5IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2NvcHkuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNzU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmNvcGllZCB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9jb21wbGV0ZS10ZXN0d2FsbGV0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/receive/receive.component.ts": -/*!**********************************************!*\ - !*** ./src/app/receive/receive.component.ts ***! - \**********************************************/ -/*! exports provided: ReceiveComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReceiveComponent", function() { return ReceiveComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var qrcode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js"); -/* harmony import */ var qrcode__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(qrcode__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var ReceiveComponent = /** @class */ (function () { - function ReceiveComponent(route, backend, variablesService) { - this.route = route; - this.backend = backend; - this.variablesService = variablesService; - this.copyAnimation = false; - } - ReceiveComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function () { - qrcode__WEBPACK_IMPORTED_MODULE_1___default.a.toDataURL(_this.variablesService.currentWallet.address, { - width: 106 * _shared_constants__WEBPACK_IMPORTED_MODULE_5__["RCV_ADDR_QR_SCALE"], - height: 106 * _shared_constants__WEBPACK_IMPORTED_MODULE_5__["RCV_ADDR_QR_SCALE"] - }).then(function (url) { - _this.qrImageSrc = url; - }).catch(function (err) { - console.error(err); - }); - }); - }; - ReceiveComponent.prototype.copyAddress = function () { - var _this = this; - this.backend.setClipboard(this.variablesService.currentWallet.address); - this.copyAnimation = true; - this.copyAnimationTimeout = window.setTimeout(function () { - _this.copyAnimation = false; - }, 2000); - }; - ReceiveComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - clearTimeout(this.copyAnimationTimeout); - }; - ReceiveComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-receive', - template: __webpack_require__(/*! ./receive.component.html */ "./src/app/receive/receive.component.html"), - styles: [__webpack_require__(/*! ./receive.component.scss */ "./src/app/receive/receive.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_4__["ActivatedRoute"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"]]) - ], ReceiveComponent); - return ReceiveComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/restore-wallet/restore-wallet.component.html": -/*!**************************************************************!*\ - !*** ./src/app/restore-wallet/restore-wallet.component.html ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\r\n {{ 'BREADCRUMBS.RESTORE_WALLET' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\r\n
      \r\n
      \r\n
      = variablesService.maxWalletNameLength\">\r\n {{ 'RESTORE_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.KEY_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.KEY_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n {{ 'RESTORE_WALLET.FORM_ERRORS.INCORRECT_PASSWORD' | translate }}\r\n
      \r\n
      \r\n {{ 'RESTORE_WALLET.OK' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/restore-wallet/restore-wallet.component.scss": -/*!**************************************************************!*\ - !*** ./src/app/restore-wallet/restore-wallet.component.scss ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: relative; }\n\n.form-restore {\n margin: 2.4rem 0;\n width: 100%; }\n\n.form-restore .input-block.half-block {\n width: 50%; }\n\n.form-restore .wrap-buttons {\n display: flex;\n margin: 2.5rem -0.7rem;\n width: 50%; }\n\n.form-restore .wrap-buttons button {\n margin: 0 0.7rem; }\n\n.form-restore .wrap-buttons button.transparent-button {\n flex-basis: 50%; }\n\n.form-restore .wrap-buttons button.select-button {\n flex-basis: 60%; }\n\n.form-restore .wrap-buttons button.create-button {\n flex: 1 1 50%; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcmVzdG9yZS13YWxsZXQvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxccmVzdG9yZS13YWxsZXRcXHJlc3RvcmUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVcsRUFBQTs7QUFGYjtJQU9NLFVBQVUsRUFBQTs7QUFQaEI7SUFZSSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLFVBQVUsRUFBQTs7QUFkZDtNQWlCTSxnQkFBZ0IsRUFBQTs7QUFqQnRCO1FBb0JRLGVBQWUsRUFBQTs7QUFwQnZCO1FBd0JRLGVBQWUsRUFBQTs7QUF4QnZCO1FBNEJRLGFBQWEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3Jlc3RvcmUtd2FsbGV0L3Jlc3RvcmUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmZvcm0tcmVzdG9yZSB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgLmlucHV0LWJsb2NrIHtcclxuXHJcbiAgICAmLmhhbGYtYmxvY2sge1xyXG4gICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLndyYXAtYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAyLjVyZW0gLTAuN3JlbTtcclxuICAgIHdpZHRoOiA1MCU7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgbWFyZ2luOiAwIDAuN3JlbTtcclxuXHJcbiAgICAgICYudHJhbnNwYXJlbnQtYnV0dG9uIHtcclxuICAgICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuc2VsZWN0LWJ1dHRvbiB7XHJcbiAgICAgICAgZmxleC1iYXNpczogNjAlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmNyZWF0ZS1idXR0b24ge1xyXG4gICAgICAgIGZsZXg6IDEgMSA1MCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/restore-wallet/restore-wallet.component.ts": -/*!************************************************************!*\ - !*** ./src/app/restore-wallet/restore-wallet.component.ts ***! - \************************************************************/ -/*! exports provided: RestoreWalletComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RestoreWalletComponent", function() { return RestoreWalletComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/models/wallet.model */ "./src/app/_helpers/models/wallet.model.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var rxjs_internal_Subject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rxjs/internal/Subject */ "./node_modules/rxjs/internal/Subject.js"); -/* harmony import */ var rxjs_internal_Subject__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(rxjs_internal_Subject__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - - - -var RestoreWalletComponent = /** @class */ (function () { - function RestoreWalletComponent(router, backend, variablesService, modalService, ngZone, translate) { - var _this = this; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.translate = translate; - this.restoreForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [ - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, - function (g) { - for (var i = 0; i < _this.variablesService.wallets.length; i++) { - if (g.value === _this.variablesService.wallets[i].name) { - return { duplicate: true }; - } - } - return null; - }, - ]), - key: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - confirm: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](''), - seedPassword: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - }, function (g) { - return g.get('password').value === g.get('confirm').value - ? null - : { confirm_mismatch: true }; - }); - this.wallet = { - id: '', - }; - this.walletSaved = false; - this.walletSavedName = ''; - this.progressWidth = '9rem'; - this.seedPhraseInfo = null; - this.unsubscribeAll = new rxjs_internal_Subject__WEBPACK_IMPORTED_MODULE_8__["Subject"](); - } - RestoreWalletComponent.prototype.ngOnInit = function () { - this.checkValidSeedPhrasePassword(); - this.changeDetectionSeedPhrasePassword(); - }; - RestoreWalletComponent.prototype.ngOnDestroy = function () { - this.unsubscribeAll.next(true); - this.unsubscribeAll.complete(); - }; - RestoreWalletComponent.prototype.changeDetectionSeedPhrasePassword = function () { - var _this = this; - this.restoreForm.controls.seedPassword.valueChanges - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["startWith"])(null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["pairwise"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["takeUntil"])(this.unsubscribeAll)) - .subscribe(function () { - _this.checkValidSeedPhrasePassword(); - }); - this.restoreForm.controls.key.valueChanges - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["startWith"])(null), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["pairwise"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["takeUntil"])(this.unsubscribeAll)) - .subscribe(function () { - _this.checkValidSeedPhrasePassword(); - }); - }; - RestoreWalletComponent.prototype.checkValidSeedPhrasePassword = function () { - var _this = this; - var seed_password = this.restoreForm.controls.seedPassword.value; - var seed_phrase = this.restoreForm.controls.key.value; - this.backend.getSeedPhraseInfo({ seed_phrase: seed_phrase, seed_password: seed_password }, function (status, data) { - _this.ngZone.run(function () { - _this.seedPhraseInfo = data; - }); - }); - }; - RestoreWalletComponent.prototype.createWallet = function () { - var _this = this; - this.ngZone.run(function () { - _this.progressWidth = '100%'; - _this.runWallet(); - }); - }; - RestoreWalletComponent.prototype.saveWallet = function () { - var _this = this; - if (this.restoreForm.valid && - this.restoreForm.get('name').value.length <= - this.variablesService.maxWalletNameLength) { - this.backend.isValidRestoreWalletText({ - seed_phrase: this.restoreForm.get('key').value, - seed_password: this.restoreForm.get('seedPassword').value, - }, function (valid_status, valid_data) { - if (valid_data !== 'TRUE') { - _this.ngZone.run(function () { - _this.restoreForm.get('key').setErrors({ key_not_valid: true }); - }); - } - else { - _this.backend.saveFileDialog(_this.translate.instant('RESTORE_WALLET.CHOOSE_PATH'), '*', _this.variablesService.settings.default_path, function (save_status, save_data) { - if (save_status) { - _this.variablesService.settings.default_path = save_data.path.substr(0, save_data.path.lastIndexOf('/')); - _this.walletSavedName = save_data.path.substr(save_data.path.lastIndexOf('/') + 1, save_data.path.length - 1); - _this.backend.restoreWallet(save_data.path, _this.restoreForm.get('password').value, _this.restoreForm.get('key').value, _this.restoreForm.get('seedPassword').value, function (restore_status, restore_data) { - if (restore_status) { - _this.wallet.id = restore_data.wallet_id; - _this.variablesService.opening_wallet = new _helpers_models_wallet_model__WEBPACK_IMPORTED_MODULE_6__["Wallet"](restore_data.wallet_id, _this.restoreForm.get('name').value, _this.restoreForm.get('password').value, restore_data['wi'].path, restore_data['wi'].address, restore_data['wi'].balance, restore_data['wi'].unlocked_balance, restore_data['wi'].mined_total, restore_data['wi'].tracking_hey); - _this.variablesService.opening_wallet.is_auditable = - restore_data['wi'].is_auditable; - _this.variablesService.opening_wallet.is_watch_only = - restore_data['wi'].is_watch_only; - _this.variablesService.opening_wallet.currentPage = 1; - _this.variablesService.opening_wallet.alias = _this.backend.getWalletAlias(_this.variablesService.opening_wallet.address); - _this.variablesService.opening_wallet.pages = new Array(1).fill(1); - _this.variablesService.opening_wallet.totalPages = 1; - _this.variablesService.opening_wallet.currentPage = 1; - _this.variablesService.opening_wallet.total_history_item = 0; - _this.variablesService.opening_wallet.restore = true; - if (restore_data.recent_history && - restore_data.recent_history.history) { - _this.variablesService.opening_wallet.totalPages = Math.ceil(restore_data.recent_history.total_history_items / - _this.variablesService.count); - _this.variablesService.opening_wallet.totalPages > - _this.variablesService.maxPages - ? (_this.variablesService.opening_wallet.pages = new Array(5) - .fill(1) - .map(function (value, index) { return value + index; })) - : (_this.variablesService.opening_wallet.pages = new Array(_this.variablesService.opening_wallet.totalPages) - .fill(1) - .map(function (value, index) { return value + index; })); - _this.variablesService.opening_wallet.prepareHistory(restore_data.recent_history.history); - } - _this.backend.getContracts(_this.variablesService.opening_wallet.wallet_id, function (contracts_status, contracts_data) { - if (contracts_status && - contracts_data.hasOwnProperty('contracts')) { - _this.ngZone.run(function () { - _this.variablesService.opening_wallet.prepareContractsAfterOpen(contracts_data.contracts, _this.variablesService.exp_med_ts, _this.variablesService.height_app, _this.variablesService.settings - .viewedContracts, _this.variablesService.settings - .notViewedContracts); - }); - } - }); - _this.ngZone.run(function () { - _this.walletSaved = true; - _this.progressWidth = '50%'; - }); - } - else { - _this.modalService.prepareModal('error', 'RESTORE_WALLET.NOT_CORRECT_FILE_OR_PASSWORD'); - } - }); - } - }); - } - }); - } - }; - RestoreWalletComponent.prototype.runWallet = function () { - var _this = this; - // add flag when wallet was restored form seed - this.variablesService.after_sync_request[this.wallet.id] = true; - var exists = false; - this.variablesService.wallets.forEach(function (wallet) { - if (wallet.address === _this.variablesService.opening_wallet.address) { - exists = true; - } - }); - if (!exists) { - this.backend.runWallet(this.wallet.id, function (run_status, run_data) { - if (run_status) { - _this.variablesService.wallets.push(_this.variablesService.opening_wallet); - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(); - } - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.wallet.id]); - }); - } - else { - console.log(run_data['error_code']); - } - }); - } - else { - this.variablesService.opening_wallet = null; - this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN'); - this.backend.closeWallet(this.wallet.id, function () { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - }); - } - }; - RestoreWalletComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-restore-wallet', - template: __webpack_require__(/*! ./restore-wallet.component.html */ "./src/app/restore-wallet/restore-wallet.component.html"), - styles: [__webpack_require__(/*! ./restore-wallet.component.scss */ "./src/app/restore-wallet/restore-wallet.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_2__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_7__["TranslateService"]]) - ], RestoreWalletComponent); - return RestoreWalletComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/seed-phrase/seed-phrase.component.html": -/*!********************************************************!*\ - !*** ./src/app/seed-phrase/seed-phrase.component.html ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n \r\n
      \r\n
      \r\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\r\n {{ 'BREADCRUMBS.SAVE_PHRASE' | translate }}\r\n
      \r\n \r\n
      \r\n \r\n\r\n
      \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_DUPLICATE' | translate }}\r\n
      \r\n
      \r\n
      = variablesService.maxWalletNameLength\">\r\n {{ 'WALLET_DETAILS.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n\r\n \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n \r\n
      \r\n \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.PASSWORDS_DONT_MATCH' | translate }}\r\n \r\n\r\n \r\n\r\n
      {{ 'WALLET_DETAILS.FORM.SECURED_SEED_WILL_REQUIRE' | translate }}\r\n
      \r\n
      \r\n
      \r\n \r\n \r\n\r\n \r\n \r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.LABEL_SEED_PHRASE' | translate }}\r\n

      \r\n {{ 'WALLET_DETAILS.SEED_IS_UNSECURED' | translate }}\r\n \r\n 0\">{{ 'WALLET_DETAILS.SEED_IS_SECURED' | translate }}\r\n \r\n

      \r\n
      \r\n
      \r\n \r\n
      = 1 && (index + 1) <= 7 || (index + 1) >= 15 && (index + 1) <= 21\">\r\n {{(index + 1) + '. ' + word}}
      \r\n
      \r\n
      \r\n
      0\">\r\n {{ 'WALLET_DETAILS.REMEMBER_YOU_WILL_REQUIRE' | translate }}\r\n
      \r\n
      \r\n
      \r\n \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/seed-phrase/seed-phrase.component.scss": -/*!********************************************************!*\ - !*** ./src/app/seed-phrase/seed-phrase.component.scss ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: relative; }\n\n.content {\n padding: 3.2rem 3rem 3rem; }\n\n.scrolled-content, .content {\n height: 100%;\n overflow-y: auto; }\n\n.mt-2 {\n margin-top: 2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VlZC1waHJhc2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcc2VlZC1waHJhc2VcXHNlZWQtcGhyYXNlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UseUJBQXlCLEVBQUE7O0FBRTNCO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQixFQUFBOztBQUdsQjtFQUNFLGdCQUFnQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvc2VlZC1waHJhc2Uvc2VlZC1waHJhc2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4uY29udGVudCB7XHJcbiAgcGFkZGluZzogMy4ycmVtIDNyZW0gM3JlbTtcclxufVxyXG4uc2Nyb2xsZWQtY29udGVudCwgLmNvbnRlbnQge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdy15OiBhdXRvO1xyXG59XHJcblxyXG4ubXQtMiB7XHJcbiAgbWFyZ2luLXRvcDogMnJlbTtcclxufVxyXG5cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/seed-phrase/seed-phrase.component.ts": -/*!******************************************************!*\ - !*** ./src/app/seed-phrase/seed-phrase.component.ts ***! - \******************************************************/ -/*! exports provided: SeedPhraseComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SeedPhraseComponent", function() { return SeedPhraseComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - -var SeedPhraseComponent = /** @class */ (function () { - function SeedPhraseComponent(route, router, location, backend, variablesService, modalService, ngZone) { - var _this = this; - this.route = route; - this.router = router; - this.location = location; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.seedPhrase = ''; - this.showSeed = false; - this.seedPhraseCopied = false; - this.progressWidth = '66%'; - this.detailsForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormControl"]('', [ - _angular_forms__WEBPACK_IMPORTED_MODULE_6__["Validators"].required, - function (g) { - for (var i = 0; i < _this.variablesService.wallets.length; i++) { - if (g.value === _this.variablesService.wallets[i].name) { - if (_this.variablesService.wallets[i].wallet_id === - _this.variablesService.currentWallet.wallet_id) { - return { same: true }; - } - else { - return { duplicate: true }; - } - } - } - return null; - }, - ]), - path: new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormControl"](''), - }); - this.seedPhraseForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_6__["Validators"].pattern(this.variablesService.pattern)), - confirmPassword: new _angular_forms__WEBPACK_IMPORTED_MODULE_6__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_6__["Validators"].pattern(this.variablesService.pattern)), - }, { validators: this.checkPasswords }); - } - SeedPhraseComponent.prototype.checkPasswords = function (group) { - var pass = group.controls.password.value; - var confirmPass = group.controls.confirmPassword.value; - return pass === confirmPass ? null : { notSame: true }; - }; - SeedPhraseComponent.prototype.ngOnInit = function () { - this.showSeed = false; - this.getWalletId(); - this.setWalletInfoNamePath(); - }; - SeedPhraseComponent.prototype.setWalletInfoNamePath = function () { - this.detailsForm - .get('name') - .setValue(this.variablesService.opening_wallet.name); - this.detailsForm - .get('path') - .setValue(this.variablesService.opening_wallet.path); - }; - SeedPhraseComponent.prototype.getWalletId = function () { - var _this = this; - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.wallet_id) { - _this.wallet_id = params.wallet_id; - } - }); - }; - SeedPhraseComponent.prototype.runWallet = function () { - var _this = this; - var exists = false; - this.variablesService.wallets.forEach(function (wallet) { - if (wallet.address === _this.variablesService.opening_wallet.address) { - exists = true; - } - }); - if (!exists) { - this.backend.runWallet(this.wallet_id, function (run_status, run_data) { - if (run_status) { - _this.variablesService.wallets.push(_this.variablesService.opening_wallet); - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(); - } - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.wallet_id]); - }); - } - else { - console.log(run_data['error_code']); - } - }); - } - else { - this.variablesService.opening_wallet = null; - this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN'); - this.backend.closeWallet(this.wallet_id, function () { - _this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - }); - } - }; - SeedPhraseComponent.prototype.copySeedPhrase = function () { - var _this = this; - this.backend.setClipboard(this.seedPhrase, function () { - _this.ngZone.run(function () { - _this.seedPhraseCopied = true; - }); - }); - }; - SeedPhraseComponent.prototype.back = function () { - this.location.back(); - }; - SeedPhraseComponent.prototype.showSeedPhrase = function () { - this.showSeed = true; - this.progressWidth = '100%'; - }; - SeedPhraseComponent.prototype.onSubmitSeed = function () { - var _this = this; - if (this.seedPhraseForm.valid) { - this.showSeedPhrase(); - var wallet_id = this.wallet_id; - var seed_password = this.seedPhraseForm.controls.password.value; - this.backend.getSmartWalletInfo({ wallet_id: wallet_id, seed_password: seed_password }, function (status, data) { - if (data.hasOwnProperty('seed_phrase')) { - _this.ngZone.run(function () { - _this.seedPhrase = data['seed_phrase'].trim(); - }); - } - }); - } - }; - SeedPhraseComponent.prototype.ngOnDestroy = function () { - this.queryRouting.unsubscribe(); - }; - SeedPhraseComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-seed-phrase', - template: __webpack_require__(/*! ./seed-phrase.component.html */ "./src/app/seed-phrase/seed-phrase.component.html"), - styles: [__webpack_require__(/*! ./seed-phrase.component.scss */ "./src/app/seed-phrase/seed-phrase.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_3__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_3__["Router"], - _angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], SeedPhraseComponent); - return SeedPhraseComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/send-modal/send-modal.component.html": -/*!******************************************************!*\ - !*** ./src/app/send-modal/send-modal.component.html ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n {{ 'CONFIRM.TITLE' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      {{ 'CONFIRM.MESSAGE.SEND' | translate }}
      \r\n
      {{ +form.get('amount').value }} {{variablesService.defaultCurrency}}
      \r\n
      \r\n
      \r\n
      {{ 'CONFIRM.MESSAGE.FROM' | translate }}
      \r\n
      {{ variablesService.currentWallet.address }}
      \r\n
      \r\n
      \r\n
      {{ 'CONFIRM.MESSAGE.TO' | translate }}
      \r\n
      {{ form.get('address').value }}
      \r\n
      \r\n \r\n
      \r\n
      {{ 'CONFIRM.MESSAGE.COMMENT' | translate }}
      \r\n
      {{ form.get('comment').value }}
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'LOGIN.FORM_ERRORS.PASS_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'LOGIN.FORM_ERRORS.MISMATCH' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/send-modal/send-modal.component.scss": -/*!******************************************************!*\ - !*** ./src/app/send-modal/send-modal.component.scss ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(255, 255, 255, 0.25); }\n\n.modal {\n position: relative;\n display: flex;\n flex-direction: column;\n background-position: center;\n background-size: 200%;\n padding: 0.3rem 3rem 3rem 3rem;\n width: 64rem; }\n\n.modal .title {\n padding: 1.4rem 0;\n font-size: 1.8rem;\n line-height: 3rem; }\n\n.modal .content {\n display: flex;\n font-size: 1.4rem; }\n\n.modal .content .message-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n margin: 1.4rem 3rem 6.2rem 0; }\n\n.modal .content .message-container .message-block {\n display: flex;\n margin-bottom: 1rem; }\n\n.modal .content .message-container .message-block:first-child .message-label {\n line-height: 4rem; }\n\n.modal .content .message-container .message-block:first-child .message-text {\n line-height: 4rem; }\n\n.modal .content .message-container .message-block:last-child {\n margin-bottom: 0; }\n\n.modal .content .message-container .message-block .message-label {\n min-width: 6.7rem;\n line-height: 2rem; }\n\n.modal .content .message-container .message-block .message-text {\n overflow-wrap: break-word;\n margin-left: 4.8rem;\n width: 43.4rem;\n line-height: 2rem; }\n\n.modal .content .message-container .message-block.confirm-master-pass {\n width: 100%;\n margin: 2rem 0; }\n\n.modal .content .message-container .message-block.confirm-master-pass .input-block {\n width: 100%; }\n\n.modal .wrapper-buttons {\n display: flex;\n align-items: center;\n justify-content: space-between; }\n\n.modal .wrapper-buttons button {\n width: 100%;\n max-width: 15rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VuZC1tb2RhbC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzZW5kLW1vZGFsXFxzZW5kLW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFFdkM7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IscUJBQXFCO0VBQ3JCLDhCQUE4QjtFQUM5QixZQUFZLEVBQUE7O0FBUGQ7SUFVSSxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFBOztBQVpyQjtJQWdCSSxhQUFhO0lBQ2IsaUJBQWlCLEVBQUE7O0FBakJyQjtNQW9CTSxhQUFhO01BQ2Isc0JBQXNCO01BQ3RCLHVCQUF1QjtNQUN2Qix1QkFBdUI7TUFDdkIsNEJBQTRCLEVBQUE7O0FBeEJsQztRQTJCUSxhQUFhO1FBQ2IsbUJBQW1CLEVBQUE7O0FBNUIzQjtVQWlDWSxpQkFBaUIsRUFBQTs7QUFqQzdCO1VBcUNZLGlCQUFpQixFQUFBOztBQXJDN0I7VUEwQ1UsZ0JBQWdCLEVBQUE7O0FBMUMxQjtVQThDVSxpQkFBaUI7VUFDakIsaUJBQWlCLEVBQUE7O0FBL0MzQjtVQW1EVSx5QkFBeUI7VUFDekIsbUJBQW1CO1VBQ25CLGNBQWM7VUFDZCxpQkFBaUIsRUFBQTs7QUF0RDNCO1VBMERVLFdBQVc7VUFDWCxjQUFjLEVBQUE7O0FBM0R4QjtZQTZEWSxXQUFXLEVBQUE7O0FBN0R2QjtJQXFFSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QixFQUFBOztBQXZFbEM7TUEwRU0sV0FBVztNQUNYLGdCQUFnQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvc2VuZC1tb2RhbC9zZW5kLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XHJcbn1cclxuLm1vZGFsIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDIwMCU7XHJcbiAgcGFkZGluZzogMC4zcmVtIDNyZW0gM3JlbSAzcmVtO1xyXG4gIHdpZHRoOiA2NHJlbTtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDEuNHJlbSAwO1xyXG4gICAgZm9udC1zaXplOiAxLjhyZW07XHJcbiAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICB9XHJcblxyXG4gIC5jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmb250LXNpemU6IDEuNHJlbTtcclxuXHJcbiAgICAubWVzc2FnZS1jb250YWluZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbjogMS40cmVtIDNyZW0gNi4ycmVtIDA7XHJcblxyXG4gICAgICAubWVzc2FnZS1ibG9jayB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xyXG5cclxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcclxuXHJcbiAgICAgICAgICAubWVzc2FnZS1sYWJlbCB7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5tZXNzYWdlLXRleHQge1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNHJlbTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm1lc3NhZ2UtbGFiZWwge1xyXG4gICAgICAgICAgbWluLXdpZHRoOiA2LjdyZW07XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMnJlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5tZXNzYWdlLXRleHQge1xyXG4gICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0LjhyZW07XHJcbiAgICAgICAgICB3aWR0aDogNDMuNHJlbTtcclxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5jb25maXJtLW1hc3Rlci1wYXNzIHtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgbWFyZ2luOiAycmVtIDA7XHJcbiAgICAgICAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC53cmFwcGVyLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/send-modal/send-modal.component.ts": -/*!****************************************************!*\ - !*** ./src/app/send-modal/send-modal.component.ts ***! - \****************************************************/ -/*! exports provided: SendModalComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SendModalComponent", function() { return SendModalComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - -var SendModalComponent = /** @class */ (function () { - function SendModalComponent(variablesService) { - this.variablesService = variablesService; - this.confirmForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('') - }); - this.confirmed = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"](); - } - SendModalComponent.prototype.ngOnInit = function () { - if (this.variablesService.appPass) { - this.confirmForm.controls['password'].setValidators([_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required]); - this.confirmForm.updateValueAndValidity(); - } - }; - SendModalComponent.prototype.confirm = function () { - if (this.variablesService.appPass) { - if (this.confirmForm.controls['password'].value === '') { - this.confirmForm.controls['password'].setErrors({ requiredPass: true }); - return; - } - this.confirmForm.controls['password'].setErrors({ requiredPass: false }); - if (this.variablesService.appPass === this.confirmForm.controls['password'].value) { - this.confirmed.emit(true); - } - else { - this.confirmForm.controls['password'].setErrors({ passwordNotMatch: true }); - } - } - else { - this.confirmed.emit(true); - } - }; - SendModalComponent.prototype.onClose = function () { - this.confirmed.emit(false); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(), - __metadata("design:type", _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]) - ], SendModalComponent.prototype, "form", void 0); - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]) - ], SendModalComponent.prototype, "confirmed", void 0); - SendModalComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-send-modal', - template: __webpack_require__(/*! ./send-modal.component.html */ "./src/app/send-modal/send-modal.component.html"), - styles: [__webpack_require__(/*! ./send-modal.component.scss */ "./src/app/send-modal/send-modal.component.scss")] - }), - __metadata("design:paramtypes", [_helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"]]) - ], SendModalComponent); - return SendModalComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/send/send.component.html": -/*!******************************************!*\ - !*** ./src/app/send/send.component.html ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n \r\n\r\n \r\n\r\n
      \r\n
      {{item.name}}
      \r\n
      \r\n\r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.ADDRESS_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.ADDRESS_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.ALIAS_NOT_VALID' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.AMOUNT_ZERO' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      = variablesService.maxCommentLength\">\r\n {{ 'SEND.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n\r\n \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.FEE_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'SEND.FORM_ERRORS.FEE_MINIMUM' | translate : {fee: variablesService.default_fee} }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n \r\n\r\n \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/send/send.component.scss": -/*!******************************************!*\ - !*** ./src/app/send/send.component.scss ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n width: 100%; }\n\n.form-send .input-blocks-row {\n display: flex; }\n\n.form-send .input-blocks-row > div {\n flex-basis: 50%; }\n\n.form-send .input-blocks-row > div:first-child {\n margin-right: 1.5rem; }\n\n.form-send .input-blocks-row > div:last-child {\n margin-left: 1.5rem; }\n\n.form-send .send-select {\n display: flex;\n align-items: center;\n background: transparent;\n border: none;\n font-size: 1.3rem;\n line-height: 1.3rem;\n margin: 1.5rem 0 0;\n padding: 0;\n width: 100%;\n max-width: 15rem;\n height: 1.3rem; }\n\n.form-send .send-select .arrow {\n margin-left: 1rem;\n width: 0.8rem;\n height: 0.8rem; }\n\n.form-send .send-select .arrow.down {\n -webkit-mask: url('arrow-down.svg') no-repeat center;\n mask: url('arrow-down.svg') no-repeat center; }\n\n.form-send .send-select .arrow.up {\n -webkit-mask: url('arrow-up.svg') no-repeat center;\n mask: url('arrow-up.svg') no-repeat center; }\n\n.form-send .additional-details {\n display: flex;\n margin-top: 1.5rem;\n padding: 0.5rem 0 2rem; }\n\n.form-send .additional-details > div {\n flex-basis: 25%; }\n\n.form-send .additional-details > div:first-child {\n padding-left: 1.5rem;\n padding-right: 1rem; }\n\n.form-send .additional-details > div:last-child {\n padding-left: 1rem;\n padding-right: 1.5rem; }\n\n.form-send .additional-details .checkbox-block {\n flex-basis: 50%; }\n\n.form-send .additional-details .checkbox-block > label {\n top: 3.5rem; }\n\n.form-send .additional-details .checkbox-block.disabled-checkbox-block label {\n cursor: not-allowed; }\n\n.form-send .additional-details .checkbox-block.disabled-checkbox-block label:before {\n background-color: #556576;\n border: 0.1rem solid #556576; }\n\n.form-send button {\n margin: 2.4rem 0;\n width: 100%;\n max-width: 15rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VuZC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzZW5kXFxzZW5kLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBR0ksYUFBYSxFQUFBOztBQUhqQjtJQU1NLGVBQWUsRUFBQTs7QUFOckI7TUFTUSxvQkFBb0IsRUFBQTs7QUFUNUI7TUFhUSxtQkFBbUIsRUFBQTs7QUFiM0I7RUFtQkksYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsWUFBWTtFQUNaLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0VBQ2hCLGNBQWMsRUFBQTs7QUE3QmxCO0lBZ0NNLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsY0FBYyxFQUFBOztBQWxDcEI7TUFxQ1Esb0RBQTREO2NBQTVELDRDQUE0RCxFQUFBOztBQXJDcEU7TUF5Q1Esa0RBQTBEO2NBQTFELDBDQUEwRCxFQUFBOztBQXpDbEU7RUErQ0ksYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixzQkFBc0IsRUFBQTs7QUFqRDFCO0lBb0RNLGVBQWUsRUFBQTs7QUFwRHJCO01BdURRLG9CQUFvQjtNQUNwQixtQkFBbUIsRUFBQTs7QUF4RDNCO01BNERRLGtCQUFrQjtNQUNsQixxQkFBcUIsRUFBQTs7QUE3RDdCO0lBa0VNLGVBQWUsRUFBQTs7QUFsRXJCO01BcUVRLFdBQVcsRUFBQTs7QUFyRW5CO01BeUVVLG1CQUFtQixFQUFBOztBQXpFN0I7UUEyRVkseUJBQXlCO1FBQ3pCLDRCQUE0QixFQUFBOztBQTVFeEM7RUFvRkksZ0JBQWdCO0VBQ2hCLFdBQVc7RUFDWCxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3NlbmQvc2VuZC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmZvcm0tc2VuZCB7XHJcblxyXG4gIC5pbnB1dC1ibG9ja3Mtcm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgPiBkaXYge1xyXG4gICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcblxyXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMS41cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuc2VuZC1zZWxlY3Qge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogMS41cmVtIDAgMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICBoZWlnaHQ6IDEuM3JlbTtcclxuXHJcbiAgICAuYXJyb3cge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICAgICAgd2lkdGg6IDAuOHJlbTtcclxuICAgICAgaGVpZ2h0OiAwLjhyZW07XHJcblxyXG4gICAgICAmLmRvd24ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1kb3duLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi51cCB7XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Fycm93LXVwLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZGl0aW9uYWwtZGV0YWlscyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMS41cmVtO1xyXG4gICAgcGFkZGluZzogMC41cmVtIDAgMnJlbTtcclxuXHJcbiAgICA+IGRpdiB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDI1JTtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5jaGVja2JveC1ibG9jayB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDUwJTtcclxuXHJcbiAgICAgID4gbGFiZWwge1xyXG4gICAgICAgIHRvcDogMy41cmVtO1xyXG4gICAgICB9XHJcbiAgICAgICYuZGlzYWJsZWQtY2hlY2tib3gtYmxvY2sge1xyXG4gICAgICAgIGxhYmVsIHtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTY1NzY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMC4xcmVtIHNvbGlkICM1NTY1NzY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b24ge1xyXG4gICAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWF4LXdpZHRoOiAxNXJlbTtcclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/send/send.component.ts": -/*!****************************************!*\ - !*** ./src/app/send/send.component.ts ***! - \****************************************/ -/*! exports provided: SendComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SendComponent", function() { return SendComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var SendComponent = /** @class */ (function () { - function SendComponent(route, backend, variablesService, modalService, ngZone) { - var _this = this; - this.route = route; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.isOpen = false; - this.localAliases = []; - this.isModalDialogVisible = false; - this.hideWalletAddress = false; - this.currentWalletId = null; - this.sendForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - address: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, function (g) { - _this.localAliases = []; - if (g.value) { - if (g.value.indexOf('@') !== 0) { - _this.isOpen = false; - _this.backend.validateAddress(g.value, function (valid_status) { - _this.ngZone.run(function () { - if (valid_status === false) { - g.setErrors(Object.assign({ 'address_not_valid': true }, g.errors)); - } - else { - if (g.hasError('address_not_valid')) { - delete g.errors['address_not_valid']; - if (Object.keys(g.errors).length === 0) { - g.setErrors(null); - } - } - } - }); - }); - return (g.hasError('address_not_valid')) ? { 'address_not_valid': true } : null; - } - else { - _this.isOpen = true; - _this.localAliases = _this.variablesService.aliases.filter(function (item) { - return item.name.indexOf(g.value) > -1; - }); - if (!(/^@?[a-z0-9\.\-]{6,25}$/.test(g.value))) { - g.setErrors(Object.assign({ 'alias_not_valid': true }, g.errors)); - } - else { - _this.backend.getAliasByName(g.value.replace('@', ''), function (alias_status) { - _this.ngZone.run(function () { - if (alias_status) { - if (g.hasError('alias_not_valid')) { - delete g.errors['alias_not_valid']; - if (Object.keys(g.errors).length === 0) { - g.setErrors(null); - } - } - } - else { - g.setErrors(Object.assign({ 'alias_not_valid': true }, g.errors)); - } - }); - }); - } - return (g.hasError('alias_not_valid')) ? { 'alias_not_valid': true } : null; - } - } - return null; - }]), - amount: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](null, [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, function (g) { - if (new bignumber_js__WEBPACK_IMPORTED_MODULE_6__["BigNumber"](g.value).eq(0)) { - return { 'zero': true }; - } - return null; - }]), - comment: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](''), - mixin: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](_shared_constants__WEBPACK_IMPORTED_MODULE_7__["MIXIN"], _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required), - fee: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](this.variablesService.default_fee, [_angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, function (g) { - if ((new bignumber_js__WEBPACK_IMPORTED_MODULE_6__["BigNumber"](g.value)).isLessThan(_this.variablesService.default_fee)) { - return { 'less_min': true }; - } - return null; - }]), - hide: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](false) - }); - this.additionalOptions = false; - } - SendComponent.prototype.addressMouseDown = function (e) { - if (e['button'] === 0 && this.sendForm.get('address').value && this.sendForm.get('address').value.indexOf('@') === 0) { - this.isOpen = true; - } - }; - SendComponent.prototype.setAlias = function (alias) { - this.sendForm.get('address').setValue(alias); - }; - SendComponent.prototype.onClick = function (targetElement) { - if (targetElement.id !== 'send-address' && this.isOpen) { - this.isOpen = false; - } - }; - SendComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function (params) { - _this.currentWalletId = params['id']; - _this.mixin = _this.variablesService.currentWallet.send_data['mixin'] || _shared_constants__WEBPACK_IMPORTED_MODULE_7__["MIXIN"]; - if (_this.variablesService.currentWallet.is_auditable) { - _this.mixin = 0; - _this.sendForm.controls['mixin'].disable(); - } - _this.hideWalletAddress = _this.variablesService.currentWallet.is_auditable && !_this.variablesService.currentWallet.is_watch_only; - if (_this.hideWalletAddress) { - _this.sendForm.controls['hide'].disable(); - } - _this.sendForm.reset({ - address: _this.variablesService.currentWallet.send_data['address'], - amount: _this.variablesService.currentWallet.send_data['amount'], - comment: _this.variablesService.currentWallet.send_data['comment'], - mixin: _this.mixin, - fee: _this.variablesService.currentWallet.send_data['fee'] || _this.variablesService.default_fee, - hide: _this.variablesService.currentWallet.send_data['hide'] || false - }); - }); - }; - SendComponent.prototype.showDialog = function () { - this.isModalDialogVisible = true; - }; - SendComponent.prototype.confirmed = function (confirmed) { - if (confirmed) { - this.onSend(); - } - this.isModalDialogVisible = false; - }; - SendComponent.prototype.onSend = function () { - var _this = this; - if (this.sendForm.valid) { - if (this.sendForm.get('address').value.indexOf('@') !== 0) { - this.backend.validateAddress(this.sendForm.get('address').value, function (valid_status) { - if (valid_status === false) { - _this.ngZone.run(function () { - _this.sendForm.get('address').setErrors({ 'address_not_valid': true }); - }); - } - else { - _this.backend.sendMoney(_this.currentWalletId, _this.sendForm.get('address').value, _this.sendForm.get('amount').value, _this.sendForm.get('fee').value, _this.sendForm.get('mixin').value, _this.sendForm.get('comment').value, _this.sendForm.get('hide').value, function (send_status) { - if (send_status) { - _this.modalService.prepareModal('success', 'SEND.SUCCESS_SENT'); - _this.variablesService.currentWallet.send_data = { address: null, amount: null, comment: null, mixin: null, fee: null, hide: null }; - _this.sendForm.reset({ address: null, amount: null, comment: null, mixin: _this.mixin, fee: _this.variablesService.default_fee, hide: false }); - } - }); - } - }); - } - else { - this.backend.getAliasByName(this.sendForm.get('address').value.replace('@', ''), function (alias_status, alias_data) { - _this.ngZone.run(function () { - if (alias_status === false) { - _this.ngZone.run(function () { - _this.sendForm.get('address').setErrors({ 'alias_not_valid': true }); - }); - } - else { - _this.backend.sendMoney(_this.currentWalletId, alias_data.address, // this.sendForm.get('address').value, - _this.sendForm.get('amount').value, _this.sendForm.get('fee').value, _this.sendForm.get('mixin').value, _this.sendForm.get('comment').value, _this.sendForm.get('hide').value, function (send_status) { - if (send_status) { - _this.modalService.prepareModal('success', 'SEND.SUCCESS_SENT'); - _this.variablesService.currentWallet.send_data = { address: null, amount: null, comment: null, mixin: null, fee: null, hide: null }; - _this.sendForm.reset({ address: null, amount: null, comment: null, mixin: _this.mixin, fee: _this.variablesService.default_fee, hide: false }); - } - }); - } - }); - }); - } - } - }; - SendComponent.prototype.toggleOptions = function () { - this.additionalOptions = !this.additionalOptions; - }; - SendComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - this.variablesService.currentWallet.send_data = { - address: this.sendForm.get('address').value, - amount: this.sendForm.get('amount').value, - comment: this.sendForm.get('comment').value, - mixin: this.sendForm.get('mixin').value, - fee: this.sendForm.get('fee').value, - hide: this.sendForm.get('hide').value - }; - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["HostListener"])('document:click', ['$event.target']), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) - ], SendComponent.prototype, "onClick", null); - SendComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-send', - template: __webpack_require__(/*! ./send.component.html */ "./src/app/send/send.component.html"), - styles: [__webpack_require__(/*! ./send.component.scss */ "./src/app/send/send.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_2__["ActivatedRoute"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], SendComponent); - return SendComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/settings/settings.component.html": -/*!**************************************************!*\ - !*** ./src/app/settings/settings.component.html ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n \r\n
      \r\n\r\n

      {{ 'SETTINGS.TITLE' | translate }}

      \r\n\r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n {{item.language | translate}}\r\n \r\n \r\n {{item.language | translate}}\r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n {{item.name | translate}}\r\n \r\n \r\n {{item.name | translate}}\r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n\r\n {{ 'SETTINGS.MASTER_PASSWORD.TITLE' | translate }}\r\n\r\n
      \r\n \r\n \r\n
      \r\n {{ 'SETTINGS.FORM_ERRORS.PASS_NOT_MATCH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n {{ 'SETTINGS.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\r\n
      \r\n
      \r\n\r\n \r\n\r\n
      \r\n
      \r\n\r\n
      \r\n
      {{ 'SETTINGS.LAST_BUILD' | translate : {value: currentBuild} }}
      \r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/settings/settings.component.scss": -/*!**************************************************!*\ - !*** ./src/app/settings/settings.component.scss ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".head {\n justify-content: flex-end; }\n\n.settings-title {\n font-size: 1.7rem; }\n\n.theme-selection {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin: 2.4rem 0;\n width: 50%; }\n\n.theme-selection .radio-block {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n font-size: 1.3rem;\n line-height: 2.7rem; }\n\n.lock-selection {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin: 2.4rem 0;\n width: 50%; }\n\n.lock-selection .lock-selection-title {\n display: flex;\n font-size: 1.5rem;\n line-height: 2.7rem;\n margin-bottom: 1rem; }\n\n.scale-selection {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 0 4rem;\n width: 50%;\n height: 0.5rem; }\n\n.scale-selection .button-block {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1 0 auto;\n margin: 0 0.2rem;\n padding: 0;\n height: 0.5rem; }\n\n.scale-selection .button-block .label {\n position: absolute;\n bottom: -1rem;\n left: 50%;\n transform: translate(-50%, 100%);\n font-size: 1rem;\n white-space: nowrap; }\n\n.master-password {\n width: 50%; }\n\n.master-password .master-password-title {\n display: flex;\n font-size: 1.5rem;\n line-height: 2.7rem;\n margin-bottom: 1rem; }\n\n.master-password button {\n margin: 2.5rem auto;\n width: 100%;\n max-width: 15rem; }\n\n.last-build {\n font-size: 1rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2V0dGluZ3MvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcc2V0dGluZ3NcXHNldHRpbmdzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUJBQXlCLEVBQUE7O0FBRzNCO0VBQ0UsaUJBQWlCLEVBQUE7O0FBR25CO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qix1QkFBdUI7RUFDdkIsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTs7QUFMWjtJQVFJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsMkJBQTJCO0lBQzNCLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBQTs7QUFJdkI7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2QixnQkFBZ0I7RUFDaEIsVUFBVSxFQUFBOztBQUxaO0lBUUksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUE7O0FBSXZCO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsaUJBQWlCO0VBQ2pCLFVBQVU7RUFDVixjQUFjLEVBQUE7O0FBTmhCO0lBU0ksa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGNBQWMsRUFBQTs7QUFoQmxCO01BbUJNLGtCQUFrQjtNQUNsQixhQUFhO01BQ2IsU0FBUztNQUNULGdDQUFnQztNQUNoQyxlQUFlO01BQ2YsbUJBQW1CLEVBQUE7O0FBS3pCO0VBQ0UsVUFBVSxFQUFBOztBQURaO0lBSUksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUE7O0FBUHZCO0lBV0ksbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxnQkFBZ0IsRUFBQTs7QUFJcEI7RUFDRSxlQUFlLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uc2V0dGluZ3MtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG59XHJcblxyXG4udGhlbWUtc2VsZWN0aW9uIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogNTAlO1xyXG5cclxuICAucmFkaW8tYmxvY2sge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07XHJcbiAgfVxyXG59XHJcblxyXG4ubG9jay1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICBtYXJnaW46IDIuNHJlbSAwO1xyXG4gIHdpZHRoOiA1MCU7XHJcblxyXG4gIC5sb2NrLXNlbGVjdGlvbi10aXRsZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5zY2FsZS1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMCAwIDRyZW07XHJcbiAgd2lkdGg6IDUwJTtcclxuICBoZWlnaHQ6IDAuNXJlbTtcclxuXHJcbiAgLmJ1dHRvbi1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgZmxleDogMSAwIGF1dG87XHJcbiAgICBtYXJnaW46IDAgMC4ycmVtO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogMC41cmVtO1xyXG5cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAtMXJlbTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAxMDAlKTtcclxuICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm1hc3Rlci1wYXNzd29yZCB7XHJcbiAgd2lkdGg6IDUwJTtcclxuXHJcbiAgLm1hc3Rlci1wYXNzd29yZC10aXRsZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBtYXJnaW46IDIuNXJlbSBhdXRvO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gIH1cclxufVxyXG5cclxuLmxhc3QtYnVpbGQge1xyXG4gIGZvbnQtc2l6ZTogMXJlbTtcclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/settings/settings.component.ts": -/*!************************************************!*\ - !*** ./src/app/settings/settings.component.ts ***! - \************************************************/ -/*! exports provided: SettingsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SettingsComponent", function() { return SettingsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_helpers/services/utils.service */ "./src/app/_helpers/services/utils.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - -var SettingsComponent = /** @class */ (function () { - function SettingsComponent(renderer, variablesService, backend, location, translate, ngZone, utilsService) { - var _this = this; - this.renderer = renderer; - this.variablesService = variablesService; - this.backend = backend; - this.location = location; - this.translate = translate; - this.ngZone = ngZone; - this.utilsService = utilsService; - this.languagesOptions = [ - { - name: 'en', - language: 'SETTINGS.LANGUAGE.EN' - }, - { - name: 'fr', - language: 'SETTINGS.LANGUAGE.FR' - }, - { - name: 'de', - language: 'SETTINGS.LANGUAGE.DE' - }, - { - name: 'id', - language: 'SETTINGS.LANGUAGE.ID' - }, - { - name: 'it', - language: 'SETTINGS.LANGUAGE.IT' - }, - { - name: 'pt', - language: 'SETTINGS.LANGUAGE.PT' - } - ]; - this.appLockOptions = [ - { - id: 5, - name: 'SETTINGS.APP_LOCK.TIME1' - }, - { - id: 15, - name: 'SETTINGS.APP_LOCK.TIME2' - }, - { - id: 60, - name: 'SETTINGS.APP_LOCK.TIME3' - }, - { - id: 0, - name: 'SETTINGS.APP_LOCK.TIME4' - } - ]; - this.appScaleOptions = [ - { - id: 7.5, - name: 'SETTINGS.SCALE.75' - }, - { - id: 10, - name: 'SETTINGS.SCALE.100' - }, - { - id: 12.5, - name: 'SETTINGS.SCALE.125' - }, - { - id: 15, - name: 'SETTINGS.SCALE.150' - } - ]; - this.appLogOptions = [ - { - id: -1 - }, - { - id: 0 - }, - { - id: 1 - }, - { - id: 2 - }, - { - id: 3 - }, - { - id: 4 - } - ]; - this.currentBuild = ''; - this.theme = this.variablesService.settings.theme; - this.scale = this.variablesService.settings.scale; - this.changeForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControl"](''), - new_password: new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_3__["Validators"].pattern(this.variablesService.pattern)), - new_confirmation: new _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormControl"]('') - }, [function (g) { - return g.get('new_password').value === g.get('new_confirmation').value ? null : { 'confirm_mismatch': true }; - }, function (g) { - if (_this.variablesService.appPass) { - return g.get('password').value === _this.variablesService.appPass ? null : { 'pass_mismatch': true }; - } - return null; - }]); - } - SettingsComponent.prototype.ngOnInit = function () { - var _this = this; - this.backend.getVersion(function (version, type) { - _this.ngZone.run(function () { - _this.currentBuild = version; - _this.variablesService.testnet = false; - if (type == 'testnet') { - _this.currentBuild += ' TESTNET'; - _this.variablesService.testnet = true; - } - _this.variablesService.networkType = type; - }); - }); - }; - SettingsComponent.prototype.setTheme = function (theme) { - this.renderer.removeClass(document.body, 'theme-' + this.theme); - this.theme = theme; - this.variablesService.settings.theme = this.theme; - this.renderer.addClass(document.body, 'theme-' + this.theme); - this.backend.storeAppData(); - }; - SettingsComponent.prototype.setScale = function (scale) { - this.scale = scale; - this.variablesService.settings.scale = this.scale; - var width = this.utilsService.getMinWidthByScale(this.scale); - var app = document.documentElement.querySelector('app-root'); - this.renderer.setStyle(app, 'min-width', width + 'px'); - this.renderer.setStyle(document.documentElement, 'font-size', this.scale + 'px'); - this.backend.storeAppData(); - }; - SettingsComponent.prototype.onSubmitChangePass = function () { - var _this = this; - if (this.changeForm.valid) { - this.variablesService.appPass = this.changeForm.get('new_password').value; - if (this.variablesService.appPass) { - this.backend.setMasterPassword({ pass: this.variablesService.appPass }, function (status, data) { - if (status) { - _this.backend.storeSecureAppData({ pass: _this.variablesService.appPass }); - _this.variablesService.appLogin = true; - _this.variablesService.dataIsLoaded = true; - if (_this.variablesService.settings.appLockTime) { - _this.variablesService.startCountdown(); - } - } - else { - console.log(data['error_code']); - } - }); - } - else { - this.backend.dropSecureAppData(); - } - this.changeForm.reset(); - } - }; - SettingsComponent.prototype.onLockChange = function () { - if (this.variablesService.appLogin && this.variablesService.settings.appLockTime) { - this.variablesService.restartCountdown(); - } - this.backend.storeAppData(); - }; - SettingsComponent.prototype.onLogChange = function () { - this.backend.setLogLevel(this.variablesService.settings.appLog); - this.backend.storeAppData(); - }; - SettingsComponent.prototype.onLanguageChange = function () { - this.translate.use(this.variablesService.settings.language); - this.backend.storeAppData(); - }; - SettingsComponent.prototype.back = function () { - this.location.back(); - }; - SettingsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-settings', - template: __webpack_require__(/*! ./settings.component.html */ "./src/app/settings/settings.component.html"), - providers: [_helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_6__["UtilsService"]], - styles: [__webpack_require__(/*! ./settings.component.scss */ "./src/app/settings/settings.component.scss")] - }), - __metadata("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["Renderer2"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _angular_common__WEBPACK_IMPORTED_MODULE_4__["Location"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_5__["TranslateService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _helpers_services_utils_service__WEBPACK_IMPORTED_MODULE_6__["UtilsService"]]) - ], SettingsComponent); - return SettingsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/sidebar/sidebar.component.html": -/*!************************************************!*\ - !*** ./src/app/sidebar/sidebar.component.html ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n

      {{ 'SIDEBAR.TITLE' | translate }}

      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n Auditable\r\n
      \r\n
      \r\n Watch-only\r\n
      \r\n
      \r\n Tracking\r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n\r\n {{ 'SIDEBAR.LOG_OUT' | translate }}\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.OFFLINE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.SYNCING' | translate }} {{ variablesService.height_app }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.height_max }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.ONLINE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\r\n \r\n \r\n {{ 'SIDEBAR.SYNCHRONIZATION.DOWNLOADING' | translate }} {{ variablesService.downloaded }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.total }}{{ 'SIDEBAR.SYNCHRONIZATION.MB' | translate }}\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      {{ variablesService.sync.progress_value_text }}%
      \r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      {{ variablesService.download.progress_value_text }}%
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.STANDARD' | translate }}\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT' | translate }}\r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\r\n
      \r\n \r\n
      \r\n \r\n
      \r\n {{ 'SIDEBAR.UPDATE.CRITICAL' | translate }}\r\n
      \r\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n {{ 'SIDEBAR.UPDATE.TIME' | translate }}\r\n
      \r\n \r\n
      \r\n
      \r\n\r\n\r\n" - -/***/ }), - -/***/ "./src/app/sidebar/sidebar.component.scss": -/*!************************************************!*\ - !*** ./src/app/sidebar/sidebar.component.scss ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n flex: 0 0 25rem;\n padding: 0 3rem;\n max-width: 25rem; }\n\n.animated {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 1.2rem; }\n\n.animated::ng-deep svg {\n width: 2rem;\n height: 2rem; }\n\n.animated::ng-deep svg path, .animated::ng-deep svg circle, .animated::ng-deep svg polygon {\n fill: #4db1ff; }\n\n.wallet-type {\n position: absolute;\n top: 0;\n left: 0;\n width: 7px;\n height: 100%;\n background-color: transparent;\n transition: all ease .3s;\n overflow: hidden; }\n\n.wallet-type:hover {\n width: 28px; }\n\n.wallet-type .content {\n height: 100%;\n padding: 7px;\n font-size: 12px;\n line-height: 14px;\n font-weight: 500;\n color: #ffffff;\n text-decoration: none;\n text-transform: capitalize;\n transition: all ease .3s;\n writing-mode: vertical-rl;\n text-orientation: mixed; }\n\n.wallet-type .content.auditable {\n background-color: #5cda9d; }\n\n.wallet-type .content.watch-only, .wallet-type .content.auditable-watch-only {\n background-color: #8686ff; }\n\n.sidebar-accounts {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto; }\n\n.sidebar-accounts .sidebar-accounts-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 auto;\n height: 8rem;\n font-weight: 400; }\n\n.sidebar-accounts .sidebar-accounts-header h3 {\n font-size: 1.7rem; }\n\n.sidebar-accounts .sidebar-accounts-header button {\n background: transparent;\n border: none;\n outline: none; }\n\n.sidebar-accounts .sidebar-accounts-list {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n margin: 0 -3rem;\n overflow-y: auto; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n cursor: pointer;\n padding: 2.5rem 3rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper {\n display: flex;\n justify-content: flex-end;\n position: relative; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button {\n display: flex;\n position: absolute;\n top: -12px;\n right: -18px;\n padding: 0;\n height: auto;\n background: transparent;\n border: none; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon {\n width: 1.3rem;\n height: 1.3rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon.close-wallet {\n background-color: transparent; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon.close-wallet::after {\n display: block;\n content: '';\n background: url('close-wallet-blue.svg') no-repeat center;\n width: 13px;\n height: 13px; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row {\n display: flex;\n align-items: center;\n justify-content: space-between; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance {\n line-height: 2.7rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance .title {\n font-size: 1.5rem;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance .balance {\n font-size: 1.8rem;\n font-weight: 600;\n white-space: nowrap; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias {\n font-size: 1.3rem;\n line-height: 3.4rem;\n margin-bottom: 0.7rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .name {\n display: flex;\n align-items: center;\n flex-shrink: 1;\n line-height: 1.6rem;\n padding-right: 1rem;\n overflow: hidden; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .name span {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .price {\n flex-shrink: 0; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .icon {\n margin-left: 0.5rem;\n width: 1.3rem;\n height: 1.3rem;\n border-radius: 50%;\n color: #1a1a1a;\n font-size: 9px;\n font-weight: 700;\n line-height: 9px;\n padding-right: 1px;\n display: flex;\n align-items: center;\n justify-content: center; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-staking {\n line-height: 2.9rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-staking .text {\n font-size: 1.3rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages {\n line-height: 2.7rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages .text {\n font-size: 1.3rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages .indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 1rem;\n font-size: 1rem;\n min-width: 2.4rem;\n height: 1.6rem;\n padding: 0 0.5rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization {\n flex-direction: column;\n height: 5.6rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .status {\n align-self: flex-start;\n font-size: 1.3rem;\n line-height: 2.6rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container {\n display: flex;\n margin: 0.4rem 0;\n height: 0.7rem;\n width: 100%; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-bar {\n flex: 1 0 auto; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-bar .fill {\n height: 100%; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-percent {\n flex: 0 0 auto;\n font-size: 1.3rem;\n line-height: 0.7rem;\n padding-left: 0.7rem; }\n\n.sidebar-accounts .sidebar-accounts-list .sidebar-account:focus {\n outline: none; }\n\n.sidebar-accounts:after {\n content: '';\n position: absolute;\n bottom: 0;\n left: -3rem;\n width: calc(100% + 6rem);\n height: 5rem; }\n\n.sidebar-settings {\n flex: 0 0 auto;\n padding-bottom: 1rem; }\n\n.sidebar-settings .wrap-button {\n margin: 0 -3rem; }\n\n.sidebar-settings .wrap-button button {\n display: flex;\n align-items: center;\n background: transparent;\n border: none;\n font-weight: 400;\n line-height: 3rem;\n outline: none;\n padding: 0 3rem;\n width: 100%; }\n\n.sidebar-settings .wrap-button button.disabled {\n cursor: url('not-allowed.svg'), not-allowed; }\n\n.sidebar-settings .wrap-button button .icon {\n margin-right: 1.2rem;\n width: 2rem;\n height: 2rem; }\n\n.sidebar-settings .wrap-button button .icon.contacts {\n -webkit-mask: url('contacts.svg') no-repeat center;\n mask: url('contacts.svg') no-repeat center; }\n\n.sidebar-settings .wrap-button button .icon.settings {\n -webkit-mask: url('settings.svg') no-repeat center;\n mask: url('settings.svg') no-repeat center; }\n\n.sidebar-settings .wrap-button button .icon.logout {\n -webkit-mask: url('logout.svg') no-repeat center;\n mask: url('logout.svg') no-repeat center; }\n\n.synchronization-status {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 0 0 7rem;\n font-size: 1.3rem; }\n\n.synchronization-status .status-container {\n position: relative;\n flex-grow: 1;\n text-align: left; }\n\n.synchronization-status .status-container .offline, .synchronization-status .status-container .online {\n position: relative;\n display: block;\n line-height: 1.2rem;\n padding-left: 2.2rem; }\n\n.synchronization-status .status-container .offline:before, .synchronization-status .status-container .online:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 50%;\n width: 1.2rem;\n height: 1.2rem; }\n\n.synchronization-status .status-container .syncing, .synchronization-status .status-container .loading {\n line-height: 5rem; }\n\n.synchronization-status .status-container .progress-bar-container {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 0.7rem;\n width: 100%; }\n\n.synchronization-status .status-container .progress-bar-container .syncing {\n display: flex; }\n\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\n flex: 1 0 auto; }\n\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\n height: 100%; }\n\n.synchronization-status .status-container .progress-bar-container .syncing .progress-percent {\n flex: 0 0 auto;\n font-size: 1.3rem;\n line-height: 0.7rem;\n padding-left: 0.7rem; }\n\n.synchronization-status .status-container .progress-bar-container .loading {\n -webkit-animation: move 5s linear infinite;\n animation: move 5s linear infinite;\n background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.125, rgba(0, 0, 0, 0.15)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.1)), color-stop(0.375, rgba(0, 0, 0, 0.1)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.15)), color-stop(0.625, rgba(0, 0, 0, 0.15)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.1)), color-stop(0.875, rgba(0, 0, 0, 0.1)), color-stop(0.875, transparent), to(transparent)), -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.125, rgba(0, 0, 0, 0.3)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.25)), color-stop(0.375, rgba(0, 0, 0, 0.25)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.3)), color-stop(0.625, rgba(0, 0, 0, 0.3)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.25)), color-stop(0.875, rgba(0, 0, 0, 0.25)), color-stop(0.875, transparent), to(transparent));\n background-size: 7rem 7rem;\n height: 100%; }\n\n.synchronization-status .update-container {\n display: flex;\n flex-grow: 1;\n margin-left: 1rem;\n text-align: right; }\n\n.synchronization-status .update-container .update-text {\n flex: 1 1 auto;\n font-size: 1.2rem;\n line-height: 1.8rem;\n text-align: left; }\n\n.synchronization-status .update-container .update-text.time {\n font-size: 1.1rem; }\n\n.synchronization-status .update-container .icon {\n flex: 1 0 auto;\n margin: 0.3rem 0 0 0.6rem;\n width: 1.2rem;\n height: 1.2rem; }\n\n.synchronization-status .update-container .icon.update {\n -webkit-mask: url('update.svg') no-repeat center;\n mask: url('update.svg') no-repeat center; }\n\n.synchronization-status .update-container .icon.time {\n -webkit-mask: url('time.svg') no-repeat center;\n mask: url('time.svg') no-repeat center; }\n\n@-webkit-keyframes move {\n 0% {\n background-position: 100% -7rem; }\n 100% {\n background-position: 100% 7rem; } }\n\n@keyframes move {\n 0% {\n background-position: 100% -7rem; }\n 100% {\n background-position: 100% 7rem; } }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2lkZWJhci9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzaWRlYmFyXFxzaWRlYmFyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qiw4QkFBOEI7RUFDOUIsZUFBZTtFQUNmLGVBQWU7RUFDZixnQkFBZ0IsRUFBQTs7QUFHbEI7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBQTs7QUFKdEI7SUFRSSxXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQVRoQjtNQVlNLGFBQWEsRUFBQTs7QUFJbkI7RUFDRSxrQkFBa0I7RUFDbEIsTUFBTTtFQUNOLE9BQU87RUFDUCxVQUFVO0VBQ1YsWUFBWTtFQUNaLDZCQUE2QjtFQUM3Qix3QkFBd0I7RUFDeEIsZ0JBQWdCLEVBQUE7O0FBUmxCO0lBVUksV0FBVyxFQUFBOztBQVZmO0lBYUksWUFBWTtJQUNaLFlBQVk7SUFDWixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLHVCQUF1QixFQUFBOztBQXZCM0I7TUF5Qk0seUJBQXlCLEVBQUE7O0FBekIvQjtNQTRCTSx5QkFBeUIsRUFBQTs7QUFJL0I7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixjQUFjLEVBQUE7O0FBSmhCO0lBT0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsY0FBYztJQUNkLFlBQVk7SUFDWixnQkFBZ0IsRUFBQTs7QUFacEI7TUFlTSxpQkFBaUIsRUFBQTs7QUFmdkI7TUFtQk0sdUJBQXVCO01BQ3ZCLFlBQVk7TUFDWixhQUFhLEVBQUE7O0FBckJuQjtJQTBC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Z0RBQXlEO2dCQUF6RCx3Q0FBeUQsRUFBQTs7QUFsSGpFO1FBc0hRLDhDQUF1RDtnQkFBdkQsc0NBQXVELEVBQUE7O0FBTS9EO0VBQ0U7SUFDRSwrQkFBK0IsRUFBQTtFQUVqQztJQUNFLDhCQUE4QixFQUFBLEVBQUE7O0FBTGxDO0VBQ0U7SUFDRSwrQkFBK0IsRUFBQTtFQUVqQztJQUNFLDhCQUE4QixFQUFBLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBmbGV4OiAwIDAgMjVyZW07XHJcbiAgcGFkZGluZzogMCAzcmVtO1xyXG4gIG1heC13aWR0aDogMjVyZW07XHJcbn1cclxuXHJcbi5hbmltYXRlZCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG5cclxuICAmOjpuZy1kZWVwIHN2ZyB7XHJcblxyXG4gICAgd2lkdGg6IDJyZW07XHJcbiAgICBoZWlnaHQ6IDJyZW07XHJcblxyXG4gICAgcGF0aCwgY2lyY2xlLCBwb2x5Z29uIHtcclxuICAgICAgZmlsbDogIzRkYjFmZjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLndhbGxldC10eXBlIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgd2lkdGg6IDdweDtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgLjNzO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgJjpob3ZlciB7XHJcbiAgICB3aWR0aDogMjhweDtcclxuICB9XHJcbiAgLmNvbnRlbnQge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgcGFkZGluZzogN3B4O1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XHJcbiAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCBlYXNlIC4zcztcclxuICAgIHdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7XHJcbiAgICB0ZXh0LW9yaWVudGF0aW9uOiBtaXhlZDtcclxuICAgICYuYXVkaXRhYmxlIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDtcclxuICAgIH1cclxuICAgICYud2F0Y2gtb25seSwgJi5hdWRpdGFibGUtd2F0Y2gtb25seSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4Njg2ZmY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi5zaWRlYmFyLWFjY291bnRzIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGZsZXg6IDEgMSBhdXRvO1xyXG5cclxuICAuc2lkZWJhci1hY2NvdW50cy1oZWFkZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgIGhlaWdodDogOHJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcblxyXG4gICAgaDMge1xyXG4gICAgICBmb250LXNpemU6IDEuN3JlbTtcclxuICAgIH1cclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnNpZGViYXItYWNjb3VudHMtbGlzdCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgbWFyZ2luOiAwIC0zcmVtO1xyXG4gICAgb3ZlcmZsb3cteTogYXV0bztcclxuXHJcbiAgICAuc2lkZWJhci1hY2NvdW50IHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICBwYWRkaW5nOiAyLjVyZW0gM3JlbTtcclxuXHJcbiAgICAgIC5jbG9zZS13YWxsZXQtd3JhcHBlciB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIHRvcDogLTEycHg7XHJcbiAgICAgICAgICByaWdodDogLTE4cHg7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICB3aWR0aDogMS4zcmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcclxuICAgICAgICAgICAgJi5jbG9zZS13YWxsZXQge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICYuY2xvc2Utd2FsbGV0OjphZnRlciB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgY29udGVudDonJztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOnVybChcIi4uLy4uL2Fzc2V0cy9pY29ucy9jbG9zZS13YWxsZXQtYmx1ZS5zdmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTNweDtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEzcHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5zaWRlYmFyLWFjY291bnQtcm93IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgICAmLmFjY291bnQtdGl0bGUtYmFsYW5jZSB7XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG5cclxuICAgICAgICAgIC50aXRsZSB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xyXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuYmFsYW5jZSB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY2NvdW50LWFsaWFzIHtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDMuNHJlbTtcclxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuN3JlbTtcclxuXHJcbiAgICAgICAgICAubmFtZSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAxO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42cmVtO1xyXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgICAgICAgICAgc3BhbiB7XHJcbiAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLnByaWNlIHtcclxuICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xyXG4gICAgICAgICAgICB3aWR0aDogMS4zcmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgICBjb2xvcjogIzFhMWExYTtcclxuICAgICAgICAgICAgZm9udC1zaXplOiA5cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA5cHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFweDtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmFjY291bnQtc3Rha2luZyB7XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMi45cmVtO1xyXG5cclxuICAgICAgICAgIC50ZXh0IHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmFjY291bnQtbWVzc2FnZXMge1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuXHJcbiAgICAgICAgICAudGV4dCB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5pbmRpY2F0b3Ige1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXJlbTtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDIuNHJlbTtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxLjZyZW07XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY2NvdW50LXN5bmNocm9uaXphdGlvbiB7XHJcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgaGVpZ2h0OiA1LjZyZW07XHJcblxyXG4gICAgICAgICAgLnN0YXR1cyB7XHJcbiAgICAgICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMi42cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwLjRyZW0gMDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAwLjdyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICAgICAgICAgLnByb2dyZXNzLWJhciB7XHJcbiAgICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XHJcblxyXG4gICAgICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5wcm9ncmVzcy1wZXJjZW50IHtcclxuICAgICAgICAgICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMC43cmVtO1xyXG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC43cmVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICY6YWZ0ZXIge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBsZWZ0OiAtM3JlbTtcclxuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA2cmVtKTtcclxuICAgIGhlaWdodDogNXJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5zaWRlYmFyLXNldHRpbmdzIHtcclxuICBmbGV4OiAwIDAgYXV0bztcclxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcclxuXHJcbiAgLndyYXAtYnV0dG9uIHtcclxuICAgIG1hcmdpbjogMCAtM3JlbTtcclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgcGFkZGluZzogMCAzcmVtO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgIGN1cnNvcjogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9ub3QtYWxsb3dlZC5zdmcpLCBub3QtYWxsb3dlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmljb24ge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG4gICAgICAgIHdpZHRoOiAycmVtO1xyXG4gICAgICAgIGhlaWdodDogMnJlbTtcclxuXHJcbiAgICAgICAgJi5jb250YWN0cyB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2NvbnRhY3RzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuc2V0dGluZ3Mge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxvZ291dCB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uc3luY2hyb25pemF0aW9uLXN0YXR1cyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICBmbGV4OiAwIDAgN3JlbTtcclxuICBmb250LXNpemU6IDEuM3JlbTtcclxuXHJcbiAgLnN0YXR1cy1jb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICAub2ZmbGluZSwgLm9ubGluZSB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMi4ycmVtO1xyXG5cclxuICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgbGVmdDogMDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDEuMnJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5zeW5jaW5nLCAubG9hZGluZyB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA1cmVtO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIGhlaWdodDogMC43cmVtO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIC5zeW5jaW5nIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG5cclxuICAgICAgICAucHJvZ3Jlc3MtYmFyIHtcclxuICAgICAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG5cclxuICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnByb2dyZXNzLXBlcmNlbnQge1xyXG4gICAgICAgICAgZmxleDogMCAwIGF1dG87XHJcbiAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwLjdyZW07XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAuN3JlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5sb2FkaW5nIHtcclxuICAgICAgICBhbmltYXRpb246IG1vdmUgNXMgbGluZWFyIGluZmluaXRlO1xyXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6XHJcbiAgICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICAgIGxpbmVhciwgMCAwLCAxMDAlIDEwMCUsXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMTI1LCByZ2JhKDAsIDAsIDAsIC4xNSkpLCBjb2xvci1zdG9wKC4xMjUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMTApKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNTAwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjUwMCwgcmdiYSgwLCAwLCAwLCAuMTUpKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjEwKSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguODc1LCByZ2JhKDAsIDAsIDAsIC4xMCkpLCBjb2xvci1zdG9wKC44NzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICAgIGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMTI1LCByZ2JhKDAsIDAsIDAsIC4zMCkpLCBjb2xvci1zdG9wKC4xMjUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4yNSkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNTAwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjUwMCwgcmdiYSgwLCAwLCAwLCAuMzApKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjMwKSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguODc1LCByZ2JhKDAsIDAsIDAsIC4yNSkpLCBjb2xvci1zdG9wKC44NzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3cmVtIDdyZW07XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudXBkYXRlLWNvbnRhaW5lciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuXHJcbiAgICAudXBkYXRlLXRleHQge1xyXG4gICAgICBmbGV4OiAxIDEgYXV0bztcclxuICAgICAgZm9udC1zaXplOiAxLjJyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcblxyXG4gICAgICAmLnRpbWUge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAxIDAgYXV0bztcclxuICAgICAgbWFyZ2luOiAwLjNyZW0gMCAwIDAuNnJlbTtcclxuICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcblxyXG4gICAgICAmLnVwZGF0ZSB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy91cGRhdGUuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnRpbWUge1xyXG4gICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvdGltZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgbW92ZSB7XHJcbiAgMCUge1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtN3JlbTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDdyZW07XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/sidebar/sidebar.component.ts": -/*!**********************************************!*\ - !*** ./src/app/sidebar/sidebar.component.ts ***! - \**********************************************/ -/*! exports provided: SidebarComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SidebarComponent", function() { return SidebarComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -/* harmony import */ var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json"); -var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_6___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json", 1); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var SidebarComponent = /** @class */ (function () { - function SidebarComponent(route, router, variablesService, backend, modal, ngZone) { - this.route = route; - this.router = router; - this.variablesService = variablesService; - this.backend = backend; - this.modal = modal; - this.ngZone = ngZone; - this.contacts = _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_6__.contacts; - this.settings = _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_6__.settings; - this.exit = _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_6__.exit; - this.isModalDialogVisible = false; - } - SidebarComponent.prototype.ngOnInit = function () { - var _this = this; - if (this.router.url.indexOf('/wallet/') !== -1) { - var localPathArr = this.router.url.split('/'); - if (localPathArr.length >= 3) { - this.walletActive = parseInt(localPathArr[2], 10); - } - } - else if (this.router.url.indexOf('/details') !== -1) { - this.walletActive = this.variablesService.currentWallet.wallet_id; - } - else { - this.walletActive = null; - } - this.walletSubRouting = this.router.events.subscribe(function (event) { - if (event instanceof _angular_router__WEBPACK_IMPORTED_MODULE_1__["NavigationStart"]) { - if (event.url.indexOf('/wallet/') !== -1) { - var localPathArr = event.url.split('/'); - if (localPathArr.length >= 3) { - _this.walletActive = parseInt(localPathArr[2], 10); - } - } - else if (event.url.indexOf('/details') !== -1) { - _this.walletActive = _this.variablesService.currentWallet.wallet_id; - } - else { - _this.walletActive = null; - } - } - }); - }; - SidebarComponent.prototype.goMainPage = function () { - var _this = this; - if (this.route.snapshot.queryParams && this.route.snapshot.queryParams.prevUrl === 'login') { - this.ngZone.run(function () { - _this.router.navigate(['/'], { queryParams: { prevUrl: 'login' } }); - }); - } - else { - this.ngZone.run(function () { - _this.router.navigate(['/']); - }); - } - }; - ; - SidebarComponent.prototype.contactsRoute = function () { - if (this.variablesService.appPass) { - this.router.navigate(['/contacts']); - } - else { - this.modal.prepareModal('error', 'CONTACTS.FORM_ERRORS.SET_MASTER_PASSWORD'); - } - }; - SidebarComponent.prototype.showDialog = function (wallet_id) { - this.isModalDialogVisible = true; - this.closeWalletId = wallet_id; - }; - SidebarComponent.prototype.confirmed = function (confirmed) { - if (confirmed) { - this.closeWallet(this.closeWalletId); - } - this.isModalDialogVisible = false; - }; - SidebarComponent.prototype.closeWallet = function (wallet_id) { - var _this = this; - this.backend.closeWallet(wallet_id, function () { - for (var i = _this.variablesService.wallets.length - 1; i >= 0; i--) { - if (_this.variablesService.wallets[i].wallet_id === _this.variablesService.currentWallet.wallet_id) { - _this.variablesService.wallets.splice(i, 1); - } - } - _this.ngZone.run(function () { - if (_this.variablesService.wallets.length) { - _this.variablesService.currentWallet = _this.variablesService.wallets[0]; - _this.router.navigate(['/wallet/' + _this.variablesService.currentWallet.wallet_id]); - } - else { - _this.router.navigate(['/']); - } - }); - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(); - } - }); - }; - SidebarComponent.prototype.getUpdate = function () { - this.backend.openUrlInBrowser(_shared_constants__WEBPACK_IMPORTED_MODULE_5__["DOWNLOADS_PAGE_URL"]); - }; - SidebarComponent.prototype.goToAuditableWalletHelpPage = function (e) { - e.preventDefault(); - this.backend.openUrlInBrowser(_shared_constants__WEBPACK_IMPORTED_MODULE_5__["AUDITABLE_WALLET_HELP_PAGE"]); - }; - SidebarComponent.prototype.logOut = function () { - var _this = this; - this.variablesService.stopCountdown(); - this.variablesService.appLogin = false; - this.variablesService.appPass = ''; - this.ngZone.run(function () { - _this.router.navigate(['/login'], { queryParams: { type: 'auth' } }); - }); - }; - SidebarComponent.prototype.ngOnDestroy = function () { - this.walletSubRouting.unsubscribe(); - }; - SidebarComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-sidebar', - template: __webpack_require__(/*! ./sidebar.component.html */ "./src/app/sidebar/sidebar.component.html"), - styles: [__webpack_require__(/*! ./sidebar.component.scss */ "./src/app/sidebar/sidebar.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_4__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], SidebarComponent); - return SidebarComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/staking/staking.component.html": -/*!************************************************!*\ - !*** ./src/app/staking/staking.component.html ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n
      \r\n {{ 'STAKING.TITLE' | translate }}\r\n \r\n \r\n \r\n
      \r\n
      \r\n {{ 'STAKING.TITLE_PENDING' | translate }}\r\n {{pending.total | intToMoney}} {{variablesService.defaultCurrency}}\r\n
      \r\n
      \r\n {{ 'STAKING.TITLE_TOTAL' | translate }}\r\n {{total | intToMoney}} {{variablesService.defaultCurrency}}\r\n
      \r\n
      \r\n
      \r\n {{selectedDate.date | date : 'EEEE, MMMM d, y'}}\r\n {{selectedDate.amount}} {{variablesService.defaultCurrency}}\r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n
      \r\n\r\n
      \r\n
      \r\n {{ 'STAKING.TITLE_PERIOD' | translate }}\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n {{ 'STAKING.TITLE_GROUP' | translate }}\r\n
      \r\n
      \r\n \r\n \r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/staking/staking.component.scss": -/*!************************************************!*\ - !*** ./src/app/staking/staking.component.scss ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.chart-header {\n display: flex;\n flex: 0 0 auto; }\n\n.chart-header .general {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n flex-grow: 1;\n font-size: 1.3rem;\n margin: -0.5rem 0; }\n\n.chart-header .general > div {\n display: flex;\n align-items: center;\n margin: 0.5rem 0;\n height: 2rem; }\n\n.chart-header .general > div .label {\n display: inline-block;\n width: 9rem; }\n\n.chart-header .selected {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n flex-grow: 1;\n font-size: 1.8rem; }\n\n.chart-header .selected span {\n line-height: 2.9rem; }\n\n.chart {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-height: 40rem; }\n\n.chart > div {\n position: absolute;\n width: 100%;\n height: 100%; }\n\n.chart-options {\n display: flex;\n align-items: center;\n height: 2.4rem;\n flex: 0 0 auto; }\n\n.chart-options .title {\n font-size: 1.3rem;\n padding: 0 1rem; }\n\n.chart-options .title:first-child {\n padding-left: 0; }\n\n.chart-options .options {\n display: flex;\n justify-content: space-between;\n flex-grow: 1;\n height: 100%; }\n\n.chart-options .options button {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1 1 auto;\n cursor: pointer;\n font-size: 1.3rem;\n margin: 0 0.1rem;\n padding: 0;\n height: 100%; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc3Rha2luZy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzdGFraW5nXFxzdGFraW5nLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxhQUFhO0VBQ2IsY0FBYyxFQUFBOztBQUZoQjtJQUtJLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFBOztBQVhyQjtNQWNNLGFBQWE7TUFDYixtQkFBbUI7TUFDbkIsZ0JBQWdCO01BQ2hCLFlBQVksRUFBQTs7QUFqQmxCO1FBb0JRLHFCQUFxQjtRQUNyQixXQUFXLEVBQUE7O0FBckJuQjtJQTJCSSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGlCQUFpQixFQUFBOztBQWhDckI7TUFtQ00sbUJBQW1CLEVBQUE7O0FBS3pCO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsY0FBYztFQUNkLGlCQUFpQixFQUFBOztBQUxuQjtJQVFJLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQUloQjtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsY0FBYztFQUNkLGNBQWMsRUFBQTs7QUFKaEI7SUFPSSxpQkFBaUI7SUFDakIsZUFBZSxFQUFBOztBQVJuQjtNQVdNLGVBQWUsRUFBQTs7QUFYckI7SUFnQkksYUFBYTtJQUNiLDhCQUE4QjtJQUM5QixZQUFZO0lBQ1osWUFBWSxFQUFBOztBQW5CaEI7TUFzQk0sYUFBYTtNQUNiLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsY0FBYztNQUNkLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLFVBQVU7TUFDVixZQUFZLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zdGFraW5nL3N0YWtpbmcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uY2hhcnQtaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG5cclxuICAuZ2VuZXJhbCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogLTAuNXJlbSAwO1xyXG5cclxuICAgID4gZGl2IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luOiAwLjVyZW0gMDtcclxuICAgICAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAgICAgLmxhYmVsIHtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDlyZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zZWxlY3RlZCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgZm9udC1zaXplOiAxLjhyZW07XHJcblxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjlyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uY2hhcnQge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleDogMSAxIGF1dG87XHJcbiAgbWluLWhlaWdodDogNDByZW07XHJcblxyXG4gID4gZGl2IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gIH1cclxufVxyXG5cclxuLmNoYXJ0LW9wdGlvbnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBoZWlnaHQ6IDIuNHJlbTtcclxuICBmbGV4OiAwIDAgYXV0bztcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgcGFkZGluZzogMCAxcmVtO1xyXG5cclxuICAgICY6Zmlyc3QtY2hpbGR7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5vcHRpb25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICBtYXJnaW46IDAgMC4xcmVtO1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/staking/staking.component.ts": -/*!**********************************************!*\ - !*** ./src/app/staking/staking.component.ts ***! - \**********************************************/ -/*! exports provided: StakingComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StakingComponent", function() { return StakingComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var angular_highcharts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! angular-highcharts */ "./node_modules/angular-highcharts/fesm5/angular-highcharts.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! bignumber.js */ "./node_modules/bignumber.js/bignumber.js"); -/* harmony import */ var bignumber_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(bignumber_js__WEBPACK_IMPORTED_MODULE_7__); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - -var StakingComponent = /** @class */ (function () { - function StakingComponent(route, variablesService, backend, ngZone, intToMoneyPipe, translate) { - this.route = route; - this.variablesService = variablesService; - this.backend = backend; - this.ngZone = ngZone; - this.intToMoneyPipe = intToMoneyPipe; - this.translate = translate; - this.periods = [ - { - title: this.translate.instant('STAKING.PERIOD.WEEK1'), - key: '1 week', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.WEEK2'), - key: '2 week', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.MONTH1'), - key: '1 month', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.MONTH3'), - key: '3 month', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.MONTH6'), - key: '6 month', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.YEAR'), - key: '1 year', - active: false - }, - { - title: this.translate.instant('STAKING.PERIOD.ALL'), - key: 'All', - active: true - } - ]; - this.groups = [ - { - title: this.translate.instant('STAKING.GROUP.DAY'), - key: 'day', - active: true - }, - { - title: this.translate.instant('STAKING.GROUP.WEEK'), - key: 'week', - active: false - }, - { - title: this.translate.instant('STAKING.GROUP.MONTH'), - key: 'month', - active: false - } - ]; - this.selectedDate = { - date: null, - amount: null - }; - this.originalData = []; - this.total = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](0); - this.pending = { - list: [], - total: new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](0) - }; - } - StakingComponent_1 = StakingComponent; - StakingComponent.makeGroupTime = function (key, date) { - if (key === 'day') { - return date.setHours(0, 0, 0, 0); - } - else if (key === 'week') { - return new Date(date.setDate(date.getDate() - date.getDay())).setHours(0, 0, 0, 0); - } - else { - return new Date(date.setDate(1)).setHours(0, 0, 0, 0); - } - }; - StakingComponent.prototype.ngOnInit = function () { - var _this = this; - this.parentRouting = this.route.parent.params.subscribe(function () { - _this.getMiningHistory(); - }); - this.heightAppEvent = this.variablesService.getHeightAppEvent.subscribe(function (newHeight) { - if (!_this.pending.total.isZero()) { - var pendingCount = _this.pending.list.length; - for (var i = pendingCount - 1; i >= 0; i--) { - if (newHeight - _this.pending.list[i].h >= 10) { - _this.pending.list.splice(i, 1); - } - } - if (pendingCount !== _this.pending.list.length) { - _this.pending.total = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](0); - for (var i = 0; i < _this.pending.list.length; i++) { - _this.pending.total = _this.pending.total.plus(_this.pending.list[i].a); - } - } - } - }); - this.refreshStackingEvent = this.variablesService.getRefreshStackingEvent.subscribe(function (wallet_id) { - if (_this.variablesService.currentWallet.wallet_id === wallet_id) { - _this.getMiningHistory(); - } - }); - }; - StakingComponent.prototype.drawChart = function (data) { - var _this = this; - this.chart = new angular_highcharts__WEBPACK_IMPORTED_MODULE_2__["Chart"]({ - title: { text: '' }, - credits: { enabled: false }, - exporting: { enabled: false }, - legend: { enabled: false }, - chart: { - type: 'line', - backgroundColor: 'transparent', - height: null, - zoomType: null, - events: { - load: function () { - _this.changePeriod(); - } - } - }, - yAxis: { - min: 0, - tickAmount: 5, - title: { - text: '' - }, - gridLineColor: '#2b3644', - gridLineWidth: 2, - lineColor: '#2b3644', - lineWidth: 2, - tickWidth: 2, - tickLength: 120, - tickColor: '#2b3644', - labels: { - y: -8, - align: 'left', - x: -120, - style: { - 'color': '#e0e0e0', - 'fontSize': '13px' - }, - format: '{value} ' + this.variablesService.defaultCurrency - }, - showLastLabel: false, - }, - xAxis: { - type: 'datetime', - gridLineColor: '#2b3644', - lineColor: '#2b3644', - lineWidth: 2, - tickWidth: 2, - tickLength: 10, - tickColor: '#2b3644', - labels: { - style: { - 'color': '#e0e0e0', - 'fontSize': '13px' - } - }, - minPadding: 0, - maxPadding: 0, - minRange: 86400000, - // tickInterval: 86400000, - minTickInterval: 3600000, - }, - tooltip: { - enabled: false - }, - plotOptions: { - area: { - fillColor: { - linearGradient: { - x1: 0, - y1: 0, - x2: 0, - y2: 1 - }, - stops: [ - [0, 'rgba(124,181,236,0.2)'], - [1, 'rgba(124,181,236,0)'] - ] - }, - marker: { - enabled: false, - radius: 2 - }, - lineWidth: 2, - threshold: null - }, - series: { - point: { - events: { - mouseOver: function (obj) { - _this.selectedDate.date = obj.target['x']; - _this.selectedDate.amount = obj.target['y']; - } - } - }, - events: { - mouseOut: function () { - _this.selectedDate.date = null; - _this.selectedDate.amount = null; - } - } - } - }, - series: [ - { - type: 'area', - data: data - } - ] - }); - }; - StakingComponent.prototype.getMiningHistory = function () { - var _this = this; - if (this.variablesService.currentWallet.loaded) { - this.backend.getMiningHistory(this.variablesService.currentWallet.wallet_id, function (status, data) { - _this.total = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](0); - _this.pending.list = []; - _this.pending.total = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](0); - _this.originalData = []; - if (data.mined_entries) { - data.mined_entries.forEach(function (item, key) { - if (item.t.toString().length === 10) { - data.mined_entries[key].t = (new Date(item.t * 1000)).setUTCMilliseconds(0); - } - }); - data.mined_entries.forEach(function (item) { - _this.total = _this.total.plus(item.a); - if (_this.variablesService.height_app - item.h < 10) { - _this.pending.list.push(item); - _this.pending.total = _this.pending.total.plus(item.a); - } - _this.originalData.push([parseInt(item.t, 10), parseFloat(_this.intToMoneyPipe.transform(item.a))]); - }); - _this.originalData = _this.originalData.sort(function (a, b) { - return a[0] - b[0]; - }); - } - _this.ngZone.run(function () { - _this.drawChart([]); - }); - }); - } - }; - StakingComponent.prototype.changePeriod = function (period) { - if (period) { - this.periods.forEach(function (p) { - p.active = false; - }); - period.active = true; - } - else { - period = this.periods.find(function (p) { return p.active; }); - } - var d = new Date(); - var min = null; - var newData = []; - var group = this.groups.find(function (g) { return g.active; }); - if (period.key === '1 week') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate() - 7, 0, 0, 0, 0); - } - else if (period.key === '2 week') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate() - 14, 0, 0, 0, 0); - } - else if (period.key === '1 month') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear(), d.getMonth() - 1, d.getDate(), 0, 0, 0, 0); - } - else if (period.key === '3 month') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear(), d.getMonth() - 3, d.getDate(), 0, 0, 0, 0); - } - else if (period.key === '6 month') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear(), d.getMonth() - 6, d.getDate(), 0, 0, 0, 0); - } - else if (period.key === '1 year') { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - min = Date.UTC(d.getFullYear() - 1, d.getMonth(), d.getDate(), 0, 0, 0, 0); - } - else { - this.originalData.forEach(function (item) { - var time = StakingComponent_1.makeGroupTime(group.key, new Date(item[0])); - var find = newData.find(function (itemNew) { return itemNew[0] === time; }); - if (find) { - find[1] = new bignumber_js__WEBPACK_IMPORTED_MODULE_7__["BigNumber"](find[1]).plus(item[1]).toNumber(); - } - else { - newData.push([time, item[1]]); - } - }); - this.chart.ref.series[0].setData(newData, true); - } - this.chart.ref.xAxis[0].setExtremes(min, null); - }; - StakingComponent.prototype.changeGroup = function (group) { - this.groups.forEach(function (g) { - g.active = false; - }); - group.active = true; - this.changePeriod(); - }; - StakingComponent.prototype.ngOnDestroy = function () { - this.parentRouting.unsubscribe(); - this.heightAppEvent.unsubscribe(); - this.refreshStackingEvent.unsubscribe(); - }; - var StakingComponent_1; - StakingComponent = StakingComponent_1 = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-staking', - template: __webpack_require__(/*! ./staking.component.html */ "./src/app/staking/staking.component.html"), - styles: [__webpack_require__(/*! ./staking.component.scss */ "./src/app/staking/staking.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_4__["ActivatedRoute"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_1__["VariablesService"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_5__["IntToMoneyPipe"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_6__["TranslateService"]]) - ], StakingComponent); - return StakingComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/transfer-alias/transfer-alias.component.html": -/*!**************************************************************!*\ - !*** ./src/app/transfer-alias/transfer-alias.component.html ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{ wallet.name }}\r\n {{ 'BREADCRUMBS.TRANSFER_ALIAS' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      0 && (transferAddressAlias || !transferAddressValid || (transferAddressValid && !permissionSend) || notEnoughMoney)\">\r\n
      \r\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.WRONG_ADDRESS' | translate }}\r\n
      \r\n
      \r\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.ALIAS_EXISTS' | translate }}\r\n
      \r\n
      \r\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\r\n
      \r\n
      \r\n
      \r\n\r\n
      {{ \"TRANSFER_ALIAS.COST\" | translate : {value: variablesService.default_fee, currency: variablesService.defaultCurrency} }}
      \r\n\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/transfer-alias/transfer-alias.component.scss": -/*!**************************************************************!*\ - !*** ./src/app/transfer-alias/transfer-alias.component.scss ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-transfer {\n margin: 2.4rem 0; }\n .form-transfer .alias-name {\n width: 50%; }\n .form-transfer .alias-cost {\n font-size: 1.3rem;\n margin-top: 2rem; }\n .form-transfer .wrap-buttons {\n display: flex;\n justify-content: space-between;\n margin: 2.5rem -0.7rem; }\n .form-transfer .wrap-buttons button {\n margin: 0 0.7rem;\n width: 15rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvdHJhbnNmZXItYWxpYXMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcdHJhbnNmZXItYWxpYXNcXHRyYW5zZmVyLWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQSIsImZpbGUiOiJzcmMvYXBwL3RyYW5zZmVyLWFsaWFzL3RyYW5zZmVyLWFsaWFzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tdHJhbnNmZXIge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcblxyXG4gIC5hbGlhcy1uYW1lIHtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgfVxyXG5cclxuICAuYWxpYXMtY29zdCB7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgfVxyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcbiAgICAgIHdpZHRoOiAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/transfer-alias/transfer-alias.component.ts": -/*!************************************************************!*\ - !*** ./src/app/transfer-alias/transfer-alias.component.ts ***! - \************************************************************/ -/*! exports provided: TransferAliasComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TransferAliasComponent", function() { return TransferAliasComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/services/modal.service */ "./src/app/_helpers/services/modal.service.ts"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var TransferAliasComponent = /** @class */ (function () { - function TransferAliasComponent(location, router, backend, variablesService, modalService, ngZone) { - this.location = location; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.modalService = modalService; - this.ngZone = ngZone; - this.transferAddress = ''; - this.requestProcessing = false; - } - TransferAliasComponent.prototype.ngOnInit = function () { - this.wallet = this.variablesService.currentWallet; - var alias = this.backend.getWalletAlias(this.wallet.address); - this.alias = { - name: alias.name, - address: alias.address, - comment: alias.comment, - tracking_key: alias.tracking_key - }; - this.notEnoughMoney = this.wallet.unlocked_balance.isLessThan(this.variablesService.default_fee_big); - }; - TransferAliasComponent.prototype.changeAddress = function () { - var _this = this; - this.backend.validateAddress(this.transferAddress, function (status) { - _this.transferAddressValid = status; - if (status) { - _this.backend.getPoolInfo(function (statusPool, dataPool) { - if (dataPool.hasOwnProperty('aliases_que') && dataPool.aliases_que.length) { - _this.setStatus(!dataPool.aliases_que.some(function (el) { return el.address === _this.transferAddress; })); - } - else { - _this.setStatus(status); - } - }); - } - else { - _this.setStatus(false); - } - }); - }; - TransferAliasComponent.prototype.setStatus = function (statusSet) { - var _this = this; - this.permissionSend = statusSet; - if (statusSet) { - this.backend.getAliasByAddress(this.transferAddress, function (status) { - _this.ngZone.run(function () { - if (status) { - _this.transferAddressAlias = true; - _this.permissionSend = false; - } - else { - _this.transferAddressAlias = false; - } - }); - }); - } - else { - this.ngZone.run(function () { - _this.transferAddressAlias = false; - }); - } - }; - TransferAliasComponent.prototype.transferAlias = function () { - var _this = this; - if (this.requestProcessing || !this.permissionSend || !this.transferAddressValid || this.notEnoughMoney) { - return; - } - this.requestProcessing = true; - var newAlias = { - name: this.alias.name, - address: this.transferAddress, - comment: this.alias.comment, - tracking_key: this.alias.tracking_key - }; - this.backend.updateAlias(this.wallet.wallet_id, newAlias, this.variablesService.default_fee, function (status, data) { - if (status && data.hasOwnProperty('success') && data.success) { - _this.modalService.prepareModal('info', 'TRANSFER_ALIAS.REQUEST_SEND_REG'); - _this.ngZone.run(function () { - _this.router.navigate(['/wallet/' + _this.wallet.wallet_id]); - }); - } - _this.requestProcessing = false; - }); - }; - TransferAliasComponent.prototype.back = function () { - this.location.back(); - }; - TransferAliasComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-transfer-alias', - template: __webpack_require__(/*! ./transfer-alias.component.html */ "./src/app/transfer-alias/transfer-alias.component.html"), - styles: [__webpack_require__(/*! ./transfer-alias.component.scss */ "./src/app/transfer-alias/transfer-alias.component.scss")] - }), - __metadata("design:paramtypes", [_angular_common__WEBPACK_IMPORTED_MODULE_1__["Location"], - _angular_router__WEBPACK_IMPORTED_MODULE_2__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_4__["VariablesService"], - _helpers_services_modal_service__WEBPACK_IMPORTED_MODULE_5__["ModalService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]]) - ], TransferAliasComponent); - return TransferAliasComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/typing-message/typing-message.component.html": -/*!**************************************************************!*\ - !*** ./src/app/typing-message/typing-message.component.html ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n @bitmain\r\n
      \r\n \r\n \r\n {{ 'COMMON.BACK' | translate }}\r\n \r\n
      \r\n\r\n
      \r\n
      \r\n
      10:39
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n
      \r\n
      11:44
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      12:15
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      13:13
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n
      \r\n
      \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/typing-message/typing-message.component.scss": -/*!**************************************************************!*\ - !*** ./src/app/typing-message/typing-message.component.scss ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.head {\n flex: 0 0 auto;\n box-sizing: content-box;\n margin: -3rem -3rem 0; }\n\n.messages-content {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n flex-grow: 1; }\n\n.messages-content .messages-list {\n display: flex;\n flex-direction: column;\n font-size: 1.3rem;\n margin: 1rem -3rem;\n padding: 0 3rem;\n overflow-y: overlay; }\n\n.messages-content .messages-list div {\n margin: 0.7rem 0; }\n\n.messages-content .messages-list div.date {\n text-align: center; }\n\n.messages-content .messages-list div.my, .messages-content .messages-list div.buddy {\n position: relative;\n padding: 1.8rem;\n max-width: 60%; }\n\n.messages-content .messages-list div.buddy {\n align-self: flex-end; }\n\n.messages-content .type-message {\n display: flex;\n flex: 0 0 auto;\n width: 100%;\n height: 4.2rem; }\n\n.messages-content .type-message .input-block {\n width: 100%; }\n\n.messages-content .type-message .input-block > textarea {\n min-height: 4.2rem; }\n\n.messages-content .type-message button {\n flex: 0 0 15rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvdHlwaW5nLW1lc3NhZ2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcdHlwaW5nLW1lc3NhZ2VcXHR5cGluZy1tZXNzYWdlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxjQUFjO0VBQ2QsdUJBQXVCO0VBQ3ZCLHFCQUFxQixFQUFBOztBQUd2QjtFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsOEJBQThCO0VBQzlCLFlBQVksRUFBQTs7QUFKZDtJQU9JLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsbUJBQW1CLEVBQUE7O0FBWnZCO01BZU0sZ0JBQWdCLEVBQUE7O0FBZnRCO1FBa0JRLGtCQUFrQixFQUFBOztBQWxCMUI7UUFzQlEsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixjQUFjLEVBQUE7O0FBeEJ0QjtRQTRCUSxvQkFBb0IsRUFBQTs7QUE1QjVCO0lBa0NJLGFBQWE7SUFDYixjQUFjO0lBQ2QsV0FBVztJQUNYLGNBQWMsRUFBQTs7QUFyQ2xCO01Bd0NNLFdBQVcsRUFBQTs7QUF4Q2pCO1FBMkNRLGtCQUFrQixFQUFBOztBQTNDMUI7TUFnRE0sZUFBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvdHlwaW5nLW1lc3NhZ2UvdHlwaW5nLW1lc3NhZ2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZCB7XHJcbiAgZmxleDogMCAwIGF1dG87XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgbWFyZ2luOiAtM3JlbSAtM3JlbSAwO1xyXG59XHJcblxyXG4ubWVzc2FnZXMtY29udGVudCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBmbGV4LWdyb3c6IDE7XHJcblxyXG4gIC5tZXNzYWdlcy1saXN0IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICBtYXJnaW46IDFyZW0gLTNyZW07XHJcbiAgICBwYWRkaW5nOiAwIDNyZW07XHJcbiAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xyXG5cclxuICAgIGRpdiB7XHJcbiAgICAgIG1hcmdpbjogMC43cmVtIDA7XHJcblxyXG4gICAgICAmLmRhdGUge1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5teSwgJi5idWRkeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIHBhZGRpbmc6IDEuOHJlbTtcclxuICAgICAgICBtYXgtd2lkdGg6IDYwJTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5idWRkeSB7XHJcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC50eXBlLW1lc3NhZ2Uge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDQuMnJlbTtcclxuXHJcbiAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgID4gdGV4dGFyZWEge1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDQuMnJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDAgMCAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ== */" - -/***/ }), - -/***/ "./src/app/typing-message/typing-message.component.ts": -/*!************************************************************!*\ - !*** ./src/app/typing-message/typing-message.component.ts ***! - \************************************************************/ -/*! exports provided: TypingMessageComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TypingMessageComponent", function() { return TypingMessageComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - -var TypingMessageComponent = /** @class */ (function () { - function TypingMessageComponent(route) { - this.route = route; - this.route.params.subscribe(function (params) { return console.log(params); }); - } - TypingMessageComponent.prototype.ngOnInit = function () { - }; - TypingMessageComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-typing-message', - template: __webpack_require__(/*! ./typing-message.component.html */ "./src/app/typing-message/typing-message.component.html"), - styles: [__webpack_require__(/*! ./typing-message.component.scss */ "./src/app/typing-message/typing-message.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"]]) - ], TypingMessageComponent); - return TypingMessageComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/wallet-details/wallet-details.component.html": -/*!**************************************************************!*\ - !*** ./src/app/wallet-details/wallet-details.component.html ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n\r\n
      \r\n
      \r\n {{variablesService.currentWallet.name}}\r\n {{ 'BREADCRUMBS.WALLET_DETAILS' | translate }}\r\n
      \r\n \r\n
      \r\n\r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_REQUIRED' | translate }}\r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_DUPLICATE' | translate }}\r\n
      \r\n
      \r\n
      = variablesService.maxWalletNameLength\">\r\n {{ 'WALLET_DETAILS.FORM_ERRORS.MAX_LENGTH' | translate }}\r\n
      \r\n
      \r\n\r\n
      \r\n \r\n \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n \r\n \r\n
      \r\n \r\n {{ 'WALLET_DETAILS.FORM_ERRORS.PASSWORDS_DONT_MATCH' | translate }}\r\n \r\n\r\n \r\n\r\n {{ 'WALLET_DETAILS.FORM.SECURED_SEED_WILL_REQUIRE' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n\r\n \r\n
      \r\n
      \r\n {{ 'WALLET_DETAILS.LABEL_SEED_PHRASE' | translate }}\r\n

      \r\n {{ 'WALLET_DETAILS.SEED_IS_UNSECURED' | translate }} \r\n 0\">{{ 'WALLET_DETAILS.SEED_IS_SECURED' | translate }} \r\n

      \r\n
      \r\n
      \r\n \r\n
      = 1 && (index + 1) <= 7 || (index + 1) >= 15 && (index + 1) <= 21\">\r\n {{(index + 1) + '. ' + word}}
      \r\n
      \r\n
      \r\n
      0\">\r\n {{ 'WALLET_DETAILS.REMEMBER_YOU_WILL_REQUIRE' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      " - -/***/ }), - -/***/ "./src/app/wallet-details/wallet-details.component.scss": -/*!**************************************************************!*\ - !*** ./src/app/wallet-details/wallet-details.component.scss ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ".form-details {\n margin-top: 1.8rem; }\n .form-details .input-block:first-child {\n width: 50%; }\n .form-details .wallet-buttons {\n display: flex;\n align-items: center;\n justify-content: space-between; }\n .form-details .wallet-buttons button {\n margin: 2.9rem 0;\n width: 100%;\n max-width: 15rem; }\n .mt-2 {\n margin-top: 2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvd2FsbGV0LWRldGFpbHMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcd2FsbGV0LWRldGFpbHNcXHdhbGxldC1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7RUFEcEI7SUFNTSxVQUFVLEVBQUE7RUFOaEI7SUFXSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QixFQUFBO0VBYmxDO01BZ0JNLGdCQUFnQjtNQUNoQixXQUFXO01BQ1gsZ0JBQWdCLEVBQUE7RUFLdEI7RUFDRSxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3dhbGxldC1kZXRhaWxzL3dhbGxldC1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tZGV0YWlscyB7XHJcbiAgbWFyZ2luLXRvcDogMS44cmVtO1xyXG5cclxuICAuaW5wdXQtYmxvY2sge1xyXG5cclxuICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLndhbGxldC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMi45cmVtIDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm10LTIge1xyXG4gIG1hcmdpbi10b3A6IDJyZW07XHJcbn1cclxuIl19 */" - -/***/ }), - -/***/ "./src/app/wallet-details/wallet-details.component.ts": -/*!************************************************************!*\ - !*** ./src/app/wallet-details/wallet-details.component.ts ***! - \************************************************************/ -/*! exports provided: WalletDetailsComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WalletDetailsComponent", function() { return WalletDetailsComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/fesm5/forms.js"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - -var WalletDetailsComponent = /** @class */ (function () { - function WalletDetailsComponent(router, backend, variablesService, ngZone, location) { - var _this = this; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.ngZone = ngZone; - this.location = location; - this.seedPhrase = ''; - this.showSeed = false; - this.copyAnimation = false; - this.detailsForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - name: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', [ - _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].required, - function (g) { - for (var i = 0; i < _this.variablesService.wallets.length; i++) { - if (g.value === _this.variablesService.wallets[i].name) { - if (_this.variablesService.wallets[i].wallet_id === - _this.variablesService.currentWallet.wallet_id) { - return { same: true }; - } - else { - return { duplicate: true }; - } - } - } - return null; - }, - ]), - path: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"](''), - }); - this.seedPhraseForm = new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormGroup"]({ - password: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - confirmPassword: new _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormControl"]('', _angular_forms__WEBPACK_IMPORTED_MODULE_1__["Validators"].pattern(this.variablesService.pattern)), - }, { validators: this.checkPasswords }); - } - WalletDetailsComponent.prototype.checkPasswords = function (group) { - var pass = group.controls.password.value; - var confirmPass = group.controls.confirmPassword.value; - return pass === confirmPass ? null : { notSame: true }; - }; - WalletDetailsComponent.prototype.ngOnInit = function () { - this.showSeed = false; - this.detailsForm - .get('name') - .setValue(this.variablesService.currentWallet.name); - this.detailsForm - .get('path') - .setValue(this.variablesService.currentWallet.path); - }; - WalletDetailsComponent.prototype.showSeedPhrase = function () { - this.showSeed = true; - }; - WalletDetailsComponent.prototype.onSubmitSeed = function () { - var _this = this; - if (this.seedPhraseForm.valid) { - this.showSeedPhrase(); - var wallet_id = this.variablesService.currentWallet.wallet_id; - var seed_password = this.seedPhraseForm.controls.password.value; - this.backend.getSmartWalletInfo({ wallet_id: wallet_id, seed_password: seed_password }, function (status, data) { - if (data.hasOwnProperty('seed_phrase')) { - _this.ngZone.run(function () { - _this.seedPhrase = data['seed_phrase'].trim(); - }); - } - }); - } - }; - WalletDetailsComponent.prototype.onSubmitEdit = function () { - var _this = this; - if (this.detailsForm.value) { - this.variablesService.currentWallet.name = this.detailsForm.get('name').value; - this.ngZone.run(function () { - _this.router.navigate([ - '/wallet/' + _this.variablesService.currentWallet.wallet_id, - ]); - }); - } - }; - WalletDetailsComponent.prototype.closeWallet = function () { - var _this = this; - this.backend.closeWallet(this.variablesService.currentWallet.wallet_id, function () { - for (var i = _this.variablesService.wallets.length - 1; i >= 0; i--) { - if (_this.variablesService.wallets[i].wallet_id === - _this.variablesService.currentWallet.wallet_id) { - _this.variablesService.wallets.splice(i, 1); - } - } - _this.ngZone.run(function () { - if (_this.variablesService.wallets.length) { - _this.variablesService.currentWallet = _this.variablesService.wallets[0]; - _this.router.navigate([ - '/wallet/' + _this.variablesService.currentWallet.wallet_id, - ]); - } - else { - _this.router.navigate(['/']); - } - }); - if (_this.variablesService.appPass) { - _this.backend.storeSecureAppData(); - } - }); - }; - WalletDetailsComponent.prototype.back = function () { - this.location.back(); - }; - WalletDetailsComponent.prototype.ngOnDestroy = function () { - }; - WalletDetailsComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-wallet-details', - template: __webpack_require__(/*! ./wallet-details.component.html */ "./src/app/wallet-details/wallet-details.component.html"), - styles: [__webpack_require__(/*! ./wallet-details.component.scss */ "./src/app/wallet-details/wallet-details.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_4__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_2__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_3__["VariablesService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _angular_common__WEBPACK_IMPORTED_MODULE_5__["Location"]]) - ], WalletDetailsComponent); - return WalletDetailsComponent; -}()); - - - -/***/ }), - -/***/ "./src/app/wallet/wallet.component.html": -/*!**********************************************!*\ - !*** ./src/app/wallet/wallet.component.html ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "
      \r\n
      \r\n

      {{variablesService.currentWallet.name}}

      \r\n
      \r\n \r\n
      \r\n {{variablesService.currentWallet.alias['name']}}\r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n {{variablesService.currentWallet.address}}\r\n \r\n
      \r\n
      \r\n {{variablesService.currentWallet.balance | intToMoney : '3'}} {{variablesService.defaultCurrency}}\r\n $ {{variablesService.currentWallet.getMoneyEquivalent(variablesService.moneyEquivalent) | intToMoney | number : '1.2-2'}}\r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n \r\n \r\n
      \r\n
      \r\n {{ tab.title | translate }}\r\n {{variablesService.currentWallet.new_contracts}}\r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n \r\n <\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n >\r\n \r\n\r\n
      \r\n
      \r\n Hide mining transactions\r\n
      \r\n {{ 'STAKING.SWITCH.ON' | translate }}\r\n \r\n {{ 'STAKING.SWITCH.OFF' | translate }}\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n" - -/***/ }), - -/***/ "./src/app/wallet/wallet.component.scss": -/*!**********************************************!*\ - !*** ./src/app/wallet/wallet.component.scss ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = ":host {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: 0 3rem 3rem;\n min-width: 95rem;\n width: 100%;\n height: 100%; }\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 auto;\n height: 8rem; }\n\n.header > div {\n display: flex;\n align-items: center; }\n\n.header > div :not(:last-child) {\n margin-right: 3.2rem; }\n\n.header h3 {\n font-size: 1.7rem;\n font-weight: 600;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n max-width: 50rem;\n line-height: 2.7rem; }\n\n.header button {\n display: flex;\n align-items: center;\n background: transparent;\n border: none;\n cursor: pointer;\n font-weight: 400;\n outline: none;\n padding: 0; }\n\n.header button .icon {\n margin-right: 1.2rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.header button .icon.account {\n height: 1.6rem;\n -webkit-mask: url('account.svg') no-repeat center;\n mask: url('account.svg') no-repeat center; }\n\n.header button .icon.lock {\n -webkit-mask: url('lock.svg') no-repeat center;\n mask: url('lock.svg') no-repeat center; }\n\n.header button .icon.details {\n -webkit-mask: url('details-settings.svg') no-repeat center;\n mask: url('details-settings.svg') no-repeat center;\n margin-right: 0;\n height: 1.8rem; }\n\n.header button .icon.close-wallet {\n -webkit-mask: url('close-wallet.svg') no-repeat center;\n mask: url('close-wallet.svg') no-repeat center;\n margin-right: 0; }\n\n.header .alias {\n display: flex;\n align-items: center;\n font-size: 1.3rem; }\n\n.header .alias .icon {\n cursor: pointer;\n margin-right: 1.2rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.header .alias .icon.edit {\n -webkit-mask: url('details.svg') no-repeat center;\n mask: url('details.svg') no-repeat center; }\n\n.header .alias .icon.transfer {\n -webkit-mask: url('send.svg') no-repeat center;\n mask: url('send.svg') no-repeat center; }\n\n.address {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n font-size: 1.4rem;\n line-height: 1.7rem; }\n\n.address .icon {\n cursor: pointer;\n margin-left: 1.2rem;\n width: 1.7rem;\n height: 1.7rem; }\n\n.address .icon.copy {\n width: 1.8rem;\n -webkit-mask: url('copy.svg') no-repeat center;\n mask: url('copy.svg') no-repeat center; }\n\n.address .icon.copy:hover {\n opacity: 0.75; }\n\n.address .icon.copied {\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\n mask: url('complete-testwallet.svg') no-repeat center; }\n\n.balance {\n display: flex;\n align-items: flex-end;\n justify-content: flex-start;\n flex: 0 0 auto;\n margin: 2.6rem 0; }\n\n.balance :first-child {\n font-size: 3.3rem;\n font-weight: 600;\n line-height: 2.4rem;\n margin-right: 3.5rem; }\n\n.balance :last-child {\n font-size: 1.8rem;\n font-weight: 600;\n line-height: 1.3rem; }\n\n.tabs {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto; }\n\n.tabs .tabs-header {\n display: flex;\n justify-content: space-between;\n flex: 0 0 auto; }\n\n.tabs .tabs-header .tab {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1 0 auto;\n cursor: pointer;\n padding: 0 1rem;\n height: 5rem; }\n\n.tabs .tabs-header .tab.hide {\n display: none; }\n\n.tabs .tabs-header .tab .animated {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 1.3rem; }\n\n.tabs .tabs-header .tab .animated ::ng-deep svg {\n width: 2rem;\n height: 2rem; }\n\n.tabs .tabs-header .tab .animated ::ng-deep svg path, .tabs .tabs-header .tab .animated ::ng-deep svg circle, .tabs .tabs-header .tab .animated ::ng-deep svg polygon {\n fill: #4db1ff; }\n\n.tabs .tabs-header .tab .icon {\n margin-right: 1.3rem;\n width: 2rem;\n height: 2rem; }\n\n.tabs .tabs-header .tab .icon.send {\n -webkit-mask: url('send.svg') no-repeat center;\n mask: url('send.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .icon.receive {\n -webkit-mask: url('receive.svg') no-repeat center;\n mask: url('receive.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .icon.history {\n -webkit-mask: url('history.svg') no-repeat center;\n mask: url('history.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .icon.contracts {\n -webkit-mask: url('contracts.svg') no-repeat center;\n mask: url('contracts.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .icon.messages {\n -webkit-mask: url('message.svg') no-repeat center;\n mask: url('message.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .icon.staking {\n -webkit-mask: url('staking.svg') no-repeat center;\n mask: url('staking.svg') no-repeat center; }\n\n.tabs .tabs-header .tab .indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 1rem;\n font-size: 1rem;\n font-weight: 600;\n margin-left: 1.3rem;\n padding: 0 0.5rem;\n min-width: 1.6rem;\n height: 1.6rem; }\n\n.tabs .tabs-header .tab.disabled {\n cursor: url('not-allowed.svg'), not-allowed; }\n\n.tabs .tabs-header .tab:not(:last-child) {\n margin-right: 0.3rem; }\n\n.tabs .tabs-content {\n display: flex;\n padding: 3rem;\n flex: 1 1 auto;\n overflow-x: hidden;\n overflow-y: overlay; }\n\n.tabs .pagination-wrapper .pagination {\n padding: 1rem;\n display: flex;\n justify-content: space-between;\n align-items: center; }\n\n.tabs .pagination-wrapper .pagination button {\n margin-right: 0.5rem;\n padding: 0;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.2rem;\n transition: all 0.3s; }\n\n.tabs .pagination-wrapper .pagination .disabled {\n background-color: #18202a;\n color: #e0e0e0;\n opacity: 0.3;\n cursor: default;\n transition: all 0.3s; }\n\n.mining-transaction-switch {\n display: flex;\n align-items: center; }\n\n.mining-transaction-switch .switch-text {\n margin-right: 1rem;\n font-size: 1.3rem;\n color: #565c62; }\n\n.mining-transaction-switch .switch {\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-radius: 1rem;\n cursor: pointer;\n font-size: 1rem;\n padding: 0.5rem;\n width: 5rem;\n height: 2rem; }\n\n.mining-transaction-switch .switch .circle {\n border-radius: 1rem;\n width: 1.2rem;\n height: 1.2rem; }\n\n.mining-transaction-switch .switch .option {\n margin: 0 0.2rem;\n line-height: 1.2rem; }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvd2FsbGV0L0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXHdhbGxldFxcd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQixXQUFXO0VBQ1gsWUFBWSxFQUFBOztBQUdkO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsY0FBYztFQUNkLFlBQVksRUFBQTs7QUFMZDtJQVFJLGFBQWE7SUFDYixtQkFBbUIsRUFBQTs7QUFUdkI7TUFZTSxvQkFBb0IsRUFBQTs7QUFaMUI7SUFpQkksaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUE7O0FBdkJ2QjtJQTJCSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixZQUFZO0lBQ1osZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsVUFBVSxFQUFBOztBQWxDZDtNQXFDTSxvQkFBb0I7TUFDcEIsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUF2Q3BCO1FBMENRLGNBQWM7UUFDZCxpREFBMEQ7Z0JBQTFELHlDQUEwRCxFQUFBOztBQTNDbEU7UUErQ1EsOENBQXVEO2dCQUF2RCxzQ0FBdUQsRUFBQTs7QUEvQy9EO1FBbURRLDBEQUFtRTtnQkFBbkUsa0RBQW1FO1FBQ25FLGVBQWU7UUFDZixjQUFjLEVBQUE7O0FBckR0QjtRQXlEUSxzREFBK0Q7Z0JBQS9ELDhDQUErRDtRQUMvRCxlQUFlLEVBQUE7O0FBMUR2QjtJQWdFSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGlCQUFpQixFQUFBOztBQWxFckI7TUFxRU0s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QVksRUFBQTs7QUFsQmhCO01BcUJNLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQXZCcEI7TUEyQk0sZ0JBQWdCO01BQ2hCLG1CQUFtQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvd2FsbGV0L3dhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHBhZGRpbmc6IDAgM3JlbSAzcmVtO1xyXG4gIG1pbi13aWR0aDogOTVyZW07XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIGhlaWdodDogOHJlbTtcclxuXHJcbiAgPiBkaXYge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgOm5vdCg6bGFzdC1jaGlsZCkge1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDMuMnJlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGgzIHtcclxuICAgIGZvbnQtc2l6ZTogMS43cmVtO1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICBtYXgtd2lkdGg6IDUwcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuICB9XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5hY2NvdW50IHtcclxuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2FjY291bnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmxvY2sge1xyXG4gICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvbG9jay5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuZGV0YWlscyB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9kZXRhaWxzLXNldHRpbmdzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuY2xvc2Utd2FsbGV0IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLXdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYWxpYXMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuXHJcbiAgICAuaWNvbiB7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5lZGl0IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2RldGFpbHMuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnRyYW5zZmVyIHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbmQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uYWRkcmVzcyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjdyZW07XHJcblxyXG4gIC5pY29uIHtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XHJcbiAgICB3aWR0aDogMS43cmVtO1xyXG4gICAgaGVpZ2h0OiAxLjdyZW07XHJcblxyXG4gICAgJi5jb3B5IHtcclxuICAgICAgd2lkdGg6IDEuOHJlbTtcclxuICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9jb3B5LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNzU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmLmNvcGllZCB7XHJcbiAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvY29tcGxldGUtdGVzdHdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uYmFsYW5jZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XHJcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIG1hcmdpbjogMi42cmVtIDA7XHJcblxyXG4gIDpmaXJzdC1jaGlsZCB7XHJcbiAgICBmb250LXNpemU6IDMuM3JlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAzLjVyZW07XHJcbiAgfVxyXG5cclxuICA6bGFzdC1jaGlsZCB7XHJcbiAgICBmb250LXNpemU6IDEuOHJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xyXG4gIH1cclxufVxyXG5cclxuLnRhYnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBmbGV4OiAxIDEgYXV0bztcclxuXHJcbiAgLnRhYnMtaGVhZGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4OiAwIDAgYXV0bztcclxuXHJcbiAgICAudGFiIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIHBhZGRpbmc6IDAgMXJlbTtcclxuICAgICAgaGVpZ2h0OiA1cmVtO1xyXG4gICAgICAmLmhpZGUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgICAgLmFuaW1hdGVkIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjNyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5hbmltYXRlZCA6Om5nLWRlZXAgc3ZnIHtcclxuXHJcbiAgICAgICAgd2lkdGg6IDJyZW07XHJcbiAgICAgICAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAgICAgICBwYXRoLCBjaXJjbGUsIHBvbHlnb24ge1xyXG4gICAgICAgICAgZmlsbDogIzRkYjFmZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5pY29uIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuM3JlbTtcclxuICAgICAgICB3aWR0aDogMnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDJyZW07XHJcblxyXG4gICAgICAgICYuc2VuZCB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbmQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5yZWNlaXZlIHtcclxuICAgICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvcmVjZWl2ZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmhpc3Rvcnkge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9oaXN0b3J5LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuY29udHJhY3RzIHtcclxuICAgICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvY29udHJhY3RzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubWVzc2FnZXMge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9tZXNzYWdlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuc3Rha2luZyB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3N0YWtpbmcuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmluZGljYXRvciB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEuM3JlbTtcclxuICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcclxuICAgICAgICBtaW4td2lkdGg6IDEuNnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgY3Vyc29yOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL25vdC1hbGxvd2VkLnN2ZyksIG5vdC1hbGxvd2VkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMC4zcmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGFicy1jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBwYWRkaW5nOiAzcmVtO1xyXG4gICAgZmxleDogMSAxIGF1dG87XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xyXG4gIH1cclxuXHJcblxyXG4gIC5wYWdpbmF0aW9uLXdyYXBwZXIge1xyXG4gICAgLnBhZ2luYXRpb24ge1xyXG4gICAgICBwYWRkaW5nOiAxcmVtO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICB3aWR0aDogMi41cmVtO1xyXG4gICAgICAgIGhlaWdodDogMi41cmVtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG4gICAgICB9XHJcbiAgICAgIC5kaXNhYmxlZCB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzE4MjAyYTtcclxuICAgICAgICBjb2xvcjogI2UwZTBlMDtcclxuICAgICAgICBvcGFjaXR5OiAwLjM7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4ubWluaW5nLXRyYW5zYWN0aW9uLXN3aXRjaCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIC5zd2l0Y2gtdGV4dCB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIGNvbG9yOiAjNTY1YzYyO1xyXG4gIH1cclxuXHJcbiAgLnN3aXRjaCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBmb250LXNpemU6IDFyZW07XHJcbiAgICBwYWRkaW5nOiAwLjVyZW07XHJcbiAgICB3aWR0aDogNXJlbTtcclxuICAgIGhlaWdodDogMnJlbTtcclxuXHJcbiAgICAuY2lyY2xlIHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMXJlbTtcclxuICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLm9wdGlvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjJyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= */" - -/***/ }), - -/***/ "./src/app/wallet/wallet.component.ts": -/*!********************************************!*\ - !*** ./src/app/wallet/wallet.component.ts ***! - \********************************************/ -/*! exports provided: WalletComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WalletComponent", function() { return WalletComponent; }); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm5/router.js"); -/* harmony import */ var _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_helpers/services/variables.service */ "./src/app/_helpers/services/variables.service.ts"); -/* harmony import */ var _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../_helpers/services/backend.service */ "./src/app/_helpers/services/backend.service.ts"); -/* harmony import */ var _ngx_translate_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ngx-translate/core */ "./node_modules/@ngx-translate/core/fesm5/ngx-translate-core.js"); -/* harmony import */ var _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../_helpers/pipes/int-to-money.pipe */ "./src/app/_helpers/pipes/int-to-money.pipe.ts"); -/* harmony import */ var _shared_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../_shared/constants */ "./src/app/_shared/constants.ts"); -/* harmony import */ var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json"); -var _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../../assets/icons/icons.json */ "./src/assets/icons/icons.json", 1); -/* harmony import */ var _helpers_services_pagination_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../_helpers/services/pagination.service */ "./src/app/_helpers/services/pagination.service.ts"); -/* harmony import */ var _helpers_services_pagination_store__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../_helpers/services/pagination.store */ "./src/app/_helpers/services/pagination.store.ts"); -/* harmony import */ var store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! store */ "./src/store.ts"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (undefined && undefined.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - - - - - - - - -var WalletComponent = /** @class */ (function () { - function WalletComponent(route, router, backend, variablesService, ngZone, translate, intToMoneyPipe, pagination, paginationStore, store) { - this.route = route; - this.router = router; - this.backend = backend; - this.variablesService = variablesService; - this.ngZone = ngZone; - this.translate = translate; - this.intToMoneyPipe = intToMoneyPipe; - this.pagination = pagination; - this.paginationStore = paginationStore; - this.store = store; - this.copyAnimation = false; - this.activeTab = 'history'; - this.mining = false; - this.currentPage = 1; - this.sync_started = false; - this.stop_paginate = false; - this.tabs = [ - { - title: 'WALLET.TABS.HISTORY', - icon: 'history', - link: '/history', - indicator: false, - active: true, - animated: _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__.history, - itemHovered: false, - }, - { - title: 'WALLET.TABS.SEND', - icon: 'send', - link: '/send', - indicator: false, - active: false, - animated: _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__.send, - itemHovered: false, - }, - { - title: 'WALLET.TABS.RECEIVE', - icon: 'receive', - link: '/receive', - indicator: false, - active: false, - animated: _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__.receive, - itemHovered: false, - }, - { - title: 'WALLET.TABS.CONTRACTS', - icon: 'contracts', - link: '/contracts', - indicator: 1, - active: false, - animated: _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__.contracts, - itemHovered: false, - }, - /*{ - title: 'WALLET.TABS.MESSAGES', - icon: 'messages', - link: '/messages', - indicator: 32, - active: false, - animated: icons.messages, - itemHovered: false - },*/ - { - title: 'WALLET.TABS.STAKING', - icon: 'staking', - link: '/staking', - indicator: false, - active: false, - animated: _assets_icons_icons_json__WEBPACK_IMPORTED_MODULE_7__.staking, - itemHovered: false, - }, - ]; - } - WalletComponent.prototype.ngOnInit = function () { - var _this = this; - this.subRouting1 = this.route.params.subscribe(function (params) { - // set current wallet only by user click to avoid after sync show synchronized data - _this.walletID = +params['id']; - _this.walletLoaded = _this.variablesService.getWallet(_this.walletID).loaded; - _this.variablesService.setCurrentWallet(_this.walletID); - _this.walletsSubscription = _this.store - .select('sync') - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_11__["filter"])(Boolean), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_11__["distinctUntilChanged"])()) - .subscribe(function (value) { - var data = value.filter(function (item) { return item.wallet_id === _this.walletID; })[0]; - if (data && !data.sync) { - var in_progress = void 0; - var values = _this.store.value.sync; - if (values && values.length) { - in_progress = values.filter(function (item) { return item.sync; }); - _this.variablesService.sync_started = !!(in_progress && in_progress.length); - if (!in_progress) { - _this.variablesService.sync_started = false; - } - } - else { - _this.variablesService.sync_started = false; - } - } - var restore = false; - if (_this.variablesService.after_sync_request.hasOwnProperty(_this.walletID)) { - restore = _this.variablesService.after_sync_request[_this.walletID]; - } - if (!_this.variablesService.sync_started && - restore && - _this.walletID === (data && data.wallet_id)) { - _this.wallet = _this.variablesService.getNotLoadedWallet(); - if (_this.wallet) { - _this.tick(); - } - // if this is was restore wallet and it was selected on moment when sync completed - _this.getRecentTransfers(); - _this.variablesService.after_sync_request[_this.walletID] = false; - } - }); - var after_sync_request = false; - if (_this.variablesService.after_sync_request.hasOwnProperty(_this.walletID)) { - after_sync_request = _this.variablesService.after_sync_request[_this.walletID]; - } - if (after_sync_request && !_this.variablesService.sync_started) { - // if user click on the wallet at the first time after restore. - _this.getRecentTransfers(); - } - if (_this.variablesService.stop_paginate.hasOwnProperty(_this.walletID)) { - _this.stop_paginate = _this.variablesService.stop_paginate[_this.walletID]; - } - else { - _this.stop_paginate = false; - } - // this will hide pagination a bit earlier - _this.wallet = _this.variablesService.getNotLoadedWallet(); - if (_this.wallet) { - _this.tick(); - } - _this.scrolledContent.nativeElement.scrollTop = 0; - clearTimeout(_this.copyAnimationTimeout); - _this.copyAnimation = false; - _this.mining = _this.variablesService.currentWallet.exclude_mining_txs; - if (_this.variablesService.wallets.length === 1) { - _this.walletID = +params['id']; - _this.variablesService.setCurrentWallet(_this.walletID); - } - }); - this.subRouting2 = this.router.events.subscribe(function (val) { - if (val instanceof _angular_router__WEBPACK_IMPORTED_MODULE_1__["RoutesRecognized"]) { - _this.activeTab = val.urlAfterRedirects - .replace('?sidenav=true', '') - .split('/') - .pop(); - if (val.state.root.firstChild && val.state.root.firstChild.firstChild) { - for (var i = 0; i < _this.tabs.length; i++) { - _this.tabs[i].active = - _this.tabs[i].link === - '/' + val.state.root.firstChild.firstChild.url[0].path; - } - } - } - }); - this.queryRouting = this.route.queryParams.subscribe(function (params) { - if (params.send) { - _this.tabs.forEach(function (tab, index) { - if (tab.link === '/send') { - _this.changeTab(index); - } - }); - } - }); - if (this.variablesService.currentWallet.alias.hasOwnProperty('name')) { - this.variablesService.currentWallet.wakeAlias = false; - } - this.aliasSubscription = this.variablesService.getAliasChangedEvent.subscribe(function () { - if (_this.variablesService.currentWallet.alias.hasOwnProperty('name')) { - _this.variablesService.currentWallet.wakeAlias = false; - } - }); - this.updateWalletStatus(); - }; - WalletComponent.prototype.resetPaginationValues = function () { - var _this = this; - this.ngZone.run(function () { - var total_history_item = _this.variablesService.currentWallet - .total_history_item; - var count = _this.variablesService.count; - _this.variablesService.currentWallet.totalPages = Math.ceil(total_history_item / count); - _this.variablesService.currentWallet.exclude_mining_txs = _this.mining; - _this.variablesService.currentWallet.currentPage = 1; - if (!_this.variablesService.currentWallet.totalPages) { - _this.variablesService.currentWallet.totalPages = 1; - } - _this.variablesService.currentWallet.totalPages > - _this.variablesService.maxPages - ? (_this.variablesService.currentWallet.pages = new Array(5) - .fill(1) - .map(function (value, index) { return value + index; })) - : (_this.variablesService.currentWallet.pages = new Array(_this.variablesService.currentWallet.totalPages) - .fill(1) - .map(function (value, index) { return value + index; })); - }); - }; - WalletComponent.prototype.changeTab = function (index) { - var _this = this; - if (((this.tabs[index].link === '/send' || - this.tabs[index].link === '/contracts' || - this.tabs[index].link === '/staking') && - (this.variablesService.daemon_state !== 2 || - !this.variablesService.currentWallet.loaded)) || - ((this.tabs[index].link === '/send' || - this.tabs[index].link === '/contracts') && - this.variablesService.currentWallet.is_watch_only && - this.variablesService.currentWallet.is_auditable)) { - return; - } - this.tabs.forEach(function (tab) { - tab.active = false; - }); - this.tabs[index].active = true; - this.ngZone.run(function () { - _this.scrolledContent.nativeElement.scrollTop = 0; - _this.router.navigate(['wallet/' + _this.walletID + _this.tabs[index].link]); - }); - }; - WalletComponent.prototype.itemHovered = function (index, state) { - this.tabs[index].itemHovered = state; - }; - WalletComponent.prototype.copyAddress = function () { - var _this = this; - this.backend.setClipboard(this.variablesService.currentWallet.address); - this.copyAnimation = true; - this.copyAnimationTimeout = window.setTimeout(function () { - _this.copyAnimation = false; - }, 2000); - }; - WalletComponent.prototype.getTooltip = function () { - var _this = this; - this.balanceTooltip = document.createElement('div'); - var available = document.createElement('span'); - available.setAttribute('class', 'available'); - available.innerHTML = this.translate.instant('WALLET.AVAILABLE_BALANCE', { - available: this.intToMoneyPipe.transform(this.variablesService.currentWallet.unlocked_balance), - currency: this.variablesService.defaultCurrency, - }); - this.balanceTooltip.appendChild(available); - var locked = document.createElement('span'); - locked.setAttribute('class', 'locked'); - locked.innerHTML = this.translate.instant('WALLET.LOCKED_BALANCE', { - locked: this.intToMoneyPipe.transform(this.variablesService.currentWallet.balance.minus(this.variablesService.currentWallet.unlocked_balance)), - currency: this.variablesService.defaultCurrency, - }); - this.balanceTooltip.appendChild(locked); - var link = document.createElement('span'); - link.setAttribute('class', 'link'); - link.innerHTML = this.translate.instant('WALLET.LOCKED_BALANCE_LINK'); - link.addEventListener('click', function () { - _this.openInBrowser(_shared_constants__WEBPACK_IMPORTED_MODULE_6__["LOCKED_BALANCE_HELP_PAGE"]); - }); - this.balanceTooltip.appendChild(link); - return this.balanceTooltip; - }; - WalletComponent.prototype.onHideTooltip = function () { - this.balanceTooltip = null; - }; - WalletComponent.prototype.openInBrowser = function (link) { - this.backend.openUrlInBrowser(link); - }; - WalletComponent.prototype.setPage = function (pageNumber) { - // this is will allow pagination for wallets that was open from existed wallets' - if (this.variablesService.currentWallet.open_from_exist && - !this.variablesService.currentWallet.updated) { - this.variablesService.get_recent_transfers = false; - this.variablesService.currentWallet.updated = true; - } - if (pageNumber === this.variablesService.currentWallet.currentPage) { - return; - } - // if not running get_recent_transfers callback - if (!this.variablesService.get_recent_transfers) { - this.variablesService.currentWallet.currentPage = pageNumber; - } - if (!this.variablesService.get_recent_transfers) { - this.getRecentTransfers(); - } - }; - WalletComponent.prototype.toggleMiningTransactions = function () { - var _this = this; - if (!this.variablesService.sync_started && !this.wallet) { - var value = this.paginationStore.value; - if (!value) { - this.paginationStore.setPage(1, 0, this.walletID); // add back page for the first page - } - else { - var pages = value.filter(function (item) { return item.walletID === _this.walletID; }); - if (!pages.length) { - this.paginationStore.setPage(1, 0, this.walletID); // add back page for the first page - } - } - this.mining = !this.mining; - this.resetPaginationValues(); - this.getRecentTransfers(); - } - }; - WalletComponent.prototype.tick = function () { - var _this = this; - var walletInterval = setInterval(function () { - _this.wallet = _this.variablesService.getNotLoadedWallet(); - if (!_this.wallet) { - clearInterval(walletInterval); - } - }, 1000); - }; - WalletComponent.prototype.getRecentTransfers = function () { - var _this = this; - var offset = this.pagination.getOffset(this.walletID); - var value = this.paginationStore.value; - var pages = value - ? value.filter(function (item) { return item.walletID === _this.walletID; }) - : []; - this.backend.getRecentTransfers(this.walletID, offset, this.variablesService.count, this.variablesService.currentWallet.exclude_mining_txs, function (status, data) { - var isForward = _this.paginationStore.isForward(pages, _this.variablesService.currentWallet.currentPage); - if (_this.mining && isForward && pages && pages.length === 1) { - _this.variablesService.currentWallet.currentPage = 1; // set init page after navigation back - } - var history = data && data.history; - _this.variablesService.stop_paginate[_this.walletID] = - (history && history.length < _this.variablesService.count) || !history; - _this.stop_paginate = _this.variablesService.stop_paginate[_this.walletID]; - if (!_this.variablesService.stop_paginate[_this.walletID]) { - var page = _this.variablesService.currentWallet.currentPage + 1; - if (isForward && - _this.mining && - history && - history.length === _this.variablesService.count) { - _this.paginationStore.setPage(page, data.last_item_index, _this.walletID); // add back page for current page - } - } - _this.pagination.calcPages(data); - _this.pagination.prepareHistory(data, status); - _this.ngZone.run(function () { - _this.variablesService.get_recent_transfers = false; - if (_this.variablesService.after_sync_request.hasOwnProperty(_this.walletID)) { - // this is will complete get_recent_transfers request - // this will switch of - _this.variablesService.after_sync_request[_this.walletID] = false; - } - }); - }); - }; - WalletComponent.prototype.ngOnDestroy = function () { - this.subRouting1.unsubscribe(); - this.subRouting2.unsubscribe(); - this.queryRouting.unsubscribe(); - this.aliasSubscription.unsubscribe(); - if (this.walletsSubscription) { - this.walletsSubscription.unsubscribe(); - } - clearTimeout(this.copyAnimationTimeout); - }; - WalletComponent.prototype.updateWalletStatus = function () { - var _this = this; - this.backend.eventSubscribe('wallet_sync_progress', function (data) { - var wallet_id = data.wallet_id; - if (wallet_id === _this.walletID) { - _this.ngZone.run(function () { - _this.walletLoaded = false; - }); - } - }); - this.backend.eventSubscribe('update_wallet_status', function (data) { - var wallet_state = data.wallet_state; - var wallet_id = data.wallet_id; - _this.ngZone.run(function () { - if (wallet_state === 2 && wallet_id === _this.walletID) { - _this.walletLoaded = - _this.variablesService.getWallet(_this.walletID) !== null && - _this.variablesService.getWallet(_this.walletID).loaded - ? true - : false; - } - else { - _this.walletLoaded = false; - } - }); - }); - }; - __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('scrolledContent'), - __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"]) - ], WalletComponent.prototype, "scrolledContent", void 0); - WalletComponent = __decorate([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({ - selector: 'app-wallet', - template: __webpack_require__(/*! ./wallet.component.html */ "./src/app/wallet/wallet.component.html"), - styles: [__webpack_require__(/*! ./wallet.component.scss */ "./src/app/wallet/wallet.component.scss")] - }), - __metadata("design:paramtypes", [_angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"], - _angular_router__WEBPACK_IMPORTED_MODULE_1__["Router"], - _helpers_services_backend_service__WEBPACK_IMPORTED_MODULE_3__["BackendService"], - _helpers_services_variables_service__WEBPACK_IMPORTED_MODULE_2__["VariablesService"], - _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"], - _ngx_translate_core__WEBPACK_IMPORTED_MODULE_4__["TranslateService"], - _helpers_pipes_int_to_money_pipe__WEBPACK_IMPORTED_MODULE_5__["IntToMoneyPipe"], - _helpers_services_pagination_service__WEBPACK_IMPORTED_MODULE_8__["PaginationService"], - _helpers_services_pagination_store__WEBPACK_IMPORTED_MODULE_9__["PaginationStore"], - store__WEBPACK_IMPORTED_MODULE_10__["Store"]]) - ], WalletComponent); - return WalletComponent; -}()); - - - -/***/ }), - -/***/ "./src/assets/icons/icons.json": -/*!*************************************!*\ - !*** ./src/assets/icons/icons.json ***! - \*************************************/ -/*! exports provided: logo, contacts, settings, exit, history, send, receive, contracts, messages, staking, default */ -/***/ (function(module) { - -module.exports = {"logo":"","contacts":"","settings":"","exit":"","history":"","send":"","receive":"","contracts":"","messages":"","staking":""}; - -/***/ }), - -/***/ "./src/environments/environment.ts": -/*!*****************************************!*\ - !*** ./src/environments/environment.ts ***! - \*****************************************/ -/*! exports provided: environment */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "environment", function() { return environment; }); -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. -var environment = { - production: false -}; -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/dist/zone-error'; // Included with Angular CLI. - - -/***/ }), - -/***/ "./src/main.ts": -/*!*********************!*\ - !*** ./src/main.ts ***! - \*********************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/fesm5/platform-browser-dynamic.js"); -/* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/app.module */ "./src/app/app.module.ts"); -/* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environments/environment */ "./src/environments/environment.ts"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); -/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_4__); - - - - - -if (_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].production) { - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); -} -Object(_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__["platformBrowserDynamic"])().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]) - .catch(function (err) { return console.error(err); }); - - -/***/ }), - -/***/ "./src/store.ts": -/*!**********************!*\ - !*** ./src/store.ts ***! - \**********************/ -/*! exports provided: Store */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; }); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -var __assign = (undefined && undefined.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - - -var state = { - wallets: undefined, - sync: undefined, -}; -var Store = /** @class */ (function () { - function Store() { - this.subject = new rxjs__WEBPACK_IMPORTED_MODULE_1__["BehaviorSubject"](state); - this.store = this.subject.asObservable().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])()); - } - Object.defineProperty(Store.prototype, "value", { - get: function () { - return this.subject.value; - }, - enumerable: true, - configurable: true - }); - Store.prototype.select = function (name) { - return this.store.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_0__["pluck"])(name)); - }; - // tslint:disable-next-line:no-shadowed-variable - Store.prototype.set = function (name, state) { - var _a; - this.subject.next(__assign({}, this.value, (_a = {}, _a[name] = state, _a))); - }; - return Store; -}()); - - - -/***/ }), - -/***/ 0: -/*!***************************!*\ - !*** multi ./src/main.ts ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! D:\Project\WORK_NEW\zano\src\gui\qt-daemon\html_source\src\main.ts */"./src/main.ts"); - - -/***/ }) - -},[[0,"runtime","vendor"]]]); -//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/src/gui/qt-daemon/html/main.js.map b/src/gui/qt-daemon/html/main.js.map deleted file mode 100644 index 966ac261..00000000 --- a/src/gui/qt-daemon/html/main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/_helpers/directives/confirm-modal/confirm-modal.component.html","webpack:///./src/app/_helpers/directives/confirm-modal/confirm-modal.component.scss","webpack:///./src/app/_helpers/directives/confirm-modal/confirm-modal.component.ts","webpack:///./src/app/_helpers/directives/input-disable-selection/input-disable-selection.directive.ts","webpack:///./src/app/_helpers/directives/input-validate/input-validate.directive.ts","webpack:///./src/app/_helpers/directives/modal-container/modal-container.component.html","webpack:///./src/app/_helpers/directives/modal-container/modal-container.component.scss","webpack:///./src/app/_helpers/directives/modal-container/modal-container.component.ts","webpack:///./src/app/_helpers/directives/progress-container/progress-container.component.html","webpack:///./src/app/_helpers/directives/progress-container/progress-container.component.scss","webpack:///./src/app/_helpers/directives/progress-container/progress-container.component.ts","webpack:///./src/app/_helpers/directives/staking-switch/staking-switch.component.html","webpack:///./src/app/_helpers/directives/staking-switch/staking-switch.component.scss","webpack:///./src/app/_helpers/directives/staking-switch/staking-switch.component.ts","webpack:///./src/app/_helpers/directives/tooltip.directive.ts","webpack:///./src/app/_helpers/directives/transaction-details/transaction-details.component.html","webpack:///./src/app/_helpers/directives/transaction-details/transaction-details.component.scss","webpack:///./src/app/_helpers/directives/transaction-details/transaction-details.component.ts","webpack:///./src/app/_helpers/models/transaction.model.ts","webpack:///./src/app/_helpers/models/wallet.model.ts","webpack:///./src/app/_helpers/pipes/contract-status-messages.pipe.ts","webpack:///./src/app/_helpers/pipes/contract-time-left.pipe.ts","webpack:///./src/app/_helpers/pipes/history-type-messages.pipe.ts","webpack:///./src/app/_helpers/pipes/int-to-money.pipe.ts","webpack:///./src/app/_helpers/pipes/money-to-int.pipe.ts","webpack:///./src/app/_helpers/pipes/safe-html.pipe.ts","webpack:///./src/app/_helpers/services/backend.service.ts","webpack:///./src/app/_helpers/services/modal.service.ts","webpack:///./src/app/_helpers/services/pagination.service.ts","webpack:///./src/app/_helpers/services/pagination.store.ts","webpack:///./src/app/_helpers/services/utils.service.ts","webpack:///./src/app/_helpers/services/variables.service.ts","webpack:///./src/app/_shared/constants.ts","webpack:///./src/app/add-contacts/add-contacts.component.html","webpack:///./src/app/add-contacts/add-contacts.component.scss","webpack:///./src/app/add-contacts/add-contacts.component.ts","webpack:///./src/app/app-routing.module.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.scss","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/assign-alias/assign-alias.component.html","webpack:///./src/app/assign-alias/assign-alias.component.scss","webpack:///./src/app/assign-alias/assign-alias.component.ts","webpack:///./src/app/contact-send/contact-send.component.html","webpack:///./src/app/contact-send/contact-send.component.scss","webpack:///./src/app/contact-send/contact-send.component.ts","webpack:///./src/app/contacts/contacts.component.html","webpack:///./src/app/contacts/contacts.component.scss","webpack:///./src/app/contacts/contacts.component.ts","webpack:///./src/app/contracts/contracts.component.html","webpack:///./src/app/contracts/contracts.component.scss","webpack:///./src/app/contracts/contracts.component.ts","webpack:///./src/app/create-wallet/create-wallet.component.html","webpack:///./src/app/create-wallet/create-wallet.component.scss","webpack:///./src/app/create-wallet/create-wallet.component.ts","webpack:///./src/app/edit-alias/edit-alias.component.html","webpack:///./src/app/edit-alias/edit-alias.component.scss","webpack:///./src/app/edit-alias/edit-alias.component.ts","webpack:///./src/app/export-import/export-import.component.html","webpack:///./src/app/export-import/export-import.component.scss","webpack:///./src/app/export-import/export-import.component.ts","webpack:///./src/app/history/history.component.html","webpack:///./src/app/history/history.component.scss","webpack:///./src/app/history/history.component.ts","webpack:///./src/app/login/login.component.html","webpack:///./src/app/login/login.component.scss","webpack:///./src/app/login/login.component.ts","webpack:///./src/app/main/main.component.html","webpack:///./src/app/main/main.component.scss","webpack:///./src/app/main/main.component.ts","webpack:///./src/app/messages/messages.component.html","webpack:///./src/app/messages/messages.component.scss","webpack:///./src/app/messages/messages.component.ts","webpack:///./src/app/open-wallet-modal/open-wallet-modal.component.html","webpack:///./src/app/open-wallet-modal/open-wallet-modal.component.scss","webpack:///./src/app/open-wallet-modal/open-wallet-modal.component.ts","webpack:///./src/app/open-wallet/open-wallet.component.html","webpack:///./src/app/open-wallet/open-wallet.component.scss","webpack:///./src/app/open-wallet/open-wallet.component.ts","webpack:///./src/app/purchase/purchase.component.html","webpack:///./src/app/purchase/purchase.component.scss","webpack:///./src/app/purchase/purchase.component.ts","webpack:///./src/app/receive/receive.component.html","webpack:///./src/app/receive/receive.component.scss","webpack:///./src/app/receive/receive.component.ts","webpack:///./src/app/restore-wallet/restore-wallet.component.html","webpack:///./src/app/restore-wallet/restore-wallet.component.scss","webpack:///./src/app/restore-wallet/restore-wallet.component.ts","webpack:///./src/app/seed-phrase/seed-phrase.component.html","webpack:///./src/app/seed-phrase/seed-phrase.component.scss","webpack:///./src/app/seed-phrase/seed-phrase.component.ts","webpack:///./src/app/send-modal/send-modal.component.html","webpack:///./src/app/send-modal/send-modal.component.scss","webpack:///./src/app/send-modal/send-modal.component.ts","webpack:///./src/app/send/send.component.html","webpack:///./src/app/send/send.component.scss","webpack:///./src/app/send/send.component.ts","webpack:///./src/app/settings/settings.component.html","webpack:///./src/app/settings/settings.component.scss","webpack:///./src/app/settings/settings.component.ts","webpack:///./src/app/sidebar/sidebar.component.html","webpack:///./src/app/sidebar/sidebar.component.scss","webpack:///./src/app/sidebar/sidebar.component.ts","webpack:///./src/app/staking/staking.component.html","webpack:///./src/app/staking/staking.component.scss","webpack:///./src/app/staking/staking.component.ts","webpack:///./src/app/transfer-alias/transfer-alias.component.html","webpack:///./src/app/transfer-alias/transfer-alias.component.scss","webpack:///./src/app/transfer-alias/transfer-alias.component.ts","webpack:///./src/app/typing-message/typing-message.component.html","webpack:///./src/app/typing-message/typing-message.component.scss","webpack:///./src/app/typing-message/typing-message.component.ts","webpack:///./src/app/wallet-details/wallet-details.component.html","webpack:///./src/app/wallet-details/wallet-details.component.scss","webpack:///./src/app/wallet-details/wallet-details.component.ts","webpack:///./src/app/wallet/wallet.component.html","webpack:///./src/app/wallet/wallet.component.scss","webpack:///./src/app/wallet/wallet.component.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts","webpack:///./src/store.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","module.exports = \"
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{title}}\\r\\n {{message}}\\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \"","module.exports = \":host {\\n position: fixed;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: rgba(255, 255, 255, 0.25);\\n z-index: 5; }\\n\\n.modal {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n background-position: center;\\n background-size: 200%;\\n padding: 3rem;\\n min-width: 34rem;\\n max-width: 60rem; }\\n\\n.modal .content {\\n display: flex; }\\n\\n.modal .content .icon {\\n flex: 0 0 auto;\\n width: 4.4rem;\\n height: 4.4rem; }\\n\\n.modal .content .icon.info {\\n -webkit-mask: url('modal-info.svg') no-repeat center;\\n mask: url('modal-info.svg') no-repeat center; }\\n\\n.modal .content .message-container {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n margin-left: 2rem; }\\n\\n.modal .content .message-container .title {\\n font-size: 1.8rem;\\n font-weight: 600;\\n line-height: 2.2rem; }\\n\\n.modal .content .message-container .message {\\n font-size: 1.3rem;\\n line-height: 1.8rem;\\n margin-top: 0.4rem; }\\n\\n.modal .wrap-btn {\\n display: flex;\\n justify-content: space-between;\\n width: 100%;\\n margin-top: 3.5rem; }\\n\\n.modal .action-button {\\n width: 10rem;\\n height: 2.4rem; }\\n\\n.modal .close-button {\\n position: absolute;\\n top: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: transparent;\\n margin: 0;\\n padding: 0;\\n width: 2.4rem;\\n height: 2.4rem; }\\n\\n.modal .close-button .icon {\\n -webkit-mask: url('close.svg') no-repeat center;\\n mask: url('close.svg') no-repeat center;\\n width: 2.4rem;\\n height: 2.4rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9jb25maXJtLW1vZGFsL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXF9oZWxwZXJzXFxkaXJlY3RpdmVzXFxjb25maXJtLW1vZGFsXFxjb25maXJtLW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUM7RUFDckMsVUFBVSxFQUFBOztBQUVaO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsMkJBQTJCO0VBQzNCLHFCQUFxQjtFQUNyQixhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGdCQUFnQixFQUFBOztBQVJsQjtJQVdJLGFBQWEsRUFBQTs7QUFYakI7TUFjTSxjQUFjO01BQ2QsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUFoQnBCO1FBbUJRLG9EQUE0RDtnQkFBNUQsNENBQTRELEVBQUE7O0FBbkJwRTtNQXdCTSxhQUFhO01BQ2Isc0JBQXNCO01BQ3RCLHVCQUF1QjtNQUN2Qix1QkFBdUI7TUFDdkIsaUJBQWlCLEVBQUE7O0FBNUJ2QjtRQStCUSxpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFBOztBQWpDM0I7UUFxQ1EsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixrQkFBa0IsRUFBQTs7QUF2QzFCO0lBNkNJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLGtCQUFrQixFQUFBOztBQWhEdEI7SUFvREksWUFBWTtJQUNaLGNBQWMsRUFBQTs7QUFyRGxCO0lBeURJLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjLEVBQUE7O0FBbkVsQjtNQXNFTSwrQ0FBdUQ7Y0FBdkQsdUNBQXVEO01BQ3ZELGFBQWE7TUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9faGVscGVycy9kaXJlY3RpdmVzL2NvbmZpcm0tbW9kYWwvY29uZmlybS1tb2RhbC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgdG9wOiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xyXG4gIHotaW5kZXg6IDU7XHJcbn1cclxuLm1vZGFsIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDIwMCU7XHJcbiAgcGFkZGluZzogM3JlbTtcclxuICBtaW4td2lkdGg6IDM0cmVtO1xyXG4gIG1heC13aWR0aDogNjByZW07XHJcblxyXG4gIC5jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgd2lkdGg6IDQuNHJlbTtcclxuICAgICAgaGVpZ2h0OiA0LjRyZW07XHJcblxyXG4gICAgICAmLmluZm8ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9tb2RhbC1pbmZvLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5tZXNzYWdlLWNvbnRhaW5lciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDJyZW07XHJcblxyXG4gICAgICAudGl0bGUge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIuMnJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLm1lc3NhZ2Uge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC40cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAud3JhcC1idG4ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWFyZ2luLXRvcDogMy41cmVtO1xyXG4gIH1cclxuICBcclxuICAuYWN0aW9uLWJ1dHRvbiB7XHJcbiAgICB3aWR0aDogMTByZW07XHJcbiAgICBoZWlnaHQ6IDIuNHJlbTtcclxuICB9XHJcblxyXG4gIC5jbG9zZS1idXR0b24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgd2lkdGg6IDIuNHJlbTtcclxuICAgIGhlaWdodDogMi40cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDIuNHJlbTtcclxuICAgICAgaGVpZ2h0OiAyLjRyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-confirm-modal',\r\n templateUrl: './confirm-modal.component.html',\r\n styleUrls: ['./confirm-modal.component.scss']\r\n})\r\nexport class ConfirmModalComponent implements OnInit {\r\n\r\n @Input() title: string;\r\n @Input() message: string;\r\n @Output() confirmed: EventEmitter = new EventEmitter();\r\n @ViewChild('btn') button: ElementRef;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n this.button.nativeElement.focus();\r\n }\r\n\r\n onSubmit() {\r\n this.confirmed.emit(true);\r\n }\r\n\r\n onClose() {\r\n this.confirmed.emit(false);\r\n }\r\n}\r\n","import {Directive, HostListener} from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'input'\r\n})\r\nexport class InputDisableSelectionDirective {\r\n\r\n constructor() {}\r\n\r\n @HostListener('mousedown', ['$event'])\r\n handleInput(event: Event) {\r\n if ((event.target).readOnly) {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, HostListener} from '@angular/core';\r\nimport {VariablesService} from '../../services/variables.service';\r\n\r\n@Directive({\r\n selector: '[appInputValidate]'\r\n})\r\nexport class InputValidateDirective {\r\n\r\n private type: string;\r\n\r\n constructor(private el: ElementRef, private variablesService: VariablesService) {\r\n }\r\n\r\n @Input('appInputValidate')\r\n public set defineInputType(type: string) {\r\n this.type = type;\r\n }\r\n\r\n @HostListener('input', ['$event'])\r\n handleInput(event: Event) {\r\n if ( this.type === 'money' ) {\r\n this.moneyValidation(event);\r\n } else if ( this.type === 'integer' ) {\r\n this.integerValidation(event);\r\n }\r\n }\r\n\r\n private moneyValidation(event: Event) {\r\n let currentValue = (event.target).value;\r\n const originalValue = currentValue;\r\n const OnlyD = /[^\\d\\.]/g;\r\n const _has_error = currentValue.match(OnlyD);\r\n if (_has_error && _has_error.length) {\r\n currentValue = currentValue.replace(',', '.').replace(OnlyD, '');\r\n }\r\n const _double_separator = currentValue.match(/\\./g);\r\n if (_double_separator && _double_separator.length > 1) {\r\n currentValue = currentValue.substr(0, currentValue.lastIndexOf('.'));\r\n }\r\n if (currentValue.indexOf('.') === 0) {\r\n currentValue = '0' + currentValue;\r\n }\r\n const _zero_fill = currentValue.split('.');\r\n if (_zero_fill[0].length > 7) {\r\n _zero_fill[0] = _zero_fill[0].substr(0, 7);\r\n }\r\n\r\n if (1 in _zero_fill && _zero_fill[1].length) {\r\n _zero_fill[1] = _zero_fill[1].substr(0, this.variablesService.digits);\r\n }\r\n currentValue = _zero_fill.join('.');\r\n if (currentValue !== originalValue) {\r\n (event.target).value = currentValue;\r\n const cursorPosition = (event.target).selectionEnd;\r\n (event.target).setSelectionRange(cursorPosition, cursorPosition);\r\n (event.target).dispatchEvent(new Event('input'));\r\n }\r\n }\r\n\r\n private integerValidation(event: Event) {\r\n let currentValue = (event.target).value;\r\n const originalValue = currentValue;\r\n const OnlyD = /[^\\d]/g;\r\n const _has_error = currentValue.match(OnlyD);\r\n if (_has_error && _has_error.length) {\r\n currentValue = currentValue.replace(OnlyD, '');\r\n }\r\n if (currentValue !== originalValue) {\r\n const cursorPosition = (event.target).selectionEnd;\r\n (event.target).value = currentValue;\r\n (event.target).setSelectionRange(cursorPosition, cursorPosition);\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","module.exports = \"
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{title}}\\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: fixed;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: rgba(255, 255, 255, 0.25); }\\n\\n.modal {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n background-position: center;\\n background-size: 200%;\\n padding: 2rem;\\n min-width: 34rem;\\n max-width: 60rem; }\\n\\n.modal .content {\\n display: flex;\\n margin: 1.2rem 0; }\\n\\n.modal .content .icon {\\n flex: 0 0 auto;\\n width: 4.4rem;\\n height: 4.4rem; }\\n\\n.modal .content .icon.error {\\n -webkit-mask: url('modal-alert.svg') no-repeat center;\\n mask: url('modal-alert.svg') no-repeat center; }\\n\\n.modal .content .icon.success {\\n -webkit-mask: url('modal-success.svg') no-repeat center;\\n mask: url('modal-success.svg') no-repeat center; }\\n\\n.modal .content .icon.info {\\n -webkit-mask: url('modal-info.svg') no-repeat center;\\n mask: url('modal-info.svg') no-repeat center; }\\n\\n.modal .content .message-container {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n margin-left: 2rem; }\\n\\n.modal .content .message-container .title {\\n font-size: 1.8rem;\\n font-weight: 600;\\n line-height: 2.2rem; }\\n\\n.modal .content .message-container .message {\\n font-size: 1.3rem;\\n line-height: 1.8rem;\\n margin-top: 0.4rem; }\\n\\n.modal .action-button {\\n margin: 1.2rem auto 0.6rem;\\n width: 10rem;\\n height: 2.4rem; }\\n\\n.modal .close-button {\\n position: absolute;\\n top: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: transparent;\\n margin: 0;\\n padding: 0;\\n width: 2.4rem;\\n height: 2.4rem; }\\n\\n.modal .close-button .icon {\\n -webkit-mask: url('close.svg') no-repeat center;\\n mask: url('close.svg') no-repeat center;\\n width: 2.4rem;\\n height: 2.4rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9tb2RhbC1jb250YWluZXIvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcX2hlbHBlcnNcXGRpcmVjdGl2ZXNcXG1vZGFsLWNvbnRhaW5lclxcbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFFdkM7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IscUJBQXFCO0VBQ3JCLGFBQWE7RUFDYixnQkFBZ0I7RUFDaEIsZ0JBQWdCLEVBQUE7O0FBUmxCO0lBV0ksYUFBYTtJQUNiLGdCQUFnQixFQUFBOztBQVpwQjtNQWVNLGNBQWM7TUFDZCxhQUFhO01BQ2IsY0FBYyxFQUFBOztBQWpCcEI7UUFvQlEscURBQTZEO2dCQUE3RCw2Q0FBNkQsRUFBQTs7QUFwQnJFO1FBd0JRLHVEQUErRDtnQkFBL0QsK0NBQStELEVBQUE7O0FBeEJ2RTtRQTRCUSxvREFBNEQ7Z0JBQTVELDRDQUE0RCxFQUFBOztBQTVCcEU7TUFpQ00sYUFBYTtNQUNiLHNCQUFzQjtNQUN0Qix1QkFBdUI7TUFDdkIsdUJBQXVCO01BQ3ZCLGlCQUFpQixFQUFBOztBQXJDdkI7UUF3Q1EsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBQTs7QUExQzNCO1FBOENRLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsa0JBQWtCLEVBQUE7O0FBaEQxQjtJQXNESSwwQkFBMEI7SUFDMUIsWUFBWTtJQUNaLGNBQWMsRUFBQTs7QUF4RGxCO0lBNERJLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixTQUFTO0lBQ1QsVUFBVTtJQUNWLGFBQWE7SUFDYixjQUFjLEVBQUE7O0FBdEVsQjtNQXlFTSwrQ0FBdUQ7Y0FBdkQsdUNBQXVEO01BQ3ZELGFBQWE7TUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9faGVscGVycy9kaXJlY3RpdmVzL21vZGFsLWNvbnRhaW5lci9tb2RhbC1jb250YWluZXIuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBib3R0b206IDA7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcclxufVxyXG4ubW9kYWwge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJTtcclxuICBwYWRkaW5nOiAycmVtO1xyXG4gIG1pbi13aWR0aDogMzRyZW07XHJcbiAgbWF4LXdpZHRoOiA2MHJlbTtcclxuXHJcbiAgLmNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIG1hcmdpbjogMS4ycmVtIDA7XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgd2lkdGg6IDQuNHJlbTtcclxuICAgICAgaGVpZ2h0OiA0LjRyZW07XHJcblxyXG4gICAgICAmLmVycm9yIHtcclxuICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvbW9kYWwtYWxlcnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnN1Y2Nlc3Mge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9tb2RhbC1zdWNjZXNzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5pbmZvIHtcclxuICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvbW9kYWwtaW5mby5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubWVzc2FnZS1jb250YWluZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAycmVtO1xyXG5cclxuICAgICAgLnRpdGxlIHtcclxuICAgICAgICBmb250LXNpemU6IDEuOHJlbTtcclxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyLjJyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5tZXNzYWdlIHtcclxuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS44cmVtO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuNHJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFjdGlvbi1idXR0b24ge1xyXG4gICAgbWFyZ2luOiAxLjJyZW0gYXV0byAwLjZyZW07XHJcbiAgICB3aWR0aDogMTByZW07XHJcbiAgICBoZWlnaHQ6IDIuNHJlbTtcclxuICB9XHJcblxyXG4gIC5jbG9zZS1idXR0b24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgd2lkdGg6IDIuNHJlbTtcclxuICAgIGhlaWdodDogMi40cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Nsb3NlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDIuNHJlbTtcclxuICAgICAgaGVpZ2h0OiAyLjRyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-modal-container',\r\n templateUrl: './modal-container.component.html',\r\n styleUrls: ['./modal-container.component.scss']\r\n})\r\nexport class ModalContainerComponent implements OnInit {\r\n\r\n public title: string;\r\n @Input() type: string;\r\n @Input() message: string;\r\n @Output() close = new EventEmitter();\r\n @ViewChild('btn') button: ElementRef;\r\n\r\n constructor(private translate: TranslateService) {}\r\n\r\n ngOnInit() {\r\n this.button.nativeElement.focus();\r\n switch (this.type) {\r\n case 'error': this.title = this.translate.instant('MODALS.ERROR'); break;\r\n case 'success': this.title = this.translate.instant('MODALS.SUCCESS'); break;\r\n case 'info': this.title = this.translate.instant('MODALS.INFO'); break;\r\n }\r\n }\r\n\r\n onClose() {\r\n this.close.emit();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n {{ label | translate }}\\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \".progress-bar-container {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n padding: 0 3rem;\\n width: 100%;\\n height: 3rem; }\\n .progress-bar-container .progress-bar {\\n position: absolute;\\n top: -0.7rem;\\n left: 0;\\n margin: 0 3rem;\\n width: calc(100% - 6rem);\\n height: 0.7rem; }\\n .progress-bar-container .progress-bar .progress-bar-full {\\n height: 0.7rem; }\\n .progress-bar-container .progress-labels {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n font-size: 1.2rem;\\n height: 100%; }\\n .progress-bar-container .progress-labels span {\\n flex: 1 0 0;\\n text-align: center; }\\n .progress-bar-container .progress-labels span:first-child {\\n text-align: left; }\\n .progress-bar-container .progress-labels span:last-child {\\n text-align: right; }\\n .progress-bar-container .progress-time {\\n position: absolute;\\n top: -3rem;\\n left: 50%;\\n transform: translateX(-50%);\\n font-size: 1.2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9wcm9ncmVzcy1jb250YWluZXIvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcX2hlbHBlcnNcXGRpcmVjdGl2ZXNcXHByb2dyZXNzLWNvbnRhaW5lclxccHJvZ3Jlc3MtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCxPQUFPO0VBQ1AsZUFBZTtFQUNmLFdBQVc7RUFDWCxZQUFZLEVBQUE7RUFOZDtJQVNJLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osT0FBTztJQUNQLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsY0FBYyxFQUFBO0VBZGxCO01BaUJNLGNBQWMsRUFBQTtFQWpCcEI7SUFzQkksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsaUJBQWlCO0lBQ2pCLFlBQVksRUFBQTtFQTFCaEI7TUE2Qk0sV0FBVztNQUNYLGtCQUFrQixFQUFBO0VBOUJ4QjtRQWlDUSxnQkFBZ0IsRUFBQTtFQWpDeEI7UUFxQ1EsaUJBQWlCLEVBQUE7RUFyQ3pCO0lBMkNJLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsU0FBUztJQUNULDJCQUEyQjtJQUMzQixpQkFBaUIsRUFBQSIsImZpbGUiOiJzcmMvYXBwL19oZWxwZXJzL2RpcmVjdGl2ZXMvcHJvZ3Jlc3MtY29udGFpbmVyL3Byb2dyZXNzLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcGFkZGluZzogMCAzcmVtO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogM3JlbTtcclxuXHJcbiAgLnByb2dyZXNzLWJhciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IC0wLjdyZW07XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgbWFyZ2luOiAwIDNyZW07XHJcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNnJlbSk7XHJcbiAgICBoZWlnaHQ6IDAuN3JlbTtcclxuXHJcbiAgICAucHJvZ3Jlc3MtYmFyLWZ1bGwge1xyXG4gICAgICBoZWlnaHQ6IDAuN3JlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy1sYWJlbHMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICBzcGFuIHtcclxuICAgICAgZmxleDogMSAwIDA7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy10aW1lIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTNyZW07XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICB9XHJcbn1cclxuIl19 */\"","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-progress-container',\r\n templateUrl: './progress-container.component.html',\r\n styleUrls: ['./progress-container.component.scss']\r\n})\r\nexport class ProgressContainerComponent implements OnInit {\r\n\r\n @Input() width: string;\r\n @Input() labels: [];\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n}\r\n","module.exports = \"
      \\r\\n {{ 'STAKING.SWITCH.ON' | translate }}\\r\\n \\r\\n {{ 'STAKING.SWITCH.OFF' | translate }}\\r\\n
      \\r\\n\"","module.exports = \".switch {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n border-radius: 1rem;\\n cursor: pointer;\\n font-size: 1rem;\\n padding: 0.5rem;\\n width: 5rem;\\n height: 2rem; }\\n .switch .circle {\\n border-radius: 1rem;\\n width: 1.2rem;\\n height: 1.2rem; }\\n .switch .option {\\n margin: 0 0.2rem;\\n line-height: 1.2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy9zdGFraW5nLXN3aXRjaC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxfaGVscGVyc1xcZGlyZWN0aXZlc1xcc3Rha2luZy1zd2l0Y2hcXHN0YWtpbmctc3dpdGNoLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixlQUFlO0VBQ2YsZUFBZTtFQUNmLFdBQVc7RUFDWCxZQUFZLEVBQUE7RUFUZDtJQVlJLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsY0FBYyxFQUFBO0VBZGxCO0lBa0JJLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBQSIsImZpbGUiOiJzcmMvYXBwL19oZWxwZXJzL2RpcmVjdGl2ZXMvc3Rha2luZy1zd2l0Y2gvc3Rha2luZy1zd2l0Y2guY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuc3dpdGNoIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIGZvbnQtc2l6ZTogMXJlbTtcclxuICBwYWRkaW5nOiAwLjVyZW07XHJcbiAgd2lkdGg6IDVyZW07XHJcbiAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAuY2lyY2xlIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgfVxyXG5cclxuICAub3B0aW9uIHtcclxuICAgIG1hcmdpbjogMCAwLjJyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMS4ycmVtO1xyXG4gIH1cclxufVxyXG4iXX0= */\"","import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';\r\nimport {BackendService} from '../../services/backend.service';\r\nimport {VariablesService} from '../../services/variables.service';\r\n\r\n@Component({\r\n selector: 'app-staking-switch',\r\n templateUrl: './staking-switch.component.html',\r\n styleUrls: ['./staking-switch.component.scss']\r\n})\r\nexport class StakingSwitchComponent implements OnInit {\r\n\r\n @Input() wallet_id: boolean;\r\n @Input() staking: boolean;\r\n @Output() stakingChange = new EventEmitter();\r\n\r\n constructor(private backend: BackendService, private variablesService: VariablesService) {}\r\n\r\n ngOnInit() {}\r\n\r\n toggleStaking() {\r\n const wallet = this.variablesService.getWallet(this.wallet_id);\r\n if (wallet && wallet.loaded) {\r\n this.stakingChange.emit(!this.staking);\r\n if (!this.staking) {\r\n this.backend.startPosMining(this.wallet_id);\r\n } else {\r\n this.backend.stopPosMining(this.wallet_id);\r\n }\r\n }\r\n }\r\n}\r\n","import {Directive, Input, Output, ElementRef, HostListener, Renderer2, HostBinding, OnDestroy, EventEmitter} from '@angular/core';\r\nimport {ActivatedRoute} from '@angular/router';\r\n\r\n@Directive({\r\n selector: '[tooltip]'\r\n})\r\n\r\nexport class TooltipDirective implements OnDestroy {\r\n\r\n @HostBinding('style.cursor') cursor;\r\n\r\n @Input('tooltip') tooltipInner: any;\r\n @Input() placement: string;\r\n @Input() tooltipClass: string;\r\n @Input() timeout = 0;\r\n @Input() timeDelay = 0;\r\n @Input() delay = 0;\r\n @Input() showWhenNoOverflow = true;\r\n @Output() onHide = new EventEmitter();\r\n tooltip: HTMLElement;\r\n private enter: (event: MouseEvent) => void;\r\n private leave: (event: MouseEvent) => void;\r\n\r\n removeTooltipTimeout;\r\n removeTooltipTimeoutInner;\r\n\r\n removeTooltipTimeDelay;\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2, private route: ActivatedRoute) {\r\n }\r\n\r\n @HostListener('mouseenter') onMouseEnter() {\r\n if (this.showWhenNoOverflow || (!this.showWhenNoOverflow && this.el.nativeElement.offsetWidth < this.el.nativeElement.scrollWidth)) {\r\n this.cursor = 'pointer';\r\n if (!this.tooltip) {\r\n if (this.timeDelay !== 0) {\r\n this.removeTooltipTimeDelay = setTimeout(() => {\r\n this.show();\r\n }, this.timeDelay);\r\n } else {\r\n this.show();\r\n }\r\n } else {\r\n this.cancelHide();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('mouseleave') onMouseLeave() {\r\n clearTimeout(this.removeTooltipTimeDelay);\r\n if (this.tooltip) {\r\n this.hide();\r\n }\r\n }\r\n\r\n show() {\r\n this.create();\r\n this.placement = this.placement === null ? 'top' : this.placement;\r\n this.setPosition(this.placement);\r\n }\r\n\r\n hide() {\r\n this.removeTooltipTimeout = setTimeout(() => {\r\n this.renderer.setStyle(this.tooltip, 'opacity', '0');\r\n this.removeTooltipTimeoutInner = setTimeout(() => {\r\n this.renderer.removeChild(document.body, this.tooltip);\r\n this.tooltip.removeEventListener('mouseenter', this.enter);\r\n this.tooltip.removeEventListener('mouseleave', this.leave);\r\n this.tooltip = null;\r\n this.onHide.emit(true);\r\n }, this.delay);\r\n }, this.timeout);\r\n }\r\n\r\n cancelHide() {\r\n clearTimeout(this.removeTooltipTimeout);\r\n clearTimeout(this.removeTooltipTimeoutInner);\r\n this.renderer.setStyle(this.tooltip, 'opacity', '1');\r\n }\r\n\r\n create() {\r\n this.tooltip = this.renderer.createElement('div');\r\n let innerBlock = this.renderer.createElement('div');\r\n if (typeof this.tooltipInner === 'string') {\r\n innerBlock.innerHTML = this.tooltipInner;\r\n } else {\r\n innerBlock = this.tooltipInner;\r\n }\r\n this.renderer.addClass(innerBlock, 'tooltip-inner');\r\n this.renderer.addClass(innerBlock, 'scrolled-content');\r\n this.renderer.appendChild(this.tooltip, innerBlock);\r\n this.renderer.appendChild(document.body, this.tooltip);\r\n\r\n this.enter = () => {\r\n this.cancelHide();\r\n };\r\n this.tooltip.addEventListener('mouseenter', this.enter);\r\n this.leave = () => {\r\n if (this.tooltip) {\r\n this.hide();\r\n }\r\n };\r\n this.tooltip.addEventListener('mouseleave', this.leave);\r\n\r\n this.renderer.setStyle(document.body, 'position', 'relative');\r\n this.renderer.setStyle(this.tooltip, 'position', 'absolute');\r\n if (this.tooltipClass !== null) {\r\n const classes = this.tooltipClass.split(' ');\r\n for (let i = 0; i < classes.length; i++) {\r\n this.renderer.addClass(this.tooltip, classes[i]);\r\n }\r\n }\r\n this.renderer.setStyle(this.tooltip, 'opacity', '0');\r\n this.renderer.setStyle(this.tooltip, '-webkit-transition', `opacity ${this.delay}ms`);\r\n this.renderer.setStyle(this.tooltip, '-moz-transition', `opacity ${this.delay}ms`);\r\n this.renderer.setStyle(this.tooltip, '-o-transition', `opacity ${this.delay}ms`);\r\n this.renderer.setStyle(this.tooltip, 'transition', `opacity ${this.delay}ms`);\r\n window.setTimeout(() => {\r\n this.renderer.setStyle(this.tooltip, 'opacity', '1');\r\n }, 0);\r\n }\r\n\r\n setPosition(placement) {\r\n const hostPos = this.el.nativeElement.getBoundingClientRect();\r\n this.renderer.addClass(this.tooltip, 'ng-tooltip-' + placement);\r\n const topExit = hostPos.top - this.tooltip.getBoundingClientRect().height - parseInt(getComputedStyle(this.tooltip).marginTop, 10) < 0;\r\n const bottomExit = window.innerHeight < hostPos.bottom + this.tooltip.getBoundingClientRect().height + parseInt(getComputedStyle(this.tooltip).marginTop, 10);\r\n\r\n switch (placement) {\r\n case 'top':\r\n if (topExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('bottom');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left + (hostPos.right - hostPos.left) / 2 - this.tooltip.getBoundingClientRect().width / 2 + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'top-left':\r\n if (topExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('bottom-left');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'top-right':\r\n if (topExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('bottom-right');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.right - this.tooltip.offsetWidth + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top - this.tooltip.getBoundingClientRect().height + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'bottom':\r\n if (bottomExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('top');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px');\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left + (hostPos.right - hostPos.left) / 2 - this.tooltip.getBoundingClientRect().width / 2 + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'bottom-left':\r\n if (bottomExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('top-left');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px');\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'bottom-right':\r\n if (bottomExit) {\r\n this.renderer.removeClass(this.tooltip, 'ng-tooltip-' + placement);\r\n this.setPosition('top-right');\r\n return;\r\n } else {\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom + 'px');\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.right - this.tooltip.offsetWidth + 'px');\r\n this.checkSides();\r\n }\r\n break;\r\n case 'left':\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top + (hostPos.bottom - hostPos.top) / 2 - this.tooltip.getBoundingClientRect().height / 2 + 'px');\r\n break;\r\n case 'left-top':\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top + 'px');\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px');\r\n break;\r\n case 'left-bottom':\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.left - this.tooltip.getBoundingClientRect().width + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom - this.tooltip.getBoundingClientRect().height + 'px');\r\n break;\r\n case 'right':\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top + (hostPos.bottom - hostPos.top) / 2 - this.tooltip.getBoundingClientRect().height / 2 + 'px');\r\n break;\r\n case 'right-top':\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.top + 'px');\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px');\r\n break;\r\n case 'right-bottom':\r\n this.renderer.setStyle(this.tooltip, 'left', hostPos.right + 'px');\r\n this.renderer.setStyle(this.tooltip, 'top', hostPos.bottom - this.tooltip.getBoundingClientRect().height + 'px');\r\n break;\r\n }\r\n }\r\n\r\n checkSides() {\r\n if (this.tooltip.getBoundingClientRect().left < 0) {\r\n this.renderer.setStyle(this.tooltip, 'left', 0);\r\n }\r\n if (this.tooltip.getBoundingClientRect().right > window.innerWidth) {\r\n this.renderer.setStyle(this.tooltip, 'left', window.innerWidth - this.tooltip.getBoundingClientRect().width + 'px');\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n clearTimeout(this.removeTooltipTimeout);\r\n clearTimeout(this.removeTooltipTimeoutInner);\r\n clearTimeout(this.removeTooltipTimeDelay);\r\n if (this.tooltip) {\r\n this.renderer.removeChild(document.body, this.tooltip);\r\n this.tooltip = null;\r\n }\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n {{ 'HISTORY.DETAILS.ID' | translate }}\\r\\n {{transaction.tx_hash}}\\r\\n {{ 'HISTORY.DETAILS.SIZE' | translate }}\\r\\n {{ 'HISTORY.DETAILS.SIZE_VALUE' | translate : {value: transaction.tx_blob_size} }}\\r\\n
      \\r\\n
      \\r\\n {{ 'HISTORY.DETAILS.HEIGHT' | translate }}\\r\\n {{transaction.height}}\\r\\n {{ 'HISTORY.DETAILS.CONFIRMATION' | translate }}\\r\\n {{transaction.height === 0 ? 0 : variablesService.height_app - transaction.height}}\\r\\n
      \\r\\n
      \\r\\n {{ 'HISTORY.DETAILS.INPUTS' | translate }}\\r\\n {{inputs.join(', ')}}\\r\\n {{ 'HISTORY.DETAILS.OUTPUTS' | translate }}\\r\\n {{outputs.join(', ')}}\\r\\n
      \\r\\n
      \\r\\n {{ 'HISTORY.DETAILS.PAYMENT_ID' | translate }}\\r\\n \\r\\n {{transaction.payment_id}}\\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'HISTORY.DETAILS.COMMENT' | translate }}\\r\\n \\r\\n {{transaction.comment}}\\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%; }\\n\\n.table {\\n border-top: 0.2rem solid #ebebeb;\\n margin: 0 3rem;\\n padding: 0.5rem 0; }\\n\\n.table .row {\\n display: flex;\\n justify-content: flex-start;\\n align-items: center;\\n border-top: none;\\n line-height: 3rem;\\n margin: 0 -3rem;\\n width: 100%;\\n height: 3rem; }\\n\\n.table .row .cell {\\n flex-shrink: 0;\\n flex-grow: 0;\\n padding: 0 1rem;\\n overflow: hidden;\\n text-overflow: ellipsis; }\\n\\n.table .row .cell:first-child {\\n padding-left: 3rem; }\\n\\n.table .row .cell:last-child {\\n padding-right: 3rem; }\\n\\n.table .row .cell.key-value {\\n cursor: pointer; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy90cmFuc2FjdGlvbi1kZXRhaWxzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXF9oZWxwZXJzXFxkaXJlY3RpdmVzXFx0cmFuc2FjdGlvbi1kZXRhaWxzXFx0cmFuc2FjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLE1BQU07RUFDTixPQUFPO0VBQ1AsV0FBVyxFQUFBOztBQUdiO0VBQ0UsZ0NBQWdDO0VBQ2hDLGNBQWM7RUFDZCxpQkFBaUIsRUFBQTs7QUFIbkI7SUFNSSxhQUFhO0lBQ2IsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQWJoQjtNQWdCTSxjQUFjO01BQ2QsWUFBWTtNQUNaLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCLEVBQUE7O0FBcEI3QjtRQXVCUSxrQkFBa0IsRUFBQTs7QUF2QjFCO1FBMkJRLG1CQUFtQixFQUFBOztBQTNCM0I7UUErQlEsZUFBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvX2hlbHBlcnMvZGlyZWN0aXZlcy90cmFuc2FjdGlvbi1kZXRhaWxzL3RyYW5zYWN0aW9uLWRldGFpbHMuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4udGFibGUge1xyXG4gIGJvcmRlci10b3A6IDAuMnJlbSBzb2xpZCAjZWJlYmViO1xyXG4gIG1hcmdpbjogMCAzcmVtO1xyXG4gIHBhZGRpbmc6IDAuNXJlbSAwO1xyXG5cclxuICAucm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgIGxpbmUtaGVpZ2h0OiAzcmVtO1xyXG4gICAgbWFyZ2luOiAwIC0zcmVtO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDNyZW07XHJcblxyXG4gICAgLmNlbGwge1xyXG4gICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgZmxleC1ncm93OiAwO1xyXG4gICAgICBwYWRkaW5nOiAwIDFyZW07XHJcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG5cclxuICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcmVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDNyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYua2V5LXZhbHVlIHtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, OnInit, OnDestroy, Input} from '@angular/core';\r\nimport {Transaction} from '../../models/transaction.model';\r\nimport {VariablesService} from '../../services/variables.service';\r\nimport {BackendService} from '../../services/backend.service';\r\nimport {IntToMoneyPipe} from '../../pipes/int-to-money.pipe';\r\nimport {BLOCK_EXPLORER_TX_URL_PREFIX} from '../../../_shared/constants';\r\nimport {BLOCK_EXPLORER_TN_TX_URL_PREFIX} from '../../../_shared/constants';\r\n\r\n@Component({\r\n selector: 'app-transaction-details',\r\n templateUrl: './transaction-details.component.html',\r\n styleUrls: ['./transaction-details.component.scss']\r\n})\r\nexport class TransactionDetailsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() transaction: Transaction;\r\n @Input() sizes: Array;\r\n inputs: Array = [];\r\n outputs: Array = [];\r\n\r\n constructor(public variablesService: VariablesService, private backendService: BackendService, private intToMoneyPipe: IntToMoneyPipe) {}\r\n\r\n ngOnInit() {\r\n for (const input in this.transaction.td['spn']) {\r\n if (this.transaction.td['spn'].hasOwnProperty(input)) {\r\n this.inputs.push(this.intToMoneyPipe.transform(this.transaction.td['spn'][input]));\r\n }\r\n }\r\n for (const output in this.transaction.td['rcv']) {\r\n if (this.transaction.td['rcv'].hasOwnProperty(output)) {\r\n this.outputs.push(this.intToMoneyPipe.transform(this.transaction.td['rcv'][output]));\r\n }\r\n }\r\n }\r\n\r\n openInBrowser(tr) {\r\n this.backendService.openUrlInBrowser((this.variablesService.testnet ? BLOCK_EXPLORER_TN_TX_URL_PREFIX : BLOCK_EXPLORER_TX_URL_PREFIX)+ tr);\r\n }\r\n\r\n ngOnDestroy() {}\r\n}\r\n","import {BigNumber} from 'bignumber.js';\r\n\r\nexport class Transaction {\r\n amount: BigNumber;\r\n comment: string;\r\n contract: any[];\r\n fee: BigNumber;\r\n height: number;\r\n is_income: boolean;\r\n is_mining: boolean;\r\n is_mixing: boolean;\r\n is_service: boolean;\r\n payment_id: string;\r\n show_sender: boolean;\r\n td: object;\r\n timestamp: number;\r\n tx_blob_size: number;\r\n tx_hash: string;\r\n tx_type: number;\r\n unlock_time: number;\r\n\r\n sortAmount?: BigNumber;\r\n sortFee?: BigNumber;\r\n}\r\n","import {Contract} from './contract.model';\r\nimport {Transaction} from './transaction.model';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\nexport class Wallet {\r\n stop_paginate: boolean;\r\n open_from_exist: boolean;\r\n updated = false;\r\n wallet_id: number;\r\n name: string;\r\n pass: string;\r\n path: string;\r\n address: string;\r\n balance: BigNumber;\r\n unlocked_balance: BigNumber;\r\n mined_total: number;\r\n tracking_hey: string;\r\n is_auditable: boolean;\r\n is_watch_only: boolean;\r\n exclude_mining_txs: boolean;\r\n alias_available: boolean;\r\n\r\n alias?: object;\r\n wakeAlias?: boolean;\r\n staking?: boolean;\r\n new_messages?: number;\r\n new_contracts?: number;\r\n\r\n history: Array = [];\r\n total_history_item?: number;\r\n pages = [];\r\n totalPages: number;\r\n currentPage: number;\r\n excluded_history: Array = [];\r\n\r\n contracts: Array = [];\r\n\r\n progress?: number;\r\n loaded?: boolean;\r\n restore?: boolean;\r\n\r\n send_data?: any = {\r\n address: null,\r\n amount: null,\r\n comment: null,\r\n mixin: null,\r\n fee: null,\r\n hide: null\r\n };\r\n\r\n constructor(id, name, pass, path, address, balance, unlocked_balance, mined = 0, tracking = '') {\r\n this.wallet_id = id;\r\n this.name = name;\r\n this.pass = pass;\r\n this.path = path;\r\n this.address = address;\r\n this.balance = balance;\r\n this.unlocked_balance = unlocked_balance;\r\n this.mined_total = mined;\r\n this.tracking_hey = tracking;\r\n\r\n this.alias = {};\r\n this.staking = false;\r\n this.new_messages = 0;\r\n this.new_contracts = 0;\r\n\r\n this.history = [];\r\n this.excluded_history = [];\r\n\r\n this.progress = 0;\r\n this.loaded = false;\r\n }\r\n\r\n getMoneyEquivalent(equivalent) {\r\n return this.balance.multipliedBy(equivalent).toFixed(0);\r\n }\r\n\r\n havePass(): boolean {\r\n return (this.pass !== '' && this.pass !== null);\r\n }\r\n\r\n isActive(id): boolean {\r\n return this.wallet_id === id;\r\n }\r\n\r\n prepareHistoryItem(item: Transaction): any {\r\n if (item.tx_type === 4) {\r\n item.sortFee = item.amount.plus(item.fee).negated();\r\n item.sortAmount = new BigNumber(0);\r\n } else if (item.tx_type === 3) {\r\n item.sortFee = new BigNumber(0);\r\n } else if ((item.hasOwnProperty('contract') && (item.contract[0].state === 3 || item.contract[0].state === 6 || item.contract[0].state === 601) && !item.contract[0].is_a)) {\r\n item.sortFee = item.fee.negated();\r\n item.sortAmount = item.amount;\r\n } else {\r\n if (!item.is_income) {\r\n item.sortFee = item.fee.negated();\r\n item.sortAmount = item.amount.negated();\r\n } else {\r\n item.sortAmount = item.amount;\r\n }\r\n }\r\n return item;\r\n }\r\n\r\n prepareHistory(items: Transaction[]): void {\r\n for (let i = 0; i < items.length; i++) {\r\n if ((items[i].tx_type === 7 && items[i].is_income) || (items[i].tx_type === 11 && items[i].is_income) || (items[i].amount.eq(0) && items[i].fee.eq(0) && !items[i].is_mining)) {\r\n let exists = false;\r\n for (let j = 0; j < this.excluded_history.length; j++) {\r\n if (this.excluded_history[j].tx_hash === items[i].tx_hash) {\r\n exists = true;\r\n if (this.excluded_history[j].height !== items[i].height) {\r\n this.excluded_history[j] = items[i];\r\n }\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n this.excluded_history.push(items[i]);\r\n }\r\n } else {\r\n let exists = false;\r\n for (let j = 0; j < this.history.length; j++) {\r\n if (this.history[j].tx_hash === items[i].tx_hash) {\r\n exists = true;\r\n if (this.history[j].height !== items[i].height) {\r\n this.history[j] = this.prepareHistoryItem(items[i]);\r\n }\r\n break;\r\n }\r\n }\r\n if (!exists) {\r\n if (this.history.length && items[i].timestamp >= this.history[0].timestamp) {\r\n this.history.unshift(this.prepareHistoryItem(items[i]));\r\n } else {\r\n this.history.push(this.prepareHistoryItem(items[i]));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeFromHistory(hash: string): void {\r\n for (let i = 0; i < this.history.length; i++) {\r\n if (this.history[i].tx_hash === hash) {\r\n this.history.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n prepareContractsAfterOpen(items: any[], exp_med_ts, height_app, viewedContracts, notViewedContracts): void {\r\n const wallet = this;\r\n for (let i = 0; i < items.length; i++) {\r\n const contract = items[i];\r\n let contractTransactionExist = false;\r\n if (wallet && wallet.history) {\r\n contractTransactionExist = wallet.history.some(elem => elem.contract && elem.contract.length && elem.contract[0].contract_id === contract.contract_id);\r\n }\r\n if (!contractTransactionExist && wallet && wallet.excluded_history) {\r\n contractTransactionExist = wallet.excluded_history.some(elem => elem.contract && elem.contract.length && elem.contract[0].contract_id === contract.contract_id);\r\n }\r\n\r\n if (!contractTransactionExist) {\r\n contract.state = 140;\r\n } else if (contract.state === 1 && contract.expiration_time < exp_med_ts) {\r\n contract.state = 110;\r\n } else if (contract.state === 2 && contract.cancel_expiration_time !== 0 && contract.cancel_expiration_time < exp_med_ts && contract.height === 0) {\r\n const searchResult1 = viewedContracts.some(elem => elem.state === 2 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (!searchResult1) {\r\n contract.state = 130;\r\n contract.is_new = true;\r\n }\r\n } else if (contract.state === 1) {\r\n const searchResult2 = notViewedContracts.find(elem => elem.state === 110 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult2) {\r\n if (searchResult2.time === contract.expiration_time) {\r\n contract.state = 110;\r\n } else {\r\n for (let j = 0; j < notViewedContracts.length; j++) {\r\n if (notViewedContracts[j].contract_id === contract.contract_id && notViewedContracts[j].is_a === contract.is_a) {\r\n notViewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n for (let j = 0; j < viewedContracts.length; j++) {\r\n if (viewedContracts[j].contract_id === contract.contract_id && viewedContracts[j].is_a === contract.is_a) {\r\n viewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else if (contract.state === 2 && (contract.height === 0 || (height_app - contract.height) < 10)) {\r\n contract.state = 201;\r\n } else if (contract.state === 2) {\r\n const searchResult3 = viewedContracts.some(elem => elem.state === 120 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult3) {\r\n contract.state = 120;\r\n }\r\n } else if (contract.state === 5) {\r\n const searchResult4 = notViewedContracts.find(elem => elem.state === 130 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult4) {\r\n if (searchResult4.time === contract.cancel_expiration_time) {\r\n contract.state = 130;\r\n } else {\r\n for (let j = 0; j < notViewedContracts.length; j++) {\r\n if (notViewedContracts[j].contract_id === contract.contract_id && notViewedContracts[j].is_a === contract.is_a) {\r\n notViewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n for (let j = 0; j < viewedContracts.length; j++) {\r\n if (viewedContracts[j].contract_id === contract.contract_id && viewedContracts[j].is_a === contract.is_a) {\r\n viewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else if (contract.state === 6 && (contract.height === 0 || (height_app - contract.height) < 10)) {\r\n contract.state = 601;\r\n }\r\n const searchResult = viewedContracts.some(elem => elem.state === contract.state && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n contract.is_new = !searchResult;\r\n\r\n wallet.contracts.push(contract);\r\n }\r\n this.recountNewContracts();\r\n }\r\n\r\n recountNewContracts() {\r\n this.new_contracts = (this.contracts.filter(item => item.is_new === true )).length;\r\n }\r\n\r\n getContract(id): Contract {\r\n for (let i = 0; i < this.contracts.length; i++) {\r\n if (this.contracts[i].contract_id === id) {\r\n return this.contracts[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Pipe({\r\n name: 'contractStatusMessages'\r\n})\r\nexport class ContractStatusMessagesPipe implements PipeTransform {\r\n\r\n constructor(private translate: TranslateService) {}\r\n\r\n getStateSeller(stateNum: number): string {\r\n const state = {part1: '', part2: ''};\r\n switch (stateNum) {\r\n case 1:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NEW_CONTRACT');\r\n break;\r\n case 110:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.IGNORED');\r\n break;\r\n case 201:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.ACCEPTED');\r\n state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.WAIT');\r\n break;\r\n case 2:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.WAITING_BUYER');\r\n break;\r\n case 3:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.COMPLETED');\r\n break;\r\n case 4:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NOT_RECEIVED');\r\n state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.NULLIFIED');\r\n break;\r\n case 5:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.PROPOSAL_CANCEL');\r\n break;\r\n case 601:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.BEING_CANCELLED');\r\n break;\r\n case 6:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.CANCELLED');\r\n break;\r\n case 130:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.IGNORED_CANCEL');\r\n break;\r\n case 140:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.SELLER.EXPIRED');\r\n break;\r\n }\r\n return state.part1 + (state.part2.length ? '. ' + state.part2 : '');\r\n }\r\n\r\n getStateBuyer(stateNum: number): string {\r\n const state = {part1: '', part2: ''};\r\n switch (stateNum) {\r\n case 1:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING');\r\n break;\r\n case 110:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.IGNORED');\r\n break;\r\n case 201:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.ACCEPTED');\r\n state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAIT');\r\n break;\r\n case 2:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.ACCEPTED');\r\n break;\r\n case 120:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING_SELLER');\r\n break;\r\n case 3:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.COMPLETED');\r\n break;\r\n case 4:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.NOT_RECEIVED');\r\n state.part2 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.NULLIFIED');\r\n break;\r\n case 5:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.WAITING_CANCEL');\r\n break;\r\n case 601:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.BEING_CANCELLED');\r\n break;\r\n case 6:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.CANCELLED');\r\n break;\r\n case 130:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.IGNORED_CANCEL');\r\n break;\r\n case 140:\r\n state.part1 = this.translate.instant('CONTRACTS.STATUS_MESSAGES.BUYER.EXPIRED');\r\n break;\r\n }\r\n return state.part1 + (state.part2.length ? '. ' + state.part2 : '');\r\n }\r\n\r\n transform(state: number, is_a?: boolean): any {\r\n if (is_a) {\r\n return this.getStateBuyer(state);\r\n } else {\r\n return this.getStateSeller(state);\r\n }\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {VariablesService} from '../services/variables.service';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Pipe({\r\n name: 'contractTimeLeft'\r\n})\r\nexport class ContractTimeLeftPipe implements PipeTransform {\r\n\r\n constructor(private service: VariablesService, private translate: TranslateService) {}\r\n\r\n transform(value: any, arg?: any): any {\r\n const time = parseInt(((parseInt(value, 10) - this.service.exp_med_ts) / 3600).toFixed(0), 10);\r\n const type = arg || 0;\r\n if (time === 0) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_LESS_ONE');\r\n }\r\n if (this.service.settings.language === 'en') {\r\n if (type === 0) {\r\n if (time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY', {time: time});\r\n }\r\n } else if (type === 1) {\r\n if (time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_RESPONSE', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_RESPONSE', {time: time});\r\n }\r\n } else if (type === 2) {\r\n if (time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_WAITING', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_WAITING', {time: time});\r\n }\r\n }\r\n } else {\r\n const rest = time % 10;\r\n if (type === 0) {\r\n if (((time > 20 ) && (rest === 1)) || time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE', {time: time});\r\n } else if ((time > 1) && (time < 5) || ((time > 20 ) && (rest === 2 || rest === 3 || rest === 4))) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT', {time: time});\r\n }\r\n } else if (type === 1) {\r\n if (((time > 20 ) && (rest === 1)) || time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_RESPONSE', {time: time});\r\n } else if ((time > 1) && (time < 5) || ((time > 20 ) && (rest === 2 || rest === 3 || rest === 4))) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_RESPONSE', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT_RESPONSE', {time: time});\r\n }\r\n } else if (type === 2) {\r\n if (((time > 20 ) && (rest === 1)) || time === 1) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_ONE_WAITING', {time: time});\r\n } else if ((time > 1) && (time < 5) || ((time > 20 ) && (rest === 2 || rest === 3 || rest === 4))) {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_WAITING', {time: time});\r\n } else {\r\n return this.translate.instant('CONTRACTS.TIME_LEFT.REMAINING_MANY_ALT_WAITING', {time: time});\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Pipe({\r\n name: 'historyTypeMessages'\r\n})\r\nexport class HistoryTypeMessagesPipe implements PipeTransform {\r\n\r\n constructor(private translate: TranslateService) {}\r\n\r\n transform(item: any, args?: any): any {\r\n\r\n if (item.tx_type === 0) {\r\n if (item.remote_addresses && item.remote_addresses[0]) {\r\n return item.remote_addresses[0];\r\n } else {\r\n if (item.is_income) {\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.HIDDEN');\r\n } else {\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.UNDEFINED');\r\n }\r\n }\r\n } else if (item.tx_type === 6 && item.height === 0) {\r\n return 'unknown';\r\n } else if (item.tx_type === 9) {\r\n if (item.hasOwnProperty('contract') && item.contract[0].is_a) {\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.COMPLETE_BUYER');\r\n } else {\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.COMPLETE_SELLER');\r\n }\r\n } else {\r\n switch (item.tx_type) {\r\n // case 0:\r\n // return '';\r\n // case 1:\r\n // return '';\r\n // case 2:\r\n // return '';\r\n // case 3:\r\n // return '';\r\n case 4:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.CREATE_ALIAS');\r\n case 5:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.UPDATE_ALIAS');\r\n case 6:\r\n return (item.td['spn'] && item.td['spn'].length) ? this.translate.instant('HISTORY.TYPE_MESSAGES.POS_REWARD') : this.translate.instant('HISTORY.TYPE_MESSAGES.POW_REWARD');\r\n case 7:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.CREATE_CONTRACT');\r\n case 8:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.PLEDGE_CONTRACT');\r\n // case 9:\r\n // return '';\r\n case 10:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.NULLIFY_CONTRACT');\r\n case 11:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.PROPOSAL_CANCEL_CONTRACT');\r\n case 12:\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.CANCEL_CONTRACT');\r\n }\r\n }\r\n\r\n return this.translate.instant('HISTORY.TYPE_MESSAGES.UNDEFINED');\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {VariablesService} from '../services/variables.service';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Pipe({\r\n name: 'intToMoney'\r\n})\r\nexport class IntToMoneyPipe implements PipeTransform {\r\n\r\n constructor(private variablesService: VariablesService) {}\r\n\r\n transform(value: any, args?: any): any {\r\n if (value === 0 || value === undefined) {\r\n return '0';\r\n }\r\n let maxFraction = this.variablesService.digits;\r\n if (args) {\r\n maxFraction = parseInt(args, 10);\r\n }\r\n const power = Math.pow(10, this.variablesService.digits);\r\n let str = (new BigNumber(value)).div(power).toFixed(maxFraction);\r\n\r\n for (let i = str.length - 1; i >= 0; i--) {\r\n if (str[i] !== '0') {\r\n str = str.substr(0, i + 1);\r\n break;\r\n }\r\n }\r\n if (str[str.length - 1] === '.') {\r\n str = str.substr(0, str.length - 1);\r\n }\r\n return str;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {VariablesService} from '../services/variables.service';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Pipe({\r\n name: 'moneyToInt'\r\n})\r\nexport class MoneyToIntPipe implements PipeTransform {\r\n\r\n constructor(private variablesService: VariablesService) {}\r\n\r\n transform(value: any, args?: any): any {\r\n const CURRENCY_DISPLAY_DECIMAL_POINT = this.variablesService.digits;\r\n let result;\r\n if (value) {\r\n let am_str = value.toString().trim();\r\n const point_index = am_str.indexOf('.');\r\n let fraction_size = 0;\r\n if (-1 !== point_index) {\r\n fraction_size = am_str.length - point_index - 1;\r\n while (CURRENCY_DISPLAY_DECIMAL_POINT < fraction_size && '0' === am_str[am_str.length - 1]) {\r\n am_str = am_str.slice(0, am_str.length - 1);\r\n --fraction_size;\r\n }\r\n if (CURRENCY_DISPLAY_DECIMAL_POINT < fraction_size) {\r\n return undefined;\r\n }\r\n am_str = am_str.slice(0, point_index) + am_str.slice(point_index + 1, am_str.length);\r\n } else {\r\n fraction_size = 0;\r\n }\r\n if (!am_str.length) {\r\n return undefined;\r\n }\r\n if (fraction_size < CURRENCY_DISPLAY_DECIMAL_POINT) {\r\n for (let i = 0; i !== CURRENCY_DISPLAY_DECIMAL_POINT - fraction_size; i++) {\r\n am_str = am_str + '0';\r\n }\r\n }\r\n result = (new BigNumber(am_str)).integerValue();\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHTML'\r\n})\r\nexport class SafeHTMLPipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n transform(html: string) {\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {VariablesService} from './variables.service';\r\nimport {ModalService} from './modal.service';\r\nimport {MoneyToIntPipe} from '../pipes/money-to-int.pipe';\r\nimport JSONBigNumber from 'json-bignumber';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Injectable()\r\nexport class BackendService {\r\n\r\n backendObject: any;\r\n backendLoaded = false;\r\n\r\n constructor(\r\n private translate: TranslateService,\r\n private variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private moneyToIntPipe: MoneyToIntPipe\r\n ) {\r\n }\r\n\r\n static bigNumberParser(key, val) {\r\n if (val.constructor.name === 'BigNumber' && ['balance', 'unlocked_balance', 'amount', 'fee', 'b_fee', 'to_pay', 'a_pledge', 'b_pledge', 'coast', 'a'].indexOf(key) === -1) {\r\n return val.toNumber();\r\n }\r\n if (key === 'rcv' || key === 'spn') {\r\n for (let i = 0; i < val.length; i++) {\r\n val[i] = new BigNumber(val[i]);\r\n }\r\n }\r\n return val;\r\n }\r\n\r\n static Debug(type, message) {\r\n switch (type) {\r\n case 0:\r\n console.error(message);\r\n break;\r\n case 1:\r\n console.warn(message);\r\n break;\r\n case 2:\r\n console.log(message);\r\n break;\r\n default:\r\n console.log(message);\r\n break;\r\n }\r\n }\r\n\r\n private informerRun(error, params, command) {\r\n let error_translate = '';\r\n\r\n switch (error) {\r\n case 'NOT_ENOUGH_MONEY':\r\n error_translate = 'ERRORS.NOT_ENOUGH_MONEY';\r\n // error_translate = 'ERRORS.NO_MONEY'; maybe that one?\r\n if (command === 'cancel_offer') {\r\n error_translate = this.translate.instant('ERRORS.NO_MONEY_REMOVE_OFFER', {\r\n 'fee': this.variablesService.default_fee,\r\n 'currency': this.variablesService.defaultCurrency\r\n });\r\n }\r\n break;\r\n case 'CORE_BUSY':\r\n error_translate = 'ERRORS.CORE_BUSY';\r\n break;\r\n case 'BUSY':\r\n error_translate = 'ERRORS.DAEMON_BUSY';\r\n break;\r\n case 'OVERFLOW':\r\n if (command !== 'get_all_aliases') {\r\n error_translate = '';\r\n }\r\n break;\r\n case 'NOT_ENOUGH_OUTPUTS_FOR_MIXING':\r\n error_translate = 'ERRORS.NOT_ENOUGH_OUTPUTS_TO_MIX';\r\n break;\r\n case 'TX_IS_TOO_BIG':\r\n error_translate = 'ERRORS.TRANSACTION_IS_TO_BIG';\r\n break;\r\n case 'DISCONNECTED':\r\n error_translate = 'ERRORS.TRANSFER_ATTEMPT';\r\n break;\r\n case 'ACCESS_DENIED':\r\n error_translate = 'ERRORS.ACCESS_DENIED';\r\n break;\r\n case 'TX_REJECTED':\r\n // if (command === 'request_alias_registration') {\r\n // error_translate = 'INFORMER.ALIAS_IN_REGISTER';\r\n // } else {\r\n error_translate = 'ERRORS.TRANSACTION_ERROR';\r\n // }\r\n break;\r\n case 'INTERNAL_ERROR':\r\n error_translate = 'ERRORS.TRANSACTION_ERROR';\r\n break;\r\n case 'BAD_ARG':\r\n error_translate = 'ERRORS.BAD_ARG';\r\n break;\r\n case 'WALLET_WRONG_ID':\r\n error_translate = 'ERRORS.WALLET_WRONG_ID';\r\n break;\r\n case 'WALLET_WATCH_ONLY_NOT_SUPPORTED':\r\n error_translate = 'ERRORS.WALLET_WATCH_ONLY_NOT_SUPPORTED';\r\n break;\r\n case 'WRONG_PASSWORD':\r\n params = JSON.parse(params);\r\n if (!params.testEmpty) {\r\n error_translate = 'ERRORS.WRONG_PASSWORD';\r\n }\r\n break;\r\n case 'FILE_RESTORED':\r\n if (command === 'open_wallet') {\r\n error_translate = 'ERRORS.FILE_RESTORED';\r\n }\r\n break;\r\n case 'FILE_NOT_FOUND':\r\n if (command !== 'open_wallet' && command !== 'get_alias_info_by_name' && command !== 'get_alias_info_by_address') {\r\n error_translate = this.translate.instant('ERRORS.FILE_NOT_FOUND');\r\n params = JSON.parse(params);\r\n if (params.path) {\r\n error_translate += ': ' + params.path;\r\n }\r\n }\r\n break;\r\n case 'NOT_FOUND':\r\n if (command !== 'open_wallet' && command !== 'get_alias_info_by_name' && command !== 'get_alias_info_by_address') {\r\n error_translate = this.translate.instant('ERRORS.FILE_NOT_FOUND');\r\n params = JSON.parse(params);\r\n if (params.path) {\r\n error_translate += ': ' + params.path;\r\n }\r\n }\r\n break;\r\n case 'CANCELED':\r\n case '':\r\n break;\r\n case 'FAIL':\r\n if (command === 'create_proposal' || command === 'accept_proposal' || command === 'release_contract' || command === 'request_cancel_contract' || command === 'accept_cancel_contract') {\r\n error_translate = ' ';\r\n }\r\n break;\r\n case 'ALREADY_EXISTS':\r\n error_translate = 'ERRORS.FILE_EXIST';\r\n break;\r\n case 'FAILED':\r\n BackendService.Debug(0, `Error: (${error}) was triggered by command: ${command}`);\r\n break;\r\n default:\r\n error_translate = error;\r\n }\r\n if (error.indexOf('FAIL:failed to save file') > -1) {\r\n error_translate = 'ERRORS.FILE_NOT_SAVED';\r\n }\r\n if (error.indexOf('FAILED:failed to open binary wallet file for saving') > -1 && command === 'generate_wallet') {\r\n error_translate = '';\r\n }\r\n\r\n if (error_translate !== '') {\r\n this.modalService.prepareModal('error', error_translate);\r\n }\r\n }\r\n\r\n\r\n private commandDebug(command, params, result) {\r\n BackendService.Debug(2, '----------------- ' + command + ' -----------------');\r\n const debug = {\r\n _send_params: params,\r\n _result: result\r\n };\r\n BackendService.Debug(2, debug);\r\n try {\r\n BackendService.Debug(2, JSONBigNumber.parse(result, BackendService.bigNumberParser));\r\n } catch (e) {\r\n BackendService.Debug(2, {response_data: result, error_code: 'OK'});\r\n }\r\n }\r\n\r\n private backendCallback(resultStr, params, callback, command) {\r\n let Result = resultStr;\r\n if (command !== 'get_clipboard') {\r\n if (!resultStr || resultStr === '') {\r\n Result = {};\r\n } else {\r\n try {\r\n Result = JSONBigNumber.parse(resultStr, BackendService.bigNumberParser);\r\n } catch (e) {\r\n Result = {response_data: resultStr, error_code: 'OK'};\r\n }\r\n }\r\n } else {\r\n Result = {\r\n error_code: 'OK',\r\n response_data: Result\r\n };\r\n }\r\n\r\n const core_busy = Result.error_code === 'CORE_BUSY';\r\n const Status = (Result.error_code === 'OK' || Result.error_code === 'TRUE');\r\n\r\n if (!Status && Status !== undefined && Result.error_code !== undefined) {\r\n BackendService.Debug(1, 'API error for command: \"' + command + '\". Error code: ' + Result.error_code);\r\n }\r\n const data = ((typeof Result === 'object') && 'response_data' in Result) ? Result.response_data : Result;\r\n\r\n let res_error_code = false;\r\n if (typeof Result === 'object' && 'error_code' in Result && Result.error_code !== 'OK' && Result.error_code !== 'TRUE' && Result.error_code !== 'FALSE') {\r\n if (core_busy) {\r\n setTimeout( () => {\r\n // this is will avoid update data when user\r\n // on other wallet after CORE_BUSY (blink of data)\r\n if (command !== 'get_recent_transfers') {\r\n this.runCommand(command, params, callback);\r\n } else {\r\n const current_wallet_id = this.variablesService.currentWallet.wallet_id;\r\n if (current_wallet_id === params.wallet_id) {\r\n this.runCommand(command, params, callback);\r\n }\r\n }\r\n }, 50);\r\n } else {\r\n this.informerRun(Result.error_code, params, command);\r\n res_error_code = Result.error_code;\r\n }\r\n }\r\n\r\n // if ( command === 'get_offers_ex' ){\r\n // Service.printLog( \"get_offers_ex offers count \"+((data.offers)?data.offers.length:0) );\r\n // }\r\n\r\n if (!core_busy) {\r\n if (typeof callback === 'function') {\r\n callback(Status, data, res_error_code);\r\n } else {\r\n return data;\r\n }\r\n }\r\n }\r\n\r\n\r\n private runCommand(command, params?, callback?) {\r\n if (this.backendObject) {\r\n if (command === 'get_recent_transfers') {\r\n this.variablesService.get_recent_transfers = true;\r\n }\r\n const Action = this.backendObject[command];\r\n if (!Action) {\r\n BackendService.Debug(0, 'Run Command Error! Command \"' + command + '\" don\\'t found in backendObject');\r\n } else {\r\n const that = this;\r\n params = (typeof params === 'string') ? params : JSONBigNumber.stringify(params);\r\n if (params === undefined || params === '{}') {\r\n if (command === 'get_recent_transfers') {\r\n this.variablesService.get_recent_transfers = false;\r\n }\r\n Action(function (resultStr) {\r\n that.commandDebug(command, params, resultStr);\r\n return that.backendCallback(resultStr, params, callback, command);\r\n });\r\n } else {\r\n Action(params, function (resultStr) {\r\n that.commandDebug(command, params, resultStr);\r\n return that.backendCallback(resultStr, params, callback, command);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n eventSubscribe(command, callback) {\r\n if (command === 'on_core_event') {\r\n this.backendObject[command].connect(callback);\r\n } else {\r\n this.backendObject[command].connect((str) => {\r\n callback(JSONBigNumber.parse(str, BackendService.bigNumberParser));\r\n });\r\n }\r\n }\r\n\r\n\r\n initService() {\r\n return new Observable(\r\n observer => {\r\n if (!this.backendLoaded) {\r\n this.backendLoaded = true;\r\n const that = this;\r\n (window).QWebChannel((window).qt.webChannelTransport, function (channel) {\r\n that.backendObject = channel.objects.mediator_object;\r\n observer.next('ok');\r\n });\r\n } else {\r\n if (!this.backendObject) {\r\n observer.error('error');\r\n observer.error('error');\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n\r\n webkitLaunchedScript() {\r\n return this.runCommand('webkit_launched_script');\r\n }\r\n\r\n quitRequest() {\r\n return this.runCommand('on_request_quit');\r\n }\r\n\r\n getAppData(callback) {\r\n this.runCommand('get_app_data', {}, callback);\r\n }\r\n\r\n storeAppData(callback?) {\r\n if (this.variablesService.wallets.length) {\r\n this.variablesService.settings.wallets = [];\r\n this.variablesService.wallets.forEach((wallet) => {\r\n this.variablesService.settings.wallets.push({name: wallet.name, path: wallet.path});\r\n });\r\n }\r\n this.runCommand('store_app_data', this.variablesService.settings, callback);\r\n }\r\n\r\n getSecureAppData(pass, callback) {\r\n this.runCommand('get_secure_app_data', pass, callback);\r\n }\r\n\r\n setMasterPassword(pass, callback) {\r\n this.runCommand('set_master_password', pass, callback);\r\n }\r\n\r\n checkMasterPassword(pass, callback) {\r\n this.runCommand('check_master_password', pass, callback);\r\n }\r\n storeSecureAppData(callback?) {\r\n let data;\r\n const wallets = [];\r\n const contacts = [];\r\n this.variablesService.wallets.forEach((wallet) => {\r\n wallets.push({name: wallet.name, pass: wallet.pass, path: wallet.path, staking: wallet.staking});\r\n });\r\n this.variablesService.contacts.forEach((contact) => {\r\n contacts.push({name: contact.name, address: contact.address, notes: contact.notes});\r\n });\r\n data = {wallets: wallets, contacts: contacts};\r\n this.backendObject['store_secure_app_data'](JSON.stringify(data), this.variablesService.appPass, (dataStore) => {\r\n this.backendCallback(dataStore, {}, callback, 'store_secure_app_data');\r\n });\r\n }\r\n\r\n dropSecureAppData(callback?) {\r\n this.backendObject['drop_secure_app_data']((dataStore) => {\r\n this.backendCallback(dataStore, {}, callback, 'drop_secure_app_data');\r\n });\r\n }\r\n\r\n haveSecureAppData(callback) {\r\n this.runCommand('have_secure_app_data', {}, callback);\r\n }\r\n\r\n saveFileDialog(caption, fileMask, default_path, callback) {\r\n const dir = default_path ? default_path : '/';\r\n const params = {\r\n caption: caption,\r\n filemask: fileMask,\r\n default_dir: dir\r\n };\r\n this.runCommand('show_savefile_dialog', params, callback);\r\n }\r\n\r\n openFileDialog(caption, fileMask, default_path, callback) {\r\n const dir = default_path ? default_path : '/';\r\n const params = {\r\n caption: caption,\r\n filemask: fileMask,\r\n default_dir: dir\r\n };\r\n this.runCommand('show_openfile_dialog', params, callback);\r\n }\r\n\r\n storeFile(path, buff) {\r\n this.backendObject['store_to_file'](path, buff);\r\n }\r\n\r\n loadFile(path, callback) {\r\n this.runCommand('load_from_file', path, callback);\r\n }\r\n\r\n generateWallet(path, pass, callback) {\r\n const params = {\r\n path: path,\r\n pass: pass\r\n };\r\n this.runCommand('generate_wallet', params, callback);\r\n }\r\n\r\n openWallet(path, pass, txs_to_return, testEmpty, callback) {\r\n const params = {\r\n path: path,\r\n pass: pass,\r\n txs_to_return: txs_to_return\r\n };\r\n params['testEmpty'] = !!(testEmpty);\r\n this.runCommand('open_wallet', params, callback);\r\n }\r\n\r\n closeWallet(wallet_id, callback?) {\r\n this.runCommand('close_wallet', {wallet_id: +wallet_id}, callback);\r\n }\r\n\r\n getSmartWalletInfo({wallet_id, seed_password}, callback) {\r\n this.runCommand('get_smart_wallet_info', {wallet_id: +wallet_id, seed_password}, callback);\r\n }\r\n\r\n getSeedPhraseInfo(param, callback) {\r\n this.runCommand('get_seed_phrase_info', param, callback);\r\n }\r\n\r\n runWallet(wallet_id, callback?) {\r\n this.runCommand('run_wallet', {wallet_id: +wallet_id}, callback);\r\n }\r\n\r\n isValidRestoreWalletText(param, callback) {\r\n this.runCommand('is_valid_restore_wallet_text', param, callback);\r\n }\r\n\r\n restoreWallet(path, pass, seed_phrase, seed_pass, callback) {\r\n const params = {\r\n seed_phrase: seed_phrase,\r\n path: path,\r\n pass: pass,\r\n seed_pass\r\n };\r\n this.runCommand('restore_wallet', params, callback);\r\n }\r\n\r\n sendMoney(from_wallet_id, to_address, amount, fee, mixin, comment, hide, callback) {\r\n const params = {\r\n wallet_id: parseInt(from_wallet_id, 10),\r\n destinations: [\r\n {\r\n address: to_address,\r\n amount: amount\r\n }\r\n ],\r\n mixin_count: (mixin) ? parseInt(mixin, 10) : 0,\r\n lock_time: 0,\r\n fee: this.moneyToIntPipe.transform(fee),\r\n comment: comment,\r\n push_payer: !hide\r\n };\r\n this.runCommand('transfer', params, callback);\r\n }\r\n\r\n validateAddress(address, callback) {\r\n this.runCommand('validate_address', address, callback);\r\n }\r\n\r\n setClipboard(str, callback?) {\r\n return this.runCommand('set_clipboard', str, callback);\r\n }\r\n\r\n getClipboard(callback) {\r\n return this.runCommand('get_clipboard', {}, callback);\r\n }\r\n\r\n createProposal(wallet_id, title, comment, a_addr, b_addr, to_pay, a_pledge, b_pledge, time, payment_id, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10),\r\n details: {\r\n t: title,\r\n c: comment,\r\n a_addr: a_addr,\r\n b_addr: b_addr,\r\n to_pay: this.moneyToIntPipe.transform(to_pay),\r\n a_pledge: this.moneyToIntPipe.transform(a_pledge),\r\n b_pledge: this.moneyToIntPipe.transform(b_pledge)\r\n },\r\n payment_id: payment_id,\r\n expiration_period: parseInt(time, 10) * 60 * 60,\r\n fee: this.variablesService.default_fee_big,\r\n b_fee: this.variablesService.default_fee_big\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('create_proposal', params, callback);\r\n }\r\n\r\n getContracts(wallet_id, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10)\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('get_contracts', params, callback);\r\n }\r\n\r\n acceptProposal(wallet_id, contract_id, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10),\r\n contract_id: contract_id\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('accept_proposal', params, callback);\r\n }\r\n\r\n releaseProposal(wallet_id, contract_id, release_type, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10),\r\n contract_id: contract_id,\r\n release_type: release_type // \"normal\" or \"burn\"\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('release_contract', params, callback);\r\n }\r\n\r\n requestCancelContract(wallet_id, contract_id, time, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10),\r\n contract_id: contract_id,\r\n fee: this.variablesService.default_fee_big,\r\n expiration_period: parseInt(time, 10) * 60 * 60\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('request_cancel_contract', params, callback);\r\n }\r\n\r\n acceptCancelContract(wallet_id, contract_id, callback) {\r\n const params = {\r\n wallet_id: parseInt(wallet_id, 10),\r\n contract_id: contract_id\r\n };\r\n BackendService.Debug(1, params);\r\n this.runCommand('accept_cancel_contract', params, callback);\r\n }\r\n\r\n getMiningHistory(wallet_id, callback) {\r\n this.runCommand('get_mining_history', {wallet_id: parseInt(wallet_id, 10)}, callback);\r\n }\r\n\r\n startPosMining(wallet_id, callback?) {\r\n this.runCommand('start_pos_mining', {wallet_id: parseInt(wallet_id, 10)}, callback);\r\n }\r\n\r\n stopPosMining(wallet_id, callback?) {\r\n this.runCommand('stop_pos_mining', {wallet_id: parseInt(wallet_id, 10)}, callback);\r\n }\r\n\r\n openUrlInBrowser(url, callback?) {\r\n this.runCommand('open_url_in_browser', url, callback);\r\n }\r\n\r\n start_backend(node, host, port, callback) {\r\n const params = {\r\n configure_for_remote_node: node,\r\n remote_node_host: host,\r\n remote_node_port: parseInt(port, 10)\r\n };\r\n this.runCommand('start_backend', params, callback);\r\n }\r\n\r\n getDefaultFee(callback) {\r\n this.runCommand('get_default_fee', {}, callback);\r\n }\r\n\r\n setBackendLocalization(stringsArray, title, callback?) {\r\n const params = {\r\n strings: stringsArray,\r\n language_title: title\r\n };\r\n this.runCommand('set_localization_strings', params, callback);\r\n }\r\n\r\n registerAlias(wallet_id, alias, address, fee, comment, reward, callback) {\r\n const params = {\r\n wallet_id: wallet_id,\r\n alias: {\r\n alias: alias,\r\n address: address,\r\n tracking_key: '',\r\n comment: comment\r\n },\r\n fee: this.moneyToIntPipe.transform(fee),\r\n reward: this.moneyToIntPipe.transform(reward)\r\n };\r\n this.runCommand('request_alias_registration', params, callback);\r\n }\r\n\r\n updateAlias(wallet_id, alias, fee, callback) {\r\n const params = {\r\n wallet_id: wallet_id,\r\n alias: {\r\n alias: alias.name.replace('@', ''),\r\n address: alias.address,\r\n tracking_key: '',\r\n comment: alias.comment\r\n },\r\n fee: this.moneyToIntPipe.transform(fee)\r\n };\r\n this.runCommand('request_alias_update', params, callback);\r\n }\r\n\r\n getAllAliases(callback) {\r\n this.runCommand('get_all_aliases', {}, callback);\r\n }\r\n\r\n getAliasByName(value, callback) {\r\n return this.runCommand('get_alias_info_by_name', value, callback);\r\n }\r\n\r\n getAliasByAddress(value, callback) {\r\n return this.runCommand('get_alias_info_by_address', value, callback);\r\n }\r\n\r\n getAliasCoast(alias, callback) {\r\n this.runCommand('get_alias_coast', {v: alias}, callback);\r\n }\r\n\r\n getWalletAlias(address) {\r\n if (address !== null && this.variablesService.daemon_state === 2) {\r\n if (this.variablesService.aliasesChecked[address] == null) {\r\n this.variablesService.aliasesChecked[address] = {};\r\n if (this.variablesService.aliases.length) {\r\n for (let i = 0, length = this.variablesService.aliases.length; i < length; i++) {\r\n if (i in this.variablesService.aliases && this.variablesService.aliases[i]['address'] === address) {\r\n this.variablesService.aliasesChecked[address]['name'] = this.variablesService.aliases[i].name;\r\n this.variablesService.aliasesChecked[address]['address'] = this.variablesService.aliases[i].address;\r\n this.variablesService.aliasesChecked[address]['comment'] = this.variablesService.aliases[i].comment;\r\n return this.variablesService.aliasesChecked[address];\r\n }\r\n }\r\n }\r\n this.getAliasByAddress(address, (status, data) => {\r\n if (status) {\r\n this.variablesService.aliasesChecked[data.address]['name'] = '@' + data.alias;\r\n this.variablesService.aliasesChecked[data.address]['address'] = data.address;\r\n this.variablesService.aliasesChecked[data.address]['comment'] = data.comment;\r\n }\r\n });\r\n }\r\n return this.variablesService.aliasesChecked[address];\r\n }\r\n return {};\r\n }\r\n\r\n getContactAlias() {\r\n if (this.variablesService.contacts.length && this.variablesService.daemon_state === 2) {\r\n this.variablesService.contacts.map(contact => {\r\n this.getAliasByAddress(contact.address, (status, data) => {\r\n if (status) {\r\n if (data.alias) {\r\n contact.alias = '@' + data.alias;\r\n }\r\n } else {\r\n contact.alias = null;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n getRecentTransfers( id, offset, count, exclude_mining_txs, callback) {\r\n const params = {\r\n wallet_id: id,\r\n offset: offset,\r\n count: count,\r\n exclude_mining_txs: exclude_mining_txs\r\n };\r\n this.runCommand('get_recent_transfers', params, callback);\r\n }\r\n\r\n getPoolInfo(callback) {\r\n this.runCommand('get_tx_pool_info', {}, callback);\r\n }\r\n\r\n getVersion(callback) {\r\n this.runCommand('get_version', {}, (status, version) => {\r\n this.runCommand('get_network_type', {}, (status, type) => {\r\n callback(version, type);\r\n });\r\n });\r\n }\r\n\r\n setLogLevel(level) {\r\n return this.runCommand('set_log_level', {v: level});\r\n }\r\n\r\n}\r\n\r\n\r\n/*\r\n\r\n toggleAutoStart: function (value) {\r\n return this.runCommand('toggle_autostart', asVal(value));\r\n },\r\n\r\n getOptions: function (callback) {\r\n return this.runCommand('get_options', {}, callback);\r\n },\r\n\r\n isFileExist: function (path, callback) {\r\n return this.runCommand('is_file_exist', path, callback);\r\n },\r\n\r\n isAutoStartEnabled: function (callback) {\r\n this.runCommand('is_autostart_enabled', {}, function (status, data) {\r\n if (angular.isFunction(callback)) {\r\n callback('error_code' in data && data.error_code !== 'FALSE')\r\n }\r\n });\r\n },\r\n\r\n resetWalletPass: function (wallet_id, pass, callback) {\r\n this.runCommand('reset_wallet_password', {wallet_id: wallet_id, pass: pass}, callback);\r\n },\r\n\r\n\r\n\r\n getOsVersion: function (callback) {\r\n this.runCommand('get_os_version', {}, function (status, version) {\r\n callback(version)\r\n })\r\n },\r\n\r\n getLogFile: function (callback) {\r\n this.runCommand('get_log_file', {}, function (status, version) {\r\n callback(version)\r\n })\r\n },\r\n\r\n resync_wallet: function (wallet_id, callback) {\r\n this.runCommand('resync_wallet', {wallet_id: wallet_id}, callback);\r\n },\r\n\r\n storeFile: function (path, buff, callback) {\r\n this.backendObject['store_to_file'](path, (typeof buff === 'string' ? buff : JSON.stringify(buff)), function (data) {\r\n backendCallback(data, {}, callback, 'store_to_file');\r\n });\r\n },\r\n\r\n getMiningEstimate: function (amount_coins, time, callback) {\r\n var params = {\r\n \"amount_coins\": $filter('money_to_int')(amount_coins),\r\n \"time\": parseInt(time)\r\n };\r\n this.runCommand('get_mining_estimate', params, callback);\r\n },\r\n\r\n backupWalletKeys: function (wallet_id, path, callback) {\r\n var params = {\r\n \"wallet_id\": wallet_id,\r\n \"path\": path\r\n };\r\n this.runCommand('backup_wallet_keys', params, callback);\r\n },\r\n\r\n setBlockedIcon: function (enabled, callback) {\r\n var mode = (enabled) ? \"blocked\" : \"normal\";\r\n Service.runCommand('bool_toggle_icon', mode, callback);\r\n },\r\n\r\n getWalletInfo: function (wallet_id, callback) {\r\n this.runCommand('get_wallet_info', {wallet_id: wallet_id}, callback);\r\n },\r\n\r\n printText: function (content) {\r\n return this.runCommand('print_text', {html_text: content});\r\n },\r\n\r\n printLog: function (msg, log_level) {\r\n return this.runCommand('print_log', {msg: msg, log_level: log_level});\r\n },\r\n\r\n*/\r\n\r\n","import {Injectable, Injector, ComponentFactoryResolver, EmbeddedViewRef, ApplicationRef, NgZone} from '@angular/core';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {ModalContainerComponent} from '../directives/modal-container/modal-container.component';\r\n\r\n@Injectable()\r\nexport class ModalService {\r\n\r\n private components: any[] = [];\r\n\r\n constructor(\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private appRef: ApplicationRef,\r\n private injector: Injector,\r\n private ngZone: NgZone,\r\n private translate: TranslateService\r\n ) {}\r\n\r\n prepareModal(type, message) {\r\n const length = this.components.push(\r\n this.componentFactoryResolver.resolveComponentFactory(ModalContainerComponent).create(this.injector)\r\n );\r\n\r\n this.components[length - 1].instance['type'] = type;\r\n this.components[length - 1].instance['message'] = message.length ? this.translate.instant(message) : '';\r\n this.components[length - 1].instance['close'].subscribe(() => {\r\n this.removeModal(length - 1);\r\n });\r\n\r\n this.ngZone.run(() => {\r\n this.appendModal(length - 1);\r\n });\r\n }\r\n\r\n appendModal(index) {\r\n this.appRef.attachView(this.components[index].hostView);\r\n const domElem = (this.components[index].hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\r\n document.body.appendChild(domElem);\r\n }\r\n\r\n removeModal(index) {\r\n if (this.components[index]) {\r\n this.appRef.detachView(this.components[index].hostView);\r\n this.components[index].destroy();\r\n this.components.splice(index, 1);\r\n } else {\r\n const last = this.components.length - 1;\r\n this.appRef.detachView(this.components[last].hostView);\r\n this.components[last].destroy();\r\n this.components.splice(last, 1);\r\n }\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\nimport { VariablesService } from './variables.service';\r\nimport { PaginationStore } from './pagination.store';\r\nimport * as _ from 'lodash';\r\nimport {Store} from 'store';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PaginationService {\r\n\r\n constructor(\r\n private variables: VariablesService,\r\n private ngZone: NgZone,\r\n private paginationStore: PaginationStore,\r\n ) { }\r\n\r\n paginate(currentPage = 1) {\r\n if (currentPage < 1) {\r\n currentPage = 1;\r\n } else if (currentPage > this.variables.currentWallet.totalPages) {\r\n currentPage = this.variables.currentWallet.totalPages;\r\n }\r\n let startPage: number, endPage: number;\r\n if (this.variables.currentWallet.totalPages <= this.variables.maxPages) {\r\n startPage = 1;\r\n endPage = this.variables.currentWallet.totalPages;\r\n } else {\r\n const maxPagesBeforeCurrentPage = Math.floor(this.variables.maxPages / 2);\r\n const maxPagesAfterCurrentPage = Math.ceil(this.variables.maxPages / 2) - 1;\r\n if (currentPage <= maxPagesBeforeCurrentPage) {\r\n startPage = 1;\r\n this.variables.currentWallet.totalPages > this.variables.maxPages\r\n ? endPage = this.variables.maxPages\r\n : endPage = this.variables.currentWallet.totalPages\r\n ;\r\n } else if (currentPage + maxPagesAfterCurrentPage >= this.variables.currentWallet.totalPages) {\r\n startPage = this.variables.currentWallet.totalPages - this.variables.maxPages + 1;\r\n endPage = this.variables.currentWallet.totalPages;\r\n } else {\r\n startPage = currentPage - maxPagesBeforeCurrentPage;\r\n endPage = currentPage + maxPagesAfterCurrentPage;\r\n }\r\n }\r\n this.ngZone.run(() => {\r\n this.variables.currentWallet.pages = Array.from(Array((endPage + 1) - startPage).keys()).map(i => startPage + i);\r\n });\r\n }\r\n\r\n getOffset(walletID) {\r\n const mining = this.variables.currentWallet.exclude_mining_txs;\r\n const currentPage = (this.variables.currentWallet.currentPage);\r\n let offset = ((currentPage - 1) * this.variables.count);\r\n if (!mining) { return offset; }\r\n const value = this.paginationStore.value;\r\n const pages = value.filter(item => item.walletID === walletID);\r\n if (pages && pages.length) {\r\n const max = _.maxBy(pages, 'page');\r\n const isForward = this.paginationStore.isForward(pages, currentPage);\r\n if (isForward) {\r\n offset = max.offset;\r\n } else {\r\n const index = pages.findIndex(item => item.page === (currentPage));\r\n offset = pages[index].offset;\r\n }\r\n }\r\n return offset;\r\n }\r\n\r\n calcPages(data) {\r\n if (data.total_history_items && (data && data.history)) {\r\n this.variables.currentWallet.totalPages = Math.ceil( data.total_history_items / this.variables.count);\r\n this.variables.currentWallet.totalPages > this.variables.maxPages\r\n ? this.variables.currentWallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : this.variables.currentWallet.pages =\r\n new Array(this.variables.currentWallet.totalPages).fill(1).map((value, index) => value + index);\r\n } else if (this.variables.currentWallet.restore) {\r\n this.variables.currentWallet.totalPages = Math.ceil( data.history.length / this.variables.count);\r\n this.variables.currentWallet.totalPages > this.variables.maxPages\r\n ? this.variables.currentWallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : this.variables.currentWallet.pages =\r\n new Array(this.variables.currentWallet.totalPages).fill(1).map((value, index) => value + index);\r\n }\r\n }\r\n\r\n prepareHistory(data, status) {\r\n if (status && (data && data.total_history_items)) {\r\n this.variables.currentWallet.history.splice(0, this.variables.currentWallet.history.length);\r\n this.ngZone.run(() => {\r\n this.paginate(this.variables.currentWallet.currentPage);\r\n if (data.history.length !== 0) {\r\n this.variables.currentWallet.restore = false;\r\n this.variables.currentWallet.total_history_item = data.total_history_items;\r\n this.variables.currentWallet.prepareHistory(data.history);\r\n if (this.variables.currentWallet.currentPage === 1 && data.unconfirmed) {\r\n this.variables.currentWallet.prepareHistory(data.unconfirmed);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable, BehaviorSubject} from 'rxjs';\r\nimport * as _ from 'lodash';\r\nexport interface Pages {\r\n page: number;\r\n offset: number;\r\n walletID: number;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PaginationStore {\r\n constructor(\r\n ) {}\r\n private subject = new BehaviorSubject(null);\r\n pages$: Observable = this.subject.asObservable();\r\n\r\n isForward(pages, currentPage) {\r\n const max = _.maxBy(pages, 'page');\r\n return !max || max.page < currentPage || max.page === currentPage;\r\n }\r\n setPage(pageNumber: number, offset: number, walletID: number) {\r\n let newPages: Pages[] = [];\r\n const pages = this.subject.getValue();\r\n if (pages && pages.length) {\r\n newPages = pages.slice(0);\r\n }\r\n newPages.push({page: pageNumber, offset, walletID});\r\n this.subject.next(newPages);\r\n }\r\n\r\n get value() {\r\n return this.subject.value;\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n@Injectable()\r\nexport class UtilsService {\r\n getMinWidthByScale(scale: number) {\r\n switch (scale) {\r\n case 7.5 : return 900;\r\n case 10 : return 1200;\r\n case 12.5 : return 1500;\r\n case 15 : return 1800;\r\n default : return 1200;\r\n }\r\n }\r\n}\r\n","import {Injectable, NgZone} from '@angular/core';\r\nimport {Wallet} from '../models/wallet.model';\r\nimport {Contact} from '../models/contact.model';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {Idle} from 'idlejs/dist';\r\nimport {Router} from '@angular/router';\r\nimport {ContextMenuComponent, ContextMenuService} from 'ngx-contextmenu';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class VariablesService {\r\n public request_on_in = {};\r\n public stop_paginate = {};\r\n public sync_started = false;\r\n public digits = 12;\r\n public appPass = '';\r\n public appLogin = false;\r\n public moneyEquivalent = 0;\r\n public defaultTheme = 'dark';\r\n public defaultCurrency = 'ZANO';\r\n public opening_wallet: Wallet;\r\n public exp_med_ts = 0;\r\n public net_time_delta_median = 0;\r\n public height_app = 0;\r\n public height_max = 0;\r\n public downloaded = 0;\r\n public total = 0;\r\n public last_build_available = '';\r\n public last_build_displaymode = 0;\r\n public daemon_state = 3;\r\n public sync = {\r\n progress_value: 0,\r\n progress_value_text: '0'\r\n };\r\n public download = {\r\n progress_value: 0,\r\n progress_value_text: '0'\r\n };\r\n public get_recent_transfers = false; // avoid of execute function before collback complete\r\n public default_fee = '0.010000000000';\r\n public default_fee_big = new BigNumber('10000000000');\r\n\r\n public settings = {\r\n appLockTime: 15,\r\n appLog: 0,\r\n theme: '',\r\n scale: 10,\r\n language: 'en',\r\n default_path: '/',\r\n viewedContracts: [],\r\n notViewedContracts: [],\r\n wallets: []\r\n };\r\n\r\n public count = 40;\r\n public maxPages = 5;\r\n\r\n public testnet = false;\r\n public networkType = ''; // testnet of mainnet\r\n\r\n public wallets: Array = [];\r\n public currentWallet: Wallet;\r\n public selectWallet: number;\r\n public aliases: any = [];\r\n public aliasesChecked: any = {};\r\n public enableAliasSearch = false;\r\n public maxWalletNameLength = 25;\r\n public maxCommentLength = 255;\r\n public dataIsLoaded = false;\r\n\r\n public contacts: Array = [];\r\n public newContact: Contact = {name: null, address: null, notes: null};\r\n\r\n public pattern = '^[a-zA-Z0-9_.\\\\\\]\\*\\|\\~\\!\\?\\@\\#\\$\\%\\^\\&\\+\\{\\}\\(\\)\\<\\>\\:\\;\\\"\\'\\-\\=\\/\\,\\[\\\\\\\\]*$';\r\n public after_sync_request: any = {};\r\n getExpMedTsEvent = new BehaviorSubject(null);\r\n getHeightAppEvent = new BehaviorSubject(null);\r\n getHeightMaxEvent = new BehaviorSubject(null);\r\n getDownloadedAppEvent = new BehaviorSubject(null);\r\n getTotalEvent = new BehaviorSubject(null);\r\n getRefreshStackingEvent = new BehaviorSubject(null);\r\n getAliasChangedEvent = new BehaviorSubject(null);\r\n\r\n public idle = new Idle()\r\n .whenNotInteractive()\r\n .do(() => {\r\n if (this.appPass == '') {\r\n this.restartCountdown();\r\n } else {\r\n this.ngZone.run(() => {\r\n this.idle.stop();\r\n this.appPass = '';\r\n this.appLogin = false;\r\n this.router.navigate(['/login'], {queryParams: {type: 'auth'}});\r\n });\r\n }\r\n });\r\n\r\n public allContextMenu: ContextMenuComponent;\r\n public onlyCopyContextMenu: ContextMenuComponent;\r\n public pasteSelectContextMenu: ContextMenuComponent;\r\n\r\n constructor(private router: Router, private ngZone: NgZone, private contextMenuService: ContextMenuService) {\r\n }\r\n\r\n setExpMedTs(timestamp: number) {\r\n if (timestamp !== this.exp_med_ts) {\r\n this.exp_med_ts = timestamp;\r\n this.getExpMedTsEvent.next(timestamp);\r\n }\r\n }\r\n\r\n setHeightApp(height: number) {\r\n if (height !== this.height_app) {\r\n this.height_app = height;\r\n this.getHeightAppEvent.next(height);\r\n }\r\n }\r\n\r\n setHeightMax(height: number) {\r\n if (height !== this.height_max) {\r\n this.height_max = height;\r\n this.getHeightMaxEvent.next(height);\r\n }\r\n }\r\n\r\n setDownloadedBytes(bytes: number) {\r\n if (bytes !== this.downloaded) {\r\n this.downloaded = this.bytesToMb(bytes);\r\n this.getDownloadedAppEvent.next(bytes);\r\n }\r\n }\r\n\r\n setTotalBytes(bytes: number) {\r\n if (bytes !== this.total) {\r\n this.total = this.bytesToMb(bytes);\r\n this.getTotalEvent.next(bytes);\r\n }\r\n }\r\n\r\n setRefreshStacking(wallet_id: number) {\r\n this.getHeightAppEvent.next(wallet_id);\r\n }\r\n\r\n changeAliases() {\r\n this.getAliasChangedEvent.next(true);\r\n }\r\n\r\n setCurrentWallet(id): void {\r\n this.wallets.forEach((wallet) => {\r\n if (wallet.wallet_id === id) {\r\n this.currentWallet = wallet;\r\n }\r\n });\r\n }\r\n\r\n getWallet(id): Wallet {\r\n for (let i = 0; i < this.wallets.length; i++) {\r\n if (this.wallets[i].wallet_id === id) {\r\n return this.wallets[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getNotLoadedWallet() {\r\n for (let i = 0; i < this.wallets.length; i++) {\r\n if (!this.wallets[i].loaded) {\r\n return this.wallets[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n startCountdown() {\r\n this.idle.within(this.settings.appLockTime).start();\r\n }\r\n\r\n stopCountdown() {\r\n this.idle.stop();\r\n }\r\n\r\n restartCountdown() {\r\n this.idle.within(this.settings.appLockTime).restart();\r\n }\r\n\r\n bytesToMb(bytes) {\r\n return Number((bytes / Math.pow(1024, 2)).toFixed(1));\r\n }\r\n\r\n public onContextMenu($event: MouseEvent): void {\r\n $event.target['contextSelectionStart'] = $event.target['selectionStart'];\r\n $event.target['contextSelectionEnd'] = $event.target['selectionEnd'];\r\n if ($event.target && ($event.target['nodeName'].toUpperCase() === 'TEXTAREA' || $event.target['nodeName'].toUpperCase() === 'INPUT') && !$event.target['readOnly']) {\r\n this.contextMenuService.show.next({\r\n contextMenu: this.allContextMenu,\r\n event: $event,\r\n item: $event.target,\r\n });\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n }\r\n }\r\n\r\n public onContextMenuOnlyCopy($event: MouseEvent, copyText?: string): void {\r\n this.contextMenuService.show.next({\r\n contextMenu: this.onlyCopyContextMenu,\r\n event: $event,\r\n item: copyText\r\n });\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n }\r\n\r\n public onContextMenuPasteSelect($event: MouseEvent): void {\r\n $event.target['contextSelectionStart'] = $event.target['selectionStart'];\r\n $event.target['contextSelectionEnd'] = $event.target['selectionEnd'];\r\n\r\n console.warn($event.target);\r\n console.warn($event.target['disabled']);\r\n\r\n\r\n if ($event.target && ($event.target['nodeName'].toUpperCase() === 'TEXTAREA' || $event.target['nodeName'].toUpperCase() === 'INPUT') && !$event.target['readOnly']) {\r\n this.contextMenuService.show.next({\r\n contextMenu: this.pasteSelectContextMenu,\r\n event: $event,\r\n item: $event.target,\r\n });\r\n $event.preventDefault();\r\n $event.stopPropagation();\r\n }\r\n }\r\n\r\n}\r\n","export const MIXIN: number = 10; // default mixin value\r\nexport const RCV_ADDR_QR_SCALE: number = 2; // scale factor for QR code\r\n\r\nexport const AUDITABLE_WALLET_HELP_PAGE: string = 'docs.zano.org/docs/auditable-wallets';\r\nexport const CREATE_NEW_WALLET_HELP_PAGE: string = 'docs.zano.org/docs/getting-started-1#section-create-new-wallet';\r\nexport const LOCKED_BALANCE_HELP_PAGE: string = 'docs.zano.org/docs/locked-balance';\r\nexport const DOWNLOADS_PAGE_URL: string = 'zano.org/downloads.html';\r\n\r\nexport const BLOCK_EXPLORER_TX_URL_PREFIX: string = 'explorer.zano.org/transaction/';\r\nexport const BLOCK_EXPLORER_TN_TX_URL_PREFIX: string = 'testnet-explorer.zano.org/transaction/';\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.TITLE' | translate }}\\r\\n {{ 'CONTACTS.ADD' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.NAME_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.NAME_DUBLICATED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.ADDRESS_DUBLICATED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'CONTACTS.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \".form-add {\\n margin-top: 3rem; }\\n .form-add .input-block-name {\\n width: 50%; }\\n .form-add button {\\n margin-top: 3rem;\\n width: 100%;\\n max-width: 18rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYWRkLWNvbnRhY3RzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFkZC1jb250YWN0c1xcYWRkLWNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsZ0JBQWdCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9hZGQtY29udGFjdHMvYWRkLWNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tYWRkIHtcclxuICBtYXJnaW4tdG9wOiAzcmVtO1xyXG5cclxuICAuaW5wdXQtYmxvY2stbmFtZSB7XHJcbiAgICB3aWR0aDogNTAlO1xyXG4gIH1cclxuXHJcbiAgYnV0dG9uIHtcclxuICAgIG1hcmdpbi10b3A6IDNyZW07XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMThyZW07XHJcbiAgfVxyXG59Il19 */\"","import { Component, OnInit, NgZone, OnDestroy } from '@angular/core';\r\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { ModalService } from '../_helpers/services/modal.service';\r\nimport { Location } from '@angular/common';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-add-contacts',\r\n templateUrl: './add-contacts.component.html',\r\n styleUrls: ['./add-contacts.component.scss']\r\n})\r\nexport class AddContactsComponent implements OnInit, OnDestroy {\r\n id: number;\r\n queryRouting;\r\n isModalDialogVisible;\r\n addContactForm = new FormGroup({\r\n address: new FormControl('', [\r\n Validators.required,\r\n (g: FormControl) => {\r\n if (g.value) {\r\n this.backend.validateAddress(g.value, valid_status => {\r\n this.ngZone.run(() => {\r\n if (valid_status === false) {\r\n g.setErrors(\r\n Object.assign({ address_not_valid: true }, g.errors)\r\n );\r\n } else {\r\n if (g.hasError('address_not_valid')) {\r\n delete g.errors['address_not_valid'];\r\n if (Object.keys(g.errors).length === 0) {\r\n g.setErrors(null);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n return g.hasError('address_not_valid')\r\n ? { address_not_valid: true }\r\n : null;\r\n }\r\n return null;\r\n },\r\n (g: FormControl) => {\r\n const isDublicated = this.variablesService.contacts.findIndex(\r\n contact => contact.address === g.value\r\n );\r\n if (isDublicated !== -1 && !(this.id === isDublicated)) {\r\n return { dublicated: true };\r\n }\r\n return null;\r\n }\r\n ]),\r\n notes: new FormControl('', [\r\n (g: FormControl) => {\r\n if (g.value) {\r\n if (g.value.length > this.variablesService.maxCommentLength) {\r\n return { maxLength: true };\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n ]),\r\n name: new FormControl('', [\r\n Validators.required,\r\n Validators.minLength(4),\r\n Validators.maxLength(25),\r\n (g: FormControl) => {\r\n if (g.value) {\r\n const isDublicated = this.variablesService.contacts.findIndex(\r\n contact => contact.name === g.value.trim()\r\n );\r\n if (isDublicated !== -1 && !(this.id === isDublicated)) {\r\n return { dublicated: true };\r\n }\r\n return null;\r\n }\r\n }\r\n ])\r\n });\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n private location: Location\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.queryRouting = this.route.queryParams.subscribe(params => {\r\n if (params.id) {\r\n this.id = parseInt(params.id, 10);\r\n this.addContactForm.reset({\r\n name: this.variablesService.contacts[params.id]['name'],\r\n address: this.variablesService.contacts[params.id]['address'],\r\n notes: this.variablesService.contacts[params.id]['notes']\r\n });\r\n } else {\r\n this.addContactForm.reset({\r\n name: this.variablesService.newContact['name'],\r\n address: this.variablesService.newContact['address'],\r\n notes: this.variablesService.newContact['notes']\r\n });\r\n }\r\n });\r\n }\r\n\r\n add() {\r\n if (!this.variablesService.appPass) {\r\n this.modalService.prepareModal(\r\n 'error',\r\n 'CONTACTS.FORM_ERRORS.SET_MASTER_PASSWORD'\r\n );\r\n } else {\r\n if (this.addContactForm.valid) {\r\n this.backend.validateAddress(\r\n this.addContactForm.get('address').value,\r\n valid_status => {\r\n if (valid_status === false) {\r\n this.ngZone.run(() => {\r\n this.addContactForm\r\n .get('address')\r\n .setErrors({ address_not_valid: true });\r\n });\r\n } else {\r\n if (this.id || this.id === 0) {\r\n this.variablesService.contacts.forEach((contact, index) => {\r\n if (index === this.id) {\r\n contact.name = this.addContactForm.get('name').value.trim();\r\n contact.address = this.addContactForm.get('address').value;\r\n contact.notes =\r\n this.addContactForm.get('notes').value || '';\r\n }\r\n });\r\n this.backend.storeSecureAppData();\r\n this.backend.getContactAlias();\r\n this.modalService.prepareModal(\r\n 'success',\r\n 'CONTACTS.SUCCESS_SAVE'\r\n );\r\n } else {\r\n this.variablesService.contacts.push({\r\n name: this.addContactForm.get('name').value.trim(),\r\n address: this.addContactForm.get('address').value,\r\n notes: this.addContactForm.get('notes').value || ''\r\n });\r\n this.backend.storeSecureAppData();\r\n this.backend.getContactAlias();\r\n this.modalService.prepareModal(\r\n 'success',\r\n 'CONTACTS.SUCCESS_SENT'\r\n );\r\n this.variablesService.newContact = {\r\n name: null,\r\n address: null,\r\n notes: null\r\n };\r\n this.addContactForm.reset({\r\n name: null,\r\n address: null,\r\n notes: null\r\n });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (!(this.id || this.id === 0)) {\r\n this.variablesService.newContact = {\r\n name: this.addContactForm.get('name').value,\r\n address: this.addContactForm.get('address').value,\r\n notes: this.addContactForm.get('notes').value\r\n };\r\n }\r\n this.queryRouting.unsubscribe();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\n// Components\r\nimport { MainComponent } from './main/main.component';\r\nimport { LoginComponent } from './login/login.component';\r\nimport { WalletComponent } from './wallet/wallet.component';\r\nimport { SendComponent } from './send/send.component';\r\nimport { ReceiveComponent } from './receive/receive.component';\r\nimport { HistoryComponent } from './history/history.component';\r\nimport { ContractsComponent } from './contracts/contracts.component';\r\nimport { PurchaseComponent } from './purchase/purchase.component';\r\nimport { MessagesComponent } from './messages/messages.component';\r\nimport { TypingMessageComponent } from './typing-message/typing-message.component';\r\nimport { StakingComponent } from './staking/staking.component';\r\nimport { SettingsComponent } from './settings/settings.component';\r\nimport { CreateWalletComponent } from './create-wallet/create-wallet.component';\r\nimport { OpenWalletComponent } from './open-wallet/open-wallet.component';\r\nimport { RestoreWalletComponent } from './restore-wallet/restore-wallet.component';\r\nimport { SeedPhraseComponent } from './seed-phrase/seed-phrase.component';\r\nimport { WalletDetailsComponent } from './wallet-details/wallet-details.component';\r\nimport { AssignAliasComponent } from './assign-alias/assign-alias.component';\r\nimport { EditAliasComponent } from './edit-alias/edit-alias.component';\r\nimport { TransferAliasComponent } from './transfer-alias/transfer-alias.component';\r\nimport { ContactsComponent } from './contacts/contacts.component';\r\nimport { AddContactsComponent } from './add-contacts/add-contacts.component';\r\nimport { ContactSendComponent } from './contact-send/contact-send.component';\r\nimport { ExportImportComponent } from './export-import/export-import.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: MainComponent\r\n },\r\n {\r\n path: 'main',\r\n component: MainComponent\r\n },\r\n {\r\n path: 'login',\r\n component: LoginComponent\r\n },\r\n {\r\n path: 'wallet/:id',\r\n component: WalletComponent,\r\n children: [\r\n {\r\n path: 'send',\r\n component: SendComponent\r\n },\r\n {\r\n path: 'receive',\r\n component: ReceiveComponent\r\n },\r\n {\r\n path: 'history',\r\n component: HistoryComponent\r\n },\r\n {\r\n path: 'contracts',\r\n component: ContractsComponent,\r\n },\r\n {\r\n path: 'purchase',\r\n component: PurchaseComponent\r\n },\r\n {\r\n path: 'purchase/:id',\r\n component: PurchaseComponent\r\n },\r\n {\r\n path: 'messages',\r\n component: MessagesComponent,\r\n },\r\n {\r\n path: 'messages/:id',\r\n component: TypingMessageComponent,\r\n },\r\n {\r\n path: 'staking',\r\n component: StakingComponent\r\n },\r\n {\r\n path: '',\r\n redirectTo: 'history',\r\n pathMatch: 'full'\r\n }\r\n ]\r\n },\r\n {\r\n path: 'create',\r\n component: CreateWalletComponent\r\n },\r\n {\r\n path: 'open',\r\n component: OpenWalletComponent\r\n },\r\n {\r\n path: 'restore',\r\n component: RestoreWalletComponent\r\n },\r\n {\r\n path: 'seed-phrase',\r\n component: SeedPhraseComponent\r\n },\r\n {\r\n path: 'details',\r\n component: WalletDetailsComponent\r\n },\r\n {\r\n path: 'assign-alias',\r\n component: AssignAliasComponent\r\n },\r\n {\r\n path: 'edit-alias',\r\n component: EditAliasComponent\r\n },\r\n {\r\n path: 'transfer-alias',\r\n component: TransferAliasComponent\r\n },\r\n {\r\n path: 'settings',\r\n component: SettingsComponent\r\n },\r\n {\r\n path: 'contacts',\r\n component: ContactsComponent\r\n },\r\n {\r\n path: 'add-contacts',\r\n component: AddContactsComponent\r\n },\r\n {\r\n path: 'edit-contacts/:id',\r\n component: AddContactsComponent\r\n },\r\n {\r\n path: 'contact-send/:id',\r\n component: ContactSendComponent\r\n },\r\n {\r\n path: 'import',\r\n component: ExportImportComponent\r\n },\r\n {\r\n path: '',\r\n redirectTo: '/',\r\n pathMatch: 'full'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule]\r\n})\r\n\r\n\r\nexport class AppRoutingModule { }\r\n","module.exports = \"\\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n {{ 'CONTEXT_MENU.COPY' | translate }}\\r\\n {{ 'CONTEXT_MENU.PASTE' | translate }}\\r\\n {{ 'CONTEXT_MENU.SELECT' | translate }}\\r\\n\\r\\n\\r\\n\\r\\n {{ 'CONTEXT_MENU.COPY' | translate }}\\r\\n\\r\\n\\r\\n\\r\\n {{ 'CONTEXT_MENU.PASTE' | translate }}\\r\\n {{ 'CONTEXT_MENU.SELECT' | translate }}\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\"","module.exports = \"/*\\r\\n* Implementation of themes\\r\\n*/\\n.app-content {\\n display: flex;\\n overflow-x: overlay;\\n overflow-y: hidden;\\n width: 100%; }\\n.app-content .preloader {\\n align-self: center;\\n color: #fff;\\n font-size: 2rem;\\n margin: 0 auto;\\n text-align: center;\\n width: 50%; }\\n.app-content .preloader .loading-bar {\\n display: block;\\n -webkit-animation: move 5s linear infinite;\\n animation: move 5s linear infinite;\\n background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.125, rgba(0, 0, 0, 0.15)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.1)), color-stop(0.375, rgba(0, 0, 0, 0.1)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.15)), color-stop(0.625, rgba(0, 0, 0, 0.15)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.1)), color-stop(0.875, rgba(0, 0, 0, 0.1)), color-stop(0.875, transparent), to(transparent)), -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.125, rgba(0, 0, 0, 0.3)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.25)), color-stop(0.375, rgba(0, 0, 0, 0.25)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.3)), color-stop(0.625, rgba(0, 0, 0, 0.3)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.25)), color-stop(0.875, rgba(0, 0, 0, 0.25)), color-stop(0.875, transparent), to(transparent));\\n background-size: 10rem 10rem;\\n margin-top: 2rem;\\n width: 100%;\\n height: 1rem; }\\n@-webkit-keyframes move {\\n 0% {\\n background-position: 100% -10rem; }\\n 100% {\\n background-position: 100% 10rem; } }\\n@keyframes move {\\n 0% {\\n background-position: 100% -10rem; }\\n 100% {\\n background-position: 100% 10rem; } }\\n\\r\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFzc2V0c1xcc2Nzc1xcYmFzZVxcX21peGlucy5zY3NzIiwic3JjL2FwcC9hcHAuY29tcG9uZW50LnNjc3MiLCJzcmMvYXBwL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFwcC5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4RUE7O0NDNUVDO0FDQUQ7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQixXQUFXLEVBQUE7QUFKYjtJQU9JLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsVUFBVSxFQUFBO0FBWmQ7TUFlTSxjQUFjO01BQ2QsMENBQWtDO2NBQWxDLGtDQUFrQztNQUNsQywrbENBc0JHO01BQ0gsNEJBQTRCO01BQzVCLGdCQUFnQjtNQUNoQixXQUFXO01BQ1gsWUFBWSxFQUFBO0FBSWhCO0VBQ0U7SUFDRSxnQ0FBZ0MsRUFBQTtFQUVsQztJQUNFLCtCQUErQixFQUFBLEVBQUE7QUFMbkM7RUFDRTtJQUNFLGdDQUFnQyxFQUFBO0VBRWxDO0lBQ0UsK0JBQStCLEVBQUEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIkBtaXhpbiB0ZXh0LXRydW5jYXRlIHtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbn1cclxuQG1peGluIHRleHRXcmFwIHtcclxuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XHJcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xyXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcclxuICBsaW5lLWJyZWFrOiBzdHJpY3Q7XHJcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xyXG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xyXG4gIGh5cGhlbnM6IGF1dG87XHJcbn1cclxuQG1peGluIGNvdmVyQm94IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbkBtaXhpbiBhYnMgKCR0b3A6IGF1dG8sICRyaWdodDogYXV0bywgJGJvdHRvbTogYXV0bywgJGxlZnQ6IGF1dG8pIHtcclxuICB0b3A6ICR0b3A7XHJcbiAgcmlnaHQ6ICRyaWdodDtcclxuICBib3R0b206ICRib3R0b207XHJcbiAgbGVmdDogJGxlZnQ7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG59XHJcbkBtaXhpbiBjb3ZlckltZyB7XHJcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcclxuXHQtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogY292ZXI7XHJcblx0LW8tYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuXHRiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xyXG5cdGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XHJcbn1cclxuQG1peGluIHZhbGluZ0JveCB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogIDUwJTtcclxuXHRsZWZ0OiA1MCU7XHJcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbn1cclxuQG1peGluIHVuU2VsZWN0IHtcclxuXHQtd2Via2l0LXRvdWNoLWNvbGxvdXQ6IG5vbmU7XHJcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcclxuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcclxuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbn1cclxuQG1peGluIG1heDExOTkgeyAvLyBtYWtldCAxMTcxXHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgeyBAY29udGVudDsgfVxyXG59XHJcbkBtaXhpbiBtYXgxMTcwIHsgLy8gbWFrZXRzIDk5MlxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMTcwcHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbWF4OTkxIHsgLy8gbWFrZXRzIDc2MlxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkgeyBAY29udGVudDsgfVxyXG59XHJcbkBtaXhpbiBtYXg3NjEgeyAvLyBtYWtldHMgNTc2XHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2MXB4KSB7IEBjb250ZW50OyB9XHJcbn1cclxuQG1peGluIG1heDU3NSB7IC8vIG1ha2V0cyA0MDBcclxuICBAbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbW9iaWxlIHtcclxuICBAbWVkaWEgKG1heC13aWR0aDogMzk5cHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gaWNvQ2VudGVyIHtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xyXG59XHJcbkBtaXhpbiBwc2V1ZG8gKCRkaXNwbGF5OiBibG9jaywgJHBvczogYWJzb2x1dGUsICRjb250ZW50OiAnJyl7XHJcbiAgY29udGVudDogJGNvbnRlbnQ7XHJcbiAgZGlzcGxheTogJGRpc3BsYXk7XHJcbiAgcG9zaXRpb246ICRwb3M7XHJcbn1cclxuXHJcbi8qXHJcbiogSW1wbGVtZW50YXRpb24gb2YgdGhlbWVzXHJcbiovXHJcbkBtaXhpbiB0aGVtaWZ5KCR0aGVtZXM6ICR0aGVtZXMpIHtcclxuICBAZWFjaCAkdGhlbWUsICRtYXAgaW4gJHRoZW1lcyB7XHJcbiAgICAudGhlbWUtI3skdGhlbWV9ICYge1xyXG4gICAgICAkdGhlbWUtbWFwOiAoKSAhZ2xvYmFsO1xyXG4gICAgICBAZWFjaCAka2V5LCAkc3VibWFwIGluICRtYXAge1xyXG4gICAgICAgICR2YWx1ZTogbWFwLWdldChtYXAtZ2V0KCR0aGVtZXMsICR0aGVtZSksICcjeyRrZXl9Jyk7XHJcbiAgICAgICAgJHRoZW1lLW1hcDogbWFwLW1lcmdlKCR0aGVtZS1tYXAsICgka2V5OiAkdmFsdWUpKSAhZ2xvYmFsO1xyXG4gICAgICB9XHJcbiAgICAgIEBjb250ZW50O1xyXG4gICAgICAkdGhlbWUtbWFwOiBudWxsICFnbG9iYWw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AZnVuY3Rpb24gdGhlbWVkKCRrZXkpIHtcclxuICBAcmV0dXJuIG1hcC1nZXQoJHRoZW1lLW1hcCwgJGtleSk7XHJcbn1cclxuIiwiLypcclxuKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGVtZXNcclxuKi9cbi5hcHAtY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLmFwcC1jb250ZW50IC5wcmVsb2FkZXIge1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBmb250LXNpemU6IDJyZW07XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgICAuYXBwLWNvbnRlbnQgLnByZWxvYWRlciAubG9hZGluZy1iYXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBhbmltYXRpb246IG1vdmUgNXMgbGluZWFyIGluZmluaXRlO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMTAwJSAxMDAlLCBjb2xvci1zdG9wKDAuMTI1LCByZ2JhKDAsIDAsIDAsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjEyNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjI1LCByZ2JhKDAsIDAsIDAsIDAuMSkpLCBjb2xvci1zdG9wKDAuMzc1LCByZ2JhKDAsIDAsIDAsIDAuMSkpLCBjb2xvci1zdG9wKDAuMzc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDAsIDAsIDAsIDAuMTUpKSwgY29sb3Itc3RvcCgwLjYyNSwgcmdiYSgwLCAwLCAwLCAwLjE1KSksIGNvbG9yLXN0b3AoMC42MjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjg3NSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjg3NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpLCAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4xMjUsIHJnYmEoMCwgMCwgMCwgMC4zKSksIGNvbG9yLXN0b3AoMC4xMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgwLCAwLCAwLCAwLjI1KSksIGNvbG9yLXN0b3AoMC4zNzUsIHJnYmEoMCwgMCwgMCwgMC4yNSkpLCBjb2xvci1zdG9wKDAuMzc1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC41LCByZ2JhKDAsIDAsIDAsIDAuMykpLCBjb2xvci1zdG9wKDAuNjI1LCByZ2JhKDAsIDAsIDAsIDAuMykpLCBjb2xvci1zdG9wKDAuNjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNzUsIHJnYmEoMCwgMCwgMCwgMC4yNSkpLCBjb2xvci1zdG9wKDAuODc1LCByZ2JhKDAsIDAsIDAsIDAuMjUpKSwgY29sb3Itc3RvcCgwLjg3NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMHJlbSAxMHJlbTtcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMXJlbTsgfVxuXG5Aa2V5ZnJhbWVzIG1vdmUge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtMTByZW07IH1cbiAgMTAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAxMHJlbTsgfSB9XG4iLCJAaW1wb3J0ICd+c3JjL2Fzc2V0cy9zY3NzL2Jhc2UvbWl4aW5zJztcclxuXHJcbi5hcHAtY29udGVudCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBvdmVyZmxvdy14OiBvdmVybGF5O1xyXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgLnByZWxvYWRlciB7XHJcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIGZvbnQtc2l6ZTogMnJlbTtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgd2lkdGg6IDUwJTtcclxuXHJcbiAgICAubG9hZGluZy1iYXIge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgYW5pbWF0aW9uOiBtb3ZlIDVzIGxpbmVhciBpbmZpbml0ZTtcclxuICAgICAgYmFja2dyb3VuZC1pbWFnZTpcclxuICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICBsaW5lYXIsIDAgMCwgMTAwJSAxMDAlLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4xMjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjEyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC4zNzUsIHJnYmEoMCwgMCwgMCwgLjEwKSksIGNvbG9yLXN0b3AoLjM3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC41MDAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNTAwLCByZ2JhKDAsIDAsIDAsIC4xNSkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC43NTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNzUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICBjb2xvci1zdG9wKC44NzUsIHJnYmEoMCwgMCwgMCwgLjEwKSksIGNvbG9yLXN0b3AoLjg3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICApLFxyXG4gICAgICAgIC13ZWJraXQtZ3JhZGllbnQoXHJcbiAgICAgICAgICAgIGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjEyNSwgcmdiYSgwLCAwLCAwLCAuMzApKSwgY29sb3Itc3RvcCguMTI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjI1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC4yNTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjUwMCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC41MDAsIHJnYmEoMCwgMCwgMCwgLjMwKSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjYyNSwgcmdiYSgwLCAwLCAwLCAuMzApKSwgY29sb3Itc3RvcCguNjI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgIGNvbG9yLXN0b3AoLjg3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguODc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgIHRvKHRyYW5zcGFyZW50KVxyXG4gICAgICAgICk7XHJcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTByZW0gMTByZW07XHJcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDFyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIG1vdmUge1xyXG4gICAgMCUge1xyXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIC0xMHJlbTtcclxuICAgIH1cclxuICAgIDEwMCUge1xyXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDEwcmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */\"","import {Component, OnInit, NgZone, Renderer2, OnDestroy, ViewChild} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {BackendService} from './_helpers/services/backend.service';\r\nimport {Router} from '@angular/router';\r\nimport {VariablesService} from './_helpers/services/variables.service';\r\nimport {ContextMenuComponent} from 'ngx-contextmenu';\r\nimport {IntToMoneyPipe} from './_helpers/pipes/int-to-money.pipe';\r\nimport {BigNumber} from 'bignumber.js';\r\nimport {ModalService} from './_helpers/services/modal.service';\r\nimport {UtilsService} from './_helpers/services/utils.service';\r\nimport {Store} from 'store';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss'],\r\n providers: [UtilsService]\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n\r\n intervalUpdatePriceState;\r\n intervalUpdateContractsState;\r\n expMedTsEvent;\r\n onQuitRequest = false;\r\n firstOnlineState = false;\r\n translateUsed = false;\r\n\r\n needOpenWallets = [];\r\n\r\n @ViewChild('allContextMenu') public allContextMenu: ContextMenuComponent;\r\n @ViewChild('onlyCopyContextMenu') public onlyCopyContextMenu: ContextMenuComponent;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private renderer: Renderer2,\r\n public translate: TranslateService,\r\n private backend: BackendService,\r\n private router: Router,\r\n public variablesService: VariablesService,\r\n private ngZone: NgZone,\r\n private intToMoneyPipe: IntToMoneyPipe,\r\n private modalService: ModalService,\r\n private utilsService: UtilsService,\r\n private store: Store\r\n ) {\r\n translate.addLangs(['en', 'fr', 'de', 'it', 'pt']);\r\n translate.setDefaultLang('en');\r\n // const browserLang = translate.getBrowserLang();\r\n // translate.use(browserLang.match(/en|fr/) ? browserLang : 'en');\r\n translate.use('en').subscribe(() => {\r\n this.translateUsed = true;\r\n });\r\n }\r\n\r\n setBackendLocalization() {\r\n if (this.translateUsed) {\r\n const stringsArray = [\r\n this.translate.instant('BACKEND_LOCALIZATION.QUIT'),\r\n this.translate.instant('BACKEND_LOCALIZATION.IS_RECEIVED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.IS_CONFIRMED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.INCOME_TRANSFER_UNCONFIRMED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.INCOME_TRANSFER_CONFIRMED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.MINED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.LOCKED'),\r\n this.translate.instant('BACKEND_LOCALIZATION.IS_MINIMIZE'),\r\n this.translate.instant('BACKEND_LOCALIZATION.RESTORE'),\r\n this.translate.instant('BACKEND_LOCALIZATION.TRAY_MENU_SHOW'),\r\n this.translate.instant('BACKEND_LOCALIZATION.TRAY_MENU_MINIMIZE')\r\n ];\r\n this.backend.setBackendLocalization(stringsArray, this.variablesService.settings.language);\r\n } else {\r\n console.warn('wait translate use');\r\n setTimeout(() => {\r\n this.setBackendLocalization();\r\n }, 10000);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.variablesService.allContextMenu = this.allContextMenu;\r\n this.variablesService.onlyCopyContextMenu = this.onlyCopyContextMenu;\r\n\r\n this.backend.initService().subscribe(initMessage => {\r\n console.log('Init message: ', initMessage);\r\n\r\n this.backend.webkitLaunchedScript();\r\n\r\n this.backend.start_backend(false, '127.0.0.1', 11512, (st2, dd2) => {\r\n console.log(st2, dd2);\r\n });\r\n\r\n this.backend.eventSubscribe('quit_requested', () => {\r\n if (!this.onQuitRequest) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n this.needOpenWallets = [];\r\n this.variablesService.daemon_state = 5;\r\n const saveFunction = () => {\r\n this.backend.storeAppData(() => {\r\n const recursionCloseWallets = () => {\r\n if (this.variablesService.wallets.length) {\r\n const lastIndex = this.variablesService.wallets.length - 1;\r\n this.backend.closeWallet(this.variablesService.wallets[lastIndex].wallet_id, () => {\r\n this.variablesService.wallets.splice(lastIndex, 1);\r\n recursionCloseWallets();\r\n });\r\n } else {\r\n this.backend.quitRequest();\r\n }\r\n };\r\n recursionCloseWallets();\r\n });\r\n };\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData(() => {\r\n saveFunction();\r\n });\r\n } else {\r\n saveFunction();\r\n }\r\n }\r\n this.onQuitRequest = true;\r\n });\r\n\r\n this.backend.eventSubscribe('update_wallet_status', (data) => {\r\n console.log('----------------- update_wallet_status -----------------');\r\n console.log(data);\r\n\r\n const wallet_state = data.wallet_state;\r\n const is_mining = data.is_mining;\r\n const wallet = this.variablesService.getWallet(data.wallet_id);\r\n // 1-synch, 2-ready, 3 - error\r\n if (wallet) {\r\n this.ngZone.run(() => {\r\n wallet.loaded = false;\r\n wallet.staking = is_mining;\r\n if (wallet_state === 2) { // ready\r\n wallet.loaded = true;\r\n }\r\n if (wallet_state === 3) { // error\r\n // wallet.error = true;\r\n }\r\n wallet.balance = data.balance;\r\n wallet.unlocked_balance = data.unlocked_balance;\r\n wallet.mined_total = data.minied_total;\r\n wallet.alias_available = data.is_alias_operations_available;\r\n });\r\n }\r\n });\r\n\r\n this.backend.eventSubscribe('wallet_sync_progress', (data) => {\r\n console.log('----------------- wallet_sync_progress -----------------');\r\n console.log(data);\r\n\r\n const wallet = this.variablesService.getWallet(data.wallet_id);\r\n if (wallet) {\r\n this.ngZone.run(() => {\r\n wallet.progress = (data.progress < 0) ? 0 : ((data.progress > 100) ? 100 : data.progress);\r\n if (!this.variablesService.sync_started) {\r\n this.variablesService.sync_started = true;\r\n }\r\n this.addToStore(wallet, true); // subscribe on data\r\n if (wallet.progress === 0) {\r\n wallet.loaded = false;\r\n } else if (wallet.progress === 100) {\r\n wallet.loaded = true;\r\n this.addToStore(wallet, false);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.backend.eventSubscribe('update_daemon_state', (data) => {\r\n console.log('----------------- update_daemon_state -----------------');\r\n console.log('DAEMON:' + data.daemon_network_state);\r\n console.log(data);\r\n // this.variablesService.exp_med_ts = data['expiration_median_timestamp'] + 600 + 1;\r\n this.variablesService.setExpMedTs(data['expiration_median_timestamp'] + 600 + 1);\r\n this.variablesService.net_time_delta_median = data.net_time_delta_median;\r\n this.variablesService.last_build_available = data.last_build_available;\r\n this.variablesService.last_build_displaymode = data.last_build_displaymode;\r\n this.variablesService.setHeightApp(data.height);\r\n this.variablesService.setHeightMax(data.max_net_seen_height);\r\n\r\n this.variablesService.setDownloadedBytes(data.downloaded_bytes);\r\n this.variablesService.setTotalBytes(data.download_total_data_size);\r\n\r\n this.backend.getContactAlias();\r\n this.ngZone.run(() => {\r\n this.variablesService.daemon_state = data['daemon_network_state'];\r\n if (data['daemon_network_state'] === 1) {\r\n const max = data['max_net_seen_height'] - data['synchronization_start_height'];\r\n const current = data.height - data['synchronization_start_height'];\r\n const return_val = Math.floor((current * 100 / max) * 100) / 100;\r\n if (max === 0 || return_val < 0) {\r\n this.variablesService.sync.progress_value = 0;\r\n this.variablesService.sync.progress_value_text = '0.00';\r\n } else if (return_val >= 100) {\r\n this.variablesService.sync.progress_value = 100;\r\n this.variablesService.sync.progress_value_text = '99.99';\r\n } else {\r\n this.variablesService.sync.progress_value = return_val;\r\n this.variablesService.sync.progress_value_text = return_val.toFixed(2);\r\n }\r\n }\r\n\r\n if (data['daemon_network_state'] === 6) {\r\n const max = data['download_total_data_size'];\r\n const current = data['downloaded_bytes'];\r\n const return_val = Math.floor((current / max) * 100);\r\n if (max === 0 || return_val < 0) {\r\n this.variablesService.download.progress_value = 0;\r\n this.variablesService.download.progress_value_text = '0.00';\r\n } else if (return_val >= 100) {\r\n this.variablesService.download.progress_value = 100;\r\n this.variablesService.download.progress_value_text = '99.99';\r\n } else {\r\n this.variablesService.download.progress_value = return_val;\r\n this.variablesService.download.progress_value_text = return_val.toFixed(2);\r\n }\r\n }\r\n });\r\n if (!this.firstOnlineState && data['daemon_network_state'] === 2) {\r\n this.getAliases();\r\n this.backend.getContactAlias();\r\n this.backend.getDefaultFee((status_fee, data_fee) => {\r\n this.variablesService.default_fee_big = new BigNumber(data_fee);\r\n this.variablesService.default_fee = this.intToMoneyPipe.transform(data_fee);\r\n });\r\n this.firstOnlineState = true;\r\n }\r\n });\r\n\r\n this.backend.eventSubscribe('money_transfer', (data) => {\r\n console.log('----------------- money_transfer -----------------');\r\n console.log(data);\r\n\r\n if (!data.ti) {\r\n return;\r\n }\r\n\r\n const wallet_id = data.wallet_id;\r\n const tr_info = data.ti;\r\n\r\n const wallet = this.variablesService.getWallet(wallet_id);\r\n if (wallet) {\r\n if(wallet.history.length > 40) {\r\n wallet.history.splice(40, 1);\r\n }\r\n this.ngZone.run(() => {\r\n\r\n if (!wallet.loaded) {\r\n wallet.balance = data.balance;\r\n wallet.unlocked_balance = data.unlocked_balance;\r\n } else {\r\n wallet.balance = data.balance;\r\n wallet.unlocked_balance = data.unlocked_balance;\r\n }\r\n\r\n if (tr_info.tx_type === 6) {\r\n this.variablesService.setRefreshStacking(wallet_id);\r\n }\r\n\r\n let tr_exists = wallet.excluded_history.some(elem => elem.tx_hash === tr_info.tx_hash);\r\n tr_exists = (!tr_exists) ? wallet.history.some(elem => elem.tx_hash === tr_info.tx_hash) : tr_exists;\r\n\r\n if (wallet.currentPage === 1) {\r\n wallet.prepareHistory([tr_info]);\r\n if (wallet.restore) {\r\n wallet.total_history_item = wallet.history.length;\r\n wallet.totalPages = Math.ceil( wallet.total_history_item / this.variablesService.count);\r\n wallet.totalPages > this.variablesService.maxPages\r\n ? wallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : wallet.pages = new Array(wallet.totalPages).fill(1).map((value, index) => value + index);\r\n }\r\n }\r\n\r\n if (tr_info.hasOwnProperty('contract')) {\r\n const exp_med_ts = this.variablesService.exp_med_ts;\r\n const height_app = this.variablesService.height_app;\r\n\r\n const contract = tr_info.contract[0];\r\n\r\n if (tr_exists) {\r\n for (let i = 0; i < wallet.contracts.length; i++) {\r\n if (wallet.contracts[i].contract_id === contract.contract_id && wallet.contracts[i].is_a === contract.is_a) {\r\n wallet.contracts[i].cancel_expiration_time = contract.cancel_expiration_time;\r\n wallet.contracts[i].expiration_time = contract.expiration_time;\r\n wallet.contracts[i].height = contract.height;\r\n wallet.contracts[i].timestamp = contract.timestamp;\r\n break;\r\n }\r\n }\r\n // $rootScope.getContractsRecount();\r\n return;\r\n }\r\n\r\n if (contract.state === 1 && contract.expiration_time < exp_med_ts) {\r\n contract.state = 110;\r\n } else if (contract.state === 5 && contract.cancel_expiration_time < exp_med_ts) {\r\n contract.state = 130;\r\n } else if (contract.state === 1) {\r\n const searchResult2 = this.variablesService.settings.notViewedContracts.find(elem => elem.state === 110 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult2) {\r\n if (searchResult2.time === contract.expiration_time) {\r\n contract.state = 110;\r\n } else {\r\n for (let j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) {\r\n if (this.variablesService.settings.notViewedContracts[j].contract_id === contract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === contract.is_a) {\r\n this.variablesService.settings.notViewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n for (let j = 0; j < this.variablesService.settings.viewedContracts.length; j++) {\r\n if (this.variablesService.settings.viewedContracts[j].contract_id === contract.contract_id && this.variablesService.settings.viewedContracts[j].is_a === contract.is_a) {\r\n this.variablesService.settings.viewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else if (contract.state === 2 && (contract.height === 0 || (height_app - contract.height) < 10)) {\r\n contract.state = 201;\r\n } else if (contract.state === 2) {\r\n const searchResult3 = this.variablesService.settings.viewedContracts.some(elem => elem.state === 120 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult3) {\r\n contract.state = 120;\r\n }\r\n } else if (contract.state === 5) {\r\n const searchResult4 = this.variablesService.settings.notViewedContracts.find(elem => elem.state === 130 && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n if (searchResult4) {\r\n if (searchResult4.time === contract.cancel_expiration_time) {\r\n contract.state = 130;\r\n } else {\r\n for (let j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) {\r\n if (this.variablesService.settings.notViewedContracts[j].contract_id === contract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === contract.is_a) {\r\n this.variablesService.settings.notViewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n for (let j = 0; j < this.variablesService.settings.viewedContracts.length; j++) {\r\n if (this.variablesService.settings.viewedContracts[j].contract_id === contract.contract_id && this.variablesService.settings.viewedContracts[j].is_a === contract.is_a) {\r\n this.variablesService.settings.viewedContracts.splice(j, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else if (contract.state === 6 && (contract.height === 0 || (height_app - contract.height) < 10)) {\r\n contract.state = 601;\r\n }\r\n\r\n const searchResult = this.variablesService.settings.viewedContracts.some(elem => elem.state === contract.state && elem.is_a === contract.is_a && elem.contract_id === contract.contract_id);\r\n contract.is_new = !searchResult;\r\n\r\n let findContract = false;\r\n for (let i = 0; i < wallet.contracts.length; i++) {\r\n if (wallet.contracts[i].contract_id === contract.contract_id && wallet.contracts[i].is_a === contract.is_a) {\r\n for (const prop in contract) {\r\n if (contract.hasOwnProperty(prop)) {\r\n wallet.contracts[i][prop] = contract[prop];\r\n }\r\n }\r\n findContract = true;\r\n break;\r\n }\r\n }\r\n if (findContract === false) {\r\n wallet.contracts.push(contract);\r\n }\r\n wallet.recountNewContracts();\r\n }\r\n\r\n });\r\n }\r\n });\r\n\r\n this.backend.eventSubscribe('money_transfer_cancel', (data) => {\r\n console.log('----------------- money_transfer_cancel -----------------');\r\n console.log(data);\r\n\r\n if (!data.ti) {\r\n return;\r\n }\r\n\r\n const wallet_id = data.wallet_id;\r\n const tr_info = data.ti;\r\n const wallet = this.variablesService.getWallet(wallet_id);\r\n\r\n if (wallet) {\r\n if (tr_info.hasOwnProperty('contract')) {\r\n for (let i = 0; i < wallet.contracts.length; i++) {\r\n if (wallet.contracts[i].contract_id === tr_info.contract[0].contract_id && wallet.contracts[i].is_a === tr_info.contract[0].is_a) {\r\n if (wallet.contracts[i].state === 1 || wallet.contracts[i].state === 110) {\r\n wallet.contracts[i].is_new = true;\r\n wallet.contracts[i].state = 140;\r\n wallet.recountNewContracts();\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n wallet.removeFromHistory(tr_info.tx_hash);\r\n\r\n let error_tr = '';\r\n switch (tr_info.tx_type) {\r\n case 0:\r\n error_tr = this.translate.instant('ERRORS.TX_TYPE_NORMAL') + '
      ' +\r\n tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' +\r\n this.translate.instant('ERRORS.TX_TYPE_NORMAL_TO') + ' ' + this.intToMoneyPipe.transform(tr_info.amount) + ' ' +\r\n this.translate.instant('ERRORS.TX_TYPE_NORMAL_END');\r\n break;\r\n case 1:\r\n // this.translate.instant('ERRORS.TX_TYPE_PUSH_OFFER');\r\n break;\r\n case 2:\r\n // this.translate.instant('ERRORS.TX_TYPE_UPDATE_OFFER');\r\n break;\r\n case 3:\r\n // this.translate.instant('ERRORS.TX_TYPE_CANCEL_OFFER');\r\n break;\r\n case 4:\r\n error_tr = this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS') + '
      ' +\r\n tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' +\r\n this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS_END');\r\n break;\r\n case 5:\r\n error_tr = this.translate.instant('ERRORS.TX_TYPE_UPDATE_ALIAS') + '
      ' +\r\n tr_info.tx_hash + '
      ' + wallet.name + '
      ' + wallet.address + '
      ' +\r\n this.translate.instant('ERRORS.TX_TYPE_NEW_ALIAS_END');\r\n break;\r\n case 6:\r\n error_tr = this.translate.instant('ERRORS.TX_TYPE_COIN_BASE');\r\n break;\r\n }\r\n if (error_tr) {\r\n this.modalService.prepareModal('error', error_tr);\r\n }\r\n }\r\n });\r\n\r\n this.backend.eventSubscribe('on_core_event', (data) => {\r\n console.log('----------------- on_core_event -----------------');\r\n console.log(data);\r\n\r\n data = JSON.parse(data);\r\n\r\n if (data.events != null) {\r\n for (let i = 0, length = data.events.length; i < length; i++) {\r\n\r\n switch (data.events[i].method) {\r\n case 'CORE_EVENT_BLOCK_ADDED':\r\n break;\r\n case 'CORE_EVENT_ADD_ALIAS':\r\n if (this.variablesService.aliasesChecked[data.events[i].details.address] != null) {\r\n this.variablesService.aliasesChecked[data.events[i].details.address]['name'] = '@' + data.events[i].details.alias;\r\n this.variablesService.aliasesChecked[data.events[i].details.address]['address'] = data.events[i].details.address;\r\n this.variablesService.aliasesChecked[data.events[i].details.address]['comment'] = data.events[i].details.comment;\r\n }\r\n if (this.variablesService.enableAliasSearch) {\r\n const newAlias = {\r\n name: '@' + data.events[i].details.alias,\r\n address: data.events[i].details.address,\r\n comment: data.events[i].details.comment\r\n };\r\n this.variablesService.aliases = this.variablesService.aliases.concat(newAlias);\r\n this.variablesService.changeAliases();\r\n }\r\n break;\r\n case 'CORE_EVENT_UPDATE_ALIAS':\r\n for (const address in this.variablesService.aliasesChecked) {\r\n if (this.variablesService.aliasesChecked.hasOwnProperty(address)) {\r\n if (this.variablesService.aliasesChecked[address].name === '@' + data.events[i].details.alias) {\r\n if (this.variablesService.aliasesChecked[address].address !== data.events[i].details.details.address) {\r\n delete this.variablesService.aliasesChecked[address]['name'];\r\n delete this.variablesService.aliasesChecked[address]['address'];\r\n delete this.variablesService.aliasesChecked[address]['comment'];\r\n } else {\r\n this.variablesService.aliasesChecked[address].comment = data.events[i].details.details.comment;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n if (this.variablesService.aliasesChecked[data.events[i].details.details.address] != null) {\r\n this.variablesService.aliasesChecked[data.events[i].details.details.address]['name'] = '@' + data.events[i].details.alias;\r\n this.variablesService.aliasesChecked[data.events[i].details.details.address]['address'] = data.events[i].details.details.address;\r\n this.variablesService.aliasesChecked[data.events[i].details.details.address]['comment'] = data.events[i].details.details.comment;\r\n }\r\n if (this.variablesService.enableAliasSearch) {\r\n const CurrentAlias = this.variablesService.aliases.find((element) => element.name === '@' + data.events[i].details.alias);\r\n if (CurrentAlias) {\r\n CurrentAlias.address = data.events[i].details.details.address;\r\n CurrentAlias.comment = data.events[i].details.details.comment;\r\n }\r\n }\r\n this.variablesService.changeAliases();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.intervalUpdateContractsState = setInterval(() => {\r\n this.variablesService.wallets.forEach((wallet) => {\r\n wallet.contracts.forEach((contract) => {\r\n if (contract.state === 201 && contract.height !== 0 && (this.variablesService.height_app - contract.height) >= 10) {\r\n contract.state = 2;\r\n contract.is_new = true;\r\n console.warn('need check state in contracts');\r\n } else if (contract.state === 601 && contract.height !== 0 && (this.variablesService.height_app - contract.height) >= 10) {\r\n contract.state = 6;\r\n contract.is_new = true;\r\n }\r\n });\r\n });\r\n }, 30000);\r\n\r\n this.expMedTsEvent = this.variablesService.getExpMedTsEvent.subscribe((newTimestamp: number) => {\r\n this.variablesService.wallets.forEach((wallet) => {\r\n wallet.contracts.forEach((contract) => {\r\n if (contract.state === 1 && contract.expiration_time <= newTimestamp) {\r\n contract.state = 110;\r\n contract.is_new = true;\r\n wallet.recountNewContracts();\r\n } else if (contract.state === 5 && contract.cancel_expiration_time <= newTimestamp) {\r\n contract.state = 130;\r\n contract.is_new = true;\r\n wallet.recountNewContracts();\r\n }\r\n });\r\n });\r\n });\r\n\r\n\r\n this.backend.getAppData((status, data) => {\r\n if (data && Object.keys(data).length > 0) {\r\n for (const key in data) {\r\n if (data.hasOwnProperty(key) && this.variablesService.settings.hasOwnProperty(key)) {\r\n this.variablesService.settings[key] = data[key];\r\n }\r\n }\r\n if (this.variablesService.settings.hasOwnProperty('theme') && ['dark', 'white', 'gray'].indexOf(this.variablesService.settings.theme) !== -1) {\r\n this.renderer.addClass(document.body, 'theme-' + this.variablesService.settings.theme);\r\n } else {\r\n this.renderer.addClass(document.body, 'theme-' + this.variablesService.defaultTheme);\r\n }\r\n if (this.variablesService.settings.hasOwnProperty('scale') && [7.5, 10, 12.5, 15].indexOf(this.variablesService.settings.scale) !== -1) {\r\n const width = this.utilsService.getMinWidthByScale(this.variablesService.settings.scale);\r\n const app = document.documentElement.querySelector('app-root');\r\n this.renderer.setStyle(app, 'min-width', width + 'px');\r\n this.renderer.setStyle(document.documentElement, 'font-size', this.variablesService.settings.scale + 'px');\r\n }\r\n } else {\r\n this.variablesService.settings.theme = this.variablesService.defaultTheme;\r\n this.renderer.addClass(document.body, 'theme-' + this.variablesService.settings.theme);\r\n }\r\n this.translate.use(this.variablesService.settings.language);\r\n this.setBackendLocalization();\r\n\r\n this.backend.setLogLevel(this.variablesService.settings.appLog);\r\n\r\n if (this.router.url !== '/login') {\r\n this.backend.haveSecureAppData((statusPass) => {\r\n if (statusPass) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/login'], {queryParams: {type: 'auth'}});\r\n });\r\n } else {\r\n if (Object.keys(data).length !== 0) {\r\n this.needOpenWallets = JSON.parse(JSON.stringify(this.variablesService.settings.wallets));\r\n this.ngZone.run(() => {\r\n this.variablesService.appLogin = true;\r\n this.router.navigate(['/']);\r\n });\r\n } else {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/login'], {queryParams: {type: 'reg'}});\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }, error => {\r\n console.log(error);\r\n });\r\n this.getMoneyEquivalent();\r\n\r\n this.intervalUpdatePriceState = setInterval(() => {\r\n this.getMoneyEquivalent();\r\n }, 30000);\r\n }\r\n\r\n getMoneyEquivalent() {\r\n this.http.get('https://api.coingecko.com/api/v3/ping').subscribe(\r\n () => {\r\n this.http.get('https://api.coingecko.com/api/v3/simple/price?ids=zano&vs_currencies=usd').subscribe(\r\n data => {\r\n this.variablesService.moneyEquivalent = data['zano']['usd'];\r\n },\r\n error => {\r\n console.warn('api.coingecko.com price error: ', error);\r\n }\r\n );\r\n },\r\n error => {\r\n console.warn('api.coingecko.com error: ', error);\r\n setTimeout(() => {\r\n this.getMoneyEquivalent();\r\n }, 30000);\r\n }\r\n )\r\n }\r\n\r\n getAliases() {\r\n this.backend.getAllAliases((status, data, error) => {\r\n\r\n console.warn(error);\r\n\r\n if (error === 'CORE_BUSY') {\r\n window.setTimeout(() => {\r\n this.getAliases();\r\n }, 10000);\r\n } else if (error === 'OVERFLOW') {\r\n this.variablesService.aliases = [];\r\n this.variablesService.enableAliasSearch = false;\r\n this.variablesService.wallets.forEach(wallet => {\r\n wallet.alias = this.backend.getWalletAlias(wallet.address);\r\n });\r\n } else {\r\n this.variablesService.enableAliasSearch = true;\r\n if (data.aliases && data.aliases.length) {\r\n this.variablesService.aliases = [];\r\n data.aliases.forEach(alias => {\r\n const newAlias = {\r\n name: '@' + alias.alias,\r\n address: alias.address,\r\n comment: alias.comment\r\n };\r\n this.variablesService.aliases.push(newAlias);\r\n });\r\n this.variablesService.wallets.forEach(wallet => {\r\n wallet.alias = this.backend.getWalletAlias(wallet.address);\r\n });\r\n this.variablesService.aliases = this.variablesService.aliases.sort((a, b) => {\r\n if (a.name.length > b.name.length) {\r\n return 1;\r\n }\r\n if (a.name.length < b.name.length) {\r\n return -1;\r\n }\r\n if (a.name > b.name) {\r\n return 1;\r\n }\r\n if (a.name < b.name) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n this.variablesService.changeAliases();\r\n }\r\n }\r\n });\r\n }\r\n\r\n contextMenuCopy(target) {\r\n if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) {\r\n const start = (target['contextSelectionStart']) ? 'contextSelectionStart' : 'selectionStart';\r\n const end = (target['contextSelectionEnd']) ? 'contextSelectionEnd' : 'selectionEnd';\r\n const canUseSelection = ((target[start]) || (target[start] === '0'));\r\n const SelectedText = (canUseSelection) ? target['value'].substring(target[start], target[end]) : target['value'];\r\n this.backend.setClipboard(String(SelectedText));\r\n }\r\n }\r\n\r\n contextMenuOnlyCopy(text) {\r\n if (text) {\r\n this.backend.setClipboard(String(text));\r\n }\r\n }\r\n\r\n contextMenuPaste(target) {\r\n if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) {\r\n this.backend.getClipboard((status, clipboard) => {\r\n clipboard = String(clipboard);\r\n if (typeof clipboard !== 'string' || clipboard.length) {\r\n const start = (target['contextSelectionStart']) ? 'contextSelectionStart' : 'selectionStart';\r\n const end = (target['contextSelectionEnd']) ? 'contextSelectionEnd' : 'selectionEnd';\r\n const _pre = target['value'].substring(0, target[start]);\r\n const _aft = target['value'].substring(target[end], target['value'].length);\r\n let text = _pre + clipboard + _aft;\r\n const cursorPosition = (_pre + clipboard).length;\r\n if (target['maxLength'] && parseInt(target['maxLength'], 10) > 0) {\r\n text = text.substr(0, parseInt(target['maxLength'], 10));\r\n }\r\n target['value'] = text;\r\n target.setSelectionRange(cursorPosition, cursorPosition);\r\n target.dispatchEvent(new Event('input'));\r\n target['focus']();\r\n }\r\n });\r\n }\r\n }\r\n\r\n contextMenuSelect(target) {\r\n if (target && (target['nodeName'].toUpperCase() === 'TEXTAREA' || target['nodeName'].toUpperCase() === 'INPUT')) {\r\n target['focus']();\r\n setTimeout(() => {\r\n target['select']();\r\n });\r\n }\r\n }\r\n\r\n addToStore(wallet, boolean) {\r\n const value = this.store.value.sync;\r\n if (value && value.length) {\r\n const sync = value.filter(item => item.wallet_id === wallet.wallet_id);\r\n if (sync && sync.length) {\r\n const result = value.map(item => {\r\n if (item.wallet_id === wallet.wallet_id) {\r\n return {sync: boolean, wallet_id: wallet.wallet_id};\r\n } else {\r\n return item;\r\n }\r\n });\r\n this.store.set('sync', result);\r\n } else {\r\n value.push({sync: boolean, wallet_id: wallet.wallet_id});\r\n this.store.set('sync', value);\r\n }\r\n } else {\r\n this.store.set('sync', [{sync: boolean, wallet_id: wallet.wallet_id}]);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.intervalUpdateContractsState) {\r\n clearInterval(this.intervalUpdateContractsState);\r\n }\r\n if (this.intervalUpdatePriceState) {\r\n clearInterval(this.intervalUpdatePriceState);\r\n }\r\n this.expMedTsEvent.unsubscribe();\r\n }\r\n\r\n}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { AppRoutingModule } from './app-routing.module';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { LoginComponent } from './login/login.component';\r\nimport { SettingsComponent } from './settings/settings.component';\r\nimport { SidebarComponent } from './sidebar/sidebar.component';\r\nimport { MainComponent } from './main/main.component';\r\nimport { CreateWalletComponent } from './create-wallet/create-wallet.component';\r\nimport { OpenWalletComponent } from './open-wallet/open-wallet.component';\r\nimport { OpenWalletModalComponent } from './open-wallet-modal/open-wallet-modal.component';\r\nimport { RestoreWalletComponent } from './restore-wallet/restore-wallet.component';\r\nimport { SeedPhraseComponent } from './seed-phrase/seed-phrase.component';\r\nimport { WalletDetailsComponent } from './wallet-details/wallet-details.component';\r\nimport { AssignAliasComponent } from './assign-alias/assign-alias.component';\r\nimport { EditAliasComponent } from './edit-alias/edit-alias.component';\r\nimport { TransferAliasComponent } from './transfer-alias/transfer-alias.component';\r\nimport { WalletComponent } from './wallet/wallet.component';\r\nimport { SendComponent } from './send/send.component';\r\nimport { ReceiveComponent } from './receive/receive.component';\r\nimport { HistoryComponent } from './history/history.component';\r\nimport { ContractsComponent } from './contracts/contracts.component';\r\nimport { PurchaseComponent } from './purchase/purchase.component';\r\nimport { MessagesComponent } from './messages/messages.component';\r\nimport { TypingMessageComponent } from './typing-message/typing-message.component';\r\nimport { StakingComponent } from './staking/staking.component';\r\n\r\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\r\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\n// SERVICES\r\nimport { BackendService } from './_helpers/services/backend.service';\r\nimport { ModalService } from './_helpers/services/modal.service';\r\nimport { PaginationStore } from './_helpers/services/pagination.store';\r\n// SERVICES\r\n\r\n// Feature module\r\nimport { Store } from 'store';\r\n// Feature module\r\n\r\nimport { MoneyToIntPipe } from './_helpers/pipes/money-to-int.pipe';\r\nimport { IntToMoneyPipe } from './_helpers/pipes/int-to-money.pipe';\r\nimport { HistoryTypeMessagesPipe } from './_helpers/pipes/history-type-messages.pipe';\r\nimport { ContractStatusMessagesPipe } from './_helpers/pipes/contract-status-messages.pipe';\r\nimport { ContractTimeLeftPipe } from './_helpers/pipes/contract-time-left.pipe';\r\nimport { SafeHTMLPipe } from './_helpers/pipes/safe-html.pipe';\r\nimport { TooltipDirective } from './_helpers/directives/tooltip.directive';\r\nimport { InputValidateDirective } from './_helpers/directives/input-validate/input-validate.directive';\r\nimport { StakingSwitchComponent } from './_helpers/directives/staking-switch/staking-switch.component';\r\nimport { ModalContainerComponent } from './_helpers/directives/modal-container/modal-container.component';\r\nimport { TransactionDetailsComponent } from './_helpers/directives/transaction-details/transaction-details.component';\r\nimport { ContextMenuModule } from 'ngx-contextmenu';\r\nimport { ChartModule, HIGHCHARTS_MODULES } from 'angular-highcharts';\r\nimport * as highcharts from 'highcharts';\r\nimport exporting from 'highcharts/modules/exporting.src';\r\nimport { ProgressContainerComponent } from './_helpers/directives/progress-container/progress-container.component';\r\nimport { InputDisableSelectionDirective } from './_helpers/directives/input-disable-selection/input-disable-selection.directive';\r\nimport { SendModalComponent } from './send-modal/send-modal.component';\r\nimport { ContactsComponent } from './contacts/contacts.component';\r\nimport { AddContactsComponent } from './add-contacts/add-contacts.component';\r\nimport { ContactSendComponent } from './contact-send/contact-send.component';\r\nimport { ExportImportComponent } from './export-import/export-import.component';\r\nimport { ConfirmModalComponent } from './_helpers/directives/confirm-modal/confirm-modal.component';\r\n\r\nexport function HttpLoaderFactory(httpClient: HttpClient) {\r\n return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json');\r\n}\r\n\r\nimport { PapaParseModule } from 'ngx-papaparse';\r\n\r\n// import * as more from 'highcharts/highcharts-more.src';\r\n// import * as exporting from 'highcharts/modules/exporting.src';\r\n// import * as highstock from 'highcharts/modules/stock.src';\r\n\r\nexport function highchartsFactory() {\r\n // Default options.\r\n highcharts.setOptions({\r\n time: {\r\n useUTC: false\r\n }\r\n });\r\n\r\n return [exporting];\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n LoginComponent,\r\n SettingsComponent,\r\n SidebarComponent,\r\n MainComponent,\r\n CreateWalletComponent,\r\n OpenWalletComponent,\r\n OpenWalletModalComponent,\r\n RestoreWalletComponent,\r\n SeedPhraseComponent,\r\n WalletDetailsComponent,\r\n AssignAliasComponent,\r\n EditAliasComponent,\r\n TransferAliasComponent,\r\n WalletComponent,\r\n SendComponent,\r\n ReceiveComponent,\r\n HistoryComponent,\r\n ContractsComponent,\r\n PurchaseComponent,\r\n MessagesComponent,\r\n StakingComponent,\r\n TypingMessageComponent,\r\n MoneyToIntPipe,\r\n IntToMoneyPipe,\r\n StakingSwitchComponent,\r\n HistoryTypeMessagesPipe,\r\n ContractStatusMessagesPipe,\r\n ContractTimeLeftPipe,\r\n TooltipDirective,\r\n InputValidateDirective,\r\n ModalContainerComponent,\r\n TransactionDetailsComponent,\r\n ProgressContainerComponent,\r\n InputDisableSelectionDirective,\r\n SendModalComponent,\r\n ContactsComponent,\r\n AddContactsComponent,\r\n ContactSendComponent,\r\n ExportImportComponent,\r\n SafeHTMLPipe,\r\n ConfirmModalComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n AppRoutingModule,\r\n HttpClientModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n }\r\n }),\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgSelectModule,\r\n ChartModule,\r\n PapaParseModule,\r\n ContextMenuModule.forRoot()\r\n ],\r\n providers: [\r\n Store,\r\n BackendService,\r\n ModalService,\r\n PaginationStore,\r\n MoneyToIntPipe,\r\n IntToMoneyPipe,\r\n { provide: HIGHCHARTS_MODULES, useFactory: highchartsFactory }\r\n // {provide: HIGHCHARTS_MODULES, useFactory: () => [ highstock, more, exporting ] }\r\n ],\r\n entryComponents: [\r\n ModalContainerComponent,\r\n SendModalComponent,\r\n ConfirmModalComponent\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ wallet.name }}\\r\\n {{ 'BREADCRUMBS.ASSIGN_ALIAS' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      6 && assignForm.get('name').value.length <= 25\\\">\\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_WRONG' | translate }}\\r\\n
      \\r\\n
      25\\\">\\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_EXISTS' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      = variablesService.maxCommentLength\\\">\\r\\n {{ 'ASSIGN_ALIAS.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      {{ \\\"ASSIGN_ALIAS.COST\\\" | translate : {value: alias.price | intToMoney, currency: variablesService.defaultCurrency} }}
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n\"","module.exports = \".form-assign {\\n margin: 2.4rem 0; }\\n .form-assign .alias-name {\\n width: 50%; }\\n .form-assign .alias-cost {\\n font-size: 1.3rem;\\n margin-top: 2rem; }\\n .form-assign .wrap-buttons {\\n display: flex;\\n justify-content: space-between;\\n margin: 2.5rem -0.7rem; }\\n .form-assign .wrap-buttons button {\\n margin: 0 0.7rem;\\n width: 15rem; }\\n .assign-alias-tooltip {\\n font-size: 1.3rem;\\n line-height: 2rem;\\n padding: 1rem 1.5rem;\\n max-width: 46rem; }\\n .has-no-edit-symbol {\\n position: relative;\\n width: 100%; }\\n .has-no-edit-symbol input {\\n padding-left: 2.35rem; }\\n .has-no-edit-symbol:after {\\n content: '@';\\n position: absolute;\\n display: inline-block;\\n top: 50%;\\n left: 1rem;\\n transform: translateY(-50%); }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvYXNzaWduLWFsaWFzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGFzc2lnbi1hbGlhc1xcYXNzaWduLWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQTtFQUtsQjtFQUNFLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGdCQUFnQixFQUFBO0VBR2xCO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVcsRUFBQTtFQUZiO0lBSUkscUJBQXFCLEVBQUE7RUFKekI7SUFPSSxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixRQUFRO0lBQ1IsVUFBVTtJQUNWLDJCQUEyQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvYXNzaWduLWFsaWFzL2Fzc2lnbi1hbGlhcy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLWFzc2lnbiB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuXHJcbiAgLmFsaWFzLW5hbWUge1xyXG4gICAgd2lkdGg6IDUwJTtcclxuICB9XHJcblxyXG4gIC5hbGlhcy1jb3N0IHtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbWFyZ2luLXRvcDogMnJlbTtcclxuICB9XHJcblxyXG4gIC53cmFwLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIG1hcmdpbjogMi41cmVtIC0wLjdyZW07XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgbWFyZ2luOiAwIDAuN3JlbTtcclxuICAgICAgd2lkdGg6IDE1cmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmFzc2lnbi1hbGlhcy10b29sdGlwIHtcclxuICBmb250LXNpemU6IDEuM3JlbTtcclxuICBsaW5lLWhlaWdodDogMnJlbTtcclxuICBwYWRkaW5nOiAxcmVtIDEuNXJlbTtcclxuICBtYXgtd2lkdGg6IDQ2cmVtO1xyXG59XHJcblxyXG4uaGFzLW5vLWVkaXQtc3ltYm9sIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaW5wdXQge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyLjM1cmVtO1xyXG4gIH1cclxuICAmOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICdAJztcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogMXJlbTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, NgZone, OnInit, OnDestroy} from '@angular/core';\r\nimport {FormGroup, FormControl, Validators} from '@angular/forms';\r\nimport {Location} from '@angular/common';\r\nimport {Router} from '@angular/router';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\nimport {MoneyToIntPipe} from '../_helpers/pipes/money-to-int.pipe';\r\nimport {IntToMoneyPipe} from '../_helpers/pipes/int-to-money.pipe';\r\nimport BigNumber from 'bignumber.js';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-assign-alias',\r\n templateUrl: './assign-alias.component.html',\r\n styleUrls: ['./assign-alias.component.scss']\r\n})\r\nexport class AssignAliasComponent implements OnInit, OnDestroy {\r\n\r\n wallet: Wallet;\r\n assignForm = new FormGroup({\r\n name: new FormControl('', [Validators.required, Validators.pattern(/^@?[a-z0-9\\.\\-]{6,25}$/)]),\r\n comment: new FormControl('', [(g: FormControl) => {\r\n if (g.value > this.variablesService.maxCommentLength) {\r\n return {'maxLength': true};\r\n } else {\r\n return null;\r\n }\r\n }])\r\n });\r\n assignFormSubscription: Subscription;\r\n alias = {\r\n name: '',\r\n fee: this.variablesService.default_fee,\r\n price: new BigNumber(0),\r\n reward: '0',\r\n rewardOriginal: '0',\r\n comment: '',\r\n exists: false\r\n };\r\n canRegister = false;\r\n notEnoughMoney = false;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private location: Location,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private moneyToInt: MoneyToIntPipe,\r\n private intToMoney: IntToMoneyPipe\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.wallet = this.variablesService.currentWallet;\r\n this.assignFormSubscription = this.assignForm.get('name').valueChanges.subscribe(value => {\r\n this.canRegister = false;\r\n this.alias.exists = false;\r\n const newName = value.toLowerCase().replace('@', '');\r\n if (!(this.assignForm.controls['name'].errors && this.assignForm.controls['name'].errors.hasOwnProperty('pattern')) && newName.length >= 6 && newName.length <= 25) {\r\n this.backend.getAliasByName(newName, status => {\r\n this.ngZone.run(() => {\r\n this.alias.exists = status;\r\n });\r\n if (!status) {\r\n this.alias.price = new BigNumber(0);\r\n this.backend.getAliasCoast(newName, (statusPrice, dataPrice) => {\r\n this.ngZone.run(() => {\r\n if (statusPrice) {\r\n this.alias.price = BigNumber.sum(dataPrice['coast'], this.variablesService.default_fee_big);\r\n }\r\n this.notEnoughMoney = this.alias.price.isGreaterThan(this.wallet.unlocked_balance);\r\n this.alias.reward = this.intToMoney.transform(this.alias.price, false);\r\n this.alias.rewardOriginal = this.intToMoney.transform(dataPrice['coast'], false);\r\n this.canRegister = !this.notEnoughMoney;\r\n });\r\n });\r\n } else {\r\n this.notEnoughMoney = false;\r\n this.alias.reward = '0';\r\n this.alias.rewardOriginal = '0';\r\n }\r\n });\r\n } else {\r\n this.notEnoughMoney = false;\r\n this.alias.reward = '0';\r\n this.alias.rewardOriginal = '0';\r\n }\r\n this.alias.name = newName;\r\n });\r\n }\r\n\r\n assignAlias() {\r\n const alias = this.backend.getWalletAlias(this.wallet.address);\r\n if (alias.hasOwnProperty('name')) {\r\n this.modalService.prepareModal('info', 'ASSIGN_ALIAS.ONE_ALIAS');\r\n } else {\r\n this.alias.comment = this.assignForm.get('comment').value;\r\n this.backend.registerAlias(this.wallet.wallet_id, this.alias.name, this.wallet.address, this.alias.fee, this.alias.comment, this.alias.rewardOriginal, (status, data) => {\r\n if (status) {\r\n this.wallet.wakeAlias = true;\r\n this.modalService.prepareModal('info', 'ASSIGN_ALIAS.REQUEST_ADD_REG');\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.wallet.wallet_id]);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.assignFormSubscription.unsubscribe();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n {{\\r\\n 'CONTACTS.TITLE' | translate\\r\\n }}\\r\\n {{ 'CONTACTS.SEND' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n\"","module.exports = \".wallets-selection {\\n display: flex;\\n align-items: center;\\n margin-top: 2rem; }\\n .wallets-selection .input-block {\\n width: 18rem; }\\n .wallets-selection button {\\n padding: 2rem;\\n background: transparent;\\n border: none;\\n outline: none; }\\n .input-block {\\n width: 44rem; }\\n .input-block input {\\n overflow: hidden;\\n text-overflow: ellipsis; }\\n .blue-button {\\n margin-top: 2.5rem;\\n width: 100%;\\n max-width: 18rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udGFjdC1zZW5kL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGNvbnRhY3Qtc2VuZFxcY29udGFjdC1zZW5kLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixnQkFBZ0IsRUFBQTtFQUhsQjtJQU1JLFlBQVksRUFBQTtFQU5oQjtJQVVJLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGFBQWEsRUFBQTtFQUlqQjtFQUNFLFlBQVksRUFBQTtFQURkO0lBSUksZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFBO0VBSTNCO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2NvbnRhY3Qtc2VuZC9jb250YWN0LXNlbmQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIud2FsbGV0cy1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBtYXJnaW4tdG9wOiAycmVtO1xyXG4gIFxyXG4gIC5pbnB1dC1ibG9jayB7XHJcbiAgICB3aWR0aDogMThyZW07XHJcbiAgfVxyXG5cclxuICBidXR0b24ge1xyXG4gICAgcGFkZGluZzogMnJlbTtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICB9XHJcbn1cclxuXHJcbi5pbnB1dC1ibG9jayB7XHJcbiAgd2lkdGg6IDQ0cmVtO1xyXG5cclxuICBpbnB1dCB7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgfVxyXG59XHJcblxyXG4uYmx1ZS1idXR0b24ge1xyXG4gIG1hcmdpbi10b3A6IDIuNXJlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBtYXgtd2lkdGg6IDE4cmVtO1xyXG59XHJcblxyXG5cclxuIl19 */\"","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Component({\r\n selector: 'app-contact-send',\r\n templateUrl: './contact-send.component.html',\r\n styleUrls: ['./contact-send.component.scss']\r\n})\r\nexport class ContactSendComponent implements OnInit, OnDestroy {\r\n\r\n queryRouting;\r\n address;\r\n\r\n constructor(\r\n private location: Location,\r\n public variablesService: VariablesService,\r\n private route: ActivatedRoute\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.queryRouting = this.route.queryParams.subscribe(params => {\r\n if (params.address) {\r\n this.address = params.address;\r\n }\r\n });\r\n }\r\n\r\n goToWallet(id) {\r\n this.variablesService.setCurrentWallet(id);\r\n this.variablesService.currentWallet.send_data['address'] = this.address;\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.queryRouting.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n

      {{ 'CONTACTS.TITLE' | translate }}

      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{ 'CONTACTS.TABLE.NAME' | translate }}\\r\\n {{ 'CONTACTS.TABLE.ALIAS' | translate }}\\r\\n {{ 'CONTACTS.TABLE.ADDRESS' | translate }}\\r\\n {{ 'CONTACTS.TABLE.NOTES' | translate }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{ contact.name }}\\r\\n \\r\\n \\r\\n \\r\\n {{ contact.alias }}\\r\\n \\r\\n \\r\\n \\r\\n {{ contact.address }}\\r\\n \\r\\n \\r\\n {{ contact.notes }}\\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n {{ 'CONTACTS.BUTTON.SEND' | translate }}\\r\\n \\r\\n \\r\\n \\r\\n {{ 'CONTACTS.BUTTON.EDIT' | translate }}\\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
      \\r\\n {{ 'CONTACTS.TABLE.EMPTY' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n min-width: 95rem;\\n width: 100%;\\n height: 100%; }\\n\\n.head {\\n justify-content: flex-end; }\\n\\n.contacts-title {\\n font-size: 1.7rem; }\\n\\n.wrap-table {\\n margin: 1rem -3rem; }\\n\\n.wrap-table table tbody tr td {\\n padding: 0 3rem 0 1rem;\\n overflow: hidden;\\n text-overflow: ellipsis; }\\n\\n.wrap-table table tbody tr td:first-child {\\n max-width: 10rem;\\n padding: 0 3rem 0 3rem; }\\n\\n.wrap-table table tbody tr td:nth-child(2) {\\n max-width: 10rem; }\\n\\n.wrap-table table tbody tr td .alias {\\n cursor: pointer; }\\n\\n.wrap-table table tbody tr td .button-wrapper {\\n display: flex; }\\n\\n.wrap-table table tbody tr td .button-wrapper button {\\n display: flex;\\n align-items: center;\\n background: transparent;\\n border: none;\\n font-size: 1.3rem;\\n font-weight: 400;\\n line-height: 3rem;\\n outline: none;\\n padding: 0;\\n height: auto;\\n margin-right: 1.8rem; }\\n\\n.wrap-table table tbody tr td .button-wrapper button .icon {\\n cursor: pointer;\\n margin-right: 0.8rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.wrap-table table tbody tr td .button-wrapper button .icon.edit {\\n -webkit-mask: url('edit.svg') no-repeat center;\\n mask: url('edit.svg') no-repeat center; }\\n\\n.wrap-table table tbody tr td .button-wrapper button .icon.transfer {\\n -webkit-mask: url('send.svg') no-repeat center;\\n mask: url('send.svg') no-repeat center; }\\n\\n.wrap-table table tbody tr td .button-wrapper button .icon.delete {\\n -webkit-mask: url('delete.svg') no-repeat center;\\n mask: url('delete.svg') no-repeat center; }\\n\\n.wrap-table .empty-list {\\n margin: 2.5rem 3rem; }\\n\\n.blue-button {\\n width: 100%;\\n max-width: 18rem;\\n margin-top: 3rem; }\\n\\n.footer {\\n position: absolute;\\n bottom: 3rem;\\n font-size: 1.3rem; }\\n\\n.footer .import-btn {\\n display: flex;\\n align-items: center;\\n background-color: transparent;\\n font-size: inherit;\\n font-weight: 400;\\n line-height: 1.3rem;\\n padding: 0;\\n height: auto; }\\n\\n.footer .import-btn .icon {\\n margin-right: 0.7rem;\\n -webkit-mask: url('import-export.svg') no-repeat center;\\n mask: url('import-export.svg') no-repeat center;\\n width: 0.9rem;\\n height: 0.9rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udGFjdHMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcY29udGFjdHNcXGNvbnRhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVc7RUFDWCxZQUFZLEVBQUE7O0FBR2Q7RUFDRSx5QkFBeUIsRUFBQTs7QUFHM0I7RUFDRSxpQkFBaUIsRUFBQTs7QUFHbkI7RUFDRSxrQkFBa0IsRUFBQTs7QUFEcEI7SUFVVSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFBOztBQVpqQztNQWVZLGdCQUFnQjtNQUNoQixzQkFBc0IsRUFBQTs7QUFoQmxDO01Bb0JZLGdCQUFnQixFQUFBOztBQXBCNUI7TUF3QlksZUFBZSxFQUFBOztBQXhCM0I7TUE0QlksYUFBYSxFQUFBOztBQTVCekI7UUErQmMsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQix1QkFBdUI7UUFDdkIsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixVQUFVO1FBQ1YsWUFBWTtRQUNaLG9CQUFvQixFQUFBOztBQXpDbEM7VUE0Q2dCLGVBQWU7VUFDZixvQkFBb0I7VUFDcEIsYUFBYTtVQUNiLGNBQWMsRUFBQTs7QUEvQzlCO1lBa0RrQiw4Q0FBdUQ7b0JBQXZELHNDQUF1RCxFQUFBOztBQWxEekU7WUFzRGtCLDhDQUF1RDtvQkFBdkQsc0NBQXVELEVBQUE7O0FBdER6RTtZQTBEa0IsZ0RBQXlEO29CQUF6RCx3Q0FBeUQsRUFBQTs7QUExRDNFO0lBcUVJLG1CQUFtQixFQUFBOztBQUl2QjtFQUNFLFdBQVc7RUFDWCxnQkFBZ0I7RUFDaEIsZ0JBQWdCLEVBQUE7O0FBSWxCO0VBQ0Usa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixpQkFBaUIsRUFBQTs7QUFIbkI7SUFNSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsWUFBWSxFQUFBOztBQWJoQjtNQWdCTSxvQkFBb0I7TUFDcEIsdURBQWdFO2NBQWhFLCtDQUFnRTtNQUNoRSxhQUFhO01BQ2IsY0FBYyxFQUFBIiwiZmlsZSI6InNyYy9hcHAvY29udGFjdHMvY29udGFjdHMuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgbWluLXdpZHRoOiA5NXJlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbn1cclxuXHJcbi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uY29udGFjdHMtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG59XHJcblxyXG4ud3JhcC10YWJsZSB7XHJcbiAgbWFyZ2luOiAxcmVtIC0zcmVtO1xyXG5cclxuICB0YWJsZSB7XHJcblxyXG4gICAgdGJvZHl7XHJcblxyXG4gICAgICB0ciB7XHJcblxyXG4gICAgICAgIHRkIHtcclxuICAgICAgICAgIHBhZGRpbmc6IDAgM3JlbSAwIDFyZW07XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcblxyXG4gICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogMTByZW07XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgM3JlbSAwIDNyZW07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJjpudGgtY2hpbGQoMikge1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5hbGlhcyB7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuYnV0dG9uLXdyYXBwZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgYnV0dG9uIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OyAgXHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgICAgICAgICAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICAgICAgICAgICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS44cmVtO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjhyZW07XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMS43cmVtO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxLjdyZW07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgJi5lZGl0IHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAmLnRyYW5zZmVyIHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9zZW5kLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICYuZGVsZXRlIHtcclxuICAgICAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9kZWxldGUuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICAuZW1wdHktbGlzdCB7XHJcbiAgICBtYXJnaW46IDIuNXJlbSAzcmVtO1xyXG4gIH0gIFxyXG59XHJcblxyXG4uYmx1ZS1idXR0b24ge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIG1heC13aWR0aDogMThyZW07XHJcbiAgbWFyZ2luLXRvcDogM3JlbTtcclxufVxyXG5cclxuXHJcbi5mb290ZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBib3R0b206IDNyZW07XHJcbiAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgXHJcbiAgLmltcG9ydC1idG4ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogYXV0bztcclxuXHJcbiAgICAuaWNvbiB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMC43cmVtO1xyXG4gICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2ltcG9ydC1leHBvcnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB3aWR0aDogMC45cmVtO1xyXG4gICAgICBoZWlnaHQ6IDAuOXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\n\r\n@Component({\r\n selector: 'app-contacts',\r\n templateUrl: './contacts.component.html',\r\n styleUrls: ['./contacts.component.scss']\r\n})\r\nexport class ContactsComponent implements OnInit {\r\n calculatedWidth = [];\r\n @ViewChild('head') head: ElementRef;\r\n\r\n constructor(\r\n private location: Location,\r\n public variablesService: VariablesService,\r\n private backend: BackendService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.backend.getContactAlias();\r\n }\r\n\r\n delete(index: number) {\r\n if (this.variablesService.appPass) {\r\n this.variablesService.contacts.splice(index, 1);\r\n this.backend.storeSecureAppData();\r\n }\r\n }\r\n\r\n calculateWidth() {\r\n this.calculatedWidth = [];\r\n this.calculatedWidth.push(\r\n this.head.nativeElement.childNodes[0].clientWidth\r\n );\r\n this.calculatedWidth.push(\r\n this.head.nativeElement.childNodes[1].clientWidth +\r\n this.head.nativeElement.childNodes[2].clientWidth\r\n );\r\n this.calculatedWidth.push(\r\n this.head.nativeElement.childNodes[3].clientWidth\r\n );\r\n this.calculatedWidth.push(\r\n this.head.nativeElement.childNodes[4].clientWidth\r\n );\r\n }\r\n\r\n // openInBrowser(alias: string) {\r\n // if (alias !== null) {\r\n // this.backend.openUrlInBrowser(\r\n // `explorer.zano.org/aliases/${alias.slice(1)}#modalOpen`\r\n // );\r\n // }\r\n // }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n {{ 'CONTRACTS.EMPTY' | translate }}\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      {{ 'CONTRACTS.CONTRACTS' | translate }}{{ 'CONTRACTS.DATE' | translate }}{{ 'CONTRACTS.AMOUNT' | translate }}{{ 'CONTRACTS.STATUS' | translate }}{{ 'CONTRACTS.COMMENTS' | translate }}
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n {{item.private_detailes.t}}\\r\\n
      \\r\\n
      \\r\\n
      {{item.timestamp * 1000 | date : 'dd-MM-yyyy HH:mm'}}
      \\r\\n
      \\r\\n
      {{item.private_detailes.to_pay | intToMoney}} {{variablesService.defaultCurrency}}
      \\r\\n
      \\r\\n
      \\r\\n {{item.state | contractStatusMessages : item.is_a}}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{item.private_detailes.c}}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.empty-contracts {\\n font-size: 1.5rem; }\\n\\n.wrap-table {\\n margin: -3rem -3rem 0 -3rem;\\n overflow-x: auto; }\\n\\n.wrap-table table tbody tr {\\n cursor: pointer;\\n outline: none !important; }\\n\\n.wrap-table table tbody tr .contract {\\n position: relative;\\n display: flex;\\n align-items: center; }\\n\\n.wrap-table table tbody tr .contract .icon {\\n flex-shrink: 0; }\\n\\n.wrap-table table tbody tr .contract .icon.new, .wrap-table table tbody tr .contract .icon.alert {\\n position: absolute;\\n top: 0; }\\n\\n.wrap-table table tbody tr .contract .icon.new {\\n left: -2.3rem;\\n -webkit-mask: url('new.svg') no-repeat center;\\n mask: url('new.svg') no-repeat center;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.wrap-table table tbody tr .contract .icon.alert {\\n top: 0.2rem;\\n left: -2.1rem;\\n -webkit-mask: url('alert.svg') no-repeat center;\\n mask: url('alert.svg') no-repeat center;\\n width: 1.2rem;\\n height: 1.2rem; }\\n\\n.wrap-table table tbody tr .contract .icon.purchase, .wrap-table table tbody tr .contract .icon.sell {\\n margin-right: 1rem;\\n width: 1.5rem;\\n height: 1.5rem; }\\n\\n.wrap-table table tbody tr .contract .icon.purchase {\\n -webkit-mask: url('purchase.svg') no-repeat center;\\n mask: url('purchase.svg') no-repeat center; }\\n\\n.wrap-table table tbody tr .contract .icon.sell {\\n -webkit-mask: url('sell.svg') no-repeat center;\\n mask: url('sell.svg') no-repeat center; }\\n\\n.wrap-table table tbody tr .contract span {\\n text-overflow: ellipsis;\\n overflow: hidden; }\\n\\n.wrap-table table tbody tr .status, .wrap-table table tbody tr .comment {\\n display: inline-block;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n max-width: 100%; }\\n\\n.contracts-buttons {\\n display: flex;\\n margin: 3rem 0;\\n width: 50%; }\\n\\n.contracts-buttons button {\\n flex: 0 1 50%;\\n margin-right: 1.5rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY29udHJhY3RzL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXGNvbnRyYWN0c1xcY29udHJhY3RzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsaUJBQWlCLEVBQUE7O0FBR25CO0VBQ0UsMkJBQTJCO0VBQzNCLGdCQUFnQixFQUFBOztBQUZsQjtJQVNRLGVBQWU7SUFDZix3QkFBd0IsRUFBQTs7QUFWaEM7TUFhVSxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLG1CQUFtQixFQUFBOztBQWY3QjtRQWtCWSxjQUFjLEVBQUE7O0FBbEIxQjtVQXFCYyxrQkFBa0I7VUFDbEIsTUFBTSxFQUFBOztBQXRCcEI7VUEwQmMsYUFBYTtVQUNiLDZDQUFzRDtrQkFBdEQscUNBQXNEO1VBQ3RELGFBQWE7VUFDYixjQUFjLEVBQUE7O0FBN0I1QjtVQWlDYyxXQUFXO1VBQ1gsYUFBYTtVQUNiLCtDQUF3RDtrQkFBeEQsdUNBQXdEO1VBQ3hELGFBQWE7VUFDYixjQUFjLEVBQUE7O0FBckM1QjtVQXlDYyxrQkFBa0I7VUFDbEIsYUFBYTtVQUNiLGNBQWMsRUFBQTs7QUEzQzVCO1VBK0NjLGtEQUEyRDtrQkFBM0QsMENBQTJELEVBQUE7O0FBL0N6RTtVQW1EYyw4Q0FBdUQ7a0JBQXZELHNDQUF1RCxFQUFBOztBQW5EckU7UUF3RFksdUJBQXVCO1FBQ3ZCLGdCQUFnQixFQUFBOztBQXpENUI7TUE4RFUscUJBQXFCO01BQ3JCLHVCQUF1QjtNQUN2QixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFBOztBQU96QjtFQUNFLGFBQWE7RUFDYixjQUFjO0VBQ2QsVUFBVSxFQUFBOztBQUhaO0lBTUksYUFBYTtJQUNiLG9CQUFvQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvY29udHJhY3RzL2NvbnRyYWN0cy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmVtcHR5LWNvbnRyYWN0cyB7XHJcbiAgZm9udC1zaXplOiAxLjVyZW07XHJcbn1cclxuXHJcbi53cmFwLXRhYmxlIHtcclxuICBtYXJnaW46IC0zcmVtIC0zcmVtIDAgLTNyZW07XHJcbiAgb3ZlcmZsb3cteDogYXV0bztcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xyXG5cclxuICAgICAgICAuY29udHJhY3Qge1xyXG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICBmbGV4LXNocmluazogMDtcclxuXHJcbiAgICAgICAgICAgICYubmV3LCAmLmFsZXJ0IHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLm5ldyB7XHJcbiAgICAgICAgICAgICAgbGVmdDogLTIuM3JlbTtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL25ldy5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEuN3JlbTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEuN3JlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5hbGVydCB7XHJcbiAgICAgICAgICAgICAgdG9wOiAwLjJyZW07XHJcbiAgICAgICAgICAgICAgbGVmdDogLTIuMXJlbTtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2FsZXJ0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLnB1cmNoYXNlLCAmLnNlbGwge1xyXG4gICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMXJlbTtcclxuICAgICAgICAgICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMS41cmVtO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLnB1cmNoYXNlIHtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3B1cmNoYXNlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5zZWxsIHtcclxuICAgICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbGwuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3BhbiB7XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cywgLmNvbW1lbnQge1xyXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmNvbnRyYWN0cy1idXR0b25zIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIG1hcmdpbjogM3JlbSAwO1xyXG4gIHdpZHRoOiA1MCU7XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBmbGV4OiAwIDEgNTAlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAxLjVyZW07XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, OnInit, OnDestroy} from '@angular/core';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\n\r\n@Component({\r\n selector: 'app-contracts',\r\n templateUrl: './contracts.component.html',\r\n styleUrls: ['./contracts.component.scss']\r\n})\r\nexport class ContractsComponent implements OnInit, OnDestroy {\r\n\r\n parentRouting;\r\n walletId;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n public variablesService: VariablesService\r\n ) {\r\n }\r\n\r\n public get sortedArrayContracts(): any[] {\r\n return this.variablesService.currentWallet.contracts.sort((a, b) => {\r\n if (a.is_new < b.is_new) {\r\n return 1;\r\n }\r\n if (a.is_new > b.is_new) {\r\n return -1;\r\n }\r\n if (a.timestamp < b.timestamp) {\r\n return 1;\r\n }\r\n if (a.timestamp > b.timestamp) {\r\n return -1;\r\n }\r\n if (a.contract_id < b.contract_id) {\r\n return 1;\r\n }\r\n if (a.contract_id > b.contract_id) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(params => {\r\n if (params.hasOwnProperty('id')) {\r\n this.walletId = params['id'];\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\\r\\n {{ 'BREADCRUMBS.CREATE_WALLET' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'CREATE_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'CREATE_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = variablesService.maxWalletNameLength\\\">\\r\\n {{ 'CREATE_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'CREATE_WALLET.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n\\r\\n\"","module.exports = \":host {\\n position: relative; }\\n\\n.form-create {\\n margin: 2.4rem 0;\\n width: 50%; }\\n\\n.form-create .wrap-buttons {\\n display: flex;\\n margin: 2.5rem -0.7rem; }\\n\\n.form-create .wrap-buttons button {\\n margin: 0 0.7rem; }\\n\\n.form-create .wrap-buttons button.transparent-button {\\n flex-basis: 50%; }\\n\\n.form-create .wrap-buttons button.select-button {\\n flex-basis: 60%; }\\n\\n.form-create .wrap-buttons button.create-button {\\n flex: 1 1 50%; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY3JlYXRlLXdhbGxldC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxjcmVhdGUtd2FsbGV0XFxjcmVhdGUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTs7QUFGWjtJQUtJLGFBQWE7SUFDYixzQkFBc0IsRUFBQTs7QUFOMUI7TUFTTSxnQkFBZ0IsRUFBQTs7QUFUdEI7UUFZUSxlQUFlLEVBQUE7O0FBWnZCO1FBZ0JRLGVBQWUsRUFBQTs7QUFoQnZCO1FBb0JRLGFBQWEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL2NyZWF0ZS13YWxsZXQvY3JlYXRlLXdhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5mb3JtLWNyZWF0ZSB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogNTAlO1xyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcblxyXG4gICAgICAmLnRyYW5zcGFyZW50LWJ1dHRvbiB7XHJcbiAgICAgICAgZmxleC1iYXNpczogNTAlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnNlbGVjdC1idXR0b24ge1xyXG4gICAgICAgIGZsZXgtYmFzaXM6IDYwJTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5jcmVhdGUtYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAxIDEgNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, NgZone, OnInit} from '@angular/core';\r\nimport {FormGroup, FormControl, Validators} from '@angular/forms';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Router} from '@angular/router';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-create-wallet',\r\n templateUrl: './create-wallet.component.html',\r\n styleUrls: ['./create-wallet.component.scss']\r\n})\r\nexport class CreateWalletComponent implements OnInit {\r\n\r\n createForm = new FormGroup({\r\n name: new FormControl('', [Validators.required, (g: FormControl) => {\r\n for (let i = 0; i < this.variablesService.wallets.length; i++) {\r\n if (g.value === this.variablesService.wallets[i].name) {\r\n return {'duplicate': true};\r\n }\r\n }\r\n return null;\r\n }]),\r\n password: new FormControl('', Validators.pattern(this.variablesService.pattern)),\r\n confirm: new FormControl('')\r\n }, function (g: FormGroup) {\r\n return g.get('password').value === g.get('confirm').value ? null : {'confirm_mismatch': true};\r\n });\r\n\r\n wallet = {\r\n id: ''\r\n };\r\n\r\n walletSaved = false;\r\n walletSavedName = '';\r\n progressWidth = '9rem';\r\n\r\n constructor(\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n private translate: TranslateService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n createWallet() {\r\n this.ngZone.run(() => {\r\n this.progressWidth = '100%';\r\n this.router.navigate(['/seed-phrase'], {queryParams: {wallet_id: this.wallet.id}});\r\n });\r\n }\r\n\r\n saveWallet() {\r\n if (this.createForm.valid && this.createForm.get('name').value.length <= this.variablesService.maxWalletNameLength) {\r\n this.backend.saveFileDialog(this.translate.instant('CREATE_WALLET.TITLE_SAVE'), '*', this.variablesService.settings.default_path, (file_status, file_data) => {\r\n if (file_status) {\r\n this.variablesService.settings.default_path = file_data.path.substr(0, file_data.path.lastIndexOf('/'));\r\n this.walletSavedName = file_data.path.substr(file_data.path.lastIndexOf('/') + 1, file_data.path.length - 1);\r\n this.backend.generateWallet(file_data.path, this.createForm.get('password').value, (generate_status, generate_data, errorCode) => {\r\n if (generate_status) {\r\n this.wallet.id = generate_data.wallet_id;\r\n this.variablesService.opening_wallet = new Wallet(\r\n generate_data.wallet_id,\r\n this.createForm.get('name').value,\r\n this.createForm.get('password').value,\r\n generate_data['wi'].path,\r\n generate_data['wi'].address,\r\n generate_data['wi'].balance,\r\n generate_data['wi'].unlocked_balance,\r\n generate_data['wi'].mined_total,\r\n generate_data['wi'].tracking_hey\r\n );\r\n this.variablesService.opening_wallet.alias = this.backend.getWalletAlias(generate_data['wi'].address);\r\n this.variablesService.opening_wallet.total_history_item = 0;\r\n this.variablesService.opening_wallet.pages = new Array(1).fill(1);\r\n this.variablesService.opening_wallet.totalPages = 1;\r\n this.variablesService.opening_wallet.currentPage = 1;\r\n this.ngZone.run(() => {\r\n this.walletSaved = true;\r\n this.progressWidth = '33%';\r\n });\r\n } else {\r\n if (errorCode && errorCode === 'ALREADY_EXISTS') {\r\n this.modalService.prepareModal('error', 'CREATE_WALLET.ERROR_CANNOT_SAVE_TOP');\r\n } else {\r\n this.modalService.prepareModal('error', 'CREATE_WALLET.ERROR_CANNOT_SAVE_SYSTEM');\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ wallet.name }}\\r\\n {{ 'BREADCRUMBS.EDIT_ALIAS' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      0 && notEnoughMoney\\\">\\r\\n {{ 'EDIT_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\\r\\n
      \\r\\n
      = variablesService.maxCommentLength\\\">\\r\\n {{ 'EDIT_ALIAS.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      {{ \\\"EDIT_ALIAS.COST\\\" | translate : {value: variablesService.default_fee, currency: variablesService.defaultCurrency} }}
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n\\r\\n\"","module.exports = \".form-edit {\\n margin: 2.4rem 0; }\\n .form-edit .alias-name {\\n width: 50%; }\\n .form-edit .alias-cost {\\n font-size: 1.3rem;\\n margin-top: 2rem; }\\n .form-edit .wrap-buttons {\\n display: flex;\\n justify-content: space-between;\\n margin: 2.5rem -0.7rem; }\\n .form-edit .wrap-buttons button {\\n margin: 0 0.7rem;\\n width: 15rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZWRpdC1hbGlhcy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxlZGl0LWFsaWFzXFxlZGl0LWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQSIsImZpbGUiOiJzcmMvYXBwL2VkaXQtYWxpYXMvZWRpdC1hbGlhcy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLWVkaXQge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcblxyXG4gIC5hbGlhcy1uYW1lIHtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgfVxyXG5cclxuICAuYWxpYXMtY29zdCB7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgfVxyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcbiAgICAgIHdpZHRoOiAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, NgZone, OnInit} from '@angular/core';\r\nimport {Location} from '@angular/common';\r\nimport {Router} from '@angular/router';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\n\r\n@Component({\r\n selector: 'app-edit-alias',\r\n templateUrl: './edit-alias.component.html',\r\n styleUrls: ['./edit-alias.component.scss']\r\n})\r\nexport class EditAliasComponent implements OnInit {\r\n\r\n wallet: Wallet;\r\n alias: any;\r\n oldAliasComment: string;\r\n notEnoughMoney: boolean;\r\n requestProcessing = false;\r\n\r\n constructor(\r\n private location: Location,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.wallet = this.variablesService.currentWallet;\r\n const alias = this.backend.getWalletAlias(this.wallet.address);\r\n this.alias = {\r\n name: alias.name,\r\n address: alias.address,\r\n comment: alias.comment\r\n };\r\n this.oldAliasComment = alias.comment;\r\n this.notEnoughMoney = this.wallet.unlocked_balance.isLessThan(this.variablesService.default_fee_big);\r\n }\r\n\r\n updateAlias() {\r\n if (this.requestProcessing || this.notEnoughMoney || this.oldAliasComment === this.alias.comment || this.alias.comment.length > this.variablesService.maxCommentLength) {\r\n return;\r\n }\r\n this.requestProcessing = true;\r\n this.backend.updateAlias(this.wallet.wallet_id, this.alias, this.variablesService.default_fee, (status) => {\r\n if (status) {\r\n this.modalService.prepareModal('success', '');\r\n this.wallet.alias['comment'] = this.alias.comment;\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.wallet.wallet_id]);\r\n });\r\n }\r\n this.requestProcessing = false;\r\n });\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n

      {{ 'CONTACTS.IMPORT_EXPORT' | translate }}

      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.head {\\n justify-content: flex-end; }\\n\\n.contacts-title {\\n font-size: 1.7rem;\\n margin-bottom: 1rem; }\\n\\n.btn-wrapper {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin: 0 -0.5rem;\\n padding: 1.5rem 0; }\\n\\n.btn-wrapper button {\\n flex: 1 0 auto;\\n margin: 0 0.5rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvZXhwb3J0LWltcG9ydC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxleHBvcnQtaW1wb3J0XFxleHBvcnQtaW1wb3J0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UseUJBQXlCLEVBQUE7O0FBRzNCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQixFQUFBOztBQUdyQjtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsOEJBQThCO0VBQzlCLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBQTs7QUFMbkI7SUFRSSxjQUFjO0lBQ2QsZ0JBQWdCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9leHBvcnQtaW1wb3J0L2V4cG9ydC1pbXBvcnQuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uY29udGFjdHMtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG4gIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbn1cclxuXHJcbi5idG4td3JhcHBlciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBtYXJnaW46IDAgLTAuNXJlbTtcclxuICBwYWRkaW5nOiAxLjVyZW0gMDtcclxuXHJcbiAgYnV0dG9uIHtcclxuICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgbWFyZ2luOiAwIDAuNXJlbTtcclxuICB9XHJcbn0iXX0= */\"","import { Component, OnInit, NgZone } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { Contact } from '../_helpers/models/contact.model';\r\nimport { ModalService } from '../_helpers/services/modal.service';\r\nimport { Papa } from 'ngx-papaparse';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-export-import',\r\n templateUrl: './export-import.component.html',\r\n styleUrls: ['./export-import.component.scss']\r\n})\r\nexport class ExportImportComponent implements OnInit {\r\n csvContent;\r\n\r\n constructor(\r\n private location: Location,\r\n private variablesService: VariablesService,\r\n private backend: BackendService,\r\n private modalService: ModalService,\r\n private papa: Papa,\r\n private translate: TranslateService,\r\n private router: Router,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {}\r\n\r\n import() {\r\n this.backend.openFileDialog(\r\n '',\r\n '*',\r\n this.variablesService.settings.default_path,\r\n (file_status, file_data) => {\r\n if (file_status) {\r\n this.variablesService.settings.default_path = file_data.path.substr(\r\n 0,\r\n file_data.path.lastIndexOf('/')\r\n );\r\n if (this.isValid(file_data.path)) {\r\n this.backend.loadFile(file_data.path, (status, data) => {\r\n if (!status) {\r\n this.modalService.prepareModal(\r\n 'error',\r\n 'CONTACTS.ERROR_IMPORT_EMPTY'\r\n );\r\n } else {\r\n const options = {\r\n header: true\r\n };\r\n const elements = this.papa.parse(data, options);\r\n const isArray = Array.isArray(elements.data);\r\n if (isArray && elements.data.length !== 0 && !elements.errors.length) {\r\n if (!this.variablesService.contacts.length) {\r\n elements.data.forEach(element => {\r\n this.variablesService.contacts.push(element);\r\n });\r\n } else {\r\n elements.data.forEach(element => {\r\n const indexName = this.variablesService.contacts.findIndex(\r\n contact => contact.name === element.name\r\n );\r\n const indexAddress = this.variablesService.contacts.findIndex(\r\n contact => contact.address === element.address\r\n );\r\n if (indexAddress === -1 && indexName === -1) {\r\n this.variablesService.contacts.push(element);\r\n }\r\n if (indexName !== -1 && indexAddress === -1) {\r\n this.variablesService.contacts.push({\r\n name: `${element.name} ${this.translate.instant(\r\n 'CONTACTS.COPY'\r\n )}`,\r\n address: element.address,\r\n notes: element.notes\r\n });\r\n }\r\n });\r\n }\r\n this.backend.getContactAlias();\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/contacts']);\r\n });\r\n }\r\n if (elements.errors.length) {\r\n this.modalService.prepareModal(\r\n 'error',\r\n 'CONTACTS.ERROR_IMPORT'\r\n );\r\n console.log(elements.errors);\r\n }\r\n }\r\n });\r\n } else {\r\n this.modalService.prepareModal('error', 'CONTACTS.ERROR_TYPE_FILE');\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n export() {\r\n const contacts: Array = [];\r\n this.variablesService.contacts.forEach(contact => {\r\n delete contact.alias;\r\n contacts.push(contact);\r\n });\r\n\r\n this.backend.saveFileDialog(\r\n '',\r\n '*',\r\n this.variablesService.settings.default_path,\r\n (file_status, file_data) => {\r\n if (!this.variablesService.contacts.length && !(file_data.error_code === 'CANCELED')) {\r\n this.modalService.prepareModal('error', 'CONTACTS.ERROR_EMPTY_LIST');\r\n }\r\n const path = this.isValid(file_data.path) ? file_data.path : `${file_data.path}.csv`;\r\n if (file_status && this.isValid(path) && this.variablesService.contacts.length) {\r\n this.backend.storeFile(path, this.papa.unparse(contacts));\r\n }\r\n if (!(file_data.error_code === 'CANCELED') && !this.isValid(path)) {\r\n this.modalService.prepareModal('error', 'CONTACTS.ERROR_EXPORT');\r\n }\r\n }\r\n );\r\n }\r\n\r\n isValid(file) {\r\n return file.endsWith('.csv');\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      {{ 'HISTORY.STATUS' | translate }}{{ 'HISTORY.DATE' | translate }}{{ 'HISTORY.AMOUNT' | translate }}{{ 'HISTORY.FEE' | translate }}{{ 'HISTORY.ADDRESS' | translate }}
      \\r\\n
      \\r\\n 0\\\">\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n 500000000\\\">\\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{ (item.is_income ? 'HISTORY.RECEIVED' : 'HISTORY.SEND') | translate }}\\r\\n
      \\r\\n
      {{item.timestamp * 1000 | date : 'dd-MM-yyyy HH:mm'}}\\r\\n {{item.sortAmount | intToMoney}} {{variablesService.defaultCurrency}}\\r\\n \\r\\n {{item.sortFee | intToMoney}} {{variablesService.defaultCurrency}}\\r\\n \\r\\n {{item | historyTypeMessages}}\\r\\n {{item.remote_addresses[0]}}\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.wrap-table {\\n margin: -3rem; }\\n\\n.wrap-table table tbody tr td {\\n min-width: 10rem; }\\n\\n.wrap-table table tbody tr .status {\\n position: relative;\\n display: flex;\\n align-items: center; }\\n\\n.wrap-table table tbody tr .status .confirmation {\\n position: absolute;\\n top: 50%;\\n left: -2rem;\\n transform: translateY(-50%);\\n display: flex;\\n align-items: flex-end;\\n width: 0.7rem;\\n height: 1.5rem; }\\n\\n.wrap-table table tbody tr .status .confirmation .fill {\\n width: 100%; }\\n\\n.wrap-table table tbody tr .status .lock-transaction {\\n position: absolute;\\n left: -2rem;\\n -webkit-mask: url('lock-transaction.svg') no-repeat center;\\n mask: url('lock-transaction.svg') no-repeat center;\\n width: 1.2rem;\\n height: 1.2rem;\\n margin-right: 1.1rem; }\\n\\n.wrap-table table tbody tr .status .unlock-transaction {\\n position: absolute;\\n left: -2rem;\\n -webkit-mask: url('unlock-transaction.svg') no-repeat center;\\n mask: url('unlock-transaction.svg') no-repeat center;\\n width: 1.2rem;\\n height: 1.2rem;\\n margin-right: 1.1rem; }\\n\\n.wrap-table table tbody tr .status .position {\\n position: static; }\\n\\n.wrap-table table tbody tr .status .status-transaction {\\n margin-right: 1rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.wrap-table table tbody tr .status.send .status-transaction {\\n background-color: transparent; }\\n\\n.wrap-table table tbody tr .status.send .status-transaction::after {\\n display: block;\\n content: '';\\n background: url('send-red.svg') no-repeat center;\\n width: 13px;\\n height: 13px; }\\n\\n.wrap-table table tbody tr .status.received .status-transaction {\\n background-color: transparent; }\\n\\n.wrap-table table tbody tr .status.received .status-transaction::after {\\n display: block;\\n content: '';\\n background: url('receive-green.svg') no-repeat center;\\n width: 13px;\\n height: 13px; }\\n\\n.wrap-table table tbody tr .remote-address {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 25vw; }\\n\\n.wrap-table table tbody tr:not(.transaction-details) {\\n cursor: pointer; }\\n\\n.wrap-table table tbody tr.transaction-details {\\n transition: 0.5s height linear, 0s font-size;\\n transition-delay: 0s, 0.5s;\\n height: 0; }\\n\\n.wrap-table table tbody tr.transaction-details.open {\\n height: 16.2rem; }\\n\\n.wrap-table table tbody tr.transaction-details td {\\n position: relative;\\n overflow: hidden;\\n line-height: inherit;\\n padding-top: 0;\\n padding-bottom: 0; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvaGlzdG9yeS9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxoaXN0b3J5XFxoaXN0b3J5LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYSxFQUFBOztBQURmO0lBVVUsZ0JBQWdCLEVBQUE7O0FBVjFCO0lBY1Usa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixtQkFBbUIsRUFBQTs7QUFoQjdCO01BbUJZLGtCQUFrQjtNQUNsQixRQUFRO01BQ1IsV0FBVztNQUNYLDJCQUEyQjtNQUMzQixhQUFhO01BQ2IscUJBQXFCO01BQ3JCLGFBQWE7TUFDYixjQUFjLEVBQUE7O0FBMUIxQjtRQTZCYyxXQUFXLEVBQUE7O0FBN0J6QjtNQWtDWSxrQkFBa0I7TUFDbEIsV0FBVztNQUNYLDBEQUFtRTtjQUFuRSxrREFBbUU7TUFDbkUsYUFBYTtNQUNiLGNBQWM7TUFDZCxvQkFBb0IsRUFBQTs7QUF2Q2hDO01BMkNZLGtCQUFrQjtNQUNsQixXQUFXO01BQ1gsNERBQXFFO2NBQXJFLG9EQUFxRTtNQUNyRSxhQUFhO01BQ2IsY0FBYztNQUNkLG9CQUFvQixFQUFBOztBQWhEaEM7TUFvRFksZ0JBQWdCLEVBQUE7O0FBcEQ1QjtNQXdEWSxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUExRDFCO01BK0RjLDZCQUE2QixFQUFBOztBQS9EM0M7TUFtRWMsY0FBYztNQUNkLFdBQVU7TUFDVixnREFBa0U7TUFDbEUsV0FBVztNQUNYLFlBQVksRUFBQTs7QUF2RTFCO01BNkVjLDZCQUE2QixFQUFBOztBQTdFM0M7TUFpRmMsY0FBYztNQUNkLFdBQVU7TUFDVixxREFBdUU7TUFDdkUsV0FBVztNQUNYLFlBQVksRUFBQTs7QUFyRjFCO0lBMkZVLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsZUFBZSxFQUFBOztBQTdGekI7SUFpR1UsZUFBZSxFQUFBOztBQWpHekI7SUFzR1UsNENBQTRDO0lBQzVDLDBCQUEwQjtJQUMxQixTQUFTLEVBQUE7O0FBeEduQjtNQTJHWSxlQUFlLEVBQUE7O0FBM0czQjtNQStHWSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQixjQUFjO01BQ2QsaUJBQWlCLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9oaXN0b3J5L2hpc3RvcnkuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi53cmFwLXRhYmxlIHtcclxuICBtYXJnaW46IC0zcmVtO1xyXG5cclxuICB0YWJsZSB7XHJcblxyXG4gICAgdGJvZHkge1xyXG5cclxuICAgICAgdHIge1xyXG5cclxuICAgICAgICB0ZCB7XHJcbiAgICAgICAgICBtaW4td2lkdGg6IDEwcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cyB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgICAgICAgICAuY29uZmlybWF0aW9uIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgbGVmdDogLTJyZW07XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xyXG4gICAgICAgICAgICB3aWR0aDogMC43cmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuNXJlbTtcclxuXHJcbiAgICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5sb2NrLXRyYW5zYWN0aW9uIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICBsZWZ0OiAtMnJlbTtcclxuICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9sb2NrLXRyYW5zYWN0aW9uLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS4xcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC51bmxvY2stdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgIGxlZnQ6IC0ycmVtO1xyXG4gICAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3VubG9jay10cmFuc2FjdGlvbi5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxLjJyZW07XHJcbiAgICAgICAgICAgIGhlaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMXJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAucG9zaXRpb24ge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5zdGF0dXMtdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgICAgICAgIGhlaWdodDogMS43cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICYuc2VuZCAge1xyXG4gICAgICAgICAgICAuc3RhdHVzLXRyYW5zYWN0aW9uIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLnN0YXR1cy10cmFuc2FjdGlvbjo6YWZ0ZXIge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6Jyc7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDp1cmwoXCIuLi8uLi9hc3NldHMvaWNvbnMvc2VuZC1yZWQuc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDEzcHg7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxM3B4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJi5yZWNlaXZlZCB7XHJcbiAgICAgICAgICAgIC5zdGF0dXMtdHJhbnNhY3Rpb24ge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAuc3RhdHVzLXRyYW5zYWN0aW9uOjphZnRlciB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgY29udGVudDonJztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOnVybChcIi4uLy4uL2Fzc2V0cy9pY29ucy9yZWNlaXZlLWdyZWVuLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxM3B4O1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTNweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnJlbW90ZS1hZGRyZXNzIHtcclxuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgICAgIG1heC13aWR0aDogMjV2dztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bm90KC50cmFuc2FjdGlvbi1kZXRhaWxzKSB7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnRyYW5zYWN0aW9uLWRldGFpbHMge1xyXG4gICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjVzIGhlaWdodCBsaW5lYXIsIDBzIGZvbnQtc2l6ZTtcclxuICAgICAgICAgIHRyYW5zaXRpb246IDAuNXMgaGVpZ2h0IGxpbmVhciwgMHMgZm9udC1zaXplO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMHMsIDAuNXM7XHJcbiAgICAgICAgICBoZWlnaHQ6IDA7XHJcblxyXG4gICAgICAgICAgJi5vcGVuIHtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxNi4ycmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRkIHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcclxuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XHJcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */\"","import {Component, OnInit, OnDestroy, AfterViewChecked, ViewChild, ElementRef} from '@angular/core';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport { Transaction } from '../_helpers/models/transaction.model';\r\n\r\n@Component({\r\n selector: 'app-history',\r\n templateUrl: './history.component.html',\r\n styleUrls: ['./history.component.scss']\r\n})\r\nexport class HistoryComponent implements OnInit, OnDestroy, AfterViewChecked {\r\n parentRouting;\r\n openedDetails = false;\r\n calculatedWidth = [];\r\n @ViewChild('head') head: ElementRef;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n public variablesService: VariablesService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(() => {\r\n this.openedDetails = false;\r\n });\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.calculateWidth();\r\n }\r\n\r\n getHeight(item) {\r\n if ((this.variablesService.height_app - item.height >= 10 && item.height !== 0) || (item.is_mining === true && item.height === 0)) {\r\n return 100;\r\n } else {\r\n if (item.height === 0 || this.variablesService.height_app - item.height < 0) {\r\n return 0;\r\n } else {\r\n return (this.variablesService.height_app - item.height) * 10;\r\n }\r\n }\r\n }\r\n\r\n openDetails(tx_hash) {\r\n if (tx_hash === this.openedDetails) {\r\n this.openedDetails = false;\r\n } else {\r\n this.openedDetails = tx_hash;\r\n }\r\n }\r\n\r\n calculateWidth() {\r\n this.calculatedWidth = [];\r\n this.calculatedWidth.push(this.head.nativeElement.childNodes[0].clientWidth);\r\n this.calculatedWidth.push(this.head.nativeElement.childNodes[1].clientWidth + this.head.nativeElement.childNodes[2].clientWidth);\r\n this.calculatedWidth.push(this.head.nativeElement.childNodes[3].clientWidth);\r\n this.calculatedWidth.push(this.head.nativeElement.childNodes[4].clientWidth);\r\n }\r\n\r\n time(item: Transaction) {\r\n const now = new Date().getTime();\r\n const unlockTime = now + ((item.unlock_time - this.variablesService.height_max) * 60 * 1000);\r\n return unlockTime;\r\n }\r\n\r\n isLocked(item: Transaction) {\r\n if ((item.unlock_time > 500000000) && (item.unlock_time > new Date().getTime() / 1000)) {\r\n return true;\r\n }\r\n if ((item.unlock_time < 500000000) && (item.unlock_time > this.variablesService.height_max)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'LOGIN.FORM_ERRORS.MISMATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.OFFLINE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.SYNCING' | translate }} {{ variablesService.height_app }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.height_max }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.ONLINE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.DOWNLOADING' | translate }} {{ variablesService.downloaded }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.total }}{{ 'SIDEBAR.SYNCHRONIZATION.MB' | translate }}\\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      {{ variablesService.sync.progress_value_text }}%
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      {{ variablesService.download.progress_value_text }}%
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.STANDARD' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT' | translate }}\\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.CRITICAL' | translate }}\\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.TIME' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%; }\\n :host .content {\\n display: flex; }\\n :host .content .wrap-login {\\n margin: auto;\\n width: 100%;\\n max-width: 40rem; }\\n :host .content .wrap-login .logo {\\n display: flex;\\n justify-content: center; }\\n :host .content .wrap-login .logo::ng-deep svg {\\n width: 15rem; }\\n :host .content .wrap-login .form-login {\\n display: flex;\\n flex-direction: column; }\\n :host .content .wrap-login .form-login .wrap-button {\\n display: flex;\\n align-items: center;\\n justify-content: space-between; }\\n :host .content .wrap-login .form-login .wrap-button button {\\n margin: 2.5rem 0; }\\n :host .content .wrap-login .form-login button {\\n margin: 2.5rem auto;\\n width: 100%;\\n max-width: 15rem; }\\n .synchronization-status {\\n position: absolute;\\n bottom: 3rem;\\n left: 3rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbG9naW4vRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcbG9naW5cXGxvZ2luLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixPQUFPO0VBQ1AsV0FBVztFQUNYLFlBQVksRUFBQTtFQUxkO0lBUUksYUFBYSxFQUFBO0VBUmpCO01BV00sWUFBWTtNQUNaLFdBQVc7TUFDWCxnQkFBZ0IsRUFBQTtFQWJ0QjtRQWdCUSxhQUFhO1FBQ2IsdUJBQXVCLEVBQUE7RUFqQi9CO1VBb0JVLFlBQVksRUFBQTtFQXBCdEI7UUF5QlEsYUFBYTtRQUNiLHNCQUFzQixFQUFBO0VBMUI5QjtVQTZCVSxhQUFhO1VBQ2IsbUJBQW1CO1VBQ25CLDhCQUE4QixFQUFBO0VBL0J4QztZQWtDWSxnQkFBZ0IsRUFBQTtFQWxDNUI7VUF1Q1UsbUJBQW1CO1VBQ25CLFdBQVc7VUFDWCxnQkFBZ0IsRUFBQTtFQU0xQjtFQUNFLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osVUFBVSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvbG9naW4vbG9naW4uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuXHJcbiAgLmNvbnRlbnQge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAud3JhcC1sb2dpbiB7XHJcbiAgICAgIG1hcmdpbjogYXV0bztcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1heC13aWR0aDogNDByZW07XHJcblxyXG4gICAgICAubG9nbyB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHJcbiAgICAgICAgJjo6bmctZGVlcCBzdmcge1xyXG4gICAgICAgICAgd2lkdGg6IDE1cmVtO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmZvcm0tbG9naW4ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuXHJcbiAgICAgICAgLndyYXAtYnV0dG9uIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMi41cmVtIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgbWFyZ2luOiAyLjVyZW0gYXV0bztcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAxNXJlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuLnN5bmNocm9uaXphdGlvbi1zdGF0dXMge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBib3R0b206IDNyZW07XHJcbiAgbGVmdDogM3JlbTtcclxufVxyXG4iXX0= */\"","import {Component, NgZone, OnInit, OnDestroy} from '@angular/core';\r\nimport {FormGroup, FormControl, Validators} from '@angular/forms';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\nimport {DOWNLOADS_PAGE_URL} from '../_shared/constants'\r\n\r\nimport icons from '../../assets/icons/icons.json';\r\n\r\n@Component({\r\n selector: 'app-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss']\r\n})\r\nexport class LoginComponent implements OnInit, OnDestroy {\r\n\r\n queryRouting;\r\n\r\n regForm = new FormGroup({\r\n password: new FormControl('',\r\n Validators.pattern(this.variablesService.pattern)),\r\n confirmation: new FormControl('')\r\n }, [function (g: FormGroup) {\r\n return g.get('password').value === g.get('confirmation').value ? null : {'mismatch': true};\r\n }\r\n]);\r\n\r\n authForm = new FormGroup({\r\n password: new FormControl('')\r\n });\r\n\r\n type = 'reg';\r\n\r\n logo = icons.logo;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.queryRouting = this.route.queryParams.subscribe(params => {\r\n if (params.type) {\r\n this.type = params.type;\r\n }\r\n });\r\n }\r\n\r\n onSubmitCreatePass(): void {\r\n if (this.regForm.valid) {\r\n this.variablesService.appPass = this.regForm.get('password').value; // the pass what was written in input of login form by user\r\n\r\n this.backend.setMasterPassword({pass: this.variablesService.appPass}, (status, data) => {\r\n if (status) {\r\n this.backend.storeSecureAppData({pass: this.variablesService.appPass});\r\n this.variablesService.appLogin = true;\r\n this.variablesService.dataIsLoaded = true;\r\n if (this.variablesService.settings.appLockTime) {\r\n this.variablesService.startCountdown();\r\n }\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n } else {\r\n console.log(data['error_code']);\r\n }\r\n });\r\n }\r\n }\r\n\r\n onSkipCreatePass(): void {\r\n this.variablesService.appPass = '';\r\n this.ngZone.run(() => {\r\n this.variablesService.appLogin = true;\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n\r\n dropSecureAppData(): void {\r\n this.backend.dropSecureAppData(() => {\r\n this.onSkipCreatePass();\r\n });\r\n this.variablesService.wallets = [];\r\n this.variablesService.contacts = [];\r\n }\r\n\r\n onSubmitAuthPass(): void {\r\n if (this.authForm.valid) {\r\n this.variablesService.appPass = this.authForm.get('password').value;\r\n\r\n if (this.variablesService.dataIsLoaded) {\r\n this.backend.checkMasterPassword({pass: this.variablesService.appPass}, (status, data) => {\r\n if (status) {\r\n this.variablesService.appLogin = true;\r\n if (this.variablesService.settings.appLockTime) {\r\n this.variablesService.startCountdown();\r\n }\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/'], {queryParams: {prevUrl: 'login'}});\r\n });\r\n }\r\n });\r\n } else {\r\n this.getData(this.variablesService.appPass);\r\n }\r\n }\r\n }\r\n\r\n getData(appPass) {\r\n this.backend.getSecureAppData({pass: appPass}, (status, data) => {\r\n if (!data.error_code) {\r\n this.variablesService.appLogin = true;\r\n this.variablesService.dataIsLoaded = true;\r\n if (this.variablesService.settings.appLockTime) {\r\n this.variablesService.startCountdown();\r\n }\r\n this.variablesService.appPass = appPass;\r\n const isEmptyObject = Object.keys(data).length === 0 && data.constructor === Object;\r\n\r\n if (this.variablesService.wallets.length) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]);\r\n });\r\n return;\r\n }\r\n if (data.hasOwnProperty('contacts')) {\r\n if (Object.keys(data['contacts']).length !== 0) {\r\n data['contacts'].map(contact => {\r\n this.variablesService.contacts.push(contact);\r\n });\r\n }\r\n }\r\n if (data.hasOwnProperty('wallets')) {\r\n if (Object.keys(data['wallets']).length !== 0) {\r\n this.getWalletData(data['wallets']);\r\n } else {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n }\r\n if (!data.hasOwnProperty('wallets') && !data.hasOwnProperty('contacts')) {\r\n if (data.length !== 0 && !isEmptyObject) {\r\n this.getWalletData(data);\r\n } else {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n getWalletData(walletData) {\r\n let openWallets = 0;\r\n let runWallets = 0;\r\n walletData.forEach((wallet, wallet_index) => {\r\n this.backend.openWallet(wallet.path, wallet.pass, this.variablesService.count, true, (open_status, open_data, open_error) => {\r\n if (open_status || open_error === 'FILE_RESTORED') {\r\n openWallets++;\r\n this.ngZone.run(() => {\r\n const new_wallet = new Wallet(\r\n open_data.wallet_id,\r\n wallet.name,\r\n wallet.pass,\r\n open_data['wi'].path,\r\n open_data['wi'].address,\r\n open_data['wi'].balance,\r\n open_data['wi'].unlocked_balance,\r\n open_data['wi'].mined_total,\r\n open_data['wi'].tracking_hey\r\n );\r\n new_wallet.alias = this.backend.getWalletAlias(new_wallet.address);\r\n if (wallet.staking) {\r\n new_wallet.staking = true;\r\n this.backend.startPosMining(new_wallet.wallet_id);\r\n } else {\r\n new_wallet.staking = false;\r\n }\r\n new_wallet.is_auditable = open_data['wi'].is_auditable;\r\n new_wallet.is_watch_only = open_data['wi'].is_watch_only;\r\n new_wallet.currentPage = 1;\r\n new_wallet.exclude_mining_txs = false;\r\n if (open_data.recent_history && open_data.recent_history.history) {\r\n new_wallet.total_history_item = open_data.recent_history.total_history_items;\r\n new_wallet.totalPages = Math.ceil( open_data.recent_history.total_history_items / this.variablesService.count);\r\n new_wallet.totalPages > this.variablesService.maxPages\r\n ? new_wallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : new_wallet.pages = new Array(new_wallet.totalPages).fill(1).map((value, index) => value + index);\r\n new_wallet.prepareHistory(open_data.recent_history.history);\r\n } else {\r\n new_wallet.total_history_item = 0;\r\n new_wallet.pages = new Array(1).fill(1);\r\n new_wallet.totalPages = 1;\r\n }\r\n this.backend.getContracts(open_data.wallet_id, (contracts_status, contracts_data) => {\r\n if (contracts_status && contracts_data.hasOwnProperty('contracts')) {\r\n this.ngZone.run(() => {\r\n new_wallet.prepareContractsAfterOpen(contracts_data.contracts, this.variablesService.exp_med_ts, this.variablesService.height_app, this.variablesService.settings.viewedContracts, this.variablesService.settings.notViewedContracts);\r\n });\r\n }\r\n });\r\n this.variablesService.wallets.push(new_wallet);\r\n if (this.variablesService.wallets.length === 1) {\r\n this.router.navigate(['/wallet/' + this.variablesService.wallets[0].wallet_id]);\r\n }\r\n });\r\n this.backend.runWallet(open_data.wallet_id, (run_status) => {\r\n if (run_status) {\r\n runWallets++;\r\n } else {\r\n if (wallet_index === walletData.length - 1 && runWallets === 0) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n }\r\n });\r\n } else {\r\n if (wallet_index === walletData.length - 1 && openWallets === 0) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n getUpdate() {\r\n this.backend.openUrlInBrowser(DOWNLOADS_PAGE_URL);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.queryRouting.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      0 && prevUrl !== 'login'\\\">\\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n

      {{ 'MAIN.TITLE' | translate }}

      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'MAIN.HELP' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n flex: 1 0 auto;\\n padding: 3rem; }\\n\\n.content {\\n padding: 3rem;\\n min-height: 100%; }\\n\\n.content .head {\\n justify-content: flex-end; }\\n\\n.add-wallet .add-wallet-title {\\n margin-bottom: 1rem; }\\n\\n.add-wallet .add-wallet-buttons {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin: 0 -0.5rem;\\n padding: 1.5rem 0; }\\n\\n.add-wallet .add-wallet-buttons button {\\n flex: 1 0 auto;\\n margin: 0 0.5rem; }\\n\\n.add-wallet .add-wallet-help {\\n display: flex;\\n cursor: pointer;\\n font-size: 1.3rem;\\n line-height: 1.5rem; }\\n\\n.add-wallet .add-wallet-help .icon {\\n -webkit-mask: url('howto.svg') no-repeat center;\\n mask: url('howto.svg') no-repeat center;\\n margin-right: 0.8rem;\\n width: 1.5rem;\\n height: 1.5rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbWFpbi9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxtYWluXFxtYWluLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsY0FBYztFQUNkLGFBQWEsRUFBQTs7QUFHZjtFQUNFLGFBQWE7RUFDYixnQkFBZ0IsRUFBQTs7QUFGbEI7SUFLSSx5QkFBeUIsRUFBQTs7QUFJN0I7RUFHSSxtQkFBbUIsRUFBQTs7QUFIdkI7RUFPSSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDhCQUE4QjtFQUM5QixpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUE7O0FBWHJCO0lBY00sY0FBYztJQUNkLGdCQUFnQixFQUFBOztBQWZ0QjtFQW9CSSxhQUFhO0VBQ2IsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixtQkFBbUIsRUFBQTs7QUF2QnZCO0lBMEJNLCtDQUF3RDtZQUF4RCx1Q0FBd0Q7SUFDeEQsb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixjQUFjLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9tYWluL21haW4uY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZmxleDogMSAwIGF1dG87XHJcbiAgcGFkZGluZzogM3JlbTtcclxufVxyXG5cclxuLmNvbnRlbnQge1xyXG4gIHBhZGRpbmc6IDNyZW07XHJcbiAgbWluLWhlaWdodDogMTAwJTtcclxuXHJcbiAgLmhlYWQge1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICB9XHJcbn1cclxuXHJcbi5hZGQtd2FsbGV0IHtcclxuXHJcbiAgLmFkZC13YWxsZXQtdGl0bGUge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcblxyXG4gIC5hZGQtd2FsbGV0LWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDAgLTAuNXJlbTtcclxuICAgIHBhZGRpbmc6IDEuNXJlbSAwO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICBtYXJnaW46IDAgMC41cmVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZC13YWxsZXQtaGVscCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMS41cmVtO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9ob3d0by5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMC44cmVtO1xyXG4gICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, NgZone, OnInit} from '@angular/core';\r\nimport {Location} from '@angular/common';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {CREATE_NEW_WALLET_HELP_PAGE} from '../_shared/constants';\r\n\r\n@Component({\r\n selector: 'app-main',\r\n templateUrl: './main.component.html',\r\n styleUrls: ['./main.component.scss']\r\n})\r\nexport class MainComponent implements OnInit {\r\n\r\n public prevUrl: string = '';\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private location: Location,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private ngZone: NgZone,\r\n private translate: TranslateService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.route.snapshot.queryParams && this.route.snapshot.queryParams.prevUrl) {\r\n this.prevUrl = this.route.snapshot.queryParams.prevUrl;\r\n }\r\n }\r\n\r\n openWallet() {\r\n this.backend.openFileDialog(this.translate.instant('MAIN.CHOOSE_PATH'), '*', this.variablesService.settings.default_path, (file_status, file_data) => {\r\n if (file_status) {\r\n this.variablesService.settings.default_path = file_data.path.substr(0, file_data.path.lastIndexOf('/'));\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/open'], {queryParams: {path: file_data.path}});\r\n });\r\n } else {\r\n console.log(file_data['error_code']);\r\n }\r\n });\r\n }\r\n\r\n openInBrowser() {\r\n this.backend.openUrlInBrowser(CREATE_NEW_WALLET_HELP_PAGE);\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      {{ 'MESSAGES.ADDRESS' | translate }}{{ 'MESSAGES.MESSAGE' | translate }}
      \\r\\n {{message.address}}\\r\\n \\r\\n \\r\\n {{message.message}}\\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.wrap-table {\\n margin: -3rem; }\\n\\n.wrap-table table tbody tr td:first-child {\\n position: relative;\\n padding-right: 5rem;\\n width: 18rem; }\\n\\n.wrap-table table tbody tr td:first-child span {\\n display: block;\\n line-height: 3.5rem;\\n max-width: 10rem; }\\n\\n.wrap-table table tbody tr td:first-child .icon {\\n position: absolute;\\n top: 50%;\\n right: 1rem;\\n transform: translateY(-50%);\\n display: block;\\n -webkit-mask: url('alert.svg') no-repeat 0;\\n mask: url('alert.svg') no-repeat 0;\\n width: 1.2rem;\\n height: 1.2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvbWVzc2FnZXMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcbWVzc2FnZXNcXG1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYSxFQUFBOztBQURmO0lBWVksa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixZQUFZLEVBQUE7O0FBZHhCO01BaUJjLGNBQWM7TUFDZCxtQkFBbUI7TUFDbkIsZ0JBQWdCLEVBQUE7O0FBbkI5QjtNQXVCYyxrQkFBa0I7TUFDbEIsUUFBUTtNQUNSLFdBQVc7TUFDWCwyQkFBMkI7TUFDM0IsY0FBYztNQUNkLDBDQUFtRDtjQUFuRCxrQ0FBbUQ7TUFDbkQsYUFBYTtNQUNiLGNBQWMsRUFBQSIsImZpbGUiOiJzcmMvYXBwL21lc3NhZ2VzL21lc3NhZ2VzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ud3JhcC10YWJsZSB7XHJcbiAgbWFyZ2luOiAtM3JlbTtcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuXHJcbiAgICAgICAgdGQge1xyXG5cclxuICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDVyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxOHJlbTtcclxuXHJcbiAgICAgICAgICAgIHNwYW4ge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzLjVyZW07XHJcbiAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMHJlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgICByaWdodDogMXJlbTtcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9hbGVydC5zdmcpIG5vLXJlcGVhdCAwO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxLjJyZW07XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-messages',\r\n templateUrl: './messages.component.html',\r\n styleUrls: ['./messages.component.scss']\r\n})\r\nexport class MessagesComponent implements OnInit {\r\n\r\n messages = [\r\n {\r\n is_new: true,\r\n address: '@bitmap',\r\n message: 'No more miners for you!'\r\n },\r\n {\r\n is_new: false,\r\n address: 'Hjkwey36gHasdhkajshd4bxnb5mcvowyefb2633FdsFGGWbb',\r\n message: 'Hey! What’s with our BBR deal?'\r\n },\r\n {\r\n is_new: false,\r\n address: '@john',\r\n message: 'I’m coming!'\r\n }\r\n ];\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n\r\n}\r\n","module.exports = \"
      \\r\\n

      {{ 'OPEN_WALLET.MODAL.TITLE' | translate }}

      \\r\\n
      \\r\\n
      {{ wallet.name }}
      \\r\\n
      {{ wallet.path }}
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'OPEN_WALLET.MODAL.NOT_FOUND' | translate }}\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: fixed;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: rgba(255, 255, 255, 0.25); }\\n\\n.modal {\\n display: flex;\\n flex-direction: column;\\n background-position: center;\\n background-size: 200%;\\n padding: 2rem;\\n min-width: 34rem;\\n max-width: 64rem; }\\n\\n.modal .title {\\n font-size: 1.8rem;\\n text-align: center; }\\n\\n.modal .open-form .wallet-path {\\n font-size: 1.3rem;\\n margin: 5rem 0 2rem;\\n word-wrap: break-word;\\n line-height: 2rem; }\\n\\n.modal .open-form .wrap-button {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin: 2rem -2rem 0; }\\n\\n.modal .open-form .wrap-button button {\\n flex: 1 0 0;\\n margin: 0 2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvb3Blbi13YWxsZXQtbW9kYWwvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcb3Blbi13YWxsZXQtbW9kYWxcXG9wZW4td2FsbGV0LW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFHdkM7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLDJCQUEyQjtFQUMzQixxQkFBcUI7RUFDckIsYUFBYTtFQUNiLGdCQUFnQjtFQUNoQixnQkFBZ0IsRUFBQTs7QUFQbEI7SUFVSSxpQkFBaUI7SUFDakIsa0JBQWtCLEVBQUE7O0FBWHRCO0lBaUJNLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLGlCQUFpQixFQUFBOztBQXBCdkI7SUF3Qk0sYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsb0JBQW9CLEVBQUE7O0FBM0IxQjtNQThCUSxXQUFXO01BQ1gsY0FBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvb3Blbi13YWxsZXQtbW9kYWwvb3Blbi13YWxsZXQtbW9kYWwuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBib3R0b206IDA7XHJcbiAgbGVmdDogMDtcclxuICByaWdodDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcclxufVxyXG5cclxuLm1vZGFsIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtc2l6ZTogMjAwJTtcclxuICBwYWRkaW5nOiAycmVtO1xyXG4gIG1pbi13aWR0aDogMzRyZW07XHJcbiAgbWF4LXdpZHRoOiA2NHJlbTtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuXHJcbiAgLm9wZW4tZm9ybSB7XHJcblxyXG4gICAgLndhbGxldC1wYXRoIHtcclxuICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgIG1hcmdpbjogNXJlbSAwIDJyZW07XHJcbiAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcclxuICAgICAgbGluZS1oZWlnaHQ6IDJyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLndyYXAtYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgICBtYXJnaW46IDJyZW0gLTJyZW0gMDtcclxuXHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgZmxleDogMSAwIDA7XHJcbiAgICAgICAgbWFyZ2luOiAwIDJyZW0gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, OnInit, Input, NgZone} from '@angular/core';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\n\r\n@Component({\r\n selector: 'app-open-wallet-modal',\r\n templateUrl: './open-wallet-modal.component.html',\r\n styleUrls: ['./open-wallet-modal.component.scss']\r\n})\r\nexport class OpenWalletModalComponent implements OnInit {\r\n\r\n @Input() wallets;\r\n\r\n wallet = {\r\n name: '',\r\n path: '',\r\n pass: '',\r\n notFound: false,\r\n emptyPass: false\r\n };\r\n\r\n constructor(\r\n public variablesService: VariablesService,\r\n private backend: BackendService,\r\n private translate: TranslateService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.wallets.length) {\r\n this.wallet = this.wallets[0];\r\n this.wallet.pass = '';\r\n }\r\n }\r\n\r\n openWallet() {\r\n if (this.wallets.length === 0) {\r\n return;\r\n }\r\n this.backend.openWallet(this.wallet.path, this.wallet.pass, this.variablesService.count, false, (open_status, open_data, open_error) => {\r\n if (open_error && open_error === 'FILE_NOT_FOUND') {\r\n this.ngZone.run(() => {\r\n this.wallet.notFound = true;\r\n });\r\n let error_translate = this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND1');\r\n error_translate += ':
      ' + this.wallet.path;\r\n error_translate += this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND2');\r\n this.modalService.prepareModal('error', error_translate);\r\n } else {\r\n if (open_status || open_error === 'FILE_RESTORED') {\r\n\r\n let exists = false;\r\n this.variablesService.wallets.forEach((wallet) => {\r\n if (wallet.address === open_data['wi'].address) {\r\n exists = true;\r\n }\r\n });\r\n\r\n if (exists) {\r\n this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN');\r\n this.backend.closeWallet(open_data.wallet_id);\r\n } else {\r\n const new_wallet = new Wallet(\r\n open_data.wallet_id,\r\n this.wallet.name,\r\n this.wallet.pass,\r\n open_data['wi'].path,\r\n open_data['wi'].address,\r\n open_data['wi'].balance,\r\n open_data['wi'].unlocked_balance,\r\n open_data['wi'].mined_total,\r\n open_data['wi'].tracking_hey\r\n );\r\n new_wallet.alias = this.backend.getWalletAlias(new_wallet.address);\r\n new_wallet.is_auditable = open_data['wi'].is_auditable;\r\n new_wallet.is_watch_only = open_data['wi'].is_watch_only;\r\n new_wallet.currentPage = 1;\r\n new_wallet.exclude_mining_txs = false;\r\n if (open_data.recent_history && open_data.recent_history.history) {\r\n new_wallet.total_history_item = open_data.recent_history.total_history_items;\r\n new_wallet.totalPages = Math.ceil( open_data.recent_history.total_history_items / this.variablesService.count);\r\n new_wallet.totalPages > this.variablesService.maxPages\r\n ? new_wallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : new_wallet.pages = new Array(new_wallet.totalPages).fill(1).map((value, index) => value + index);\r\n new_wallet.prepareHistory(open_data.recent_history.history);\r\n } else {\r\n new_wallet.total_history_item = 0;\r\n new_wallet.pages = new Array(1).fill(1);\r\n new_wallet.totalPages = 1;\r\n }\r\n this.backend.getContracts(open_data.wallet_id, (contracts_status, contracts_data) => {\r\n if (contracts_status && contracts_data.hasOwnProperty('contracts')) {\r\n this.ngZone.run(() => {\r\n new_wallet.prepareContractsAfterOpen(\r\n contracts_data.contracts,\r\n this.variablesService.exp_med_ts,\r\n this.variablesService.height_app,\r\n this.variablesService.settings.viewedContracts,\r\n this.variablesService.settings.notViewedContracts\r\n );\r\n });\r\n }\r\n });\r\n this.variablesService.wallets.push(new_wallet);\r\n this.backend.runWallet(open_data.wallet_id);\r\n this.skipWallet();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n skipWallet() {\r\n this.ngZone.run(() => {\r\n if (this.wallets.length) {\r\n this.wallets.splice(0, 1);\r\n this.ngOnInit();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\\r\\n {{ 'BREADCRUMBS.OPEN_WALLET' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'OPEN_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'OPEN_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = variablesService.maxWalletNameLength\\\">\\r\\n {{ 'OPEN_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n\"","module.exports = \".form-open {\\n margin: 2.4rem 0;\\n width: 50%; }\\n .form-open .wrap-buttons {\\n display: flex;\\n margin: 2.5rem -0.7rem; }\\n .form-open .wrap-buttons button {\\n margin: 0 0.7rem; }\\n .form-open .wrap-buttons button.create-button {\\n flex: 1 1 50%; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvb3Blbi13YWxsZXQvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcb3Blbi13YWxsZXRcXG9wZW4td2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTtFQUZaO0lBS0ksYUFBYTtJQUNiLHNCQUFzQixFQUFBO0VBTjFCO01BU00sZ0JBQWdCLEVBQUE7RUFUdEI7UUFZUSxhQUFhLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9vcGVuLXdhbGxldC9vcGVuLXdhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mb3JtLW9wZW4ge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcbiAgd2lkdGg6IDUwJTtcclxuXHJcbiAgLndyYXAtYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAyLjVyZW0gLTAuN3JlbTtcclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBtYXJnaW46IDAgMC43cmVtO1xyXG5cclxuICAgICAgJi5jcmVhdGUtYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAxIDEgNTAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, NgZone, OnDestroy, OnInit} from '@angular/core';\r\nimport {FormGroup, FormControl, Validators} from '@angular/forms';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\nimport {TranslateService} from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'app-open-wallet',\r\n templateUrl: './open-wallet.component.html',\r\n styleUrls: ['./open-wallet.component.scss']\r\n})\r\nexport class OpenWalletComponent implements OnInit, OnDestroy {\r\n\r\n queryRouting;\r\n filePath: string;\r\n\r\n openForm = new FormGroup({\r\n name: new FormControl('', [Validators.required, (g: FormControl) => {\r\n for (let i = 0; i < this.variablesService.wallets.length; i++) {\r\n if (g.value === this.variablesService.wallets[i].name) {\r\n return {'duplicate': true};\r\n }\r\n }\r\n return null;\r\n }]),\r\n password: new FormControl('')\r\n });\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n private translate: TranslateService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.queryRouting = this.route.queryParams.subscribe(params => {\r\n if (params.path) {\r\n this.filePath = params.path;\r\n let filename = '';\r\n if (params.path.lastIndexOf('.') === -1) {\r\n filename = params.path.substr(params.path.lastIndexOf('/') + 1);\r\n } else {\r\n filename = params.path.substr(params.path.lastIndexOf('/') + 1, params.path.lastIndexOf('.') - 1 - params.path.lastIndexOf('/'));\r\n }\r\n if (filename.length > 25) {\r\n filename = filename.slice(0, 25);\r\n }\r\n this.openForm.get('name').setValue(filename);\r\n this.openForm.get('name').markAsTouched();\r\n }\r\n });\r\n }\r\n\r\n openWallet() {\r\n if (this.openForm.valid && this.openForm.get('name').value.length <= this.variablesService.maxWalletNameLength) {\r\n this.backend.openWallet(this.filePath, this.openForm.get('password').value, this.variablesService.count, false, (open_status, open_data, open_error) => {\r\n if (open_error && open_error === 'FILE_NOT_FOUND') {\r\n let error_translate = this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND1');\r\n error_translate += ':
      ' + this.filePath;\r\n error_translate += this.translate.instant('OPEN_WALLET.FILE_NOT_FOUND2');\r\n this.modalService.prepareModal('error', error_translate);\r\n } else {\r\n if (open_status || open_error === 'FILE_RESTORED') {\r\n\r\n let exists = false;\r\n this.variablesService.wallets.forEach((wallet) => {\r\n if (wallet.address === open_data['wi'].address) {\r\n exists = true;\r\n }\r\n });\r\n\r\n if (exists) {\r\n this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN');\r\n this.backend.closeWallet(open_data.wallet_id, () => {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n });\r\n } else {\r\n const new_wallet = new Wallet(\r\n open_data.wallet_id,\r\n this.openForm.get('name').value,\r\n this.openForm.get('password').value,\r\n open_data['wi'].path,\r\n open_data['wi'].address,\r\n open_data['wi'].balance,\r\n open_data['wi'].unlocked_balance,\r\n open_data['wi'].mined_total,\r\n open_data['wi'].tracking_hey\r\n );\r\n new_wallet.alias = this.backend.getWalletAlias(new_wallet.address);\r\n new_wallet.currentPage = 1;\r\n new_wallet.open_from_exist = true;\r\n new_wallet.exclude_mining_txs = false;\r\n new_wallet.is_auditable = open_data['wi'].is_auditable;\r\n new_wallet.is_watch_only = open_data['wi'].is_watch_only;\r\n if (open_data.recent_history && open_data.recent_history.history) {\r\n new_wallet.total_history_item = open_data.recent_history.total_history_items;\r\n new_wallet.totalPages = Math.ceil( open_data.recent_history.total_history_items / this.variablesService.count);\r\n new_wallet.totalPages > this.variablesService.maxPages\r\n ? new_wallet.pages = new Array(5).fill(1).map((value, index) => value + index)\r\n : new_wallet.pages = new Array(new_wallet.totalPages).fill(1).map((value, index) => value + index);\r\n new_wallet.prepareHistory(open_data.recent_history.history);\r\n } else {\r\n new_wallet.total_history_item = 0;\r\n new_wallet.pages = new Array(1).fill(1);\r\n new_wallet.totalPages = 1;\r\n }\r\n this.backend.getContracts(open_data.wallet_id, (contracts_status, contracts_data) => {\r\n if (contracts_status && contracts_data.hasOwnProperty('contracts')) {\r\n this.ngZone.run(() => {\r\n new_wallet.prepareContractsAfterOpen(contracts_data.contracts, this.variablesService.exp_med_ts, this.variablesService.height_app, this.variablesService.settings.viewedContracts, this.variablesService.settings.notViewedContracts);\r\n });\r\n }\r\n });\r\n this.variablesService.wallets.push(new_wallet);\r\n this.backend.runWallet(open_data.wallet_id, (run_status, run_data) => {\r\n if (run_status) {\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData();\r\n }\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + open_data.wallet_id]);\r\n });\r\n } else {\r\n console.log(run_data['error_code']);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.queryRouting.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n {{ 'BREADCRUMBS.CONTRACTS' | translate }}\\r\\n {{ 'BREADCRUMBS.NEW_PURCHASE' | translate }}\\r\\n {{ 'BREADCRUMBS.OLD_PURCHASE' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.DESC_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = 100\\\">\\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.COMMENT_MAXIMUM' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      {{item.name}}
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.SELLER_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.SELLER_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.SELLER_SAME' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.ALIAS_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.AMOUNT_ZERO' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.YOUR_DEPOSIT_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.SELLER_DEPOSIT_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      = 100\\\">\\r\\n
      \\r\\n {{ 'PURCHASE.FORM_ERRORS.COMMENT_MAXIMUM' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n 1 {{ 'PURCHASE.HOUR' | translate }}\\r\\n \\r\\n {{title}} {{ 'PURCHASE.HOURS' | translate }}\\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n \\r\\n {{ 'PURCHASE.NEED_MONEY' | translate }}\\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n
      {{'PURCHASE.NULLIFY_QUESTION' | translate}}
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      {{ 'PURCHASE.WAITING_TIME_QUESTION' | translate }}
      \\r\\n \\r\\n
      \\r\\n \\r\\n 1 {{ 'PURCHASE.HOUR' | translate }}\\r\\n \\r\\n {{title}} {{ 'PURCHASE.HOURS' | translate }}\\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.NEW_PURCHASE' | translate }}\\r\\n \\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_SELLER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_SELLER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_DELIVERY' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_CANCEL_SELLER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.EXPIRED' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_SELLER' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_CONFIRMATION' | translate }}\\r\\n (0/10)\\r\\n ({{variablesService.height_app - currentContract.height}}/10)\\r\\n \\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.COMPLETED' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.NOT_RECEIVED' | translate }}. {{ 'PURCHASE.STATUS_MESSAGES.NULLIFIED' | translate }}\\r\\n \\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.PROPOSAL_CANCEL_SELLER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.CANCELLED' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.BEING_CANCELLED' | translate }}\\r\\n (0/10)\\r\\n ({{variablesService.height_app - currentContract.height}}/10)\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_BUYER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_BUYER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.IGNORED_CANCEL_BUYER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.EXPIRED' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_DELIVERY' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.WAITING_CONFIRMATION' | translate }}\\r\\n (0/10)\\r\\n ({{variablesService.height_app - currentContract.height}}/10)\\r\\n \\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.COMPLETED' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.NOT_RECEIVED' | translate }}. {{ 'PURCHASE.STATUS_MESSAGES.NULLIFIED' | translate }}\\r\\n \\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.PROPOSAL_CANCEL_BUYER' | translate }}\\r\\n\\r\\n {{ 'PURCHASE.STATUS_MESSAGES.CANCELLED' | translate }}\\r\\n\\r\\n \\r\\n {{ 'PURCHASE.STATUS_MESSAGES.BEING_CANCELLED' | translate }}\\r\\n (0/10)\\r\\n ({{variablesService.height_app - currentContract.height}}/10)\\r\\n \\r\\n \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{currentContract.expiration_time | contractTimeLeft: 0}}\\r\\n {{currentContract.cancel_expiration_time | contractTimeLeft: 2}}\\r\\n {{currentContract.expiration_time | contractTimeLeft: 1}}\\r\\n {{currentContract.cancel_expiration_time | contractTimeLeft: 1}}\\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n display: flex;\\n flex-direction: column;\\n width: 100%; }\\n\\n.head {\\n flex: 0 0 auto;\\n box-sizing: content-box;\\n margin: -3rem -3rem 0; }\\n\\n.form-purchase {\\n flex: 1 1 auto;\\n margin: 1.5rem -3rem 0;\\n padding: 0 3rem;\\n overflow-y: overlay; }\\n\\n.form-purchase .input-blocks-row {\\n display: flex; }\\n\\n.form-purchase .input-blocks-row .input-block {\\n flex-basis: 50%; }\\n\\n.form-purchase .input-blocks-row .input-block:first-child {\\n margin-right: 1.5rem; }\\n\\n.form-purchase .input-blocks-row .input-block:last-child {\\n margin-left: 1.5rem; }\\n\\n.form-purchase .input-blocks-row .input-block .checkbox-block {\\n display: flex; }\\n\\n.form-purchase .purchase-select {\\n display: flex;\\n align-items: center;\\n background: transparent;\\n border: none;\\n font-size: 1.3rem;\\n line-height: 1.3rem;\\n margin: 1.5rem 0 0;\\n padding: 0;\\n width: 100%;\\n max-width: 15rem;\\n height: 1.3rem; }\\n\\n.form-purchase .purchase-select .arrow {\\n margin-left: 1rem;\\n width: 0.8rem;\\n height: 0.8rem; }\\n\\n.form-purchase .purchase-select .arrow.down {\\n -webkit-mask: url('arrow-down.svg') no-repeat center;\\n mask: url('arrow-down.svg') no-repeat center; }\\n\\n.form-purchase .purchase-select .arrow.up {\\n -webkit-mask: url('arrow-up.svg') no-repeat center;\\n mask: url('arrow-up.svg') no-repeat center; }\\n\\n.form-purchase .additional-details {\\n display: flex;\\n margin-top: 1.5rem;\\n padding: 0.5rem 0 2rem; }\\n\\n.form-purchase .additional-details > div {\\n flex-basis: 25%; }\\n\\n.form-purchase .additional-details > div:first-child {\\n padding-left: 1.5rem;\\n padding-right: 1rem; }\\n\\n.form-purchase .additional-details > div:last-child {\\n padding-left: 1rem;\\n padding-right: 1.5rem; }\\n\\n.form-purchase .purchase-states {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n font-size: 1.2rem;\\n line-height: 2.9rem; }\\n\\n.form-purchase .send-button {\\n margin: 2.4rem 0;\\n width: 100%;\\n max-width: 15rem; }\\n\\n.form-purchase .purchase-buttons {\\n display: flex;\\n justify-content: flex-start;\\n margin: 2.4rem -0.5rem; }\\n\\n.form-purchase .purchase-buttons button {\\n flex: 0 1 33%;\\n margin: 0 0.5rem; }\\n\\n.form-purchase .nullify-block-row {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center; }\\n\\n.form-purchase .nullify-block-row .nullify-block-buttons {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n margin: 1rem 0;\\n width: 100%; }\\n\\n.form-purchase .nullify-block-row .nullify-block-buttons button {\\n flex: 0 1 25%;\\n margin: 0 0.5rem; }\\n\\n.form-purchase .time-cancel-block-row {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center; }\\n\\n.form-purchase .time-cancel-block-row .time-cancel-block-question {\\n margin-bottom: 1rem; }\\n\\n.form-purchase .time-cancel-block-row .input-block {\\n width: 25%; }\\n\\n.form-purchase .time-cancel-block-row label {\\n margin-bottom: 1rem; }\\n\\n.form-purchase .time-cancel-block-row .time-cancel-block-buttons {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n margin: 1rem 0;\\n width: 100%; }\\n\\n.form-purchase .time-cancel-block-row .time-cancel-block-buttons button {\\n flex: 0 1 25%;\\n margin: 0 0.5rem; }\\n\\n.progress-bar-container {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n padding: 0 3rem;\\n width: 100%;\\n height: 3rem; }\\n\\n.progress-bar-container .progress-bar {\\n position: absolute;\\n top: -0.7rem;\\n left: 0;\\n margin: 0 3rem;\\n width: calc(100% - 6rem);\\n height: 0.7rem; }\\n\\n.progress-bar-container .progress-bar .progress-bar-full {\\n height: 0.7rem; }\\n\\n.progress-bar-container .progress-labels {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 1.2rem;\\n height: 100%; }\\n\\n.progress-bar-container .progress-time {\\n position: absolute;\\n top: -3rem;\\n left: 50%;\\n transform: translateX(-50%);\\n font-size: 1.2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcHVyY2hhc2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxccHVyY2hhc2VcXHB1cmNoYXNlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxjQUFjO0VBQ2QsdUJBQXVCO0VBQ3ZCLHFCQUFxQixFQUFBOztBQUd2QjtFQUNFLGNBQWM7RUFDZCxzQkFBc0I7RUFDdEIsZUFBZTtFQUNmLG1CQUFtQixFQUFBOztBQUpyQjtJQU9JLGFBQWEsRUFBQTs7QUFQakI7TUFVTSxlQUFlLEVBQUE7O0FBVnJCO1FBYVEsb0JBQW9CLEVBQUE7O0FBYjVCO1FBaUJRLG1CQUFtQixFQUFBOztBQWpCM0I7UUFxQlEsYUFBYSxFQUFBOztBQXJCckI7SUEyQkksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGNBQWMsRUFBQTs7QUFyQ2xCO01Bd0NNLGlCQUFpQjtNQUNqQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQTFDcEI7UUE2Q1Esb0RBQTREO2dCQUE1RCw0Q0FBNEQsRUFBQTs7QUE3Q3BFO1FBaURRLGtEQUEwRDtnQkFBMUQsMENBQTBELEVBQUE7O0FBakRsRTtJQXVESSxhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLHNCQUFzQixFQUFBOztBQXpEMUI7TUE0RE0sZUFBZSxFQUFBOztBQTVEckI7UUErRFEsb0JBQW9CO1FBQ3BCLG1CQUFtQixFQUFBOztBQWhFM0I7UUFvRVEsa0JBQWtCO1FBQ2xCLHFCQUFxQixFQUFBOztBQXJFN0I7SUEyRUksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBQTs7QUFoRnZCO0lBb0ZJLGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsZ0JBQWdCLEVBQUE7O0FBdEZwQjtJQTBGSSxhQUFhO0lBQ2IsMkJBQTJCO0lBQzNCLHNCQUFzQixFQUFBOztBQTVGMUI7TUErRk0sYUFBYTtNQUNiLGdCQUFnQixFQUFBOztBQWhHdEI7SUFxR0ksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUE7O0FBeEczQjtNQTJHTSxhQUFhO01BQ2IsbUJBQW1CO01BQ25CLHVCQUF1QjtNQUN2QixjQUFjO01BQ2QsV0FBVyxFQUFBOztBQS9HakI7UUFrSFEsYUFBYTtRQUNiLGdCQUFnQixFQUFBOztBQW5IeEI7SUF5SEksYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUE7O0FBNUgzQjtNQStITSxtQkFBbUIsRUFBQTs7QUEvSHpCO01BbUlNLFVBQVUsRUFBQTs7QUFuSWhCO01BdUlNLG1CQUFtQixFQUFBOztBQXZJekI7TUEySU0sYUFBYTtNQUNiLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsY0FBYztNQUNkLFdBQVcsRUFBQTs7QUEvSWpCO1FBa0pRLGFBQWE7UUFDYixnQkFBZ0IsRUFBQTs7QUFPeEI7RUFDRSxrQkFBa0I7RUFDbEIsU0FBUztFQUNULE9BQU87RUFDUCxlQUFlO0VBQ2YsV0FBVztFQUNYLFlBQVksRUFBQTs7QUFOZDtJQVNJLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osT0FBTztJQUNQLGNBQWM7SUFDZCx3QkFBd0I7SUFDeEIsY0FBYyxFQUFBOztBQWRsQjtNQWlCTSxjQUFjLEVBQUE7O0FBakJwQjtJQXNCSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixpQkFBaUI7SUFDakIsWUFBWSxFQUFBOztBQTFCaEI7SUE4Qkksa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLGlCQUFpQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvcHVyY2hhc2UvcHVyY2hhc2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZCB7XHJcbiAgZmxleDogMCAwIGF1dG87XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgbWFyZ2luOiAtM3JlbSAtM3JlbSAwO1xyXG59XHJcblxyXG4uZm9ybS1wdXJjaGFzZSB7XHJcbiAgZmxleDogMSAxIGF1dG87XHJcbiAgbWFyZ2luOiAxLjVyZW0gLTNyZW0gMDtcclxuICBwYWRkaW5nOiAwIDNyZW07XHJcbiAgb3ZlcmZsb3cteTogb3ZlcmxheTtcclxuXHJcbiAgLmlucHV0LWJsb2Nrcy1yb3cge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcblxyXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMS41cmVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuY2hlY2tib3gtYmxvY2sge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5wdXJjaGFzZS1zZWxlY3Qge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogMS41cmVtIDAgMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICBoZWlnaHQ6IDEuM3JlbTtcclxuXHJcbiAgICAuYXJyb3cge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICAgICAgd2lkdGg6IDAuOHJlbTtcclxuICAgICAgaGVpZ2h0OiAwLjhyZW07XHJcblxyXG4gICAgICAmLmRvd24ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1kb3duLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi51cCB7XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Fycm93LXVwLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZGl0aW9uYWwtZGV0YWlscyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMS41cmVtO1xyXG4gICAgcGFkZGluZzogMC41cmVtIDAgMnJlbTtcclxuXHJcbiAgICA+IGRpdiB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDI1JTtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnB1cmNoYXNlLXN0YXRlcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuOXJlbTtcclxuICB9XHJcblxyXG4gIC5zZW5kLWJ1dHRvbiB7XHJcbiAgICBtYXJnaW46IDIuNHJlbSAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gIH1cclxuXHJcbiAgLnB1cmNoYXNlLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICAgIG1hcmdpbjogMi40cmVtIC0wLjVyZW07XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgZmxleDogMCAxIDMzJTtcclxuICAgICAgbWFyZ2luOiAwIDAuNXJlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5udWxsaWZ5LWJsb2NrLXJvdyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHJcbiAgICAubnVsbGlmeS1ibG9jay1idXR0b25zIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbjogMXJlbSAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgZmxleDogMCAxIDI1JTtcclxuICAgICAgICBtYXJnaW46IDAgMC41cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGltZS1jYW5jZWwtYmxvY2stcm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG5cclxuICAgIC50aW1lLWNhbmNlbC1ibG9jay1xdWVzdGlvbiB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LWJsb2NrIHtcclxuICAgICAgd2lkdGg6IDI1JTtcclxuICAgIH1cclxuXHJcbiAgICBsYWJlbCB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLnRpbWUtY2FuY2VsLWJsb2NrLWJ1dHRvbnMge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luOiAxcmVtIDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICAgYnV0dG9uIHtcclxuICAgICAgICBmbGV4OiAwIDEgMjUlO1xyXG4gICAgICAgIG1hcmdpbjogMCAwLjVyZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG4ucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHBhZGRpbmc6IDAgM3JlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDNyZW07XHJcblxyXG4gIC5wcm9ncmVzcy1iYXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtMC43cmVtO1xyXG4gICAgbGVmdDogMDtcclxuICAgIG1hcmdpbjogMCAzcmVtO1xyXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAtIDZyZW0pO1xyXG4gICAgaGVpZ2h0OiAwLjdyZW07XHJcblxyXG4gICAgLnByb2dyZXNzLWJhci1mdWxsIHtcclxuICAgICAgaGVpZ2h0OiAwLjdyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucHJvZ3Jlc3MtbGFiZWxzIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICB9XHJcblxyXG4gIC5wcm9ncmVzcy10aW1lIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogLTNyZW07XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, OnInit, OnDestroy, NgZone, HostListener} from '@angular/core';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Location} from '@angular/common';\r\nimport {IntToMoneyPipe} from '../_helpers/pipes/int-to-money.pipe';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Component({\r\n selector: 'app-purchase',\r\n templateUrl: './purchase.component.html',\r\n styleUrls: ['./purchase.component.scss']\r\n})\r\nexport class PurchaseComponent implements OnInit, OnDestroy {\r\n\r\n isOpen = false;\r\n localAliases = [];\r\n\r\n currentWalletId;\r\n newPurchase = false;\r\n parentRouting;\r\n subRouting;\r\n historyBlock;\r\n\r\n purchaseForm = new FormGroup({\r\n description: new FormControl('', Validators.required),\r\n seller: new FormControl('', [Validators.required, (g: FormControl) => {\r\n if (g.value === this.variablesService.currentWallet.address) {\r\n return {'address_same': true};\r\n }\r\n return null;\r\n }, (g: FormControl) => {\r\n this.localAliases = [];\r\n if (g.value) {\r\n if (g.value.indexOf('@') !== 0) {\r\n this.isOpen = false;\r\n this.backend.validateAddress(g.value, (valid_status) => {\r\n this.ngZone.run(() => {\r\n if (valid_status === false) {\r\n g.setErrors(Object.assign({'address_not_valid': true}, g.errors));\r\n } else {\r\n if (g.hasError('address_not_valid')) {\r\n delete g.errors['address_not_valid'];\r\n if (Object.keys(g.errors).length === 0) {\r\n g.setErrors(null);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n return (g.hasError('address_not_valid')) ? {'address_not_valid': true} : null;\r\n } else {\r\n this.isOpen = true;\r\n this.localAliases = this.variablesService.aliases.filter((item) => {\r\n return item.name.indexOf(g.value) > -1;\r\n });\r\n if (!(/^@?[a-z0-9\\.\\-]{6,25}$/.test(g.value))) {\r\n g.setErrors(Object.assign({'alias_not_valid': true}, g.errors));\r\n } else {\r\n this.backend.getAliasByName(g.value.replace('@', ''), (alias_status, alias_data) => {\r\n this.ngZone.run(() => {\r\n if (alias_status) {\r\n if (alias_data.address === this.variablesService.currentWallet.address) {\r\n g.setErrors(Object.assign({'address_same': true}, g.errors));\r\n }\r\n if (g.hasError('alias_not_valid')) {\r\n delete g.errors['alias_not_valid'];\r\n if (Object.keys(g.errors).length === 0) {\r\n g.setErrors(null);\r\n }\r\n }\r\n } else {\r\n g.setErrors(Object.assign({'alias_not_valid': true}, g.errors));\r\n }\r\n });\r\n });\r\n }\r\n return (g.hasError('alias_not_valid')) ? {'alias_not_valid': true} : null;\r\n }\r\n }\r\n return null;\r\n }]),\r\n amount: new FormControl(null, [Validators.required, (g: FormControl) => {\r\n if (parseFloat(g.value) === 0) {\r\n return {'amount_zero': true};\r\n }\r\n return null;\r\n }]),\r\n yourDeposit: new FormControl(null, Validators.required),\r\n sellerDeposit: new FormControl(null, Validators.required),\r\n sameAmount: new FormControl({value: false, disabled: false}),\r\n comment: new FormControl(''),\r\n fee: new FormControl(this.variablesService.default_fee),\r\n time: new FormControl({value: 12, disabled: false}),\r\n timeCancel: new FormControl({value: 12, disabled: false}),\r\n payment: new FormControl('')\r\n });\r\n\r\n additionalOptions = false;\r\n currentContract = null;\r\n heightAppEvent;\r\n showTimeSelect = false;\r\n showNullify = false;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n private location: Location,\r\n private intToMoneyPipe: IntToMoneyPipe\r\n ) {\r\n }\r\n\r\n checkAndChangeHistory() {\r\n if (this.currentContract.state === 201) {\r\n this.historyBlock = this.variablesService.currentWallet.history.find(item => item.tx_type === 8 && item.contract[0].contract_id === this.currentContract.contract_id && item.contract[0].is_a === this.currentContract.is_a);\r\n } else if (this.currentContract.state === 601) {\r\n this.historyBlock = this.variablesService.currentWallet.history.find(item => item.tx_type === 12 && item.contract[0].contract_id === this.currentContract.contract_id && item.contract[0].is_a === this.currentContract.is_a);\r\n }\r\n }\r\n\r\n addressMouseDown(e) {\r\n if (e['button'] === 0 && this.purchaseForm.get('seller').value && this.purchaseForm.get('seller').value.indexOf('@') === 0) {\r\n this.isOpen = true;\r\n }\r\n }\r\n\r\n setAlias(alias) {\r\n this.purchaseForm.get('seller').setValue(alias);\r\n }\r\n\r\n @HostListener('document:click', ['$event.target'])\r\n public onClick(targetElement) {\r\n if (targetElement.id !== 'purchase-seller' && this.isOpen) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(params => {\r\n this.currentWalletId = params['id'];\r\n });\r\n this.subRouting = this.route.params.subscribe(params => {\r\n if (params.hasOwnProperty('id')) {\r\n this.currentContract = this.variablesService.currentWallet.getContract(params['id']);\r\n this.purchaseForm.controls['seller'].setValidators([]);\r\n this.purchaseForm.updateValueAndValidity();\r\n this.purchaseForm.setValue({\r\n description: this.currentContract.private_detailes.t,\r\n seller: this.currentContract.private_detailes.b_addr,\r\n amount: this.intToMoneyPipe.transform(this.currentContract.private_detailes.to_pay),\r\n yourDeposit: this.intToMoneyPipe.transform(this.currentContract.private_detailes.a_pledge),\r\n sellerDeposit: this.intToMoneyPipe.transform(this.currentContract.private_detailes.b_pledge),\r\n sameAmount: this.currentContract.private_detailes.to_pay.isEqualTo(this.currentContract.private_detailes.b_pledge),\r\n comment: this.currentContract.private_detailes.c,\r\n fee: this.variablesService.default_fee,\r\n time: 12,\r\n timeCancel: 12,\r\n payment: this.currentContract.payment_id\r\n });\r\n this.purchaseForm.get('sameAmount').disable();\r\n this.newPurchase = false;\r\n\r\n if (this.currentContract.is_new) {\r\n if (this.currentContract.is_a && this.currentContract.state === 2) {\r\n this.currentContract.state = 120;\r\n }\r\n if (this.currentContract.state === 130 && this.currentContract.cancel_expiration_time !== 0 && this.currentContract.cancel_expiration_time < this.variablesService.exp_med_ts) {\r\n this.currentContract.state = 2;\r\n }\r\n this.variablesService.settings.viewedContracts = (this.variablesService.settings.viewedContracts) ? this.variablesService.settings.viewedContracts : [];\r\n let findViewedCont = false;\r\n for (let j = 0; j < this.variablesService.settings.viewedContracts.length; j++) {\r\n if (this.variablesService.settings.viewedContracts[j].contract_id === this.currentContract.contract_id && this.variablesService.settings.viewedContracts[j].is_a === this.currentContract.is_a) {\r\n this.variablesService.settings.viewedContracts[j].state = this.currentContract.state;\r\n findViewedCont = true;\r\n break;\r\n }\r\n }\r\n if (!findViewedCont) {\r\n this.variablesService.settings.viewedContracts.push({\r\n contract_id: this.currentContract.contract_id,\r\n is_a: this.currentContract.is_a,\r\n state: this.currentContract.state\r\n });\r\n }\r\n this.currentContract.is_new = false;\r\n setTimeout(() => {\r\n this.variablesService.currentWallet.recountNewContracts();\r\n }, 0);\r\n }\r\n this.checkAndChangeHistory();\r\n } else {\r\n this.newPurchase = true;\r\n }\r\n });\r\n this.heightAppEvent = this.variablesService.getHeightAppEvent.subscribe((newHeight: number) => {\r\n if (this.currentContract && this.currentContract.state === 201 && this.currentContract.height !== 0 && (newHeight - this.currentContract.height) >= 10) {\r\n this.currentContract.state = 2;\r\n this.currentContract.is_new = true;\r\n this.variablesService.currentWallet.recountNewContracts();\r\n } else if (this.currentContract && this.currentContract.state === 601 && this.currentContract.height !== 0 && (newHeight - this.currentContract.height) >= 10) {\r\n this.currentContract.state = 6;\r\n this.currentContract.is_new = true;\r\n this.variablesService.currentWallet.recountNewContracts();\r\n }\r\n });\r\n }\r\n\r\n toggleOptions() {\r\n this.additionalOptions = !this.additionalOptions;\r\n }\r\n\r\n getProgressBarWidth() {\r\n let progress = '0';\r\n if (!this.newPurchase) {\r\n if (this.currentContract) {\r\n if (this.currentContract.state === 1) {\r\n progress = '10%';\r\n }\r\n if (this.currentContract.state === 201) {\r\n progress = '25%';\r\n }\r\n if ([120, 2].indexOf(this.currentContract.state) !== -1) {\r\n progress = '50%';\r\n }\r\n if ([5, 601].indexOf(this.currentContract.state) !== -1) {\r\n progress = '75%';\r\n }\r\n if ([110, 130, 140, 3, 4, 6].indexOf(this.currentContract.state) !== -1) {\r\n progress = '100%';\r\n }\r\n }\r\n }\r\n return progress;\r\n }\r\n\r\n sameAmountChange() {\r\n if (this.purchaseForm.get('sameAmount').value) {\r\n this.purchaseForm.get('sellerDeposit').clearValidators();\r\n this.purchaseForm.get('sellerDeposit').updateValueAndValidity();\r\n } else {\r\n this.purchaseForm.get('sellerDeposit').setValidators([Validators.required]);\r\n this.purchaseForm.get('sellerDeposit').updateValueAndValidity();\r\n }\r\n }\r\n\r\n createPurchase() {\r\n if (this.purchaseForm.valid) {\r\n const sellerDeposit = this.purchaseForm.get('sameAmount').value ? this.purchaseForm.get('amount').value : this.purchaseForm.get('sellerDeposit').value;\r\n if (this.purchaseForm.get('seller').value.indexOf('@') !== 0) {\r\n this.backend.createProposal(\r\n this.variablesService.currentWallet.wallet_id,\r\n this.purchaseForm.get('description').value,\r\n this.purchaseForm.get('comment').value,\r\n this.variablesService.currentWallet.address,\r\n this.purchaseForm.get('seller').value,\r\n this.purchaseForm.get('amount').value,\r\n this.purchaseForm.get('yourDeposit').value,\r\n sellerDeposit,\r\n this.purchaseForm.get('time').value,\r\n this.purchaseForm.get('payment').value,\r\n (create_status) => {\r\n if (create_status) {\r\n this.back();\r\n }\r\n });\r\n } else {\r\n this.backend.getAliasByName(this.purchaseForm.get('seller').value.replace('@', ''), (alias_status, alias_data) => {\r\n this.ngZone.run(() => {\r\n if (alias_status === false) {\r\n this.ngZone.run(() => {\r\n this.purchaseForm.get('seller').setErrors({'alias_not_valid': true});\r\n });\r\n } else {\r\n this.backend.createProposal(\r\n this.variablesService.currentWallet.wallet_id,\r\n this.purchaseForm.get('description').value,\r\n this.purchaseForm.get('comment').value,\r\n this.variablesService.currentWallet.address,\r\n alias_data.address,\r\n this.purchaseForm.get('amount').value,\r\n this.purchaseForm.get('yourDeposit').value,\r\n sellerDeposit,\r\n this.purchaseForm.get('time').value,\r\n this.purchaseForm.get('payment').value,\r\n (create_status) => {\r\n if (create_status) {\r\n this.back();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n acceptState() {\r\n this.backend.acceptProposal(this.currentWalletId, this.currentContract.contract_id, (accept_status) => {\r\n if (accept_status) {\r\n this.modalService.prepareModal('info', 'PURCHASE.ACCEPT_STATE_WAIT_BIG');\r\n this.back();\r\n }\r\n });\r\n }\r\n\r\n ignoredContract() {\r\n this.variablesService.settings.notViewedContracts = (this.variablesService.settings.notViewedContracts) ? this.variablesService.settings.notViewedContracts : [];\r\n let findViewedCont = false;\r\n for (let j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) {\r\n if (this.variablesService.settings.notViewedContracts[j].contract_id === this.currentContract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === this.currentContract.is_a) {\r\n this.variablesService.settings.notViewedContracts[j].state = 110;\r\n this.variablesService.settings.notViewedContracts[j].time = this.currentContract.expiration_time;\r\n findViewedCont = true;\r\n break;\r\n }\r\n }\r\n if (!findViewedCont) {\r\n this.variablesService.settings.notViewedContracts.push({\r\n contract_id: this.currentContract.contract_id,\r\n is_a: this.currentContract.is_a,\r\n state: 110,\r\n time: this.currentContract.expiration_time\r\n });\r\n }\r\n this.currentContract.is_new = true;\r\n this.currentContract.state = 110;\r\n this.currentContract.time = this.currentContract.expiration_time;\r\n\r\n this.variablesService.currentWallet.recountNewContracts();\r\n this.modalService.prepareModal('info', 'PURCHASE.IGNORED_ACCEPT');\r\n this.back();\r\n }\r\n\r\n productNotGot() {\r\n this.backend.releaseProposal(this.currentWalletId, this.currentContract.contract_id, 'REL_B', (release_status) => {\r\n if (release_status) {\r\n this.modalService.prepareModal('info', 'PURCHASE.BURN_PROPOSAL');\r\n this.back();\r\n }\r\n });\r\n }\r\n\r\n dealsDetailsFinish() {\r\n this.backend.releaseProposal(this.currentWalletId, this.currentContract.contract_id, 'REL_N', (release_status) => {\r\n if (release_status) {\r\n this.modalService.prepareModal('success', 'PURCHASE.SUCCESS_FINISH_PROPOSAL');\r\n this.back();\r\n }\r\n });\r\n }\r\n\r\n dealsDetailsCancel() {\r\n this.backend.requestCancelContract(this.currentWalletId, this.currentContract.contract_id, this.purchaseForm.get('timeCancel').value, (cancel_status) => {\r\n if (cancel_status) {\r\n this.modalService.prepareModal('info', 'PURCHASE.SEND_CANCEL_PROPOSAL');\r\n this.back();\r\n }\r\n });\r\n }\r\n\r\n dealsDetailsDontCanceling() {\r\n this.variablesService.settings.notViewedContracts = this.variablesService.settings.notViewedContracts ? this.variablesService.settings.notViewedContracts : [];\r\n let findViewedCont = false;\r\n for (let j = 0; j < this.variablesService.settings.notViewedContracts.length; j++) {\r\n if (this.variablesService.settings.notViewedContracts[j].contract_id === this.currentContract.contract_id && this.variablesService.settings.notViewedContracts[j].is_a === this.currentContract.is_a) {\r\n this.variablesService.settings.notViewedContracts[j].state = 130;\r\n this.variablesService.settings.notViewedContracts[j].time = this.currentContract.cancel_expiration_time;\r\n findViewedCont = true;\r\n break;\r\n }\r\n }\r\n if (!findViewedCont) {\r\n this.variablesService.settings.notViewedContracts.push({\r\n contract_id: this.currentContract.contract_id,\r\n is_a: this.currentContract.is_a,\r\n state: 130,\r\n time: this.currentContract.cancel_expiration_time\r\n });\r\n }\r\n this.currentContract.is_new = true;\r\n this.currentContract.state = 130;\r\n this.currentContract.time = this.currentContract.cancel_expiration_time;\r\n this.variablesService.currentWallet.recountNewContracts();\r\n this.modalService.prepareModal('info', 'PURCHASE.IGNORED_CANCEL');\r\n this.back();\r\n }\r\n\r\n dealsDetailsSellerCancel() {\r\n this.backend.acceptCancelContract(this.currentWalletId, this.currentContract.contract_id, (accept_status) => {\r\n if (accept_status) {\r\n this.modalService.prepareModal('info', 'PURCHASE.DEALS_CANCELED_WAIT');\r\n this.back();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n this.subRouting.unsubscribe();\r\n this.heightAppEvent.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n \\\"qr-code\\\"\\r\\n
      \\r\\n
      {{variablesService.currentWallet.address}}
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.wrap-qr {\\n display: flex;\\n flex-direction: column;\\n align-items: center; }\\n\\n.wrap-qr img {\\n margin: 4rem 0; }\\n\\n.wrap-qr .wrap-address {\\n display: flex;\\n align-items: center;\\n font-size: 1.4rem;\\n line-height: 2.7rem; }\\n\\n.wrap-qr .wrap-address .btn-copy-address {\\n margin-left: 1.2rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.wrap-qr .wrap-address .btn-copy-address.copy {\\n -webkit-mask: url('copy.svg') no-repeat center;\\n mask: url('copy.svg') no-repeat center; }\\n\\n.wrap-qr .wrap-address .btn-copy-address.copy:hover {\\n opacity: 0.75; }\\n\\n.wrap-qr .wrap-address .btn-copy-address.copied {\\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\\n mask: url('complete-testwallet.svg') no-repeat center; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcmVjZWl2ZS9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxyZWNlaXZlXFxyZWNlaXZlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixtQkFBbUIsRUFBQTs7QUFIckI7SUFNSSxjQUFjLEVBQUE7O0FBTmxCO0lBVUksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUE7O0FBYnZCO01BZ0JNLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQWxCcEI7UUFxQlEsOENBQXVEO2dCQUF2RCxzQ0FBdUQsRUFBQTs7QUFyQi9EO1VBd0JVLGFBQWEsRUFBQTs7QUF4QnZCO1FBNkJRLDZEQUFzRTtnQkFBdEUscURBQXNFLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9yZWNlaXZlL3JlY2VpdmUuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi53cmFwLXFyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHJcbiAgaW1nIHtcclxuICAgIG1hcmdpbjogNHJlbSAwO1xyXG4gIH1cclxuXHJcbiAgLndyYXAtYWRkcmVzcyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuXHJcbiAgICAuYnRuLWNvcHktYWRkcmVzcyB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5jb3B5IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2NvcHkuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNzU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmNvcGllZCB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9jb21wbGV0ZS10ZXN0d2FsbGV0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */\"","import {Component, OnInit, OnDestroy} from '@angular/core';\r\nimport QRCode from 'qrcode';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {RCV_ADDR_QR_SCALE} from '../_shared/constants';\r\n\r\n@Component({\r\n selector: 'app-receive',\r\n templateUrl: './receive.component.html',\r\n styleUrls: ['./receive.component.scss']\r\n})\r\nexport class ReceiveComponent implements OnInit, OnDestroy {\r\n qrImageSrc: string;\r\n parentRouting;\r\n copyAnimation = false;\r\n copyAnimationTimeout;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private backend: BackendService,\r\n public variablesService: VariablesService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(() => {\r\n QRCode.toDataURL(this.variablesService.currentWallet.address, {\r\n width: 106 * RCV_ADDR_QR_SCALE,\r\n height: 106 * RCV_ADDR_QR_SCALE\r\n }).then(url => {\r\n this.qrImageSrc = url;\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n });\r\n }\r\n\r\n public copyAddress() {\r\n this.backend.setClipboard(this.variablesService.currentWallet.address);\r\n this.copyAnimation = true;\r\n this.copyAnimationTimeout = window.setTimeout(() => {\r\n this.copyAnimation = false;\r\n }, 2000);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n clearTimeout(this.copyAnimationTimeout);\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\\r\\n {{ 'BREADCRUMBS.RESTORE_WALLET' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.NAME_DUPLICATE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = variablesService.maxWalletNameLength\\\">\\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.KEY_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.KEY_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.FORM_ERRORS.INCORRECT_PASSWORD' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'RESTORE_WALLET.OK' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n\\r\\n\"","module.exports = \":host {\\n position: relative; }\\n\\n.form-restore {\\n margin: 2.4rem 0;\\n width: 100%; }\\n\\n.form-restore .input-block.half-block {\\n width: 50%; }\\n\\n.form-restore .wrap-buttons {\\n display: flex;\\n margin: 2.5rem -0.7rem;\\n width: 50%; }\\n\\n.form-restore .wrap-buttons button {\\n margin: 0 0.7rem; }\\n\\n.form-restore .wrap-buttons button.transparent-button {\\n flex-basis: 50%; }\\n\\n.form-restore .wrap-buttons button.select-button {\\n flex-basis: 60%; }\\n\\n.form-restore .wrap-buttons button.create-button {\\n flex: 1 1 50%; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcmVzdG9yZS13YWxsZXQvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxccmVzdG9yZS13YWxsZXRcXHJlc3RvcmUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVcsRUFBQTs7QUFGYjtJQU9NLFVBQVUsRUFBQTs7QUFQaEI7SUFZSSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLFVBQVUsRUFBQTs7QUFkZDtNQWlCTSxnQkFBZ0IsRUFBQTs7QUFqQnRCO1FBb0JRLGVBQWUsRUFBQTs7QUFwQnZCO1FBd0JRLGVBQWUsRUFBQTs7QUF4QnZCO1FBNEJRLGFBQWEsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3Jlc3RvcmUtd2FsbGV0L3Jlc3RvcmUtd2FsbGV0LmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmZvcm0tcmVzdG9yZSB7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgLmlucHV0LWJsb2NrIHtcclxuXHJcbiAgICAmLmhhbGYtYmxvY2sge1xyXG4gICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLndyYXAtYnV0dG9ucyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luOiAyLjVyZW0gLTAuN3JlbTtcclxuICAgIHdpZHRoOiA1MCU7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgbWFyZ2luOiAwIDAuN3JlbTtcclxuXHJcbiAgICAgICYudHJhbnNwYXJlbnQtYnV0dG9uIHtcclxuICAgICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuc2VsZWN0LWJ1dHRvbiB7XHJcbiAgICAgICAgZmxleC1iYXNpczogNjAlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmNyZWF0ZS1idXR0b24ge1xyXG4gICAgICAgIGZsZXg6IDEgMSA1MCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import { Component, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { ModalService } from '../_helpers/services/modal.service';\r\nimport { Wallet } from '../_helpers/models/wallet.model';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subject } from 'rxjs/internal/Subject';\r\nimport { debounceTime, distinctUntilChanged, pairwise, startWith, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-restore-wallet',\r\n templateUrl: './restore-wallet.component.html',\r\n styleUrls: ['./restore-wallet.component.scss'],\r\n})\r\nexport class RestoreWalletComponent implements OnInit, OnDestroy {\r\n restoreForm = new FormGroup(\r\n {\r\n name: new FormControl('', [\r\n Validators.required,\r\n (g: FormControl) => {\r\n for (let i = 0; i < this.variablesService.wallets.length; i++) {\r\n if (g.value === this.variablesService.wallets[i].name) {\r\n return { duplicate: true };\r\n }\r\n }\r\n return null;\r\n },\r\n ]),\r\n key: new FormControl('', Validators.required),\r\n password: new FormControl(\r\n '',\r\n Validators.pattern(this.variablesService.pattern)\r\n ),\r\n confirm: new FormControl(''),\r\n seedPassword: new FormControl('', Validators.pattern(this.variablesService.pattern)),\r\n },\r\n function (g: FormGroup) {\r\n return g.get('password').value === g.get('confirm').value\r\n ? null\r\n : { confirm_mismatch: true };\r\n }\r\n );\r\n\r\n wallet = {\r\n id: '',\r\n };\r\n\r\n walletSaved = false;\r\n walletSavedName = '';\r\n progressWidth = '9rem';\r\n seedPhraseInfo = null;\r\n unsubscribeAll = new Subject();\r\n\r\n constructor(\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone,\r\n private translate: TranslateService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.checkValidSeedPhrasePassword();\r\n this.changeDetectionSeedPhrasePassword();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribeAll.next(true);\r\n this.unsubscribeAll.complete();\r\n }\r\n\r\n changeDetectionSeedPhrasePassword() {\r\n this.restoreForm.controls.seedPassword.valueChanges\r\n .pipe(startWith(null), pairwise(), takeUntil(this.unsubscribeAll))\r\n .subscribe(() => {\r\n this.checkValidSeedPhrasePassword();\r\n });\r\n this.restoreForm.controls.key.valueChanges\r\n .pipe(startWith(null), pairwise(), takeUntil(this.unsubscribeAll))\r\n .subscribe(() => {\r\n this.checkValidSeedPhrasePassword();\r\n });\r\n }\r\n\r\n checkValidSeedPhrasePassword() {\r\n const seed_password = this.restoreForm.controls.seedPassword.value;\r\n const seed_phrase = this.restoreForm.controls.key.value;\r\n this.backend.getSeedPhraseInfo({seed_phrase, seed_password}, (status, data) => {\r\n this.ngZone.run(() => {\r\n this.seedPhraseInfo = data;\r\n });\r\n });\r\n }\r\n\r\n createWallet() {\r\n this.ngZone.run(() => {\r\n this.progressWidth = '100%';\r\n this.runWallet();\r\n });\r\n }\r\n\r\n saveWallet() {\r\n if (\r\n this.restoreForm.valid &&\r\n this.restoreForm.get('name').value.length <=\r\n this.variablesService.maxWalletNameLength\r\n ) {\r\n this.backend.isValidRestoreWalletText(\r\n {\r\n seed_phrase: this.restoreForm.get('key').value,\r\n seed_password: this.restoreForm.get('seedPassword').value,\r\n },\r\n (valid_status, valid_data) => {\r\n if (valid_data !== 'TRUE') {\r\n this.ngZone.run(() => {\r\n this.restoreForm.get('key').setErrors({ key_not_valid: true });\r\n });\r\n } else {\r\n this.backend.saveFileDialog(\r\n this.translate.instant('RESTORE_WALLET.CHOOSE_PATH'),\r\n '*',\r\n this.variablesService.settings.default_path,\r\n (save_status, save_data) => {\r\n if (save_status) {\r\n this.variablesService.settings.default_path = save_data.path.substr(\r\n 0,\r\n save_data.path.lastIndexOf('/')\r\n );\r\n this.walletSavedName = save_data.path.substr(\r\n save_data.path.lastIndexOf('/') + 1,\r\n save_data.path.length - 1\r\n );\r\n this.backend.restoreWallet(\r\n save_data.path,\r\n this.restoreForm.get('password').value,\r\n this.restoreForm.get('key').value,\r\n this.restoreForm.get('seedPassword').value,\r\n (restore_status, restore_data) => {\r\n if (restore_status) {\r\n this.wallet.id = restore_data.wallet_id;\r\n this.variablesService.opening_wallet = new Wallet(\r\n restore_data.wallet_id,\r\n this.restoreForm.get('name').value,\r\n this.restoreForm.get('password').value,\r\n restore_data['wi'].path,\r\n restore_data['wi'].address,\r\n restore_data['wi'].balance,\r\n restore_data['wi'].unlocked_balance,\r\n restore_data['wi'].mined_total,\r\n restore_data['wi'].tracking_hey\r\n );\r\n this.variablesService.opening_wallet.is_auditable =\r\n restore_data['wi'].is_auditable;\r\n this.variablesService.opening_wallet.is_watch_only =\r\n restore_data['wi'].is_watch_only;\r\n this.variablesService.opening_wallet.currentPage = 1;\r\n this.variablesService.opening_wallet.alias = this.backend.getWalletAlias(\r\n this.variablesService.opening_wallet.address\r\n );\r\n this.variablesService.opening_wallet.pages = new Array(\r\n 1\r\n ).fill(1);\r\n this.variablesService.opening_wallet.totalPages = 1;\r\n this.variablesService.opening_wallet.currentPage = 1;\r\n this.variablesService.opening_wallet.total_history_item = 0;\r\n this.variablesService.opening_wallet.restore = true;\r\n if (\r\n restore_data.recent_history &&\r\n restore_data.recent_history.history\r\n ) {\r\n this.variablesService.opening_wallet.totalPages = Math.ceil(\r\n restore_data.recent_history.total_history_items /\r\n this.variablesService.count\r\n );\r\n this.variablesService.opening_wallet.totalPages >\r\n this.variablesService.maxPages\r\n ? (this.variablesService.opening_wallet.pages = new Array(\r\n 5\r\n )\r\n .fill(1)\r\n .map((value, index) => value + index))\r\n : (this.variablesService.opening_wallet.pages = new Array(\r\n this.variablesService.opening_wallet.totalPages\r\n )\r\n .fill(1)\r\n .map((value, index) => value + index));\r\n this.variablesService.opening_wallet.prepareHistory(\r\n restore_data.recent_history.history\r\n );\r\n }\r\n this.backend.getContracts(\r\n this.variablesService.opening_wallet.wallet_id,\r\n (contracts_status, contracts_data) => {\r\n if (\r\n contracts_status &&\r\n contracts_data.hasOwnProperty('contracts')\r\n ) {\r\n this.ngZone.run(() => {\r\n this.variablesService.opening_wallet.prepareContractsAfterOpen(\r\n contracts_data.contracts,\r\n this.variablesService.exp_med_ts,\r\n this.variablesService.height_app,\r\n this.variablesService.settings\r\n .viewedContracts,\r\n this.variablesService.settings\r\n .notViewedContracts\r\n );\r\n });\r\n }\r\n }\r\n );\r\n this.ngZone.run(() => {\r\n this.walletSaved = true;\r\n this.progressWidth = '50%';\r\n });\r\n } else {\r\n this.modalService.prepareModal(\r\n 'error',\r\n 'RESTORE_WALLET.NOT_CORRECT_FILE_OR_PASSWORD'\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n runWallet() {\r\n // add flag when wallet was restored form seed\r\n this.variablesService.after_sync_request[this.wallet.id] = true;\r\n let exists = false;\r\n this.variablesService.wallets.forEach((wallet) => {\r\n if (wallet.address === this.variablesService.opening_wallet.address) {\r\n exists = true;\r\n }\r\n });\r\n if (!exists) {\r\n this.backend.runWallet(this.wallet.id, (run_status, run_data) => {\r\n if (run_status) {\r\n this.variablesService.wallets.push(\r\n this.variablesService.opening_wallet\r\n );\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData();\r\n }\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.wallet.id]);\r\n });\r\n } else {\r\n console.log(run_data['error_code']);\r\n }\r\n });\r\n } else {\r\n this.variablesService.opening_wallet = null;\r\n this.modalService.prepareModal(\r\n 'error',\r\n 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN'\r\n );\r\n this.backend.closeWallet(this.wallet.id, () => {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n\\r\\n\"","module.exports = \":host {\\n position: relative; }\\n\\n.content {\\n padding: 3.2rem 3rem 3rem; }\\n\\n.scrolled-content, .content {\\n height: 100%;\\n overflow-y: auto; }\\n\\n.mt-2 {\\n margin-top: 2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VlZC1waHJhc2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcc2VlZC1waHJhc2VcXHNlZWQtcGhyYXNlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7O0FBR3BCO0VBQ0UseUJBQXlCLEVBQUE7O0FBRTNCO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQixFQUFBOztBQUdsQjtFQUNFLGdCQUFnQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvc2VlZC1waHJhc2Uvc2VlZC1waHJhc2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcblxyXG4uY29udGVudCB7XHJcbiAgcGFkZGluZzogMy4ycmVtIDNyZW0gM3JlbTtcclxufVxyXG4uc2Nyb2xsZWQtY29udGVudCwgLmNvbnRlbnQge1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBvdmVyZmxvdy15OiBhdXRvO1xyXG59XHJcblxyXG4ubXQtMiB7XHJcbiAgbWFyZ2luLXRvcDogMnJlbTtcclxufVxyXG5cclxuIl19 */\"","import {Component, NgZone, OnDestroy, OnInit} from '@angular/core';\r\nimport {Location} from '@angular/common';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {ActivatedRoute, Router} from '@angular/router';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-seed-phrase',\r\n templateUrl: './seed-phrase.component.html',\r\n styleUrls: ['./seed-phrase.component.scss']\r\n})\r\nexport class SeedPhraseComponent implements OnInit, OnDestroy {\r\n\r\n queryRouting;\r\n seedPhrase = '';\r\n showSeed = false;\r\n wallet_id: number;\r\n seedPhraseCopied = false;\r\n progressWidth = '66%';\r\n\r\n detailsForm = new FormGroup({\r\n name: new FormControl('', [\r\n Validators.required,\r\n (g: FormControl) => {\r\n for (let i = 0; i < this.variablesService.wallets.length; i++) {\r\n if (g.value === this.variablesService.wallets[i].name) {\r\n if (\r\n this.variablesService.wallets[i].wallet_id ===\r\n this.variablesService.currentWallet.wallet_id\r\n ) {\r\n return { same: true };\r\n } else {\r\n return { duplicate: true };\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n ]),\r\n path: new FormControl(''),\r\n });\r\n\r\n seedPhraseForm = new FormGroup(\r\n {\r\n password: new FormControl(\r\n '',\r\n Validators.pattern(this.variablesService.pattern)\r\n ),\r\n confirmPassword: new FormControl(\r\n '',\r\n Validators.pattern(this.variablesService.pattern)\r\n ),\r\n },\r\n { validators: this.checkPasswords }\r\n );\r\n\r\n checkPasswords(group: FormGroup) {\r\n const pass = group.controls.password.value;\r\n const confirmPass = group.controls.confirmPassword.value;\r\n\r\n return pass === confirmPass ? null : { notSame: true };\r\n }\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private location: Location,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.showSeed = false;\r\n this.getWalletId();\r\n this.setWalletInfoNamePath();\r\n }\r\n\r\n private setWalletInfoNamePath() {\r\n this.detailsForm\r\n .get('name')\r\n .setValue(this.variablesService.opening_wallet.name);\r\n this.detailsForm\r\n .get('path')\r\n .setValue(this.variablesService.opening_wallet.path);\r\n }\r\n\r\n private getWalletId() {\r\n this.queryRouting = this.route.queryParams.subscribe(params => {\r\n if (params.wallet_id) {\r\n this.wallet_id = params.wallet_id;\r\n }\r\n });\r\n }\r\n\r\n runWallet() {\r\n let exists = false;\r\n this.variablesService.wallets.forEach((wallet) => {\r\n if (wallet.address === this.variablesService.opening_wallet.address) {\r\n exists = true;\r\n }\r\n });\r\n if (!exists) {\r\n this.backend.runWallet(this.wallet_id, (run_status, run_data) => {\r\n if (run_status) {\r\n this.variablesService.wallets.push(this.variablesService.opening_wallet);\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData();\r\n }\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.wallet_id]);\r\n });\r\n } else {\r\n console.log(run_data['error_code']);\r\n }\r\n });\r\n } else {\r\n this.variablesService.opening_wallet = null;\r\n this.modalService.prepareModal('error', 'OPEN_WALLET.WITH_ADDRESS_ALREADY_OPEN');\r\n this.backend.closeWallet(this.wallet_id, () => {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n });\r\n }\r\n }\r\n\r\n copySeedPhrase() {\r\n this.backend.setClipboard(this.seedPhrase, () => {\r\n this.ngZone.run(() => {\r\n this.seedPhraseCopied = true;\r\n });\r\n });\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n showSeedPhrase() {\r\n this.showSeed = true;\r\n this.progressWidth = '100%';\r\n }\r\n\r\n onSubmitSeed() {\r\n if (this.seedPhraseForm.valid) {\r\n this.showSeedPhrase();\r\n const wallet_id = this.wallet_id;\r\n const seed_password = this.seedPhraseForm.controls.password.value;\r\n this.backend.getSmartWalletInfo(\r\n { wallet_id, seed_password },\r\n (status, data) => {\r\n if (data.hasOwnProperty('seed_phrase')) {\r\n this.ngZone.run(() => {\r\n this.seedPhrase = data['seed_phrase'].trim();\r\n });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.queryRouting.unsubscribe();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n {{ 'CONFIRM.TITLE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      {{ 'CONFIRM.MESSAGE.SEND' | translate }}
      \\r\\n
      {{ +form.get('amount').value }} {{variablesService.defaultCurrency}}
      \\r\\n
      \\r\\n
      \\r\\n
      {{ 'CONFIRM.MESSAGE.FROM' | translate }}
      \\r\\n
      {{ variablesService.currentWallet.address }}
      \\r\\n
      \\r\\n
      \\r\\n
      {{ 'CONFIRM.MESSAGE.TO' | translate }}
      \\r\\n
      {{ form.get('address').value }}
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      {{ 'CONFIRM.MESSAGE.COMMENT' | translate }}
      \\r\\n
      {{ form.get('comment').value }}
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'LOGIN.FORM_ERRORS.PASS_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'LOGIN.FORM_ERRORS.MISMATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: fixed;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: rgba(255, 255, 255, 0.25); }\\n\\n.modal {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n background-position: center;\\n background-size: 200%;\\n padding: 0.3rem 3rem 3rem 3rem;\\n width: 64rem; }\\n\\n.modal .title {\\n padding: 1.4rem 0;\\n font-size: 1.8rem;\\n line-height: 3rem; }\\n\\n.modal .content {\\n display: flex;\\n font-size: 1.4rem; }\\n\\n.modal .content .message-container {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n margin: 1.4rem 3rem 6.2rem 0; }\\n\\n.modal .content .message-container .message-block {\\n display: flex;\\n margin-bottom: 1rem; }\\n\\n.modal .content .message-container .message-block:first-child .message-label {\\n line-height: 4rem; }\\n\\n.modal .content .message-container .message-block:first-child .message-text {\\n line-height: 4rem; }\\n\\n.modal .content .message-container .message-block:last-child {\\n margin-bottom: 0; }\\n\\n.modal .content .message-container .message-block .message-label {\\n min-width: 6.7rem;\\n line-height: 2rem; }\\n\\n.modal .content .message-container .message-block .message-text {\\n overflow-wrap: break-word;\\n margin-left: 4.8rem;\\n width: 43.4rem;\\n line-height: 2rem; }\\n\\n.modal .content .message-container .message-block.confirm-master-pass {\\n width: 100%;\\n margin: 2rem 0; }\\n\\n.modal .content .message-container .message-block.confirm-master-pass .input-block {\\n width: 100%; }\\n\\n.modal .wrapper-buttons {\\n display: flex;\\n align-items: center;\\n justify-content: space-between; }\\n\\n.modal .wrapper-buttons button {\\n width: 100%;\\n max-width: 15rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VuZC1tb2RhbC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzZW5kLW1vZGFsXFxzZW5kLW1vZGFsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixTQUFTO0VBQ1QsT0FBTztFQUNQLFFBQVE7RUFDUixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixxQ0FBcUMsRUFBQTs7QUFFdkM7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QiwyQkFBMkI7RUFDM0IscUJBQXFCO0VBQ3JCLDhCQUE4QjtFQUM5QixZQUFZLEVBQUE7O0FBUGQ7SUFVSSxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFBOztBQVpyQjtJQWdCSSxhQUFhO0lBQ2IsaUJBQWlCLEVBQUE7O0FBakJyQjtNQW9CTSxhQUFhO01BQ2Isc0JBQXNCO01BQ3RCLHVCQUF1QjtNQUN2Qix1QkFBdUI7TUFDdkIsNEJBQTRCLEVBQUE7O0FBeEJsQztRQTJCUSxhQUFhO1FBQ2IsbUJBQW1CLEVBQUE7O0FBNUIzQjtVQWlDWSxpQkFBaUIsRUFBQTs7QUFqQzdCO1VBcUNZLGlCQUFpQixFQUFBOztBQXJDN0I7VUEwQ1UsZ0JBQWdCLEVBQUE7O0FBMUMxQjtVQThDVSxpQkFBaUI7VUFDakIsaUJBQWlCLEVBQUE7O0FBL0MzQjtVQW1EVSx5QkFBeUI7VUFDekIsbUJBQW1CO1VBQ25CLGNBQWM7VUFDZCxpQkFBaUIsRUFBQTs7QUF0RDNCO1VBMERVLFdBQVc7VUFDWCxjQUFjLEVBQUE7O0FBM0R4QjtZQTZEWSxXQUFXLEVBQUE7O0FBN0R2QjtJQXFFSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QixFQUFBOztBQXZFbEM7TUEwRU0sV0FBVztNQUNYLGdCQUFnQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvc2VuZC1tb2RhbC9zZW5kLW1vZGFsLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOmhvc3Qge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB0b3A6IDA7XHJcbiAgYm90dG9tOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XHJcbn1cclxuLm1vZGFsIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcclxuICBiYWNrZ3JvdW5kLXNpemU6IDIwMCU7XHJcbiAgcGFkZGluZzogMC4zcmVtIDNyZW0gM3JlbSAzcmVtO1xyXG4gIHdpZHRoOiA2NHJlbTtcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIHBhZGRpbmc6IDEuNHJlbSAwO1xyXG4gICAgZm9udC1zaXplOiAxLjhyZW07XHJcbiAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICB9XHJcblxyXG4gIC5jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmb250LXNpemU6IDEuNHJlbTtcclxuXHJcbiAgICAubWVzc2FnZS1jb250YWluZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbjogMS40cmVtIDNyZW0gNi4ycmVtIDA7XHJcblxyXG4gICAgICAubWVzc2FnZS1ibG9jayB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xyXG5cclxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcclxuXHJcbiAgICAgICAgICAubWVzc2FnZS1sYWJlbCB7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5tZXNzYWdlLXRleHQge1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNHJlbTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm1lc3NhZ2UtbGFiZWwge1xyXG4gICAgICAgICAgbWluLXdpZHRoOiA2LjdyZW07XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMnJlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5tZXNzYWdlLXRleHQge1xyXG4gICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcclxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0LjhyZW07XHJcbiAgICAgICAgICB3aWR0aDogNDMuNHJlbTtcclxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5jb25maXJtLW1hc3Rlci1wYXNzIHtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgbWFyZ2luOiAycmVtIDA7XHJcbiAgICAgICAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC53cmFwcGVyLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= */\"","import { Component, OnInit, Output, EventEmitter, Input} from '@angular/core';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-send-modal',\r\n templateUrl: './send-modal.component.html',\r\n styleUrls: ['./send-modal.component.scss']\r\n})\r\nexport class SendModalComponent implements OnInit {\r\n\r\n confirmForm = new FormGroup({\r\n password: new FormControl('')\r\n });\r\n\r\n @Input() form: FormGroup;\r\n @Output() confirmed: EventEmitter = new EventEmitter();\r\n\r\n constructor(\r\n public variablesService: VariablesService,\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if(this.variablesService.appPass) {\r\n this.confirmForm.controls['password'].setValidators([Validators.required]);\r\n this.confirmForm.updateValueAndValidity();\r\n }\r\n }\r\n\r\n confirm() {\r\n if(this.variablesService.appPass) {\r\n if (this.confirmForm.controls['password'].value === '') {\r\n this.confirmForm.controls['password'].setErrors({requiredPass: true});\r\n return;\r\n }\r\n this.confirmForm.controls['password'].setErrors({requiredPass: false});\r\n if (this.variablesService.appPass === this.confirmForm.controls['password'].value) {\r\n this.confirmed.emit(true);\r\n } else {\r\n this.confirmForm.controls['password'].setErrors({passwordNotMatch: true})\r\n }\r\n } else {\r\n this.confirmed.emit(true);\r\n }\r\n }\r\n\r\n onClose() {\r\n this.confirmed.emit(false);\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n
      {{item.name}}
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.ADDRESS_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.ADDRESS_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.ALIAS_NOT_VALID' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.AMOUNT_ZERO' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      = variablesService.maxCommentLength\\\">\\r\\n {{ 'SEND.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.AMOUNT_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.FEE_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'SEND.FORM_ERRORS.FEE_MINIMUM' | translate : {fee: variablesService.default_fee} }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n\"","module.exports = \":host {\\n width: 100%; }\\n\\n.form-send .input-blocks-row {\\n display: flex; }\\n\\n.form-send .input-blocks-row > div {\\n flex-basis: 50%; }\\n\\n.form-send .input-blocks-row > div:first-child {\\n margin-right: 1.5rem; }\\n\\n.form-send .input-blocks-row > div:last-child {\\n margin-left: 1.5rem; }\\n\\n.form-send .send-select {\\n display: flex;\\n align-items: center;\\n background: transparent;\\n border: none;\\n font-size: 1.3rem;\\n line-height: 1.3rem;\\n margin: 1.5rem 0 0;\\n padding: 0;\\n width: 100%;\\n max-width: 15rem;\\n height: 1.3rem; }\\n\\n.form-send .send-select .arrow {\\n margin-left: 1rem;\\n width: 0.8rem;\\n height: 0.8rem; }\\n\\n.form-send .send-select .arrow.down {\\n -webkit-mask: url('arrow-down.svg') no-repeat center;\\n mask: url('arrow-down.svg') no-repeat center; }\\n\\n.form-send .send-select .arrow.up {\\n -webkit-mask: url('arrow-up.svg') no-repeat center;\\n mask: url('arrow-up.svg') no-repeat center; }\\n\\n.form-send .additional-details {\\n display: flex;\\n margin-top: 1.5rem;\\n padding: 0.5rem 0 2rem; }\\n\\n.form-send .additional-details > div {\\n flex-basis: 25%; }\\n\\n.form-send .additional-details > div:first-child {\\n padding-left: 1.5rem;\\n padding-right: 1rem; }\\n\\n.form-send .additional-details > div:last-child {\\n padding-left: 1rem;\\n padding-right: 1.5rem; }\\n\\n.form-send .additional-details .checkbox-block {\\n flex-basis: 50%; }\\n\\n.form-send .additional-details .checkbox-block > label {\\n top: 3.5rem; }\\n\\n.form-send .additional-details .checkbox-block.disabled-checkbox-block label {\\n cursor: not-allowed; }\\n\\n.form-send .additional-details .checkbox-block.disabled-checkbox-block label:before {\\n background-color: #556576;\\n border: 0.1rem solid #556576; }\\n\\n.form-send button {\\n margin: 2.4rem 0;\\n width: 100%;\\n max-width: 15rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2VuZC9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzZW5kXFxzZW5kLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsV0FBVyxFQUFBOztBQUdiO0VBR0ksYUFBYSxFQUFBOztBQUhqQjtJQU1NLGVBQWUsRUFBQTs7QUFOckI7TUFTUSxvQkFBb0IsRUFBQTs7QUFUNUI7TUFhUSxtQkFBbUIsRUFBQTs7QUFiM0I7RUFtQkksYUFBYTtFQUNiLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsWUFBWTtFQUNaLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLFVBQVU7RUFDVixXQUFXO0VBQ1gsZ0JBQWdCO0VBQ2hCLGNBQWMsRUFBQTs7QUE3QmxCO0lBZ0NNLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsY0FBYyxFQUFBOztBQWxDcEI7TUFxQ1Esb0RBQTREO2NBQTVELDRDQUE0RCxFQUFBOztBQXJDcEU7TUF5Q1Esa0RBQTBEO2NBQTFELDBDQUEwRCxFQUFBOztBQXpDbEU7RUErQ0ksYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixzQkFBc0IsRUFBQTs7QUFqRDFCO0lBb0RNLGVBQWUsRUFBQTs7QUFwRHJCO01BdURRLG9CQUFvQjtNQUNwQixtQkFBbUIsRUFBQTs7QUF4RDNCO01BNERRLGtCQUFrQjtNQUNsQixxQkFBcUIsRUFBQTs7QUE3RDdCO0lBa0VNLGVBQWUsRUFBQTs7QUFsRXJCO01BcUVRLFdBQVcsRUFBQTs7QUFyRW5CO01BeUVVLG1CQUFtQixFQUFBOztBQXpFN0I7UUEyRVkseUJBQXlCO1FBQ3pCLDRCQUE0QixFQUFBOztBQTVFeEM7RUFvRkksZ0JBQWdCO0VBQ2hCLFdBQVc7RUFDWCxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3NlbmQvc2VuZC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLmZvcm0tc2VuZCB7XHJcblxyXG4gIC5pbnB1dC1ibG9ja3Mtcm93IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgPiBkaXYge1xyXG4gICAgICBmbGV4LWJhc2lzOiA1MCU7XHJcblxyXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMS41cmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuc2VuZC1zZWxlY3Qge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogMS41cmVtIDAgMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTVyZW07XHJcbiAgICBoZWlnaHQ6IDEuM3JlbTtcclxuXHJcbiAgICAuYXJyb3cge1xyXG4gICAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICAgICAgd2lkdGg6IDAuOHJlbTtcclxuICAgICAgaGVpZ2h0OiAwLjhyZW07XHJcblxyXG4gICAgICAmLmRvd24ge1xyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1kb3duLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi51cCB7XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2Fycm93LXVwLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZGl0aW9uYWwtZGV0YWlscyB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMS41cmVtO1xyXG4gICAgcGFkZGluZzogMC41cmVtIDAgMnJlbTtcclxuXHJcbiAgICA+IGRpdiB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDI1JTtcclxuXHJcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5jaGVja2JveC1ibG9jayB7XHJcbiAgICAgIGZsZXgtYmFzaXM6IDUwJTtcclxuXHJcbiAgICAgID4gbGFiZWwge1xyXG4gICAgICAgIHRvcDogMy41cmVtO1xyXG4gICAgICB9XHJcbiAgICAgICYuZGlzYWJsZWQtY2hlY2tib3gtYmxvY2sge1xyXG4gICAgICAgIGxhYmVsIHtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTY1NzY7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMC4xcmVtIHNvbGlkICM1NTY1NzY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b24ge1xyXG4gICAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWF4LXdpZHRoOiAxNXJlbTtcclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, OnInit, OnDestroy, NgZone, HostListener, Input} from '@angular/core';\r\nimport {FormGroup, FormControl, Validators} from '@angular/forms';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {BigNumber} from 'bignumber.js';\r\nimport {MIXIN} from '../_shared/constants'\r\n\r\n@Component({\r\n selector: 'app-send',\r\n templateUrl: './send.component.html',\r\n styleUrls: ['./send.component.scss']\r\n})\r\nexport class SendComponent implements OnInit, OnDestroy {\r\n\r\n isOpen = false;\r\n localAliases = [];\r\n isModalDialogVisible = false;\r\n hideWalletAddress = false;\r\n mixin: number;\r\n\r\n currentWalletId = null;\r\n parentRouting;\r\n sendForm = new FormGroup({\r\n address: new FormControl('', [Validators.required, (g: FormControl) => {\r\n this.localAliases = [];\r\n if (g.value) {\r\n if (g.value.indexOf('@') !== 0) {\r\n this.isOpen = false;\r\n this.backend.validateAddress(g.value, (valid_status) => {\r\n this.ngZone.run(() => {\r\n if (valid_status === false) {\r\n g.setErrors(Object.assign({'address_not_valid': true}, g.errors));\r\n } else {\r\n if (g.hasError('address_not_valid')) {\r\n delete g.errors['address_not_valid'];\r\n if (Object.keys(g.errors).length === 0) {\r\n g.setErrors(null);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n return (g.hasError('address_not_valid')) ? {'address_not_valid': true} : null;\r\n } else {\r\n this.isOpen = true;\r\n this.localAliases = this.variablesService.aliases.filter((item) => {\r\n return item.name.indexOf(g.value) > -1;\r\n });\r\n if (!(/^@?[a-z0-9\\.\\-]{6,25}$/.test(g.value))) {\r\n g.setErrors(Object.assign({'alias_not_valid': true}, g.errors));\r\n } else {\r\n this.backend.getAliasByName(g.value.replace('@', ''), (alias_status) => {\r\n this.ngZone.run(() => {\r\n if (alias_status) {\r\n if (g.hasError('alias_not_valid')) {\r\n delete g.errors['alias_not_valid'];\r\n if (Object.keys(g.errors).length === 0) {\r\n g.setErrors(null);\r\n }\r\n }\r\n } else {\r\n g.setErrors(Object.assign({'alias_not_valid': true}, g.errors));\r\n }\r\n });\r\n });\r\n }\r\n return (g.hasError('alias_not_valid')) ? {'alias_not_valid': true} : null;\r\n }\r\n }\r\n return null;\r\n }]),\r\n amount: new FormControl(null, [Validators.required, (g: FormControl) => {\r\n if (new BigNumber(g.value).eq(0)) {\r\n return {'zero': true};\r\n }\r\n return null;\r\n }]),\r\n comment: new FormControl(''),\r\n mixin: new FormControl(MIXIN, Validators.required),\r\n fee: new FormControl(this.variablesService.default_fee, [Validators.required, (g: FormControl) => {\r\n if ((new BigNumber(g.value)).isLessThan(this.variablesService.default_fee)) {\r\n return {'less_min': true};\r\n }\r\n return null;\r\n }]),\r\n hide: new FormControl(false)\r\n });\r\n additionalOptions = false;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone\r\n ) {\r\n }\r\n\r\n addressMouseDown(e) {\r\n if (e['button'] === 0 && this.sendForm.get('address').value && this.sendForm.get('address').value.indexOf('@') === 0) {\r\n this.isOpen = true;\r\n }\r\n }\r\n\r\n setAlias(alias) {\r\n this.sendForm.get('address').setValue(alias);\r\n }\r\n\r\n @HostListener('document:click', ['$event.target'])\r\n public onClick(targetElement) {\r\n if (targetElement.id !== 'send-address' && this.isOpen) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(params => {\r\n this.currentWalletId = params['id'];\r\n this.mixin = this.variablesService.currentWallet.send_data['mixin'] || MIXIN;\r\n if (this.variablesService.currentWallet.is_auditable) {\r\n this.mixin = 0;\r\n this.sendForm.controls['mixin'].disable();\r\n }\r\n this.hideWalletAddress = this.variablesService.currentWallet.is_auditable && !this.variablesService.currentWallet.is_watch_only;\r\n if (this.hideWalletAddress) {\r\n this.sendForm.controls['hide'].disable();\r\n }\r\n this.sendForm.reset({\r\n address: this.variablesService.currentWallet.send_data['address'],\r\n amount: this.variablesService.currentWallet.send_data['amount'],\r\n comment: this.variablesService.currentWallet.send_data['comment'],\r\n mixin: this.mixin,\r\n fee: this.variablesService.currentWallet.send_data['fee'] || this.variablesService.default_fee,\r\n hide: this.variablesService.currentWallet.send_data['hide'] || false\r\n });\r\n });\r\n }\r\n\r\n showDialog() {\r\n this.isModalDialogVisible = true;\r\n }\r\n\r\n confirmed(confirmed: boolean) {\r\n if (confirmed) {\r\n this.onSend();\r\n }\r\n this.isModalDialogVisible = false;\r\n }\r\n\r\n onSend() {\r\n if (this.sendForm.valid) {\r\n if (this.sendForm.get('address').value.indexOf('@') !== 0) {\r\n this.backend.validateAddress(this.sendForm.get('address').value, (valid_status) => {\r\n if (valid_status === false) {\r\n this.ngZone.run(() => {\r\n this.sendForm.get('address').setErrors({'address_not_valid': true});\r\n });\r\n } else {\r\n this.backend.sendMoney(\r\n this.currentWalletId,\r\n this.sendForm.get('address').value,\r\n this.sendForm.get('amount').value,\r\n this.sendForm.get('fee').value,\r\n this.sendForm.get('mixin').value,\r\n this.sendForm.get('comment').value,\r\n this.sendForm.get('hide').value,\r\n (send_status) => {\r\n if (send_status) {\r\n this.modalService.prepareModal('success', 'SEND.SUCCESS_SENT');\r\n this.variablesService.currentWallet.send_data = {address: null, amount: null, comment: null, mixin: null, fee: null, hide: null};\r\n this.sendForm.reset({address: null, amount: null, comment: null, mixin: this.mixin, fee: this.variablesService.default_fee, hide: false});\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.backend.getAliasByName(this.sendForm.get('address').value.replace('@', ''), (alias_status, alias_data) => {\r\n this.ngZone.run(() => {\r\n if (alias_status === false) {\r\n this.ngZone.run(() => {\r\n this.sendForm.get('address').setErrors({'alias_not_valid': true});\r\n });\r\n } else {\r\n this.backend.sendMoney(\r\n this.currentWalletId,\r\n alias_data.address, // this.sendForm.get('address').value,\r\n this.sendForm.get('amount').value,\r\n this.sendForm.get('fee').value,\r\n this.sendForm.get('mixin').value,\r\n this.sendForm.get('comment').value,\r\n this.sendForm.get('hide').value,\r\n (send_status) => {\r\n if (send_status) {\r\n this.modalService.prepareModal('success', 'SEND.SUCCESS_SENT');\r\n this.variablesService.currentWallet.send_data = {address: null, amount: null, comment: null, mixin: null, fee: null, hide: null};\r\n this.sendForm.reset({address: null, amount: null, comment: null, mixin: this.mixin, fee: this.variablesService.default_fee, hide: false});\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n toggleOptions() {\r\n this.additionalOptions = !this.additionalOptions;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n this.variablesService.currentWallet.send_data = {\r\n address: this.sendForm.get('address').value,\r\n amount: this.sendForm.get('amount').value,\r\n comment: this.sendForm.get('comment').value,\r\n mixin: this.sendForm.get('mixin').value,\r\n fee: this.sendForm.get('fee').value,\r\n hide: this.sendForm.get('hide').value\r\n };\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n

      {{ 'SETTINGS.TITLE' | translate }}

      \\r\\n\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n {{item.language | translate}}\\r\\n \\r\\n \\r\\n {{item.language | translate}}\\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n {{item.name | translate}}\\r\\n \\r\\n \\r\\n {{item.name | translate}}\\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n {{ 'SETTINGS.MASTER_PASSWORD.TITLE' | translate }}\\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n {{ 'SETTINGS.FORM_ERRORS.PASS_NOT_MATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'ERRORS.WRONG_PASSWORD' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n {{ 'SETTINGS.FORM_ERRORS.CONFIRM_NOT_MATCH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      {{ 'SETTINGS.LAST_BUILD' | translate : {value: currentBuild} }}
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \".head {\\n justify-content: flex-end; }\\n\\n.settings-title {\\n font-size: 1.7rem; }\\n\\n.theme-selection {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n margin: 2.4rem 0;\\n width: 50%; }\\n\\n.theme-selection .radio-block {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n font-size: 1.3rem;\\n line-height: 2.7rem; }\\n\\n.lock-selection {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n margin: 2.4rem 0;\\n width: 50%; }\\n\\n.lock-selection .lock-selection-title {\\n display: flex;\\n font-size: 1.5rem;\\n line-height: 2.7rem;\\n margin-bottom: 1rem; }\\n\\n.scale-selection {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n padding: 0 0 4rem;\\n width: 50%;\\n height: 0.5rem; }\\n\\n.scale-selection .button-block {\\n position: relative;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex: 1 0 auto;\\n margin: 0 0.2rem;\\n padding: 0;\\n height: 0.5rem; }\\n\\n.scale-selection .button-block .label {\\n position: absolute;\\n bottom: -1rem;\\n left: 50%;\\n transform: translate(-50%, 100%);\\n font-size: 1rem;\\n white-space: nowrap; }\\n\\n.master-password {\\n width: 50%; }\\n\\n.master-password .master-password-title {\\n display: flex;\\n font-size: 1.5rem;\\n line-height: 2.7rem;\\n margin-bottom: 1rem; }\\n\\n.master-password button {\\n margin: 2.5rem auto;\\n width: 100%;\\n max-width: 15rem; }\\n\\n.last-build {\\n font-size: 1rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2V0dGluZ3MvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcc2V0dGluZ3NcXHNldHRpbmdzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUJBQXlCLEVBQUE7O0FBRzNCO0VBQ0UsaUJBQWlCLEVBQUE7O0FBR25CO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qix1QkFBdUI7RUFDdkIsZ0JBQWdCO0VBQ2hCLFVBQVUsRUFBQTs7QUFMWjtJQVFJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsMkJBQTJCO0lBQzNCLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBQTs7QUFJdkI7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLHVCQUF1QjtFQUN2QixnQkFBZ0I7RUFDaEIsVUFBVSxFQUFBOztBQUxaO0lBUUksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUE7O0FBSXZCO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsaUJBQWlCO0VBQ2pCLFVBQVU7RUFDVixjQUFjLEVBQUE7O0FBTmhCO0lBU0ksa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGNBQWMsRUFBQTs7QUFoQmxCO01BbUJNLGtCQUFrQjtNQUNsQixhQUFhO01BQ2IsU0FBUztNQUNULGdDQUFnQztNQUNoQyxlQUFlO01BQ2YsbUJBQW1CLEVBQUE7O0FBS3pCO0VBQ0UsVUFBVSxFQUFBOztBQURaO0lBSUksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUE7O0FBUHZCO0lBV0ksbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxnQkFBZ0IsRUFBQTs7QUFJcEI7RUFDRSxlQUFlLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIi5oZWFkIHtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG59XHJcblxyXG4uc2V0dGluZ3MtdGl0bGUge1xyXG4gIGZvbnQtc2l6ZTogMS43cmVtO1xyXG59XHJcblxyXG4udGhlbWUtc2VsZWN0aW9uIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XHJcbiAgbWFyZ2luOiAyLjRyZW0gMDtcclxuICB3aWR0aDogNTAlO1xyXG5cclxuICAucmFkaW8tYmxvY2sge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07XHJcbiAgfVxyXG59XHJcblxyXG4ubG9jay1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICBtYXJnaW46IDIuNHJlbSAwO1xyXG4gIHdpZHRoOiA1MCU7XHJcblxyXG4gIC5sb2NrLXNlbGVjdGlvbi10aXRsZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5zY2FsZS1zZWxlY3Rpb24ge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgcGFkZGluZzogMCAwIDRyZW07XHJcbiAgd2lkdGg6IDUwJTtcclxuICBoZWlnaHQ6IDAuNXJlbTtcclxuXHJcbiAgLmJ1dHRvbi1ibG9jayB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgZmxleDogMSAwIGF1dG87XHJcbiAgICBtYXJnaW46IDAgMC4ycmVtO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGhlaWdodDogMC41cmVtO1xyXG5cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAtMXJlbTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAxMDAlKTtcclxuICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm1hc3Rlci1wYXNzd29yZCB7XHJcbiAgd2lkdGg6IDUwJTtcclxuXHJcbiAgLm1hc3Rlci1wYXNzd29yZC10aXRsZSB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcclxuICB9XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBtYXJnaW46IDIuNXJlbSBhdXRvO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gIH1cclxufVxyXG5cclxuLmxhc3QtYnVpbGQge1xyXG4gIGZvbnQtc2l6ZTogMXJlbTtcclxufVxyXG4iXX0= */\"","import {Component, NgZone, OnInit, Renderer2} from '@angular/core';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport {Location} from '@angular/common';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport {UtilsService} from '../_helpers/services/utils.service';\r\n\r\n@Component({\r\n selector: 'app-settings',\r\n templateUrl: './settings.component.html',\r\n styleUrls: ['./settings.component.scss'],\r\n providers: [UtilsService]\r\n})\r\nexport class SettingsComponent implements OnInit {\r\n\r\n theme: string;\r\n scale: number;\r\n changeForm: any;\r\n languagesOptions = [\r\n {\r\n name: 'en',\r\n language: 'SETTINGS.LANGUAGE.EN'\r\n },\r\n {\r\n name: 'fr',\r\n language: 'SETTINGS.LANGUAGE.FR'\r\n },\r\n {\r\n name: 'de',\r\n language: 'SETTINGS.LANGUAGE.DE'\r\n },\r\n {\r\n name: 'it',\r\n language: 'SETTINGS.LANGUAGE.IT'\r\n },\r\n {\r\n name: 'pt',\r\n language: 'SETTINGS.LANGUAGE.PT'\r\n }\r\n ];\r\n appLockOptions = [\r\n {\r\n id: 5,\r\n name: 'SETTINGS.APP_LOCK.TIME1'\r\n },\r\n {\r\n id: 15,\r\n name: 'SETTINGS.APP_LOCK.TIME2'\r\n },\r\n {\r\n id: 60,\r\n name: 'SETTINGS.APP_LOCK.TIME3'\r\n },\r\n {\r\n id: 0,\r\n name: 'SETTINGS.APP_LOCK.TIME4'\r\n }\r\n ];\r\n appScaleOptions = [\r\n {\r\n id: 7.5,\r\n name: 'SETTINGS.SCALE.75'\r\n },\r\n {\r\n id: 10,\r\n name: 'SETTINGS.SCALE.100'\r\n },\r\n {\r\n id: 12.5,\r\n name: 'SETTINGS.SCALE.125'\r\n },\r\n {\r\n id: 15,\r\n name: 'SETTINGS.SCALE.150'\r\n }\r\n ];\r\n appLogOptions = [\r\n {\r\n id: -1\r\n },\r\n {\r\n id: 0\r\n },\r\n {\r\n id: 1\r\n },\r\n {\r\n id: 2\r\n },\r\n {\r\n id: 3\r\n },\r\n {\r\n id: 4\r\n }\r\n ];\r\n\r\n currentBuild = '';\r\n appPass: any;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n public variablesService: VariablesService,\r\n private backend: BackendService,\r\n private location: Location,\r\n public translate: TranslateService,\r\n private ngZone: NgZone,\r\n private utilsService: UtilsService\r\n ) {\r\n this.theme = this.variablesService.settings.theme;\r\n this.scale = this.variablesService.settings.scale;\r\n this.changeForm = new FormGroup({\r\n password: new FormControl(''),\r\n new_password: new FormControl('', Validators.pattern(this.variablesService.pattern)),\r\n new_confirmation: new FormControl('')\r\n }, [(g: FormGroup) => {\r\n return g.get('new_password').value === g.get('new_confirmation').value ? null : {'confirm_mismatch': true};\r\n }, (g: FormGroup) => {\r\n if (this.variablesService.appPass) {\r\n return g.get('password').value === this.variablesService.appPass ? null : {'pass_mismatch': true};\r\n }\r\n return null;\r\n }]);\r\n }\r\n\r\n ngOnInit() {\r\n this.backend.getVersion((version, type) => {\r\n this.ngZone.run(() => {\r\n this.currentBuild = version;\r\n this.variablesService.testnet = false;\r\n if (type == 'testnet')\r\n {\r\n this.currentBuild += ' TESTNET';\r\n this.variablesService.testnet = true;\r\n }\r\n this.variablesService.networkType = type;\r\n });\r\n });\r\n }\r\n\r\n setTheme(theme) {\r\n this.renderer.removeClass(document.body, 'theme-' + this.theme);\r\n this.theme = theme;\r\n this.variablesService.settings.theme = this.theme;\r\n this.renderer.addClass(document.body, 'theme-' + this.theme);\r\n this.backend.storeAppData();\r\n }\r\n\r\n setScale(scale) {\r\n this.scale = scale;\r\n this.variablesService.settings.scale = this.scale;\r\n const width = this.utilsService.getMinWidthByScale(this.scale);\r\n const app = document.documentElement.querySelector('app-root');\r\n this.renderer.setStyle(app, 'min-width', width + 'px');\r\n this.renderer.setStyle(document.documentElement, 'font-size', this.scale + 'px');\r\n this.backend.storeAppData();\r\n }\r\n\r\n onSubmitChangePass() {\r\n if (this.changeForm.valid) {\r\n this.variablesService.appPass = this.changeForm.get('new_password').value;\r\n if (this.variablesService.appPass) {\r\n this.backend.setMasterPassword({pass: this.variablesService.appPass}, (status, data) => {\r\n if (status) {\r\n this.backend.storeSecureAppData({pass: this.variablesService.appPass});\r\n this.variablesService.appLogin = true;\r\n this.variablesService.dataIsLoaded = true;\r\n if (this.variablesService.settings.appLockTime) {\r\n this.variablesService.startCountdown();\r\n }\r\n } else {\r\n console.log(data['error_code']);\r\n }\r\n });\r\n } else {\r\n this.backend.dropSecureAppData();\r\n }\r\n this.changeForm.reset();\r\n }\r\n }\r\n\r\n onLockChange() {\r\n if (this.variablesService.appLogin && this.variablesService.settings.appLockTime) {\r\n this.variablesService.restartCountdown();\r\n }\r\n this.backend.storeAppData();\r\n }\r\n\r\n onLogChange() {\r\n this.backend.setLogLevel(this.variablesService.settings.appLog);\r\n this.backend.storeAppData();\r\n }\r\n\r\n onLanguageChange() {\r\n this.translate.use(this.variablesService.settings.language);\r\n this.backend.storeAppData();\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n

      {{ 'SIDEBAR.TITLE' | translate }}

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n Auditable\\r\\n
      \\r\\n
      \\r\\n Watch-only\\r\\n
      \\r\\n
      \\r\\n Tracking\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n {{ 'SIDEBAR.LOG_OUT' | translate }}\\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.OFFLINE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.SYNCING' | translate }} {{ variablesService.height_app }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.height_max }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.ONLINE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.LOADING' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.ERROR' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.COMPLETE' | translate }}\\r\\n \\r\\n \\r\\n {{ 'SIDEBAR.SYNCHRONIZATION.DOWNLOADING' | translate }} {{ variablesService.downloaded }}{{ 'SIDEBAR.SYNCHRONIZATION.SLASH' | translate }}{{ variablesService.total }}{{ 'SIDEBAR.SYNCHRONIZATION.MB' | translate }}\\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      {{ variablesService.sync.progress_value_text }}%
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      {{ variablesService.download.progress_value_text }}%
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.STANDARD' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT' | translate }}\\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.CRITICAL' | translate }}\\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.IMPORTANT_HINT' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{ 'SIDEBAR.UPDATE.TIME' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n\\r\\n\"","module.exports = \":host {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n flex: 0 0 25rem;\\n padding: 0 3rem;\\n max-width: 25rem; }\\n\\n.animated {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-right: 1.2rem; }\\n\\n.animated::ng-deep svg {\\n width: 2rem;\\n height: 2rem; }\\n\\n.animated::ng-deep svg path, .animated::ng-deep svg circle, .animated::ng-deep svg polygon {\\n fill: #4db1ff; }\\n\\n.wallet-type {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 7px;\\n height: 100%;\\n background-color: transparent;\\n transition: all ease .3s;\\n overflow: hidden; }\\n\\n.wallet-type:hover {\\n width: 28px; }\\n\\n.wallet-type .content {\\n height: 100%;\\n padding: 7px;\\n font-size: 12px;\\n line-height: 14px;\\n font-weight: 500;\\n color: #ffffff;\\n text-decoration: none;\\n text-transform: capitalize;\\n transition: all ease .3s;\\n writing-mode: vertical-rl;\\n text-orientation: mixed; }\\n\\n.wallet-type .content.auditable {\\n background-color: #5cda9d; }\\n\\n.wallet-type .content.watch-only, .wallet-type .content.auditable-watch-only {\\n background-color: #8686ff; }\\n\\n.sidebar-accounts {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex: 1 1 auto; }\\n\\n.sidebar-accounts .sidebar-accounts-header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n flex: 0 0 auto;\\n height: 8rem;\\n font-weight: 400; }\\n\\n.sidebar-accounts .sidebar-accounts-header h3 {\\n font-size: 1.7rem; }\\n\\n.sidebar-accounts .sidebar-accounts-header button {\\n background: transparent;\\n border: none;\\n outline: none; }\\n\\n.sidebar-accounts .sidebar-accounts-list {\\n display: flex;\\n flex-direction: column;\\n flex: 1 1 auto;\\n margin: 0 -3rem;\\n overflow-y: auto; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n flex-shrink: 0;\\n cursor: pointer;\\n padding: 2.5rem 3rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper {\\n display: flex;\\n justify-content: flex-end;\\n position: relative; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button {\\n display: flex;\\n position: absolute;\\n top: -12px;\\n right: -18px;\\n padding: 0;\\n height: auto;\\n background: transparent;\\n border: none; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon {\\n width: 1.3rem;\\n height: 1.3rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon.close-wallet {\\n background-color: transparent; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .close-wallet-wrapper button .icon.close-wallet::after {\\n display: block;\\n content: '';\\n background: url('close-wallet-blue.svg') no-repeat center;\\n width: 13px;\\n height: 13px; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row {\\n display: flex;\\n align-items: center;\\n justify-content: space-between; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance {\\n line-height: 2.7rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance .title {\\n font-size: 1.5rem;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n white-space: nowrap; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-title-balance .balance {\\n font-size: 1.8rem;\\n font-weight: 600;\\n white-space: nowrap; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias {\\n font-size: 1.3rem;\\n line-height: 3.4rem;\\n margin-bottom: 0.7rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .name {\\n display: flex;\\n align-items: center;\\n flex-shrink: 1;\\n line-height: 1.6rem;\\n padding-right: 1rem;\\n overflow: hidden; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .name span {\\n text-overflow: ellipsis;\\n overflow: hidden;\\n white-space: nowrap; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .price {\\n flex-shrink: 0; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-alias .icon {\\n margin-left: 0.5rem;\\n width: 1.3rem;\\n height: 1.3rem;\\n border-radius: 50%;\\n color: #1a1a1a;\\n font-size: 9px;\\n font-weight: 700;\\n line-height: 9px;\\n padding-right: 1px;\\n display: flex;\\n align-items: center;\\n justify-content: center; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-staking {\\n line-height: 2.9rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-staking .text {\\n font-size: 1.3rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages {\\n line-height: 2.7rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages .text {\\n font-size: 1.3rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-messages .indicator {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 1rem;\\n font-size: 1rem;\\n min-width: 2.4rem;\\n height: 1.6rem;\\n padding: 0 0.5rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization {\\n flex-direction: column;\\n height: 5.6rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .status {\\n align-self: flex-start;\\n font-size: 1.3rem;\\n line-height: 2.6rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container {\\n display: flex;\\n margin: 0.4rem 0;\\n height: 0.7rem;\\n width: 100%; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-bar {\\n flex: 1 0 auto; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-bar .fill {\\n height: 100%; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization .progress-bar-container .progress-percent {\\n flex: 0 0 auto;\\n font-size: 1.3rem;\\n line-height: 0.7rem;\\n padding-left: 0.7rem; }\\n\\n.sidebar-accounts .sidebar-accounts-list .sidebar-account:focus {\\n outline: none; }\\n\\n.sidebar-accounts:after {\\n content: '';\\n position: absolute;\\n bottom: 0;\\n left: -3rem;\\n width: calc(100% + 6rem);\\n height: 5rem; }\\n\\n.sidebar-settings {\\n flex: 0 0 auto;\\n padding-bottom: 1rem; }\\n\\n.sidebar-settings .wrap-button {\\n margin: 0 -3rem; }\\n\\n.sidebar-settings .wrap-button button {\\n display: flex;\\n align-items: center;\\n background: transparent;\\n border: none;\\n font-weight: 400;\\n line-height: 3rem;\\n outline: none;\\n padding: 0 3rem;\\n width: 100%; }\\n\\n.sidebar-settings .wrap-button button.disabled {\\n cursor: url('not-allowed.svg'), not-allowed; }\\n\\n.sidebar-settings .wrap-button button .icon {\\n margin-right: 1.2rem;\\n width: 2rem;\\n height: 2rem; }\\n\\n.sidebar-settings .wrap-button button .icon.contacts {\\n -webkit-mask: url('contacts.svg') no-repeat center;\\n mask: url('contacts.svg') no-repeat center; }\\n\\n.sidebar-settings .wrap-button button .icon.settings {\\n -webkit-mask: url('settings.svg') no-repeat center;\\n mask: url('settings.svg') no-repeat center; }\\n\\n.sidebar-settings .wrap-button button .icon.logout {\\n -webkit-mask: url('logout.svg') no-repeat center;\\n mask: url('logout.svg') no-repeat center; }\\n\\n.synchronization-status {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n flex: 0 0 7rem;\\n font-size: 1.3rem; }\\n\\n.synchronization-status .status-container {\\n position: relative;\\n flex-grow: 1;\\n text-align: left; }\\n\\n.synchronization-status .status-container .offline, .synchronization-status .status-container .online {\\n position: relative;\\n display: block;\\n line-height: 1.2rem;\\n padding-left: 2.2rem; }\\n\\n.synchronization-status .status-container .offline:before, .synchronization-status .status-container .online:before {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n border-radius: 50%;\\n width: 1.2rem;\\n height: 1.2rem; }\\n\\n.synchronization-status .status-container .syncing, .synchronization-status .status-container .loading {\\n line-height: 5rem; }\\n\\n.synchronization-status .status-container .progress-bar-container {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n height: 0.7rem;\\n width: 100%; }\\n\\n.synchronization-status .status-container .progress-bar-container .syncing {\\n display: flex; }\\n\\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\\n flex: 1 0 auto; }\\n\\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\\n height: 100%; }\\n\\n.synchronization-status .status-container .progress-bar-container .syncing .progress-percent {\\n flex: 0 0 auto;\\n font-size: 1.3rem;\\n line-height: 0.7rem;\\n padding-left: 0.7rem; }\\n\\n.synchronization-status .status-container .progress-bar-container .loading {\\n -webkit-animation: move 5s linear infinite;\\n animation: move 5s linear infinite;\\n background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.125, rgba(0, 0, 0, 0.15)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.1)), color-stop(0.375, rgba(0, 0, 0, 0.1)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.15)), color-stop(0.625, rgba(0, 0, 0, 0.15)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.1)), color-stop(0.875, rgba(0, 0, 0, 0.1)), color-stop(0.875, transparent), to(transparent)), -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.125, rgba(0, 0, 0, 0.3)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.25)), color-stop(0.375, rgba(0, 0, 0, 0.25)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.3)), color-stop(0.625, rgba(0, 0, 0, 0.3)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.25)), color-stop(0.875, rgba(0, 0, 0, 0.25)), color-stop(0.875, transparent), to(transparent));\\n background-size: 7rem 7rem;\\n height: 100%; }\\n\\n.synchronization-status .update-container {\\n display: flex;\\n flex-grow: 1;\\n margin-left: 1rem;\\n text-align: right; }\\n\\n.synchronization-status .update-container .update-text {\\n flex: 1 1 auto;\\n font-size: 1.2rem;\\n line-height: 1.8rem;\\n text-align: left; }\\n\\n.synchronization-status .update-container .update-text.time {\\n font-size: 1.1rem; }\\n\\n.synchronization-status .update-container .icon {\\n flex: 1 0 auto;\\n margin: 0.3rem 0 0 0.6rem;\\n width: 1.2rem;\\n height: 1.2rem; }\\n\\n.synchronization-status .update-container .icon.update {\\n -webkit-mask: url('update.svg') no-repeat center;\\n mask: url('update.svg') no-repeat center; }\\n\\n.synchronization-status .update-container .icon.time {\\n -webkit-mask: url('time.svg') no-repeat center;\\n mask: url('time.svg') no-repeat center; }\\n\\n@-webkit-keyframes move {\\n 0% {\\n background-position: 100% -7rem; }\\n 100% {\\n background-position: 100% 7rem; } }\\n\\n@keyframes move {\\n 0% {\\n background-position: 100% -7rem; }\\n 100% {\\n background-position: 100% 7rem; } }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc2lkZWJhci9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzaWRlYmFyXFxzaWRlYmFyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qiw4QkFBOEI7RUFDOUIsZUFBZTtFQUNmLGVBQWU7RUFDZixnQkFBZ0IsRUFBQTs7QUFHbEI7RUFDRSxhQUFhO0VBQ2IsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBQTs7QUFKdEI7SUFRSSxXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQVRoQjtNQVlNLGFBQWEsRUFBQTs7QUFJbkI7RUFDRSxrQkFBa0I7RUFDbEIsTUFBTTtFQUNOLE9BQU87RUFDUCxVQUFVO0VBQ1YsWUFBWTtFQUNaLDZCQUE2QjtFQUM3Qix3QkFBd0I7RUFDeEIsZ0JBQWdCLEVBQUE7O0FBUmxCO0lBVUksV0FBVyxFQUFBOztBQVZmO0lBYUksWUFBWTtJQUNaLFlBQVk7SUFDWixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLHVCQUF1QixFQUFBOztBQXZCM0I7TUF5Qk0seUJBQXlCLEVBQUE7O0FBekIvQjtNQTRCTSx5QkFBeUIsRUFBQTs7QUFJL0I7RUFDRSxrQkFBa0I7RUFDbEIsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixjQUFjLEVBQUE7O0FBSmhCO0lBT0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsY0FBYztJQUNkLFlBQVk7SUFDWixnQkFBZ0IsRUFBQTs7QUFacEI7TUFlTSxpQkFBaUIsRUFBQTs7QUFmdkI7TUFtQk0sdUJBQXVCO01BQ3ZCLFlBQVk7TUFDWixhQUFhLEVBQUE7O0FBckJuQjtJQTBC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Z0RBQXlEO2dCQUF6RCx3Q0FBeUQsRUFBQTs7QUFsSGpFO1FBc0hRLDhDQUF1RDtnQkFBdkQsc0NBQXVELEVBQUE7O0FBTS9EO0VBQ0U7SUFDRSwrQkFBK0IsRUFBQTtFQUVqQztJQUNFLDhCQUE4QixFQUFBLEVBQUE7O0FBTGxDO0VBQ0U7SUFDRSwrQkFBK0IsRUFBQTtFQUVqQztJQUNFLDhCQUE4QixFQUFBLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBmbGV4OiAwIDAgMjVyZW07XHJcbiAgcGFkZGluZzogMCAzcmVtO1xyXG4gIG1heC13aWR0aDogMjVyZW07XHJcbn1cclxuXHJcbi5hbmltYXRlZCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG5cclxuICAmOjpuZy1kZWVwIHN2ZyB7XHJcblxyXG4gICAgd2lkdGg6IDJyZW07XHJcbiAgICBoZWlnaHQ6IDJyZW07XHJcblxyXG4gICAgcGF0aCwgY2lyY2xlLCBwb2x5Z29uIHtcclxuICAgICAgZmlsbDogIzRkYjFmZjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLndhbGxldC10eXBlIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgd2lkdGg6IDdweDtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgLjNzO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgJjpob3ZlciB7XHJcbiAgICB3aWR0aDogMjhweDtcclxuICB9XHJcbiAgLmNvbnRlbnQge1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgcGFkZGluZzogN3B4O1xyXG4gICAgZm9udC1zaXplOiAxMnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XHJcbiAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgY29sb3I6ICNmZmZmZmY7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcclxuICAgIHRyYW5zaXRpb246IGFsbCBlYXNlIC4zcztcclxuICAgIHdyaXRpbmctbW9kZTogdmVydGljYWwtcmw7XHJcbiAgICB0ZXh0LW9yaWVudGF0aW9uOiBtaXhlZDtcclxuICAgICYuYXVkaXRhYmxlIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDtcclxuICAgIH1cclxuICAgICYud2F0Y2gtb25seSwgJi5hdWRpdGFibGUtd2F0Y2gtb25seSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4Njg2ZmY7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi5zaWRlYmFyLWFjY291bnRzIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGZsZXg6IDEgMSBhdXRvO1xyXG5cclxuICAuc2lkZWJhci1hY2NvdW50cy1oZWFkZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgIGhlaWdodDogOHJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcblxyXG4gICAgaDMge1xyXG4gICAgICBmb250LXNpemU6IDEuN3JlbTtcclxuICAgIH1cclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnNpZGViYXItYWNjb3VudHMtbGlzdCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgbWFyZ2luOiAwIC0zcmVtO1xyXG4gICAgb3ZlcmZsb3cteTogYXV0bztcclxuXHJcbiAgICAuc2lkZWJhci1hY2NvdW50IHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICBwYWRkaW5nOiAyLjVyZW0gM3JlbTtcclxuXHJcbiAgICAgIC5jbG9zZS13YWxsZXQtd3JhcHBlciB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgIHRvcDogLTEycHg7XHJcbiAgICAgICAgICByaWdodDogLTE4cHg7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICB3aWR0aDogMS4zcmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcclxuICAgICAgICAgICAgJi5jbG9zZS13YWxsZXQge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICYuY2xvc2Utd2FsbGV0OjphZnRlciB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgY29udGVudDonJztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOnVybChcIi4uLy4uL2Fzc2V0cy9pY29ucy9jbG9zZS13YWxsZXQtYmx1ZS5zdmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICB3aWR0aDogMTNweDtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEzcHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5zaWRlYmFyLWFjY291bnQtcm93IHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgICAmLmFjY291bnQtdGl0bGUtYmFsYW5jZSB7XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG5cclxuICAgICAgICAgIC50aXRsZSB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xyXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuYmFsYW5jZSB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xyXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY2NvdW50LWFsaWFzIHtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDMuNHJlbTtcclxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuN3JlbTtcclxuXHJcbiAgICAgICAgICAubmFtZSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAxO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42cmVtO1xyXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgICAgICAgICAgc3BhbiB7XHJcbiAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLnByaWNlIHtcclxuICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xyXG4gICAgICAgICAgICB3aWR0aDogMS4zcmVtO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuM3JlbTtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgICBjb2xvcjogIzFhMWExYTtcclxuICAgICAgICAgICAgZm9udC1zaXplOiA5cHg7XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XHJcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA5cHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFweDtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmFjY291bnQtc3Rha2luZyB7XHJcbiAgICAgICAgICBsaW5lLWhlaWdodDogMi45cmVtO1xyXG5cclxuICAgICAgICAgIC50ZXh0IHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmFjY291bnQtbWVzc2FnZXMge1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuXHJcbiAgICAgICAgICAudGV4dCB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5pbmRpY2F0b3Ige1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXJlbTtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6IDIuNHJlbTtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxLjZyZW07XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY2NvdW50LXN5bmNocm9uaXphdGlvbiB7XHJcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgaGVpZ2h0OiA1LjZyZW07XHJcblxyXG4gICAgICAgICAgLnN0YXR1cyB7XHJcbiAgICAgICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMi42cmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgbWFyZ2luOiAwLjRyZW0gMDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAwLjdyZW07XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICAgICAgICAgLnByb2dyZXNzLWJhciB7XHJcbiAgICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XHJcblxyXG4gICAgICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5wcm9ncmVzcy1wZXJjZW50IHtcclxuICAgICAgICAgICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMC43cmVtO1xyXG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC43cmVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICY6YWZ0ZXIge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICBsZWZ0OiAtM3JlbTtcclxuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA2cmVtKTtcclxuICAgIGhlaWdodDogNXJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5zaWRlYmFyLXNldHRpbmdzIHtcclxuICBmbGV4OiAwIDAgYXV0bztcclxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcclxuXHJcbiAgLndyYXAtYnV0dG9uIHtcclxuICAgIG1hcmdpbjogMCAtM3JlbTtcclxuXHJcbiAgICBidXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgICBsaW5lLWhlaWdodDogM3JlbTtcclxuICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgcGFkZGluZzogMCAzcmVtO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgIGN1cnNvcjogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9ub3QtYWxsb3dlZC5zdmcpLCBub3QtYWxsb3dlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmljb24ge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG4gICAgICAgIHdpZHRoOiAycmVtO1xyXG4gICAgICAgIGhlaWdodDogMnJlbTtcclxuXHJcbiAgICAgICAgJi5jb250YWN0cyB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2NvbnRhY3RzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuc2V0dGluZ3Mge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxvZ291dCB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uc3luY2hyb25pemF0aW9uLXN0YXR1cyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcclxuICBmbGV4OiAwIDAgN3JlbTtcclxuICBmb250LXNpemU6IDEuM3JlbTtcclxuXHJcbiAgLnN0YXR1cy1jb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICAub2ZmbGluZSwgLm9ubGluZSB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMi4ycmVtO1xyXG5cclxuICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgbGVmdDogMDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDEuMnJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5zeW5jaW5nLCAubG9hZGluZyB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA1cmVtO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIGhlaWdodDogMC43cmVtO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIC5zeW5jaW5nIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG5cclxuICAgICAgICAucHJvZ3Jlc3MtYmFyIHtcclxuICAgICAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG5cclxuICAgICAgICAgIC5maWxsIHtcclxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnByb2dyZXNzLXBlcmNlbnQge1xyXG4gICAgICAgICAgZmxleDogMCAwIGF1dG87XHJcbiAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwLjdyZW07XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAuN3JlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5sb2FkaW5nIHtcclxuICAgICAgICBhbmltYXRpb246IG1vdmUgNXMgbGluZWFyIGluZmluaXRlO1xyXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6XHJcbiAgICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICAgIGxpbmVhciwgMCAwLCAxMDAlIDEwMCUsXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMTI1LCByZ2JhKDAsIDAsIDAsIC4xNSkpLCBjb2xvci1zdG9wKC4xMjUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4xMCkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMTApKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNTAwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjUwMCwgcmdiYSgwLCAwLCAwLCAuMTUpKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjEwKSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguODc1LCByZ2JhKDAsIDAsIDAsIC4xMCkpLCBjb2xvci1zdG9wKC44NzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAtd2Via2l0LWdyYWRpZW50KFxyXG4gICAgICAgICAgICAgIGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMTI1LCByZ2JhKDAsIDAsIDAsIC4zMCkpLCBjb2xvci1zdG9wKC4xMjUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4yNTAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguMjUwLCByZ2JhKDAsIDAsIDAsIC4yNSkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjM3NSwgcmdiYSgwLCAwLCAwLCAuMjUpKSwgY29sb3Itc3RvcCguMzc1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNTAwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjUwMCwgcmdiYSgwLCAwLCAwLCAuMzApKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC42MjUsIHJnYmEoMCwgMCwgMCwgLjMwKSksIGNvbG9yLXN0b3AoLjYyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjc1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC43NTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguODc1LCByZ2JhKDAsIDAsIDAsIC4yNSkpLCBjb2xvci1zdG9wKC44NzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICB0byh0cmFuc3BhcmVudClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3cmVtIDdyZW07XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudXBkYXRlLWNvbnRhaW5lciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuXHJcbiAgICAudXBkYXRlLXRleHQge1xyXG4gICAgICBmbGV4OiAxIDEgYXV0bztcclxuICAgICAgZm9udC1zaXplOiAxLjJyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcblxyXG4gICAgICAmLnRpbWUge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmljb24ge1xyXG4gICAgICBmbGV4OiAxIDAgYXV0bztcclxuICAgICAgbWFyZ2luOiAwLjNyZW0gMCAwIDAuNnJlbTtcclxuICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcblxyXG4gICAgICAmLnVwZGF0ZSB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy91cGRhdGUuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnRpbWUge1xyXG4gICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvdGltZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgbW92ZSB7XHJcbiAgMCUge1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtN3JlbTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDdyZW07XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, NgZone, OnInit, OnDestroy} from '@angular/core';\r\nimport {ActivatedRoute, NavigationStart, Router} from '@angular/router';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport { ModalService } from '../_helpers/services/modal.service';\r\nimport {AUDITABLE_WALLET_HELP_PAGE} from '../_shared/constants';\r\nimport {DOWNLOADS_PAGE_URL} from '../_shared/constants';\r\n\r\nimport icons from '../../assets/icons/icons.json';\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.scss']\r\n})\r\nexport class SidebarComponent implements OnInit, OnDestroy {\r\n walletSubRouting;\r\n\r\n walletActive: number;\r\n\r\n contacts = icons.contacts;\r\n settings = icons.settings;\r\n exit = icons.exit;\r\n\r\n isModalDialogVisible = false;\r\n closeWalletId: number;\r\n\r\n menuItemHovered: boolean;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n public variablesService: VariablesService,\r\n private backend: BackendService,\r\n private modal: ModalService,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.router.url.indexOf('/wallet/') !== -1) {\r\n const localPathArr = this.router.url.split('/');\r\n if (localPathArr.length >= 3) {\r\n this.walletActive = parseInt(localPathArr[2], 10);\r\n }\r\n } else if (this.router.url.indexOf('/details') !== -1) {\r\n this.walletActive = this.variablesService.currentWallet.wallet_id;\r\n } else {\r\n this.walletActive = null;\r\n }\r\n\r\n this.walletSubRouting = this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n if (event.url.indexOf('/wallet/') !== -1) {\r\n const localPathArr = event.url.split('/');\r\n if (localPathArr.length >= 3) {\r\n this.walletActive = parseInt(localPathArr[2], 10);\r\n }\r\n } else if (event.url.indexOf('/details') !== -1) {\r\n this.walletActive = this.variablesService.currentWallet.wallet_id;\r\n } else {\r\n this.walletActive = null;\r\n }\r\n }\r\n });\r\n }\r\n\r\n goMainPage() {\r\n if (this.route.snapshot.queryParams && this.route.snapshot.queryParams.prevUrl === 'login') {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/'], {queryParams: {prevUrl: 'login'}});\r\n });\r\n } else {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/']);\r\n });\r\n }\r\n\r\n };\r\n\r\n contactsRoute() {\r\n if (this.variablesService.appPass) {\r\n this.router.navigate(['/contacts']);\r\n } else {\r\n this.modal.prepareModal(\r\n 'error',\r\n 'CONTACTS.FORM_ERRORS.SET_MASTER_PASSWORD'\r\n );\r\n }\r\n }\r\n\r\n showDialog(wallet_id) {\r\n this.isModalDialogVisible = true;\r\n this.closeWalletId = wallet_id;\r\n }\r\n\r\n confirmed(confirmed: boolean) {\r\n if (confirmed) {\r\n this.closeWallet(this.closeWalletId);\r\n }\r\n this.isModalDialogVisible = false;\r\n }\r\n\r\n closeWallet(wallet_id) {\r\n this.backend.closeWallet(wallet_id, () => {\r\n for (let i = this.variablesService.wallets.length - 1; i >= 0; i--) {\r\n if (this.variablesService.wallets[i].wallet_id === this.variablesService.currentWallet.wallet_id) {\r\n this.variablesService.wallets.splice(i, 1);\r\n }\r\n }\r\n this.ngZone.run(() => {\r\n if (this.variablesService.wallets.length) {\r\n this.variablesService.currentWallet = this.variablesService.wallets[0];\r\n this.router.navigate(['/wallet/' + this.variablesService.currentWallet.wallet_id]);\r\n } else {\r\n this.router.navigate(['/']);\r\n }\r\n });\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData();\r\n }\r\n });\r\n }\r\n\r\n getUpdate() {\r\n this.backend.openUrlInBrowser(DOWNLOADS_PAGE_URL);\r\n }\r\n goToAuditableWalletHelpPage(e) {\r\n e.preventDefault();\r\n this.backend.openUrlInBrowser(AUDITABLE_WALLET_HELP_PAGE);\r\n }\r\n\r\n logOut() {\r\n this.variablesService.stopCountdown();\r\n this.variablesService.appLogin = false;\r\n this.variablesService.appPass = '';\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/login'], {queryParams: {type: 'auth'}});\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.walletSubRouting.unsubscribe();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n
      \\r\\n {{ 'STAKING.TITLE' | translate }}\\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'STAKING.TITLE_PENDING' | translate }}\\r\\n {{pending.total | intToMoney}} {{variablesService.defaultCurrency}}\\r\\n
      \\r\\n
      \\r\\n {{ 'STAKING.TITLE_TOTAL' | translate }}\\r\\n {{total | intToMoney}} {{variablesService.defaultCurrency}}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{selectedDate.date | date : 'EEEE, MMMM d, y'}}\\r\\n {{selectedDate.amount}} {{variablesService.defaultCurrency}}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ 'STAKING.TITLE_PERIOD' | translate }}\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n {{ 'STAKING.TITLE_GROUP' | translate }}\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n display: flex;\\n flex-direction: column;\\n width: 100%; }\\n\\n.chart-header {\\n display: flex;\\n flex: 0 0 auto; }\\n\\n.chart-header .general {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n justify-content: center;\\n flex-grow: 1;\\n font-size: 1.3rem;\\n margin: -0.5rem 0; }\\n\\n.chart-header .general > div {\\n display: flex;\\n align-items: center;\\n margin: 0.5rem 0;\\n height: 2rem; }\\n\\n.chart-header .general > div .label {\\n display: inline-block;\\n width: 9rem; }\\n\\n.chart-header .selected {\\n display: flex;\\n flex-direction: column;\\n align-items: flex-end;\\n justify-content: center;\\n flex-grow: 1;\\n font-size: 1.8rem; }\\n\\n.chart-header .selected span {\\n line-height: 2.9rem; }\\n\\n.chart {\\n position: relative;\\n display: flex;\\n align-items: center;\\n flex: 1 1 auto;\\n min-height: 40rem; }\\n\\n.chart > div {\\n position: absolute;\\n width: 100%;\\n height: 100%; }\\n\\n.chart-options {\\n display: flex;\\n align-items: center;\\n height: 2.4rem;\\n flex: 0 0 auto; }\\n\\n.chart-options .title {\\n font-size: 1.3rem;\\n padding: 0 1rem; }\\n\\n.chart-options .title:first-child {\\n padding-left: 0; }\\n\\n.chart-options .options {\\n display: flex;\\n justify-content: space-between;\\n flex-grow: 1;\\n height: 100%; }\\n\\n.chart-options .options button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex: 1 1 auto;\\n cursor: pointer;\\n font-size: 1.3rem;\\n margin: 0 0.1rem;\\n padding: 0;\\n height: 100%; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvc3Rha2luZy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXBwXFxzdGFraW5nXFxzdGFraW5nLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxhQUFhO0VBQ2IsY0FBYyxFQUFBOztBQUZoQjtJQUtJLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFBOztBQVhyQjtNQWNNLGFBQWE7TUFDYixtQkFBbUI7TUFDbkIsZ0JBQWdCO01BQ2hCLFlBQVksRUFBQTs7QUFqQmxCO1FBb0JRLHFCQUFxQjtRQUNyQixXQUFXLEVBQUE7O0FBckJuQjtJQTJCSSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGlCQUFpQixFQUFBOztBQWhDckI7TUFtQ00sbUJBQW1CLEVBQUE7O0FBS3pCO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsY0FBYztFQUNkLGlCQUFpQixFQUFBOztBQUxuQjtJQVFJLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsWUFBWSxFQUFBOztBQUloQjtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsY0FBYztFQUNkLGNBQWMsRUFBQTs7QUFKaEI7SUFPSSxpQkFBaUI7SUFDakIsZUFBZSxFQUFBOztBQVJuQjtNQVdNLGVBQWUsRUFBQTs7QUFYckI7SUFnQkksYUFBYTtJQUNiLDhCQUE4QjtJQUM5QixZQUFZO0lBQ1osWUFBWSxFQUFBOztBQW5CaEI7TUFzQk0sYUFBYTtNQUNiLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsY0FBYztNQUNkLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLFVBQVU7TUFDVixZQUFZLEVBQUEiLCJmaWxlIjoic3JjL2FwcC9zdGFraW5nL3N0YWtpbmcuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uY2hhcnQtaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG5cclxuICAuZ2VuZXJhbCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbjogLTAuNXJlbSAwO1xyXG5cclxuICAgID4gZGl2IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgbWFyZ2luOiAwLjVyZW0gMDtcclxuICAgICAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAgICAgLmxhYmVsIHtcclxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDlyZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zZWxlY3RlZCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgZmxleC1ncm93OiAxO1xyXG4gICAgZm9udC1zaXplOiAxLjhyZW07XHJcblxyXG4gICAgc3BhbiB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjlyZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uY2hhcnQge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZmxleDogMSAxIGF1dG87XHJcbiAgbWluLWhlaWdodDogNDByZW07XHJcblxyXG4gID4gZGl2IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gIH1cclxufVxyXG5cclxuLmNoYXJ0LW9wdGlvbnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBoZWlnaHQ6IDIuNHJlbTtcclxuICBmbGV4OiAwIDAgYXV0bztcclxuXHJcbiAgLnRpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgcGFkZGluZzogMCAxcmVtO1xyXG5cclxuICAgICY6Zmlyc3QtY2hpbGR7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5vcHRpb25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICBtYXJnaW46IDAgMC4xcmVtO1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */\"","import {Component, NgZone, OnInit, OnDestroy} from '@angular/core';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {Chart} from 'angular-highcharts';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {IntToMoneyPipe} from '../_helpers/pipes/int-to-money.pipe';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {BigNumber} from 'bignumber.js';\r\n\r\n@Component({\r\n selector: 'app-staking',\r\n templateUrl: './staking.component.html',\r\n styleUrls: ['./staking.component.scss']\r\n})\r\nexport class StakingComponent implements OnInit, OnDestroy {\r\n\r\n parentRouting;\r\n heightAppEvent;\r\n refreshStackingEvent;\r\n\r\n periods = [\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.WEEK1'),\r\n key: '1 week',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.WEEK2'),\r\n key: '2 week',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.MONTH1'),\r\n key: '1 month',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.MONTH3'),\r\n key: '3 month',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.MONTH6'),\r\n key: '6 month',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.YEAR'),\r\n key: '1 year',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.PERIOD.ALL'),\r\n key: 'All',\r\n active: true\r\n }\r\n ];\r\n\r\n groups = [\r\n {\r\n title: this.translate.instant('STAKING.GROUP.DAY'),\r\n key: 'day',\r\n active: true\r\n },\r\n {\r\n title: this.translate.instant('STAKING.GROUP.WEEK'),\r\n key: 'week',\r\n active: false\r\n },\r\n {\r\n title: this.translate.instant('STAKING.GROUP.MONTH'),\r\n key: 'month',\r\n active: false\r\n }\r\n ];\r\n\r\n selectedDate = {\r\n date: null,\r\n amount: null\r\n };\r\n\r\n originalData = [];\r\n\r\n chart: Chart;\r\n\r\n total = new BigNumber(0);\r\n pending = {\r\n list: [],\r\n total: new BigNumber(0)\r\n };\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n public variablesService: VariablesService,\r\n private backend: BackendService,\r\n private ngZone: NgZone,\r\n private intToMoneyPipe: IntToMoneyPipe,\r\n private translate: TranslateService\r\n ) {\r\n }\r\n\r\n static makeGroupTime(key, date) {\r\n if (key === 'day') {\r\n return date.setHours(0, 0, 0, 0);\r\n } else if (key === 'week') {\r\n return new Date(date.setDate(date.getDate() - date.getDay())).setHours(0, 0, 0, 0);\r\n } else {\r\n return new Date(date.setDate(1)).setHours(0, 0, 0, 0);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.parentRouting = this.route.parent.params.subscribe(() => {\r\n this.getMiningHistory();\r\n });\r\n this.heightAppEvent = this.variablesService.getHeightAppEvent.subscribe((newHeight: number) => {\r\n if (!this.pending.total.isZero()) {\r\n const pendingCount = this.pending.list.length;\r\n for (let i = pendingCount - 1; i >= 0; i--) {\r\n if (newHeight - this.pending.list[i].h >= 10) {\r\n this.pending.list.splice(i, 1);\r\n }\r\n }\r\n if (pendingCount !== this.pending.list.length) {\r\n this.pending.total = new BigNumber(0);\r\n for (let i = 0; i < this.pending.list.length; i++) {\r\n this.pending.total = this.pending.total.plus(this.pending.list[i].a);\r\n }\r\n }\r\n }\r\n });\r\n this.refreshStackingEvent = this.variablesService.getRefreshStackingEvent.subscribe((wallet_id: number) => {\r\n if (this.variablesService.currentWallet.wallet_id === wallet_id) {\r\n this.getMiningHistory();\r\n }\r\n });\r\n }\r\n\r\n\r\n drawChart(data) {\r\n this.chart = new Chart({\r\n title: {text: ''},\r\n credits: {enabled: false},\r\n exporting: {enabled: false},\r\n legend: {enabled: false},\r\n chart: {\r\n type: 'line',\r\n backgroundColor: 'transparent',\r\n height: null,\r\n zoomType: null,\r\n events: {\r\n load: () => {\r\n this.changePeriod();\r\n }\r\n }\r\n },\r\n\r\n yAxis: {\r\n min: 0,\r\n tickAmount: 5,\r\n title: {\r\n text: ''\r\n },\r\n gridLineColor: '#2b3644',\r\n gridLineWidth: 2,\r\n lineColor: '#2b3644',\r\n lineWidth: 2,\r\n tickWidth: 2,\r\n tickLength: 120,\r\n tickColor: '#2b3644',\r\n labels: {\r\n y: -8,\r\n align: 'left',\r\n x: -120,\r\n style: {\r\n 'color': '#e0e0e0',\r\n 'fontSize': '13px'\r\n },\r\n format: '{value} ' + this.variablesService.defaultCurrency\r\n },\r\n showLastLabel: false,\r\n },\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n gridLineColor: '#2b3644',\r\n lineColor: '#2b3644',\r\n lineWidth: 2,\r\n tickWidth: 2,\r\n tickLength: 10,\r\n tickColor: '#2b3644',\r\n labels: {\r\n style: {\r\n 'color': '#e0e0e0',\r\n 'fontSize': '13px'\r\n }\r\n },\r\n minPadding: 0,\r\n maxPadding: 0,\r\n minRange: 86400000,\r\n // tickInterval: 86400000,\r\n minTickInterval: 3600000,\r\n },\r\n\r\n tooltip: {\r\n enabled: false\r\n },\r\n\r\n plotOptions: {\r\n area: {\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, 'rgba(124,181,236,0.2)'],\r\n [1, 'rgba(124,181,236,0)']\r\n ]\r\n },\r\n marker: {\r\n enabled: false,\r\n radius: 2\r\n },\r\n lineWidth: 2,\r\n threshold: null\r\n },\r\n\r\n series: {\r\n point: {\r\n events: {\r\n mouseOver: (obj) => {\r\n this.selectedDate.date = obj.target['x'];\r\n this.selectedDate.amount = obj.target['y'];\r\n }\r\n }\r\n },\r\n events: {\r\n mouseOut: () => {\r\n this.selectedDate.date = null;\r\n this.selectedDate.amount = null;\r\n }\r\n }\r\n }\r\n },\r\n series: [\r\n {\r\n type: 'area',\r\n data: data\r\n }\r\n ]\r\n });\r\n }\r\n\r\n\r\n getMiningHistory() {\r\n if (this.variablesService.currentWallet.loaded) {\r\n this.backend.getMiningHistory(this.variablesService.currentWallet.wallet_id, (status, data) => {\r\n this.total = new BigNumber(0);\r\n this.pending.list = [];\r\n this.pending.total = new BigNumber(0);\r\n this.originalData = [];\r\n if (data.mined_entries) {\r\n data.mined_entries.forEach((item, key) => {\r\n if (item.t.toString().length === 10) {\r\n data.mined_entries[key].t = (new Date(item.t * 1000)).setUTCMilliseconds(0);\r\n }\r\n });\r\n data.mined_entries.forEach((item) => {\r\n this.total = this.total.plus(item.a);\r\n if (this.variablesService.height_app - item.h < 10) {\r\n this.pending.list.push(item);\r\n this.pending.total = this.pending.total.plus(item.a);\r\n }\r\n this.originalData.push([parseInt(item.t, 10), parseFloat(this.intToMoneyPipe.transform(item.a))]);\r\n });\r\n this.originalData = this.originalData.sort(function (a, b) {\r\n return a[0] - b[0];\r\n });\r\n }\r\n this.ngZone.run(() => {\r\n this.drawChart([]);\r\n });\r\n });\r\n }\r\n }\r\n\r\n changePeriod(period?) {\r\n if (period) {\r\n this.periods.forEach((p) => {\r\n p.active = false;\r\n });\r\n period.active = true;\r\n } else {\r\n period = this.periods.find((p) => p.active);\r\n }\r\n\r\n const d = new Date();\r\n let min = null;\r\n const newData = [];\r\n\r\n const group = this.groups.find((g) => g.active);\r\n\r\n if (period.key === '1 week') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate() - 7, 0, 0, 0, 0);\r\n } else if (period.key === '2 week') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate() - 14, 0, 0, 0, 0);\r\n } else if (period.key === '1 month') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear(), d.getMonth() - 1, d.getDate(), 0, 0, 0, 0);\r\n } else if (period.key === '3 month') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear(), d.getMonth() - 3, d.getDate(), 0, 0, 0, 0);\r\n } else if (period.key === '6 month') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear(), d.getMonth() - 6, d.getDate(), 0, 0, 0, 0);\r\n } else if (period.key === '1 year') {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n min = Date.UTC(d.getFullYear() - 1, d.getMonth(), d.getDate(), 0, 0, 0, 0);\r\n } else {\r\n this.originalData.forEach((item) => {\r\n const time = StakingComponent.makeGroupTime(group.key, new Date(item[0]));\r\n const find = newData.find(itemNew => itemNew[0] === time);\r\n if (find) {\r\n find[1] = new BigNumber(find[1]).plus(item[1]).toNumber();\r\n } else {\r\n newData.push([time, item[1]]);\r\n }\r\n });\r\n this.chart.ref.series[0].setData(newData, true);\r\n }\r\n\r\n this.chart.ref.xAxis[0].setExtremes(min, null);\r\n }\r\n\r\n changeGroup(group) {\r\n this.groups.forEach((g) => {\r\n g.active = false;\r\n });\r\n group.active = true;\r\n this.changePeriod();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.parentRouting.unsubscribe();\r\n this.heightAppEvent.unsubscribe();\r\n this.refreshStackingEvent.unsubscribe();\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{ wallet.name }}\\r\\n {{ 'BREADCRUMBS.TRANSFER_ALIAS' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      0 && (transferAddressAlias || !transferAddressValid || (transferAddressValid && !permissionSend) || notEnoughMoney)\\\">\\r\\n
      \\r\\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.WRONG_ADDRESS' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.ALIAS_EXISTS' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'TRANSFER_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n
      {{ \\\"TRANSFER_ALIAS.COST\\\" | translate : {value: variablesService.default_fee, currency: variablesService.defaultCurrency} }}
      \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n\"","module.exports = \".form-transfer {\\n margin: 2.4rem 0; }\\n .form-transfer .alias-name {\\n width: 50%; }\\n .form-transfer .alias-cost {\\n font-size: 1.3rem;\\n margin-top: 2rem; }\\n .form-transfer .wrap-buttons {\\n display: flex;\\n justify-content: space-between;\\n margin: 2.5rem -0.7rem; }\\n .form-transfer .wrap-buttons button {\\n margin: 0 0.7rem;\\n width: 15rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvdHJhbnNmZXItYWxpYXMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcdHJhbnNmZXItYWxpYXNcXHRyYW5zZmVyLWFsaWFzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0JBQWdCLEVBQUE7RUFEbEI7SUFJSSxVQUFVLEVBQUE7RUFKZDtJQVFJLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBQTtFQVRwQjtJQWFJLGFBQWE7SUFDYiw4QkFBOEI7SUFDOUIsc0JBQXNCLEVBQUE7RUFmMUI7TUFrQk0sZ0JBQWdCO01BQ2hCLFlBQVksRUFBQSIsImZpbGUiOiJzcmMvYXBwL3RyYW5zZmVyLWFsaWFzL3RyYW5zZmVyLWFsaWFzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tdHJhbnNmZXIge1xyXG4gIG1hcmdpbjogMi40cmVtIDA7XHJcblxyXG4gIC5hbGlhcy1uYW1lIHtcclxuICAgIHdpZHRoOiA1MCU7XHJcbiAgfVxyXG5cclxuICAuYWxpYXMtY29zdCB7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIG1hcmdpbi10b3A6IDJyZW07XHJcbiAgfVxyXG5cclxuICAud3JhcC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBtYXJnaW46IDIuNXJlbSAtMC43cmVtO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjdyZW07XHJcbiAgICAgIHdpZHRoOiAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19 */\"","import {Component, NgZone, OnInit} from '@angular/core';\r\nimport {Location} from '@angular/common';\r\nimport {Router} from '@angular/router';\r\nimport {BackendService} from '../_helpers/services/backend.service';\r\nimport {VariablesService} from '../_helpers/services/variables.service';\r\nimport {ModalService} from '../_helpers/services/modal.service';\r\nimport {Wallet} from '../_helpers/models/wallet.model';\r\n\r\n@Component({\r\n selector: 'app-transfer-alias',\r\n templateUrl: './transfer-alias.component.html',\r\n styleUrls: ['./transfer-alias.component.scss']\r\n})\r\nexport class TransferAliasComponent implements OnInit {\r\n\r\n wallet: Wallet;\r\n alias: any;\r\n transferAddress = '';\r\n transferAddressValid: boolean;\r\n transferAddressAlias: boolean;\r\n permissionSend: boolean;\r\n notEnoughMoney: boolean;\r\n requestProcessing = false;\r\n\r\n constructor(\r\n private location: Location,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private modalService: ModalService,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.wallet = this.variablesService.currentWallet;\r\n const alias = this.backend.getWalletAlias(this.wallet.address);\r\n this.alias = {\r\n name: alias.name,\r\n address: alias.address,\r\n comment: alias.comment,\r\n tracking_key: alias.tracking_key\r\n };\r\n this.notEnoughMoney = this.wallet.unlocked_balance.isLessThan(this.variablesService.default_fee_big);\r\n }\r\n\r\n changeAddress() {\r\n this.backend.validateAddress(this.transferAddress, status => {\r\n this.transferAddressValid = status;\r\n if (status) {\r\n this.backend.getPoolInfo((statusPool, dataPool) => {\r\n if (dataPool.hasOwnProperty('aliases_que') && dataPool.aliases_que.length) {\r\n this.setStatus(!dataPool.aliases_que.some((el) => el.address === this.transferAddress));\r\n } else {\r\n this.setStatus(status);\r\n }\r\n });\r\n } else {\r\n this.setStatus(false);\r\n }\r\n });\r\n }\r\n\r\n setStatus(statusSet) {\r\n this.permissionSend = statusSet;\r\n if (statusSet) {\r\n this.backend.getAliasByAddress(this.transferAddress, (status) => {\r\n this.ngZone.run(() => {\r\n if (status) {\r\n this.transferAddressAlias = true;\r\n this.permissionSend = false;\r\n } else {\r\n this.transferAddressAlias = false;\r\n }\r\n });\r\n });\r\n } else {\r\n this.ngZone.run(() => {\r\n this.transferAddressAlias = false;\r\n });\r\n }\r\n }\r\n\r\n transferAlias() {\r\n if (this.requestProcessing || !this.permissionSend || !this.transferAddressValid || this.notEnoughMoney) {\r\n return;\r\n }\r\n this.requestProcessing = true;\r\n const newAlias = {\r\n name: this.alias.name,\r\n address: this.transferAddress,\r\n comment: this.alias.comment,\r\n tracking_key: this.alias.tracking_key\r\n };\r\n this.backend.updateAlias(this.wallet.wallet_id, newAlias, this.variablesService.default_fee, (status, data) => {\r\n if (status && data.hasOwnProperty('success') && data.success) {\r\n this.modalService.prepareModal('info', 'TRANSFER_ALIAS.REQUEST_SEND_REG');\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/wallet/' + this.wallet.wallet_id]);\r\n });\r\n }\r\n this.requestProcessing = false;\r\n });\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n @bitmain\\r\\n
      \\r\\n \\r\\n \\r\\n {{ 'COMMON.BACK' | translate }}\\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n
      10:39
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\r\\n
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\r\\n
      \\r\\n
      11:44
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\r\\n
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      12:15
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\r\\n
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      13:13
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\r\\n
      \\r\\n
      \\r\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n display: flex;\\n flex-direction: column;\\n width: 100%; }\\n\\n.head {\\n flex: 0 0 auto;\\n box-sizing: content-box;\\n margin: -3rem -3rem 0; }\\n\\n.messages-content {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n flex-grow: 1; }\\n\\n.messages-content .messages-list {\\n display: flex;\\n flex-direction: column;\\n font-size: 1.3rem;\\n margin: 1rem -3rem;\\n padding: 0 3rem;\\n overflow-y: overlay; }\\n\\n.messages-content .messages-list div {\\n margin: 0.7rem 0; }\\n\\n.messages-content .messages-list div.date {\\n text-align: center; }\\n\\n.messages-content .messages-list div.my, .messages-content .messages-list div.buddy {\\n position: relative;\\n padding: 1.8rem;\\n max-width: 60%; }\\n\\n.messages-content .messages-list div.buddy {\\n align-self: flex-end; }\\n\\n.messages-content .type-message {\\n display: flex;\\n flex: 0 0 auto;\\n width: 100%;\\n height: 4.2rem; }\\n\\n.messages-content .type-message .input-block {\\n width: 100%; }\\n\\n.messages-content .type-message .input-block > textarea {\\n min-height: 4.2rem; }\\n\\n.messages-content .type-message button {\\n flex: 0 0 15rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvdHlwaW5nLW1lc3NhZ2UvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcdHlwaW5nLW1lc3NhZ2VcXHR5cGluZy1tZXNzYWdlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixXQUFXLEVBQUE7O0FBR2I7RUFDRSxjQUFjO0VBQ2QsdUJBQXVCO0VBQ3ZCLHFCQUFxQixFQUFBOztBQUd2QjtFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsOEJBQThCO0VBQzlCLFlBQVksRUFBQTs7QUFKZDtJQU9JLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsbUJBQW1CLEVBQUE7O0FBWnZCO01BZU0sZ0JBQWdCLEVBQUE7O0FBZnRCO1FBa0JRLGtCQUFrQixFQUFBOztBQWxCMUI7UUFzQlEsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixjQUFjLEVBQUE7O0FBeEJ0QjtRQTRCUSxvQkFBb0IsRUFBQTs7QUE1QjVCO0lBa0NJLGFBQWE7SUFDYixjQUFjO0lBQ2QsV0FBVztJQUNYLGNBQWMsRUFBQTs7QUFyQ2xCO01Bd0NNLFdBQVcsRUFBQTs7QUF4Q2pCO1FBMkNRLGtCQUFrQixFQUFBOztBQTNDMUI7TUFnRE0sZUFBZSxFQUFBIiwiZmlsZSI6InNyYy9hcHAvdHlwaW5nLW1lc3NhZ2UvdHlwaW5nLW1lc3NhZ2UuY29tcG9uZW50LnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZCB7XHJcbiAgZmxleDogMCAwIGF1dG87XHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgbWFyZ2luOiAtM3JlbSAtM3JlbSAwO1xyXG59XHJcblxyXG4ubWVzc2FnZXMtY29udGVudCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICBmbGV4LWdyb3c6IDE7XHJcblxyXG4gIC5tZXNzYWdlcy1saXN0IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICBtYXJnaW46IDFyZW0gLTNyZW07XHJcbiAgICBwYWRkaW5nOiAwIDNyZW07XHJcbiAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xyXG5cclxuICAgIGRpdiB7XHJcbiAgICAgIG1hcmdpbjogMC43cmVtIDA7XHJcblxyXG4gICAgICAmLmRhdGUge1xyXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5teSwgJi5idWRkeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIHBhZGRpbmc6IDEuOHJlbTtcclxuICAgICAgICBtYXgtd2lkdGg6IDYwJTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5idWRkeSB7XHJcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC50eXBlLW1lc3NhZ2Uge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDQuMnJlbTtcclxuXHJcbiAgICAuaW5wdXQtYmxvY2sge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgID4gdGV4dGFyZWEge1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDQuMnJlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIGZsZXg6IDAgMCAxNXJlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ== */\"","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-typing-message',\r\n templateUrl: './typing-message.component.html',\r\n styleUrls: ['./typing-message.component.scss']\r\n})\r\nexport class TypingMessageComponent implements OnInit {\r\n\r\n messagesId: number;\r\n private subMessages: any;\r\n\r\n constructor(private route: ActivatedRoute) {\r\n this.route.params.subscribe( params => console.log(params) );\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n}\r\n","module.exports = \"
      \\r\\n\\r\\n
      \\r\\n
      \\r\\n {{variablesService.currentWallet.name}}\\r\\n {{ 'BREADCRUMBS.WALLET_DETAILS' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_DUPLICATE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = variablesService.maxWalletNameLength\\\">\\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.PASSWORDS_DONT_MATCH' | translate }}\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n {{ 'WALLET_DETAILS.FORM.SECURED_SEED_WILL_REQUIRE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.LABEL_SEED_PHRASE' | translate }}\\r\\n

      \\r\\n {{ 'WALLET_DETAILS.SEED_IS_UNSECURED' | translate }} \\r\\n 0\\\">{{ 'WALLET_DETAILS.SEED_IS_SECURED' | translate }} \\r\\n

      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      = 1 && (index + 1) <= 7 || (index + 1) >= 15 && (index + 1) <= 21\\\">\\r\\n {{(index + 1) + '. ' + word}}
      \\r\\n
      \\r\\n
      \\r\\n
      0\\\">\\r\\n {{ 'WALLET_DETAILS.REMEMBER_YOU_WILL_REQUIRE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \"","module.exports = \".form-details {\\n margin-top: 1.8rem; }\\n .form-details .input-block:first-child {\\n width: 50%; }\\n .form-details .wallet-buttons {\\n display: flex;\\n align-items: center;\\n justify-content: space-between; }\\n .form-details .wallet-buttons button {\\n margin: 2.9rem 0;\\n width: 100%;\\n max-width: 15rem; }\\n .mt-2 {\\n margin-top: 2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvd2FsbGV0LWRldGFpbHMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFwcFxcd2FsbGV0LWRldGFpbHNcXHdhbGxldC1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCLEVBQUE7RUFEcEI7SUFNTSxVQUFVLEVBQUE7RUFOaEI7SUFXSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLDhCQUE4QixFQUFBO0VBYmxDO01BZ0JNLGdCQUFnQjtNQUNoQixXQUFXO01BQ1gsZ0JBQWdCLEVBQUE7RUFLdEI7RUFDRSxnQkFBZ0IsRUFBQSIsImZpbGUiOiJzcmMvYXBwL3dhbGxldC1kZXRhaWxzL3dhbGxldC1kZXRhaWxzLmNvbXBvbmVudC5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZvcm0tZGV0YWlscyB7XHJcbiAgbWFyZ2luLXRvcDogMS44cmVtO1xyXG5cclxuICAuaW5wdXQtYmxvY2sge1xyXG5cclxuICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICB3aWR0aDogNTAlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLndhbGxldC1idXR0b25zIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICAgIG1hcmdpbjogMi45cmVtIDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBtYXgtd2lkdGg6IDE1cmVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm10LTIge1xyXG4gIG1hcmdpbi10b3A6IDJyZW07XHJcbn1cclxuIl19 */\"","import { Component, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { Router } from '@angular/router';\r\nimport { Location } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-wallet-details',\r\n templateUrl: './wallet-details.component.html',\r\n styleUrls: ['./wallet-details.component.scss'],\r\n})\r\nexport class WalletDetailsComponent implements OnInit, OnDestroy {\r\n seedPhrase = '';\r\n showSeed = false;\r\n copyAnimation = false;\r\n\r\n detailsForm = new FormGroup({\r\n name: new FormControl('', [\r\n Validators.required,\r\n (g: FormControl) => {\r\n for (let i = 0; i < this.variablesService.wallets.length; i++) {\r\n if (g.value === this.variablesService.wallets[i].name) {\r\n if (\r\n this.variablesService.wallets[i].wallet_id ===\r\n this.variablesService.currentWallet.wallet_id\r\n ) {\r\n return { same: true };\r\n } else {\r\n return { duplicate: true };\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n ]),\r\n path: new FormControl(''),\r\n });\r\n\r\n seedPhraseForm = new FormGroup(\r\n {\r\n password: new FormControl(\r\n '',\r\n Validators.pattern(this.variablesService.pattern)\r\n ),\r\n confirmPassword: new FormControl(\r\n '',\r\n Validators.pattern(this.variablesService.pattern)\r\n ),\r\n },\r\n { validators: this.checkPasswords }\r\n );\r\n\r\n checkPasswords(group: FormGroup) {\r\n const pass = group.controls.password.value;\r\n const confirmPass = group.controls.confirmPassword.value;\r\n\r\n return pass === confirmPass ? null : { notSame: true };\r\n }\r\n\r\n constructor(\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private ngZone: NgZone,\r\n private location: Location\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.showSeed = false;\r\n this.detailsForm\r\n .get('name')\r\n .setValue(this.variablesService.currentWallet.name);\r\n this.detailsForm\r\n .get('path')\r\n .setValue(this.variablesService.currentWallet.path);\r\n }\r\n\r\n showSeedPhrase() {\r\n this.showSeed = true;\r\n }\r\n\r\n onSubmitSeed() {\r\n if (this.seedPhraseForm.valid) {\r\n this.showSeedPhrase();\r\n const wallet_id = this.variablesService.currentWallet.wallet_id;\r\n const seed_password = this.seedPhraseForm.controls.password.value;\r\n this.backend.getSmartWalletInfo(\r\n { wallet_id, seed_password },\r\n (status, data) => {\r\n if (data.hasOwnProperty('seed_phrase')) {\r\n this.ngZone.run(() => {\r\n this.seedPhrase = data['seed_phrase'].trim();\r\n });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n onSubmitEdit() {\r\n if (this.detailsForm.value) {\r\n this.variablesService.currentWallet.name = this.detailsForm.get(\r\n 'name'\r\n ).value;\r\n this.ngZone.run(() => {\r\n this.router.navigate([\r\n '/wallet/' + this.variablesService.currentWallet.wallet_id,\r\n ]);\r\n });\r\n }\r\n }\r\n\r\n closeWallet() {\r\n this.backend.closeWallet(\r\n this.variablesService.currentWallet.wallet_id,\r\n () => {\r\n for (let i = this.variablesService.wallets.length - 1; i >= 0; i--) {\r\n if (\r\n this.variablesService.wallets[i].wallet_id ===\r\n this.variablesService.currentWallet.wallet_id\r\n ) {\r\n this.variablesService.wallets.splice(i, 1);\r\n }\r\n }\r\n this.ngZone.run(() => {\r\n if (this.variablesService.wallets.length) {\r\n this.variablesService.currentWallet = this.variablesService.wallets[0];\r\n this.router.navigate([\r\n '/wallet/' + this.variablesService.currentWallet.wallet_id,\r\n ]);\r\n } else {\r\n this.router.navigate(['/']);\r\n }\r\n });\r\n if (this.variablesService.appPass) {\r\n this.backend.storeSecureAppData();\r\n }\r\n }\r\n );\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n}\r\n","module.exports = \"
      \\r\\n
      \\r\\n

      {{variablesService.currentWallet.name}}

      \\r\\n
      \\r\\n \\r\\n
      \\r\\n {{variablesService.currentWallet.alias['name']}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n {{variablesService.currentWallet.address}}\\r\\n \\r\\n
      \\r\\n
      \\r\\n {{variablesService.currentWallet.balance | intToMoney : '3'}} {{variablesService.defaultCurrency}}\\r\\n $ {{variablesService.currentWallet.getMoneyEquivalent(variablesService.moneyEquivalent) | intToMoney | number : '1.2-2'}}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ tab.title | translate }}\\r\\n {{variablesService.currentWallet.new_contracts}}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n <\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n >\\r\\n \\r\\n\\r\\n
      \\r\\n
      \\r\\n Hide mining transactions\\r\\n
      \\r\\n {{ 'STAKING.SWITCH.ON' | translate }}\\r\\n \\r\\n {{ 'STAKING.SWITCH.OFF' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\"","module.exports = \":host {\\n position: relative;\\n display: flex;\\n flex-direction: column;\\n padding: 0 3rem 3rem;\\n min-width: 95rem;\\n width: 100%;\\n height: 100%; }\\n\\n.header {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n flex: 0 0 auto;\\n height: 8rem; }\\n\\n.header > div {\\n display: flex;\\n align-items: center; }\\n\\n.header > div :not(:last-child) {\\n margin-right: 3.2rem; }\\n\\n.header h3 {\\n font-size: 1.7rem;\\n font-weight: 600;\\n text-overflow: ellipsis;\\n overflow: hidden;\\n white-space: nowrap;\\n max-width: 50rem;\\n line-height: 2.7rem; }\\n\\n.header button {\\n display: flex;\\n align-items: center;\\n background: transparent;\\n border: none;\\n cursor: pointer;\\n font-weight: 400;\\n outline: none;\\n padding: 0; }\\n\\n.header button .icon {\\n margin-right: 1.2rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.header button .icon.account {\\n height: 1.6rem;\\n -webkit-mask: url('account.svg') no-repeat center;\\n mask: url('account.svg') no-repeat center; }\\n\\n.header button .icon.lock {\\n -webkit-mask: url('lock.svg') no-repeat center;\\n mask: url('lock.svg') no-repeat center; }\\n\\n.header button .icon.details {\\n -webkit-mask: url('details-settings.svg') no-repeat center;\\n mask: url('details-settings.svg') no-repeat center;\\n margin-right: 0;\\n height: 1.8rem; }\\n\\n.header button .icon.close-wallet {\\n -webkit-mask: url('close-wallet.svg') no-repeat center;\\n mask: url('close-wallet.svg') no-repeat center;\\n margin-right: 0; }\\n\\n.header .alias {\\n display: flex;\\n align-items: center;\\n font-size: 1.3rem; }\\n\\n.header .alias .icon {\\n cursor: pointer;\\n margin-right: 1.2rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.header .alias .icon.edit {\\n -webkit-mask: url('details.svg') no-repeat center;\\n mask: url('details.svg') no-repeat center; }\\n\\n.header .alias .icon.transfer {\\n -webkit-mask: url('send.svg') no-repeat center;\\n mask: url('send.svg') no-repeat center; }\\n\\n.address {\\n display: flex;\\n align-items: center;\\n flex: 0 0 auto;\\n font-size: 1.4rem;\\n line-height: 1.7rem; }\\n\\n.address .icon {\\n cursor: pointer;\\n margin-left: 1.2rem;\\n width: 1.7rem;\\n height: 1.7rem; }\\n\\n.address .icon.copy {\\n width: 1.8rem;\\n -webkit-mask: url('copy.svg') no-repeat center;\\n mask: url('copy.svg') no-repeat center; }\\n\\n.address .icon.copy:hover {\\n opacity: 0.75; }\\n\\n.address .icon.copied {\\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\\n mask: url('complete-testwallet.svg') no-repeat center; }\\n\\n.balance {\\n display: flex;\\n align-items: flex-end;\\n justify-content: flex-start;\\n flex: 0 0 auto;\\n margin: 2.6rem 0; }\\n\\n.balance :first-child {\\n font-size: 3.3rem;\\n font-weight: 600;\\n line-height: 2.4rem;\\n margin-right: 3.5rem; }\\n\\n.balance :last-child {\\n font-size: 1.8rem;\\n font-weight: 600;\\n line-height: 1.3rem; }\\n\\n.tabs {\\n display: flex;\\n flex-direction: column;\\n flex: 1 1 auto; }\\n\\n.tabs .tabs-header {\\n display: flex;\\n justify-content: space-between;\\n flex: 0 0 auto; }\\n\\n.tabs .tabs-header .tab {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n flex: 1 0 auto;\\n cursor: pointer;\\n padding: 0 1rem;\\n height: 5rem; }\\n\\n.tabs .tabs-header .tab.hide {\\n display: none; }\\n\\n.tabs .tabs-header .tab .animated {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n margin-right: 1.3rem; }\\n\\n.tabs .tabs-header .tab .animated ::ng-deep svg {\\n width: 2rem;\\n height: 2rem; }\\n\\n.tabs .tabs-header .tab .animated ::ng-deep svg path, .tabs .tabs-header .tab .animated ::ng-deep svg circle, .tabs .tabs-header .tab .animated ::ng-deep svg polygon {\\n fill: #4db1ff; }\\n\\n.tabs .tabs-header .tab .icon {\\n margin-right: 1.3rem;\\n width: 2rem;\\n height: 2rem; }\\n\\n.tabs .tabs-header .tab .icon.send {\\n -webkit-mask: url('send.svg') no-repeat center;\\n mask: url('send.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .icon.receive {\\n -webkit-mask: url('receive.svg') no-repeat center;\\n mask: url('receive.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .icon.history {\\n -webkit-mask: url('history.svg') no-repeat center;\\n mask: url('history.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .icon.contracts {\\n -webkit-mask: url('contracts.svg') no-repeat center;\\n mask: url('contracts.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .icon.messages {\\n -webkit-mask: url('message.svg') no-repeat center;\\n mask: url('message.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .icon.staking {\\n -webkit-mask: url('staking.svg') no-repeat center;\\n mask: url('staking.svg') no-repeat center; }\\n\\n.tabs .tabs-header .tab .indicator {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 1rem;\\n font-size: 1rem;\\n font-weight: 600;\\n margin-left: 1.3rem;\\n padding: 0 0.5rem;\\n min-width: 1.6rem;\\n height: 1.6rem; }\\n\\n.tabs .tabs-header .tab.disabled {\\n cursor: url('not-allowed.svg'), not-allowed; }\\n\\n.tabs .tabs-header .tab:not(:last-child) {\\n margin-right: 0.3rem; }\\n\\n.tabs .tabs-content {\\n display: flex;\\n padding: 3rem;\\n flex: 1 1 auto;\\n overflow-x: hidden;\\n overflow-y: overlay; }\\n\\n.tabs .pagination-wrapper .pagination {\\n padding: 1rem;\\n display: flex;\\n justify-content: space-between;\\n align-items: center; }\\n\\n.tabs .pagination-wrapper .pagination button {\\n margin-right: 0.5rem;\\n padding: 0;\\n width: 2.5rem;\\n height: 2.5rem;\\n font-size: 1.2rem;\\n transition: all 0.3s; }\\n\\n.tabs .pagination-wrapper .pagination .disabled {\\n background-color: #18202a;\\n color: #e0e0e0;\\n opacity: 0.3;\\n cursor: default;\\n transition: all 0.3s; }\\n\\n.mining-transaction-switch {\\n display: flex;\\n align-items: center; }\\n\\n.mining-transaction-switch .switch-text {\\n margin-right: 1rem;\\n font-size: 1.3rem;\\n color: #565c62; }\\n\\n.mining-transaction-switch .switch {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n border-radius: 1rem;\\n cursor: pointer;\\n font-size: 1rem;\\n padding: 0.5rem;\\n width: 5rem;\\n height: 2rem; }\\n\\n.mining-transaction-switch .switch .circle {\\n border-radius: 1rem;\\n width: 1.2rem;\\n height: 1.2rem; }\\n\\n.mining-transaction-switch .switch .option {\\n margin: 0 0.2rem;\\n line-height: 1.2rem; }\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvd2FsbGV0L0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhcHBcXHdhbGxldFxcd2FsbGV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQixXQUFXO0VBQ1gsWUFBWSxFQUFBOztBQUdkO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw4QkFBOEI7RUFDOUIsY0FBYztFQUNkLFlBQVksRUFBQTs7QUFMZDtJQVFJLGFBQWE7SUFDYixtQkFBbUIsRUFBQTs7QUFUdkI7TUFZTSxvQkFBb0IsRUFBQTs7QUFaMUI7SUFpQkksaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUE7O0FBdkJ2QjtJQTJCSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixZQUFZO0lBQ1osZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsVUFBVSxFQUFBOztBQWxDZDtNQXFDTSxvQkFBb0I7TUFDcEIsYUFBYTtNQUNiLGNBQWMsRUFBQTs7QUF2Q3BCO1FBMENRLGNBQWM7UUFDZCxpREFBMEQ7Z0JBQTFELHlDQUEwRCxFQUFBOztBQTNDbEU7UUErQ1EsOENBQXVEO2dCQUF2RCxzQ0FBdUQsRUFBQTs7QUEvQy9EO1FBbURRLDBEQUFtRTtnQkFBbkUsa0RBQW1FO1FBQ25FLGVBQWU7UUFDZixjQUFjLEVBQUE7O0FBckR0QjtRQXlEUSxzREFBK0Q7Z0JBQS9ELDhDQUErRDtRQUMvRCxlQUFlLEVBQUE7O0FBMUR2QjtJQWdFSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGlCQUFpQixFQUFBOztBQWxFckI7TUFxRU0s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QVksRUFBQTs7QUFsQmhCO01BcUJNLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsY0FBYyxFQUFBOztBQXZCcEI7TUEyQk0sZ0JBQWdCO01BQ2hCLG1CQUFtQixFQUFBIiwiZmlsZSI6InNyYy9hcHAvd2FsbGV0L3dhbGxldC5jb21wb25lbnQuc2NzcyIsInNvdXJjZXNDb250ZW50IjpbIjpob3N0IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIHBhZGRpbmc6IDAgM3JlbSAzcmVtO1xyXG4gIG1pbi13aWR0aDogOTVyZW07XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG59XHJcblxyXG4uaGVhZGVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIGhlaWdodDogOHJlbTtcclxuXHJcbiAgPiBkaXYge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgOm5vdCg6bGFzdC1jaGlsZCkge1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IDMuMnJlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGgzIHtcclxuICAgIGZvbnQtc2l6ZTogMS43cmVtO1xyXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICBtYXgtd2lkdGg6IDUwcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuICB9XHJcblxyXG4gIGJ1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIG91dGxpbmU6IG5vbmU7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5hY2NvdW50IHtcclxuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2FjY291bnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLmxvY2sge1xyXG4gICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvbG9jay5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuZGV0YWlscyB7XHJcbiAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9kZXRhaWxzLXNldHRpbmdzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgaGVpZ2h0OiAxLjhyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuY2xvc2Utd2FsbGV0IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLXdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYWxpYXMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuXHJcbiAgICAuaWNvbiB7XHJcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XHJcbiAgICAgIHdpZHRoOiAxLjdyZW07XHJcbiAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgJi5lZGl0IHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL2RldGFpbHMuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmLnRyYW5zZmVyIHtcclxuICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbmQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uYWRkcmVzcyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjdyZW07XHJcblxyXG4gIC5pY29uIHtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XHJcbiAgICB3aWR0aDogMS43cmVtO1xyXG4gICAgaGVpZ2h0OiAxLjdyZW07XHJcblxyXG4gICAgJi5jb3B5IHtcclxuICAgICAgd2lkdGg6IDEuOHJlbTtcclxuICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9jb3B5LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIG9wYWNpdHk6IDAuNzU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmLmNvcGllZCB7XHJcbiAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvY29tcGxldGUtdGVzdHdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uYmFsYW5jZSB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XHJcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gIGZsZXg6IDAgMCBhdXRvO1xyXG4gIG1hcmdpbjogMi42cmVtIDA7XHJcblxyXG4gIDpmaXJzdC1jaGlsZCB7XHJcbiAgICBmb250LXNpemU6IDMuM3JlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAzLjVyZW07XHJcbiAgfVxyXG5cclxuICA6bGFzdC1jaGlsZCB7XHJcbiAgICBmb250LXNpemU6IDEuOHJlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xyXG4gIH1cclxufVxyXG5cclxuLnRhYnMge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBmbGV4OiAxIDEgYXV0bztcclxuXHJcbiAgLnRhYnMtaGVhZGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBmbGV4OiAwIDAgYXV0bztcclxuXHJcbiAgICAudGFiIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIHBhZGRpbmc6IDAgMXJlbTtcclxuICAgICAgaGVpZ2h0OiA1cmVtO1xyXG4gICAgICAmLmhpZGUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIH1cclxuICAgICAgLmFuaW1hdGVkIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjNyZW07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5hbmltYXRlZCA6Om5nLWRlZXAgc3ZnIHtcclxuXHJcbiAgICAgICAgd2lkdGg6IDJyZW07XHJcbiAgICAgICAgaGVpZ2h0OiAycmVtO1xyXG5cclxuICAgICAgICBwYXRoLCBjaXJjbGUsIHBvbHlnb24ge1xyXG4gICAgICAgICAgZmlsbDogIzRkYjFmZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5pY29uIHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuM3JlbTtcclxuICAgICAgICB3aWR0aDogMnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDJyZW07XHJcblxyXG4gICAgICAgICYuc2VuZCB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3NlbmQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5yZWNlaXZlIHtcclxuICAgICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvcmVjZWl2ZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmhpc3Rvcnkge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9oaXN0b3J5LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuY29udHJhY3RzIHtcclxuICAgICAgICAgIG1hc2s6IHVybCguLi8uLi9hc3NldHMvaWNvbnMvY29udHJhY3RzLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubWVzc2FnZXMge1xyXG4gICAgICAgICAgbWFzazogdXJsKC4uLy4uL2Fzc2V0cy9pY29ucy9tZXNzYWdlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuc3Rha2luZyB7XHJcbiAgICAgICAgICBtYXNrOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL3N0YWtpbmcuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmluZGljYXRvciB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEuM3JlbTtcclxuICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcclxuICAgICAgICBtaW4td2lkdGg6IDEuNnJlbTtcclxuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgY3Vyc29yOiB1cmwoLi4vLi4vYXNzZXRzL2ljb25zL25vdC1hbGxvd2VkLnN2ZyksIG5vdC1hbGxvd2VkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMC4zcmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAudGFicy1jb250ZW50IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBwYWRkaW5nOiAzcmVtO1xyXG4gICAgZmxleDogMSAxIGF1dG87XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICBvdmVyZmxvdy15OiBvdmVybGF5O1xyXG4gIH1cclxuXHJcblxyXG4gIC5wYWdpbmF0aW9uLXdyYXBwZXIge1xyXG4gICAgLnBhZ2luYXRpb24ge1xyXG4gICAgICBwYWRkaW5nOiAxcmVtO1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICB3aWR0aDogMi41cmVtO1xyXG4gICAgICAgIGhlaWdodDogMi41cmVtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG4gICAgICB9XHJcbiAgICAgIC5kaXNhYmxlZCB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzE4MjAyYTtcclxuICAgICAgICBjb2xvcjogI2UwZTBlMDtcclxuICAgICAgICBvcGFjaXR5OiAwLjM7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4ubWluaW5nLXRyYW5zYWN0aW9uLXN3aXRjaCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIC5zd2l0Y2gtdGV4dCB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIGNvbG9yOiAjNTY1YzYyO1xyXG4gIH1cclxuXHJcbiAgLnN3aXRjaCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBmb250LXNpemU6IDFyZW07XHJcbiAgICBwYWRkaW5nOiAwLjVyZW07XHJcbiAgICB3aWR0aDogNXJlbTtcclxuICAgIGhlaWdodDogMnJlbTtcclxuXHJcbiAgICAuY2lyY2xlIHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMXJlbTtcclxuICAgICAgd2lkdGg6IDEuMnJlbTtcclxuICAgICAgaGVpZ2h0OiAxLjJyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLm9wdGlvbiB7XHJcbiAgICAgIG1hcmdpbjogMCAwLjJyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJyZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= */\"","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n NgZone,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { ActivatedRoute, Router, RoutesRecognized } from '@angular/router';\r\nimport { VariablesService } from '../_helpers/services/variables.service';\r\nimport { BackendService } from '../_helpers/services/backend.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { IntToMoneyPipe } from '../_helpers/pipes/int-to-money.pipe';\r\nimport { Subscription } from 'rxjs';\r\nimport { LOCKED_BALANCE_HELP_PAGE } from '../_shared/constants';\r\n\r\nimport icons from '../../assets/icons/icons.json';\r\nimport { PaginationService } from '../_helpers/services/pagination.service';\r\nimport { PaginationStore } from '../_helpers/services/pagination.store';\r\nimport { Store, Sync } from 'store';\r\nimport { Wallet } from '../_helpers/models/wallet.model';\r\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-wallet',\r\n templateUrl: './wallet.component.html',\r\n styleUrls: ['./wallet.component.scss'],\r\n})\r\nexport class WalletComponent implements OnInit, OnDestroy {\r\n subRouting1;\r\n subRouting2;\r\n queryRouting;\r\n walletID;\r\n copyAnimation = false;\r\n copyAnimationTimeout;\r\n balanceTooltip;\r\n walletLoaded;\r\n activeTab = 'history';\r\n public mining = false;\r\n public currentPage = 1;\r\n wallet: Wallet;\r\n sync_started = false;\r\n stop_paginate = false;\r\n\r\n @ViewChild('scrolledContent') private scrolledContent: ElementRef;\r\n\r\n tabs = [\r\n {\r\n title: 'WALLET.TABS.HISTORY',\r\n icon: 'history',\r\n link: '/history',\r\n indicator: false,\r\n active: true,\r\n animated: icons.history,\r\n itemHovered: false,\r\n },\r\n {\r\n title: 'WALLET.TABS.SEND',\r\n icon: 'send',\r\n link: '/send',\r\n indicator: false,\r\n active: false,\r\n animated: icons.send,\r\n itemHovered: false,\r\n },\r\n {\r\n title: 'WALLET.TABS.RECEIVE',\r\n icon: 'receive',\r\n link: '/receive',\r\n indicator: false,\r\n active: false,\r\n animated: icons.receive,\r\n itemHovered: false,\r\n },\r\n {\r\n title: 'WALLET.TABS.CONTRACTS',\r\n icon: 'contracts',\r\n link: '/contracts',\r\n indicator: 1,\r\n active: false,\r\n animated: icons.contracts,\r\n itemHovered: false,\r\n },\r\n /*{\r\n title: 'WALLET.TABS.MESSAGES',\r\n icon: 'messages',\r\n link: '/messages',\r\n indicator: 32,\r\n active: false,\r\n animated: icons.messages,\r\n itemHovered: false\r\n },*/\r\n {\r\n title: 'WALLET.TABS.STAKING',\r\n icon: 'staking',\r\n link: '/staking',\r\n indicator: false,\r\n active: false,\r\n animated: icons.staking,\r\n itemHovered: false,\r\n },\r\n ];\r\n aliasSubscription: Subscription;\r\n walletsSubscription: Subscription;\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private backend: BackendService,\r\n public variablesService: VariablesService,\r\n private ngZone: NgZone,\r\n private translate: TranslateService,\r\n private intToMoneyPipe: IntToMoneyPipe,\r\n private pagination: PaginationService,\r\n private paginationStore: PaginationStore,\r\n private store: Store\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.subRouting1 = this.route.params.subscribe((params) => {\r\n // set current wallet only by user click to avoid after sync show synchronized data\r\n this.walletID = +params['id'];\r\n this.walletLoaded = this.variablesService.getWallet(this.walletID).loaded;\r\n this.variablesService.setCurrentWallet(this.walletID);\r\n this.walletsSubscription = this.store\r\n .select('sync')\r\n .pipe(filter(Boolean), distinctUntilChanged())\r\n .subscribe((value) => {\r\n const data = value.filter(\r\n (item: Sync) => item.wallet_id === this.walletID\r\n )[0];\r\n if (data && !data.sync) {\r\n let in_progress;\r\n const values = this.store.value.sync;\r\n if (values && values.length) {\r\n in_progress = values.filter((item) => item.sync);\r\n this.variablesService.sync_started = !!(\r\n in_progress && in_progress.length\r\n );\r\n if (!in_progress) {\r\n this.variablesService.sync_started = false;\r\n }\r\n } else {\r\n this.variablesService.sync_started = false;\r\n }\r\n }\r\n let restore = false;\r\n if (\r\n this.variablesService.after_sync_request.hasOwnProperty(\r\n this.walletID\r\n )\r\n ) {\r\n restore = this.variablesService.after_sync_request[this.walletID];\r\n }\r\n if (\r\n !this.variablesService.sync_started &&\r\n restore &&\r\n this.walletID === (data && data.wallet_id)\r\n ) {\r\n this.wallet = this.variablesService.getNotLoadedWallet();\r\n if (this.wallet) {\r\n this.tick();\r\n }\r\n // if this is was restore wallet and it was selected on moment when sync completed\r\n this.getRecentTransfers();\r\n this.variablesService.after_sync_request[this.walletID] = false;\r\n }\r\n });\r\n let after_sync_request = false;\r\n if (\r\n this.variablesService.after_sync_request.hasOwnProperty(this.walletID)\r\n ) {\r\n after_sync_request = this.variablesService.after_sync_request[\r\n this.walletID\r\n ];\r\n }\r\n if (after_sync_request && !this.variablesService.sync_started) {\r\n // if user click on the wallet at the first time after restore.\r\n this.getRecentTransfers();\r\n }\r\n\r\n if (this.variablesService.stop_paginate.hasOwnProperty(this.walletID)) {\r\n this.stop_paginate = this.variablesService.stop_paginate[this.walletID];\r\n } else {\r\n this.stop_paginate = false;\r\n }\r\n // this will hide pagination a bit earlier\r\n this.wallet = this.variablesService.getNotLoadedWallet();\r\n if (this.wallet) {\r\n this.tick();\r\n }\r\n\r\n this.scrolledContent.nativeElement.scrollTop = 0;\r\n clearTimeout(this.copyAnimationTimeout);\r\n this.copyAnimation = false;\r\n this.mining = this.variablesService.currentWallet.exclude_mining_txs;\r\n\r\n if (this.variablesService.wallets.length === 1) {\r\n this.walletID = +params['id'];\r\n this.variablesService.setCurrentWallet(this.walletID);\r\n }\r\n });\r\n this.subRouting2 = this.router.events.subscribe((val) => {\r\n if (val instanceof RoutesRecognized) {\r\n this.activeTab = val.urlAfterRedirects\r\n .replace('?sidenav=true', '')\r\n .split('/')\r\n .pop();\r\n if (val.state.root.firstChild && val.state.root.firstChild.firstChild) {\r\n for (let i = 0; i < this.tabs.length; i++) {\r\n this.tabs[i].active =\r\n this.tabs[i].link ===\r\n '/' + val.state.root.firstChild.firstChild.url[0].path;\r\n }\r\n }\r\n }\r\n });\r\n this.queryRouting = this.route.queryParams.subscribe((params) => {\r\n if (params.send) {\r\n this.tabs.forEach((tab, index) => {\r\n if (tab.link === '/send') {\r\n this.changeTab(index);\r\n }\r\n });\r\n }\r\n });\r\n if (this.variablesService.currentWallet.alias.hasOwnProperty('name')) {\r\n this.variablesService.currentWallet.wakeAlias = false;\r\n }\r\n this.aliasSubscription = this.variablesService.getAliasChangedEvent.subscribe(\r\n () => {\r\n if (this.variablesService.currentWallet.alias.hasOwnProperty('name')) {\r\n this.variablesService.currentWallet.wakeAlias = false;\r\n }\r\n }\r\n );\r\n this.updateWalletStatus();\r\n }\r\n resetPaginationValues() {\r\n this.ngZone.run(() => {\r\n const total_history_item = this.variablesService.currentWallet\r\n .total_history_item;\r\n const count = this.variablesService.count;\r\n this.variablesService.currentWallet.totalPages = Math.ceil(\r\n total_history_item / count\r\n );\r\n this.variablesService.currentWallet.exclude_mining_txs = this.mining;\r\n this.variablesService.currentWallet.currentPage = 1;\r\n\r\n if (!this.variablesService.currentWallet.totalPages) {\r\n this.variablesService.currentWallet.totalPages = 1;\r\n }\r\n this.variablesService.currentWallet.totalPages >\r\n this.variablesService.maxPages\r\n ? (this.variablesService.currentWallet.pages = new Array(5)\r\n .fill(1)\r\n .map((value, index) => value + index))\r\n : (this.variablesService.currentWallet.pages = new Array(\r\n this.variablesService.currentWallet.totalPages\r\n )\r\n .fill(1)\r\n .map((value, index) => value + index));\r\n });\r\n }\r\n\r\n changeTab(index) {\r\n if (\r\n ((this.tabs[index].link === '/send' ||\r\n this.tabs[index].link === '/contracts' ||\r\n this.tabs[index].link === '/staking') &&\r\n (this.variablesService.daemon_state !== 2 ||\r\n !this.variablesService.currentWallet.loaded)) ||\r\n ((this.tabs[index].link === '/send' ||\r\n this.tabs[index].link === '/contracts') &&\r\n this.variablesService.currentWallet.is_watch_only &&\r\n this.variablesService.currentWallet.is_auditable)\r\n ) {\r\n return;\r\n }\r\n this.tabs.forEach((tab) => {\r\n tab.active = false;\r\n });\r\n this.tabs[index].active = true;\r\n this.ngZone.run(() => {\r\n this.scrolledContent.nativeElement.scrollTop = 0;\r\n this.router.navigate(['wallet/' + this.walletID + this.tabs[index].link]);\r\n });\r\n }\r\n\r\n itemHovered(index, state: boolean) {\r\n this.tabs[index].itemHovered = state;\r\n }\r\n\r\n copyAddress() {\r\n this.backend.setClipboard(this.variablesService.currentWallet.address);\r\n this.copyAnimation = true;\r\n this.copyAnimationTimeout = window.setTimeout(() => {\r\n this.copyAnimation = false;\r\n }, 2000);\r\n }\r\n\r\n getTooltip() {\r\n this.balanceTooltip = document.createElement('div');\r\n const available = document.createElement('span');\r\n available.setAttribute('class', 'available');\r\n available.innerHTML = this.translate.instant('WALLET.AVAILABLE_BALANCE', {\r\n available: this.intToMoneyPipe.transform(\r\n this.variablesService.currentWallet.unlocked_balance\r\n ),\r\n currency: this.variablesService.defaultCurrency,\r\n });\r\n this.balanceTooltip.appendChild(available);\r\n const locked = document.createElement('span');\r\n locked.setAttribute('class', 'locked');\r\n locked.innerHTML = this.translate.instant('WALLET.LOCKED_BALANCE', {\r\n locked: this.intToMoneyPipe.transform(\r\n this.variablesService.currentWallet.balance.minus(\r\n this.variablesService.currentWallet.unlocked_balance\r\n )\r\n ),\r\n currency: this.variablesService.defaultCurrency,\r\n });\r\n this.balanceTooltip.appendChild(locked);\r\n const link = document.createElement('span');\r\n link.setAttribute('class', 'link');\r\n link.innerHTML = this.translate.instant('WALLET.LOCKED_BALANCE_LINK');\r\n link.addEventListener('click', () => {\r\n this.openInBrowser(LOCKED_BALANCE_HELP_PAGE);\r\n });\r\n this.balanceTooltip.appendChild(link);\r\n return this.balanceTooltip;\r\n }\r\n\r\n onHideTooltip() {\r\n this.balanceTooltip = null;\r\n }\r\n\r\n openInBrowser(link) {\r\n this.backend.openUrlInBrowser(link);\r\n }\r\n\r\n public setPage(pageNumber: number) {\r\n // this is will allow pagination for wallets that was open from existed wallets'\r\n if (\r\n this.variablesService.currentWallet.open_from_exist &&\r\n !this.variablesService.currentWallet.updated\r\n ) {\r\n this.variablesService.get_recent_transfers = false;\r\n this.variablesService.currentWallet.updated = true;\r\n }\r\n if (pageNumber === this.variablesService.currentWallet.currentPage) {\r\n return;\r\n }\r\n // if not running get_recent_transfers callback\r\n if (!this.variablesService.get_recent_transfers) {\r\n this.variablesService.currentWallet.currentPage = pageNumber;\r\n }\r\n if (!this.variablesService.get_recent_transfers) {\r\n this.getRecentTransfers();\r\n }\r\n }\r\n\r\n toggleMiningTransactions() {\r\n if (!this.variablesService.sync_started && !this.wallet) {\r\n const value = this.paginationStore.value;\r\n if (!value) {\r\n this.paginationStore.setPage(1, 0, this.walletID); // add back page for the first page\r\n } else {\r\n const pages = value.filter((item) => item.walletID === this.walletID);\r\n if (!pages.length) {\r\n this.paginationStore.setPage(1, 0, this.walletID); // add back page for the first page\r\n }\r\n }\r\n this.mining = !this.mining;\r\n this.resetPaginationValues();\r\n this.getRecentTransfers();\r\n }\r\n }\r\n\r\n tick() {\r\n const walletInterval = setInterval(() => {\r\n this.wallet = this.variablesService.getNotLoadedWallet();\r\n if (!this.wallet) {\r\n clearInterval(walletInterval);\r\n }\r\n }, 1000);\r\n }\r\n\r\n getRecentTransfers() {\r\n const offset = this.pagination.getOffset(this.walletID);\r\n const value = this.paginationStore.value;\r\n const pages = value\r\n ? value.filter((item) => item.walletID === this.walletID)\r\n : [];\r\n\r\n this.backend.getRecentTransfers(\r\n this.walletID,\r\n offset,\r\n this.variablesService.count,\r\n this.variablesService.currentWallet.exclude_mining_txs,\r\n (status, data) => {\r\n const isForward = this.paginationStore.isForward(\r\n pages,\r\n this.variablesService.currentWallet.currentPage\r\n );\r\n if (this.mining && isForward && pages && pages.length === 1) {\r\n this.variablesService.currentWallet.currentPage = 1; // set init page after navigation back\r\n }\r\n\r\n const history = data && data.history;\r\n this.variablesService.stop_paginate[this.walletID] =\r\n (history && history.length < this.variablesService.count) || !history;\r\n this.stop_paginate = this.variablesService.stop_paginate[this.walletID];\r\n if (!this.variablesService.stop_paginate[this.walletID]) {\r\n const page = this.variablesService.currentWallet.currentPage + 1;\r\n if (\r\n isForward &&\r\n this.mining &&\r\n history &&\r\n history.length === this.variablesService.count\r\n ) {\r\n this.paginationStore.setPage(\r\n page,\r\n data.last_item_index,\r\n this.walletID\r\n ); // add back page for current page\r\n }\r\n }\r\n\r\n this.pagination.calcPages(data);\r\n this.pagination.prepareHistory(data, status);\r\n\r\n this.ngZone.run(() => {\r\n this.variablesService.get_recent_transfers = false;\r\n if (\r\n this.variablesService.after_sync_request.hasOwnProperty(\r\n this.walletID\r\n )\r\n ) {\r\n // this is will complete get_recent_transfers request\r\n // this will switch of\r\n this.variablesService.after_sync_request[this.walletID] = false;\r\n }\r\n });\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subRouting1.unsubscribe();\r\n this.subRouting2.unsubscribe();\r\n this.queryRouting.unsubscribe();\r\n this.aliasSubscription.unsubscribe();\r\n if (this.walletsSubscription) {\r\n this.walletsSubscription.unsubscribe();\r\n }\r\n clearTimeout(this.copyAnimationTimeout);\r\n }\r\n\r\n updateWalletStatus() {\r\n this.backend.eventSubscribe('wallet_sync_progress', (data) => {\r\n const wallet_id = data.wallet_id;\r\n if (wallet_id === this.walletID) {\r\n this.ngZone.run(() => {\r\n this.walletLoaded = false;\r\n });\r\n }\r\n });\r\n this.backend.eventSubscribe('update_wallet_status', (data) => {\r\n const wallet_state = data.wallet_state;\r\n const wallet_id = data.wallet_id;\r\n this.ngZone.run(() => {\r\n if (wallet_state === 2 && wallet_id === this.walletID) {\r\n this.walletLoaded =\r\n this.variablesService.getWallet(this.walletID) !== null &&\r\n this.variablesService.getWallet(this.walletID).loaded\r\n ? true\r\n : false;\r\n } else {\r\n this.walletLoaded = false;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = {\r\n production: false\r\n};\r\n\r\n/*\r\n * For easier debugging in development mode, you can import the following file\r\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\r\n *\r\n * This import should be commented out in production mode because it will have a negative impact\r\n * on performance if an error is thrown.\r\n */\r\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\nimport 'lodash';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n","import { pluck, distinctUntilChanged } from 'rxjs/operators';\r\nimport { Observable, BehaviorSubject } from 'rxjs';\r\nimport { Wallet } from './app/_helpers/models/wallet.model';\r\nexport interface Sync {\r\n sync: boolean;\r\n wallet_id: number;\r\n}\r\n\r\nexport interface State {\r\n wallets: Wallet[];\r\n sync: Sync[];\r\n [key: string]: any;\r\n}\r\n\r\nconst state: State = {\r\n wallets: undefined,\r\n sync: undefined,\r\n};\r\n\r\nexport class Store {\r\n private subject = new BehaviorSubject(state);\r\n private store = this.subject.asObservable().pipe(distinctUntilChanged());\r\n\r\n get value() {\r\n return this.subject.value;\r\n }\r\n\r\n select(name: string): Observable {\r\n return this.store.pipe(pluck(name));\r\n }\r\n\r\n // tslint:disable-next-line:no-shadowed-variable\r\n set(name: string, state: any) {\r\n this.subject.next({ ...this.value, [name]: state });\r\n }\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/message.svg b/src/gui/qt-daemon/html/message.svg deleted file mode 100644 index 544888cc..00000000 --- a/src/gui/qt-daemon/html/message.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/modal-alert.svg b/src/gui/qt-daemon/html/modal-alert.svg deleted file mode 100644 index bb5c7d02..00000000 --- a/src/gui/qt-daemon/html/modal-alert.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/modal-info.svg b/src/gui/qt-daemon/html/modal-info.svg deleted file mode 100644 index 0119fcc7..00000000 --- a/src/gui/qt-daemon/html/modal-info.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/modal-success.svg b/src/gui/qt-daemon/html/modal-success.svg deleted file mode 100644 index 60ad5a5d..00000000 --- a/src/gui/qt-daemon/html/modal-success.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/new.svg b/src/gui/qt-daemon/html/new.svg deleted file mode 100644 index 89622385..00000000 --- a/src/gui/qt-daemon/html/new.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/not-allowed.svg b/src/gui/qt-daemon/html/not-allowed.svg deleted file mode 100644 index 4fdfa78e..00000000 --- a/src/gui/qt-daemon/html/not-allowed.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/polyfills.js b/src/gui/qt-daemon/html/polyfills.js deleted file mode 100644 index 10acb49b..00000000 --- a/src/gui/qt-daemon/html/polyfills.js +++ /dev/null @@ -1,5810 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["polyfills"],{ - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js": -/*!**************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \**************************************************************************************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/es7/reflect */ "./node_modules/core-js/es7/reflect.js"); -/* harmony import */ var core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_es7_reflect__WEBPACK_IMPORTED_MODULE_0__); -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - - - -/***/ }), - -/***/ "./node_modules/core-js/es7/reflect.js": -/*!*********************************************!*\ - !*** ./node_modules/core-js/es7/reflect.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../modules/es7.reflect.define-metadata */ "./node_modules/core-js/modules/es7.reflect.define-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.delete-metadata */ "./node_modules/core-js/modules/es7.reflect.delete-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-metadata */ "./node_modules/core-js/modules/es7.reflect.get-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-metadata-keys */ "./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-own-metadata */ "./node_modules/core-js/modules/es7.reflect.get-own-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.get-own-metadata-keys */ "./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js"); -__webpack_require__(/*! ../modules/es7.reflect.has-metadata */ "./node_modules/core-js/modules/es7.reflect.has-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.has-own-metadata */ "./node_modules/core-js/modules/es7.reflect.has-own-metadata.js"); -__webpack_require__(/*! ../modules/es7.reflect.metadata */ "./node_modules/core-js/modules/es7.reflect.metadata.js"); -module.exports = __webpack_require__(/*! ../modules/_core */ "./node_modules/core-js/modules/_core.js").Reflect; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_a-function.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_a-function.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_an-instance.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_an-instance.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name, forbiddenField) { - if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { - throw TypeError(name + ': incorrect invocation!'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_an-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_an-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-from-iterable.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-from-iterable.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); - -module.exports = function (iter, ITERATOR) { - var result = []; - forOf(iter, false, result.push, result, ITERATOR); - return result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-includes.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/modules/_array-includes.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// false -> Array#indexOf -// true -> Array#includes -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ "./node_modules/core-js/modules/_to-absolute-index.js"); -module.exports = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-methods.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_array-methods.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var asc = __webpack_require__(/*! ./_array-species-create */ "./node_modules/core-js/modules/_array-species-create.js"); -module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - for (;length > index; index++) if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - if (TYPE) { - if (IS_MAP) result[index] = res; // map - else if (res) switch (TYPE) { - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if (IS_EVERY) return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-species-constructor.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-species-constructor.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var isArray = __webpack_require__(/*! ./_is-array */ "./node_modules/core-js/modules/_is-array.js"); -var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('species'); - -module.exports = function (original) { - var C; - if (isArray(original)) { - C = original.constructor; - // cross-realm fallback - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } return C === undefined ? Array : C; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_array-species-create.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/modules/_array-species-create.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ "./node_modules/core-js/modules/_array-species-constructor.js"); - -module.exports = function (original, length) { - return new (speciesConstructor(original))(length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_classof.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_classof.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// getting tag from 19.1.3.6 Object.prototype.toString() -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('toStringTag'); -// ES3 wrong here -var ARG = cof(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (e) { /* empty */ } -}; - -module.exports = function (it) { - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_cof.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_cof.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection-strong.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_collection-strong.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var create = __webpack_require__(/*! ./_object-create */ "./node_modules/core-js/modules/_object-create.js"); -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var $iterDefine = __webpack_require__(/*! ./_iter-define */ "./node_modules/core-js/modules/_iter-define.js"); -var step = __webpack_require__(/*! ./_iter-step */ "./node_modules/core-js/modules/_iter-step.js"); -var setSpecies = __webpack_require__(/*! ./_set-species */ "./node_modules/core-js/modules/_set-species.js"); -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var fastKey = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js").fastKey; -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var SIZE = DESCRIPTORS ? '_s' : 'size'; - -var getEntry = function (that, key) { - // fast case - var index = fastKey(key); - var entry; - if (index !== 'F') return that._i[index]; - // frozen object case - for (entry = that._f; entry; entry = entry.n) { - if (entry.k == key) return entry; - } -}; - -module.exports = { - getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; // collection type - that._i = create(null); // index - that._f = undefined; // first entry - that._l = undefined; // last entry - that[SIZE] = 0; // size - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear() { - for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { - entry.r = true; - if (entry.p) entry.p = entry.p.n = undefined; - delete data[entry.i]; - } - that._f = that._l = undefined; - that[SIZE] = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function (key) { - var that = validate(this, NAME); - var entry = getEntry(that, key); - if (entry) { - var next = entry.n; - var prev = entry.p; - delete that._i[entry.i]; - entry.r = true; - if (prev) prev.n = next; - if (next) next.p = prev; - if (that._f == entry) that._f = next; - if (that._l == entry) that._l = prev; - that[SIZE]--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /* , that = undefined */) { - validate(this, NAME); - var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); - var entry; - while (entry = entry ? entry.n : this._f) { - f(entry.v, entry.k, this); - // revert to the last existing entry - while (entry && entry.r) entry = entry.p; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key) { - return !!getEntry(validate(this, NAME), key); - } - }); - if (DESCRIPTORS) dP(C.prototype, 'size', { - get: function () { - return validate(this, NAME)[SIZE]; - } - }); - return C; - }, - def: function (that, key, value) { - var entry = getEntry(that, key); - var prev, index; - // change existing entry - if (entry) { - entry.v = value; - // create new entry - } else { - that._l = entry = { - i: index = fastKey(key, true), // <- index - k: key, // <- key - v: value, // <- value - p: prev = that._l, // <- previous entry - n: undefined, // <- next entry - r: false // <- removed - }; - if (!that._f) that._f = entry; - if (prev) prev.n = entry; - that[SIZE]++; - // add to index - if (index !== 'F') that._i[index] = entry; - } return that; - }, - getEntry: getEntry, - setStrong: function (C, NAME, IS_MAP) { - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - $iterDefine(C, NAME, function (iterated, kind) { - this._t = validate(iterated, NAME); // target - this._k = kind; // kind - this._l = undefined; // previous - }, function () { - var that = this; - var kind = that._k; - var entry = that._l; - // revert to the last existing entry - while (entry && entry.r) entry = entry.p; - // get next entry - if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { - // or finish the iteration - that._t = undefined; - return step(1); - } - // return step by kind - if (kind == 'keys') return step(0, entry.k); - if (kind == 'values') return step(0, entry.v); - return step(0, [entry.k, entry.v]); - }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(NAME); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection-weak.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/_collection-weak.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var getWeak = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js").getWeak; -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var createArrayMethod = __webpack_require__(/*! ./_array-methods */ "./node_modules/core-js/modules/_array-methods.js"); -var $has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var arrayFind = createArrayMethod(5); -var arrayFindIndex = createArrayMethod(6); -var id = 0; - -// fallback for uncaught frozen keys -var uncaughtFrozenStore = function (that) { - return that._l || (that._l = new UncaughtFrozenStore()); -}; -var UncaughtFrozenStore = function () { - this.a = []; -}; -var findUncaughtFrozen = function (store, key) { - return arrayFind(store.a, function (it) { - return it[0] === key; - }); -}; -UncaughtFrozenStore.prototype = { - get: function (key) { - var entry = findUncaughtFrozen(this, key); - if (entry) return entry[1]; - }, - has: function (key) { - return !!findUncaughtFrozen(this, key); - }, - set: function (key, value) { - var entry = findUncaughtFrozen(this, key); - if (entry) entry[1] = value; - else this.a.push([key, value]); - }, - 'delete': function (key) { - var index = arrayFindIndex(this.a, function (it) { - return it[0] === key; - }); - if (~index) this.a.splice(index, 1); - return !!~index; - } -}; - -module.exports = { - getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; // collection type - that._i = id++; // collection id - that._l = undefined; // leak store for uncaught frozen objects - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - // 23.3.3.2 WeakMap.prototype.delete(key) - // 23.4.3.3 WeakSet.prototype.delete(value) - 'delete': function (key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); - return data && $has(data, this._i) && delete data[this._i]; - }, - // 23.3.3.4 WeakMap.prototype.has(key) - // 23.4.3.4 WeakSet.prototype.has(value) - has: function has(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); - return data && $has(data, this._i); - } - }); - return C; - }, - def: function (that, key, value) { - var data = getWeak(anObject(key), true); - if (data === true) uncaughtFrozenStore(that).set(key, value); - else data[that._i] = value; - return that; - }, - ufstore: uncaughtFrozenStore -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_collection.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_collection.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var redefineAll = __webpack_require__(/*! ./_redefine-all */ "./node_modules/core-js/modules/_redefine-all.js"); -var meta = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js"); -var forOf = __webpack_require__(/*! ./_for-of */ "./node_modules/core-js/modules/_for-of.js"); -var anInstance = __webpack_require__(/*! ./_an-instance */ "./node_modules/core-js/modules/_an-instance.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var fails = __webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js"); -var $iterDetect = __webpack_require__(/*! ./_iter-detect */ "./node_modules/core-js/modules/_iter-detect.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ "./node_modules/core-js/modules/_inherit-if-required.js"); - -module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { - var Base = global[NAME]; - var C = Base; - var ADDER = IS_MAP ? 'set' : 'add'; - var proto = C && C.prototype; - var O = {}; - var fixMethod = function (KEY) { - var fn = proto[KEY]; - redefine(proto, KEY, - KEY == 'delete' ? function (a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a) { - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } - : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; } - ); - }; - if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { - new C().entries().next(); - }))) { - // create collection constructor - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - meta.NEED = true; - } else { - var instance = new C(); - // early implementations not supports chaining - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false - var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); - // most early implementations doesn't supports iterables, most modern - not close it correctly - var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new - // for early implementations -0 and +0 not the same - var BUGGY_ZERO = !IS_WEAK && fails(function () { - // V8 ~ Chromium 42- fails only with 5+ elements - var $instance = new C(); - var index = 5; - while (index--) $instance[ADDER](index, index); - return !$instance.has(-0); - }); - if (!ACCEPT_ITERABLES) { - C = wrapper(function (target, iterable) { - anInstance(target, C, NAME); - var that = inheritIfRequired(new Base(), target, C); - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - // weak collections should not contains .clear method - if (IS_WEAK && proto.clear) delete proto.clear; - } - - setToStringTag(C, NAME); - - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - - if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); - - return C; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_core.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_core.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var core = module.exports = { version: '2.6.12' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_ctx.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_ctx.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/core-js/modules/_a-function.js"); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_defined.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_defined.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_descriptors.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_descriptors.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_dom-create.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_dom-create.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var document = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_enum-bug-keys.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_enum-bug-keys.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// IE 8- don't enum bug keys -module.exports = ( - 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' -).split(','); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_export.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_export.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var core = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); - var key, own, out, exp; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // extend global - if (target) redefine(target, key, out, type & $export.U); - // export - if (exports[key] != out) hide(exports, key, exp); - if (IS_PROTO && expProto[key] != out) expProto[key] = out; - } -}; -global.core = core; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_fails.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/modules/_fails.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_for-of.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_for-of.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var ctx = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js"); -var call = __webpack_require__(/*! ./_iter-call */ "./node_modules/core-js/modules/_iter-call.js"); -var isArrayIter = __webpack_require__(/*! ./_is-array-iter */ "./node_modules/core-js/modules/_is-array-iter.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toLength = __webpack_require__(/*! ./_to-length */ "./node_modules/core-js/modules/_to-length.js"); -var getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ "./node_modules/core-js/modules/core.get-iterator-method.js"); -var BREAK = {}; -var RETURN = {}; -var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { - var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); - var f = ctx(fn, that, entries ? 2 : 1); - var index = 0; - var length, step, iterator, result; - if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); - // fast case for arrays with default iterator - if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if (result === BREAK || result === RETURN) return result; - } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { - result = call(iterator, f, step.value, entries); - if (result === BREAK || result === RETURN) return result; - } -}; -exports.BREAK = BREAK; -exports.RETURN = RETURN; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_function-to-string.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/_function-to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('native-function-to-string', Function.toString); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_global.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_global.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_has.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_has.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_hide.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_hide.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_html.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_html.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var document = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").document; -module.exports = document && document.documentElement; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_ie8-dom-define.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/modules/_ie8-dom-define.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") && !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ "./node_modules/core-js/modules/_dom-create.js")('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_inherit-if-required.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_inherit-if-required.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var setPrototypeOf = __webpack_require__(/*! ./_set-proto */ "./node_modules/core-js/modules/_set-proto.js").set; -module.exports = function (that, target, C) { - var S = target.constructor; - var P; - if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { - setPrototypeOf(that, P); - } return that; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iobject.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_iobject.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-array-iter.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_is-array-iter.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// check on default Array iterator -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var ArrayProto = Array.prototype; - -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-array.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_is-array.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.2.2 IsArray(argument) -var cof = __webpack_require__(/*! ./_cof */ "./node_modules/core-js/modules/_cof.js"); -module.exports = Array.isArray || function isArray(arg) { - return cof(arg) == 'Array'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_is-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_is-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-call.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-call.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// call something on iterator step with safe closing on error -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -module.exports = function (iterator, fn, value, entries) { - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (e) { - var ret = iterator['return']; - if (ret !== undefined) anObject(ret.call(iterator)); - throw e; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-create.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-create.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var create = __webpack_require__(/*! ./_object-create */ "./node_modules/core-js/modules/_object-create.js"); -var descriptor = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -__webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js")(IteratorPrototype, __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'), function () { return this; }); - -module.exports = function (Constructor, NAME, next) { - Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); - setToStringTag(Constructor, NAME + ' Iterator'); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-define.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-define.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var LIBRARY = __webpack_require__(/*! ./_library */ "./node_modules/core-js/modules/_library.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -var $iterCreate = __webpack_require__(/*! ./_iter-create */ "./node_modules/core-js/modules/_iter-create.js"); -var setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ "./node_modules/core-js/modules/_set-to-string-tag.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` -var FF_ITERATOR = '@@iterator'; -var KEYS = 'keys'; -var VALUES = 'values'; - -var returnThis = function () { return this; }; - -module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { - $iterCreate(Constructor, NAME, next); - var getMethod = function (kind) { - if (!BUGGY && kind in proto) return proto[kind]; - switch (kind) { - case KEYS: return function keys() { return new Constructor(this, kind); }; - case VALUES: return function values() { return new Constructor(this, kind); }; - } return function entries() { return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator'; - var DEF_VALUES = DEFAULT == VALUES; - var VALUES_BUG = false; - var proto = Base.prototype; - var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); - var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; - var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; - var methods, key, IteratorPrototype; - // Fix native - if ($anyNative) { - IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); - if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // fix for some old engines - if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); - } - } - // fix Array#{values, @@iterator}.name in V8 / FF - if (DEF_VALUES && $native && $native.name !== VALUES) { - VALUES_BUG = true; - $default = function values() { return $native.call(this); }; - } - // Define iterator - if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if (DEFAULT) { - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if (FORCED) for (key in methods) { - if (!(key in proto)) redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-detect.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-detect.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var SAFE_CLOSING = false; - -try { - var riter = [7][ITERATOR](); - riter['return'] = function () { SAFE_CLOSING = true; }; - // eslint-disable-next-line no-throw-literal - Array.from(riter, function () { throw 2; }); -} catch (e) { /* empty */ } - -module.exports = function (exec, skipClosing) { - if (!skipClosing && !SAFE_CLOSING) return false; - var safe = false; - try { - var arr = [7]; - var iter = arr[ITERATOR](); - iter.next = function () { return { done: safe = true }; }; - arr[ITERATOR] = function () { return iter; }; - exec(arr); - } catch (e) { /* empty */ } - return safe; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iter-step.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iter-step.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (done, value) { - return { value: value, done: !!done }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_iterators.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_iterators.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_library.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/modules/_library.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_meta.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/modules/_meta.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var META = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js")('meta'); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var setDesc = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var id = 0; -var isExtensible = Object.isExtensible || function () { - return true; -}; -var FREEZE = !__webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - return isExtensible(Object.preventExtensions({})); -}); -var setMeta = function (it) { - setDesc(it, META, { value: { - i: 'O' + ++id, // object ID - w: {} // weak collections IDs - } }); -}; -var fastKey = function (it, create) { - // return primitive with prefix - if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return 'F'; - // not necessary to add metadata - if (!create) return 'E'; - // add missing metadata - setMeta(it); - // return object ID - } return it[META].i; -}; -var getWeak = function (it, create) { - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return true; - // not necessary to add metadata - if (!create) return false; - // add missing metadata - setMeta(it); - // return hash weak collections IDs - } return it[META].w; -}; -// add metadata on freeze-family methods calling -var onFreeze = function (it) { - if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); - return it; -}; -var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_metadata.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_metadata.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var Map = __webpack_require__(/*! ./es6.map */ "./node_modules/core-js/modules/es6.map.js"); -var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); -var shared = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('metadata'); -var store = shared.store || (shared.store = new (__webpack_require__(/*! ./es6.weak-map */ "./node_modules/core-js/modules/es6.weak-map.js"))()); - -var getOrCreateMetadataMap = function (target, targetKey, create) { - var targetMetadata = store.get(target); - if (!targetMetadata) { - if (!create) return undefined; - store.set(target, targetMetadata = new Map()); - } - var keyMetadata = targetMetadata.get(targetKey); - if (!keyMetadata) { - if (!create) return undefined; - targetMetadata.set(targetKey, keyMetadata = new Map()); - } return keyMetadata; -}; -var ordinaryHasOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? false : metadataMap.has(MetadataKey); -}; -var ordinaryGetOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); -}; -var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) { - getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); -}; -var ordinaryOwnMetadataKeys = function (target, targetKey) { - var metadataMap = getOrCreateMetadataMap(target, targetKey, false); - var keys = []; - if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); }); - return keys; -}; -var toMetaKey = function (it) { - return it === undefined || typeof it == 'symbol' ? it : String(it); -}; -var exp = function (O) { - $export($export.S, 'Reflect', O); -}; - -module.exports = { - store: store, - map: getOrCreateMetadataMap, - has: ordinaryHasOwnMetadata, - get: ordinaryGetOwnMetadata, - set: ordinaryDefineOwnMetadata, - keys: ordinaryOwnMetadataKeys, - key: toMetaKey, - exp: exp -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-assign.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_object-assign.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// 19.1.2.1 Object.assign(target, source, ...) -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/core-js/modules/_object-keys.js"); -var gOPS = __webpack_require__(/*! ./_object-gops */ "./node_modules/core-js/modules/_object-gops.js"); -var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/core-js/modules/_object-pie.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var $assign = Object.assign; - -// should work with symbols and should have deterministic property order (V8 bug) -module.exports = !$assign || __webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js")(function () { - var A = {}; - var B = {}; - // eslint-disable-next-line no-undef - var S = Symbol(); - var K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function (k) { B[k] = k; }); - return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; -}) ? function assign(target, source) { // eslint-disable-line no-unused-vars - var T = toObject(target); - var aLen = arguments.length; - var index = 1; - var getSymbols = gOPS.f; - var isEnum = pIE.f; - while (aLen > index) { - var S = IObject(arguments[index++]); - var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); - var length = keys.length; - var j = 0; - var key; - while (length > j) { - key = keys[j++]; - if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key]; - } - } return T; -} : $assign; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-create.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_object-create.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var dPs = __webpack_require__(/*! ./_object-dps */ "./node_modules/core-js/modules/_object-dps.js"); -var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/core-js/modules/_enum-bug-keys.js"); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); -var Empty = function () { /* empty */ }; -var PROTOTYPE = 'prototype'; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = __webpack_require__(/*! ./_dom-create */ "./node_modules/core-js/modules/_dom-create.js")('iframe'); - var i = enumBugKeys.length; - var lt = '<'; - var gt = '>'; - var iframeDocument; - iframe.style.display = 'none'; - __webpack_require__(/*! ./_html */ "./node_modules/core-js/modules/_html.js").appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; - return createDict(); -}; - -module.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = createDict(); - return Properties === undefined ? result : dPs(result, Properties); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-dp.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-dp.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/core-js/modules/_ie8-dom-define.js"); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/core-js/modules/_to-primitive.js"); -var dP = Object.defineProperty; - -exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-dps.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-dps.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getKeys = __webpack_require__(/*! ./_object-keys */ "./node_modules/core-js/modules/_object-keys.js"); - -module.exports = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = getKeys(Properties); - var length = keys.length; - var i = 0; - var P; - while (length > i) dP.f(O, P = keys[i++], Properties[P]); - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gopd.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gopd.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(/*! ./_object-pie */ "./node_modules/core-js/modules/_object-pie.js"); -var createDesc = __webpack_require__(/*! ./_property-desc */ "./node_modules/core-js/modules/_property-desc.js"); -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ "./node_modules/core-js/modules/_to-primitive.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ "./node_modules/core-js/modules/_ie8-dom-define.js"); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js") ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gops.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gops.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-gpo.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-gpo.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var toObject = __webpack_require__(/*! ./_to-object */ "./node_modules/core-js/modules/_to-object.js"); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); -var ObjectProto = Object.prototype; - -module.exports = Object.getPrototypeOf || function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } return O instanceof Object ? ObjectProto : null; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-keys-internal.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/modules/_object-keys-internal.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var toIObject = __webpack_require__(/*! ./_to-iobject */ "./node_modules/core-js/modules/_to-iobject.js"); -var arrayIndexOf = __webpack_require__(/*! ./_array-includes */ "./node_modules/core-js/modules/_array-includes.js")(false); -var IE_PROTO = __webpack_require__(/*! ./_shared-key */ "./node_modules/core-js/modules/_shared-key.js")('IE_PROTO'); - -module.exports = function (object, names) { - var O = toIObject(object); - var i = 0; - var result = []; - var key; - for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-keys.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_object-keys.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = __webpack_require__(/*! ./_object-keys-internal */ "./node_modules/core-js/modules/_object-keys-internal.js"); -var enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ "./node_modules/core-js/modules/_enum-bug-keys.js"); - -module.exports = Object.keys || function keys(O) { - return $keys(O, enumBugKeys); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_object-pie.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_object-pie.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_property-desc.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/_property-desc.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_redefine-all.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/modules/_redefine-all.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -module.exports = function (target, src, safe) { - for (var key in src) redefine(target, key, src[key], safe); - return target; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_redefine.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/modules/_redefine.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var hide = __webpack_require__(/*! ./_hide */ "./node_modules/core-js/modules/_hide.js"); -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var SRC = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js")('src'); -var $toString = __webpack_require__(/*! ./_function-to-string */ "./node_modules/core-js/modules/_function-to-string.js"); -var TO_STRING = 'toString'; -var TPL = ('' + $toString).split(TO_STRING); - -__webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js").inspectSource = function (it) { - return $toString.call(it); -}; - -(module.exports = function (O, key, val, safe) { - var isFunction = typeof val == 'function'; - if (isFunction) has(val, 'name') || hide(val, 'name', key); - if (O[key] === val) return; - if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - if (O === global) { - O[key] = val; - } else if (!safe) { - delete O[key]; - hide(O, key, val); - } else if (O[key]) { - O[key] = val; - } else { - hide(O, key, val); - } -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, TO_STRING, function toString() { - return typeof this == 'function' && this[SRC] || $toString.call(this); -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-proto.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_set-proto.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var check = function (O, proto) { - anObject(O); - if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); -}; -module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line - function (test, buggy, set) { - try { - set = __webpack_require__(/*! ./_ctx */ "./node_modules/core-js/modules/_ctx.js")(Function.call, __webpack_require__(/*! ./_object-gopd */ "./node_modules/core-js/modules/_object-gopd.js").f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch (e) { buggy = true; } - return function setPrototypeOf(O, proto) { - check(O, proto); - if (buggy) O.__proto__ = proto; - else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-species.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/_set-species.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var dP = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js"); -var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ "./node_modules/core-js/modules/_descriptors.js"); -var SPECIES = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('species'); - -module.exports = function (KEY) { - var C = global[KEY]; - if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { - configurable: true, - get: function () { return this; } - }); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_set-to-string-tag.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_set-to-string-tag.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var def = __webpack_require__(/*! ./_object-dp */ "./node_modules/core-js/modules/_object-dp.js").f; -var has = __webpack_require__(/*! ./_has */ "./node_modules/core-js/modules/_has.js"); -var TAG = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('toStringTag'); - -module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_shared-key.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_shared-key.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('keys'); -var uid = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js"); -module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_shared.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/_shared.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var core = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js"); -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || (global[SHARED] = {}); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: core.version, - mode: __webpack_require__(/*! ./_library */ "./node_modules/core-js/modules/_library.js") ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-absolute-index.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/modules/_to-absolute-index.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/core-js/modules/_to-integer.js"); -var max = Math.max; -var min = Math.min; -module.exports = function (index, length) { - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-integer.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-integer.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-iobject.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-iobject.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(/*! ./_iobject */ "./node_modules/core-js/modules/_iobject.js"); -var defined = __webpack_require__(/*! ./_defined */ "./node_modules/core-js/modules/_defined.js"); -module.exports = function (it) { - return IObject(defined(it)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-length.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-length.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.15 ToLength -var toInteger = __webpack_require__(/*! ./_to-integer */ "./node_modules/core-js/modules/_to-integer.js"); -var min = Math.min; -module.exports = function (it) { - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-object.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/_to-object.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.13 ToObject(argument) -var defined = __webpack_require__(/*! ./_defined */ "./node_modules/core-js/modules/_defined.js"); -module.exports = function (it) { - return Object(defined(it)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_to-primitive.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/modules/_to-primitive.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_uid.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_uid.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var id = 0; -var px = Math.random(); -module.exports = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_validate-collection.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/_validate-collection.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -module.exports = function (it, TYPE) { - if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/_wks.js": -/*!**********************************************!*\ - !*** ./node_modules/core-js/modules/_wks.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(/*! ./_shared */ "./node_modules/core-js/modules/_shared.js")('wks'); -var uid = __webpack_require__(/*! ./_uid */ "./node_modules/core-js/modules/_uid.js"); -var Symbol = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js").Symbol; -var USE_SYMBOL = typeof Symbol == 'function'; - -var $exports = module.exports = function (name) { - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); -}; - -$exports.store = store; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/core.get-iterator-method.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/core.get-iterator-method.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ./_classof */ "./node_modules/core-js/modules/_classof.js"); -var ITERATOR = __webpack_require__(/*! ./_wks */ "./node_modules/core-js/modules/_wks.js")('iterator'); -var Iterators = __webpack_require__(/*! ./_iterators */ "./node_modules/core-js/modules/_iterators.js"); -module.exports = __webpack_require__(/*! ./_core */ "./node_modules/core-js/modules/_core.js").getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.map.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/es6.map.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/core-js/modules/_collection-strong.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var MAP = 'Map'; - -// 23.1 Map Objects -module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(MAP, function (get) { - return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.1.3.6 Map.prototype.get(key) - get: function get(key) { - var entry = strong.getEntry(validate(this, MAP), key); - return entry && entry.v; - }, - // 23.1.3.9 Map.prototype.set(key, value) - set: function set(key, value) { - return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); - } -}, strong, true); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.set.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/modules/es6.set.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var strong = __webpack_require__(/*! ./_collection-strong */ "./node_modules/core-js/modules/_collection-strong.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var SET = 'Set'; - -// 23.2 Set Objects -module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(SET, function (get) { - return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; -}, { - // 23.2.3.1 Set.prototype.add(value) - add: function add(value) { - return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); - } -}, strong); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es6.weak-map.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/modules/es6.weak-map.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ./_global */ "./node_modules/core-js/modules/_global.js"); -var each = __webpack_require__(/*! ./_array-methods */ "./node_modules/core-js/modules/_array-methods.js")(0); -var redefine = __webpack_require__(/*! ./_redefine */ "./node_modules/core-js/modules/_redefine.js"); -var meta = __webpack_require__(/*! ./_meta */ "./node_modules/core-js/modules/_meta.js"); -var assign = __webpack_require__(/*! ./_object-assign */ "./node_modules/core-js/modules/_object-assign.js"); -var weak = __webpack_require__(/*! ./_collection-weak */ "./node_modules/core-js/modules/_collection-weak.js"); -var isObject = __webpack_require__(/*! ./_is-object */ "./node_modules/core-js/modules/_is-object.js"); -var validate = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var NATIVE_WEAK_MAP = __webpack_require__(/*! ./_validate-collection */ "./node_modules/core-js/modules/_validate-collection.js"); -var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; -var WEAK_MAP = 'WeakMap'; -var getWeak = meta.getWeak; -var isExtensible = Object.isExtensible; -var uncaughtFrozenStore = weak.ufstore; -var InternalMap; - -var wrapper = function (get) { - return function WeakMap() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; -}; - -var methods = { - // 23.3.3.3 WeakMap.prototype.get(key) - get: function get(key) { - if (isObject(key)) { - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); - return data ? data[this._i] : undefined; - } - }, - // 23.3.3.5 WeakMap.prototype.set(key, value) - set: function set(key, value) { - return weak.def(validate(this, WEAK_MAP), key, value); - } -}; - -// 23.3 WeakMap Objects -var $WeakMap = module.exports = __webpack_require__(/*! ./_collection */ "./node_modules/core-js/modules/_collection.js")(WEAK_MAP, wrapper, methods, weak, true, true); - -// IE11 WeakMap frozen keys fix -if (NATIVE_WEAK_MAP && IS_IE11) { - InternalMap = weak.getConstructor(wrapper, WEAK_MAP); - assign(InternalMap.prototype, methods); - meta.NEED = true; - each(['delete', 'has', 'get', 'set'], function (key) { - var proto = $WeakMap.prototype; - var method = proto[key]; - redefine(proto, key, function (a, b) { - // store frozen objects on internal weakmap shim - if (isObject(a) && !isExtensible(a)) { - if (!this._f) this._f = new InternalMap(); - var result = this._f[key](a, b); - return key == 'set' ? this : result; - // store all the rest on native weakmap - } return method.call(this, a, b); - }); - }); -} - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.define-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.define-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toMetaKey = metadata.key; -var ordinaryDefineOwnMetadata = metadata.set; - -metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) { - ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.delete-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.delete-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var toMetaKey = metadata.key; -var getOrCreateMetadataMap = metadata.map; -var store = metadata.store; - -metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]); - var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); - if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; - if (metadataMap.size) return true; - var targetMetadata = store.get(target); - targetMetadata['delete'](targetKey); - return !!targetMetadata.size || store['delete'](target); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js": -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var Set = __webpack_require__(/*! ./es6.set */ "./node_modules/core-js/modules/es6.set.js"); -var from = __webpack_require__(/*! ./_array-from-iterable */ "./node_modules/core-js/modules/_array-from-iterable.js"); -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryOwnMetadataKeys = metadata.keys; -var toMetaKey = metadata.key; - -var ordinaryMetadataKeys = function (O, P) { - var oKeys = ordinaryOwnMetadataKeys(O, P); - var parent = getPrototypeOf(O); - if (parent === null) return oKeys; - var pKeys = ordinaryMetadataKeys(parent, P); - return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; -}; - -metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) { - return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-metadata.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-metadata.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryHasOwnMetadata = metadata.has; -var ordinaryGetOwnMetadata = metadata.get; -var toMetaKey = metadata.key; - -var ordinaryGetMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P); - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; -}; - -metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) { - return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js": -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryOwnMetadataKeys = metadata.keys; -var toMetaKey = metadata.key; - -metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) { - return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.get-own-metadata.js": -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryGetOwnMetadata = metadata.get; -var toMetaKey = metadata.key; - -metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) { - return ordinaryGetOwnMetadata(metadataKey, anObject(target) - , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.has-metadata.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.has-metadata.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ "./node_modules/core-js/modules/_object-gpo.js"); -var ordinaryHasOwnMetadata = metadata.has; -var toMetaKey = metadata.key; - -var ordinaryHasMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return true; - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; -}; - -metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) { - return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.has-own-metadata.js": -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.has-own-metadata.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var ordinaryHasOwnMetadata = metadata.has; -var toMetaKey = metadata.key; - -metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) { - return ordinaryHasOwnMetadata(metadataKey, anObject(target) - , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); -} }); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es7.reflect.metadata.js": -/*!**************************************************************!*\ - !*** ./node_modules/core-js/modules/es7.reflect.metadata.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $metadata = __webpack_require__(/*! ./_metadata */ "./node_modules/core-js/modules/_metadata.js"); -var anObject = __webpack_require__(/*! ./_an-object */ "./node_modules/core-js/modules/_an-object.js"); -var aFunction = __webpack_require__(/*! ./_a-function */ "./node_modules/core-js/modules/_a-function.js"); -var toMetaKey = $metadata.key; -var ordinaryDefineOwnMetadata = $metadata.set; - -$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) { - return function decorator(target, targetKey) { - ordinaryDefineOwnMetadata( - metadataKey, metadataValue, - (targetKey !== undefined ? anObject : aFunction)(target), - toMetaKey(targetKey) - ); - }; -} }); - - -/***/ }), - -/***/ "./node_modules/zone.js/dist/zone.js": -/*!*******************************************!*\ - !*** ./node_modules/zone.js/dist/zone.js ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/** -* @license -* Copyright Google Inc. All Rights Reserved. -* -* Use of this source code is governed by an MIT-style license that can be -* found in the LICENSE file at https://angular.io/license -*/ -(function (global, factory) { - true ? factory() : - undefined; -}(this, (function () { 'use strict'; - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var Zone$1 = (function (global) { - var performance = global['performance']; - function mark(name) { - performance && performance['mark'] && performance['mark'](name); - } - function performanceMeasure(name, label) { - performance && performance['measure'] && performance['measure'](name, label); - } - mark('Zone'); - var checkDuplicate = global[('__zone_symbol__forceDuplicateZoneCheck')] === true; - if (global['Zone']) { - // if global['Zone'] already exists (maybe zone.js was already loaded or - // some other lib also registered a global object named Zone), we may need - // to throw an error, but sometimes user may not want this error. - // For example, - // we have two web pages, page1 includes zone.js, page2 doesn't. - // and the 1st time user load page1 and page2, everything work fine, - // but when user load page2 again, error occurs because global['Zone'] already exists. - // so we add a flag to let user choose whether to throw this error or not. - // By default, if existing Zone is from zone.js, we will not throw the error. - if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') { - throw new Error('Zone already loaded.'); - } - else { - return global['Zone']; - } - } - var Zone = /** @class */ (function () { - function Zone(parent, zoneSpec) { - this._parent = parent; - this._name = zoneSpec ? zoneSpec.name || 'unnamed' : ''; - this._properties = zoneSpec && zoneSpec.properties || {}; - this._zoneDelegate = - new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec); - } - Zone.assertZonePatched = function () { - if (global['Promise'] !== patches['ZoneAwarePromise']) { - throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' + - 'has been overwritten.\n' + - 'Most likely cause is that a Promise polyfill has been loaded ' + - 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' + - 'If you must load one, do so before loading zone.js.)'); - } - }; - Object.defineProperty(Zone, "root", { - get: function () { - var zone = Zone.current; - while (zone.parent) { - zone = zone.parent; - } - return zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone, "current", { - get: function () { - return _currentZoneFrame.zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone, "currentTask", { - get: function () { - return _currentTask; - }, - enumerable: true, - configurable: true - }); - Zone.__load_patch = function (name, fn) { - if (patches.hasOwnProperty(name)) { - if (checkDuplicate) { - throw Error('Already loaded patch: ' + name); - } - } - else if (!global['__Zone_disable_' + name]) { - var perfName = 'Zone:' + name; - mark(perfName); - patches[name] = fn(global, Zone, _api); - performanceMeasure(perfName, perfName); - } - }; - Object.defineProperty(Zone.prototype, "parent", { - get: function () { - return this._parent; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Zone.prototype, "name", { - get: function () { - return this._name; - }, - enumerable: true, - configurable: true - }); - Zone.prototype.get = function (key) { - var zone = this.getZoneWith(key); - if (zone) - return zone._properties[key]; - }; - Zone.prototype.getZoneWith = function (key) { - var current = this; - while (current) { - if (current._properties.hasOwnProperty(key)) { - return current; - } - current = current._parent; - } - return null; - }; - Zone.prototype.fork = function (zoneSpec) { - if (!zoneSpec) - throw new Error('ZoneSpec required!'); - return this._zoneDelegate.fork(this, zoneSpec); - }; - Zone.prototype.wrap = function (callback, source) { - if (typeof callback !== 'function') { - throw new Error('Expecting function got: ' + callback); - } - var _callback = this._zoneDelegate.intercept(this, callback, source); - var zone = this; - return function () { - return zone.runGuarded(_callback, this, arguments, source); - }; - }; - Zone.prototype.run = function (callback, applyThis, applyArgs, source) { - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - }; - Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) { - if (applyThis === void 0) { applyThis = null; } - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - }; - Zone.prototype.runTask = function (task, applyThis, applyArgs) { - if (task.zone != this) { - throw new Error('A task can only be run in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - } - // https://github.com/angular/zone.js/issues/778, sometimes eventTask - // will run in notScheduled(canceled) state, we should not try to - // run such kind of task but just return - if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) { - return; - } - var reEntryGuard = task.state != running; - reEntryGuard && task._transitionTo(running, scheduled); - task.runCount++; - var previousTask = _currentTask; - _currentTask = task; - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - if (task.type == macroTask && task.data && !task.data.isPeriodic) { - task.cancelFn = undefined; - } - try { - return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - // if the task's state is notScheduled or unknown, then it has already been cancelled - // we should not reset the state to scheduled - if (task.state !== notScheduled && task.state !== unknown) { - if (task.type == eventTask || (task.data && task.data.isPeriodic)) { - reEntryGuard && task._transitionTo(scheduled, running); - } - else { - task.runCount = 0; - this._updateTaskCount(task, -1); - reEntryGuard && - task._transitionTo(notScheduled, running, notScheduled); - } - } - _currentZoneFrame = _currentZoneFrame.parent; - _currentTask = previousTask; - } - }; - Zone.prototype.scheduleTask = function (task) { - if (task.zone && task.zone !== this) { - // check if the task was rescheduled, the newZone - // should not be the children of the original zone - var newZone = this; - while (newZone) { - if (newZone === task.zone) { - throw Error("can not reschedule task to " + this.name + " which is descendants of the original zone " + task.zone.name); - } - newZone = newZone.parent; - } - } - task._transitionTo(scheduling, notScheduled); - var zoneDelegates = []; - task._zoneDelegates = zoneDelegates; - task._zone = this; - try { - task = this._zoneDelegate.scheduleTask(this, task); - } - catch (err) { - // should set task's state to unknown when scheduleTask throw error - // because the err may from reschedule, so the fromState maybe notScheduled - task._transitionTo(unknown, scheduling, notScheduled); - // TODO: @JiaLiPassion, should we check the result from handleError? - this._zoneDelegate.handleError(this, err); - throw err; - } - if (task._zoneDelegates === zoneDelegates) { - // we have to check because internally the delegate can reschedule the task. - this._updateTaskCount(task, 1); - } - if (task.state == scheduling) { - task._transitionTo(scheduled, scheduling); - } - return task; - }; - Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) { - return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined)); - }; - Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel)); - }; - Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel)); - }; - Zone.prototype.cancelTask = function (task) { - if (task.zone != this) - throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - task._transitionTo(canceling, scheduled, running); - try { - this._zoneDelegate.cancelTask(this, task); - } - catch (err) { - // if error occurs when cancelTask, transit the state to unknown - task._transitionTo(unknown, canceling); - this._zoneDelegate.handleError(this, err); - throw err; - } - this._updateTaskCount(task, -1); - task._transitionTo(notScheduled, canceling); - task.runCount = 0; - return task; - }; - Zone.prototype._updateTaskCount = function (task, count) { - var zoneDelegates = task._zoneDelegates; - if (count == -1) { - task._zoneDelegates = null; - } - for (var i = 0; i < zoneDelegates.length; i++) { - zoneDelegates[i]._updateTaskCount(task.type, count); - } - }; - Zone.__symbol__ = __symbol__; - return Zone; - }()); - var DELEGATE_ZS = { - name: '', - onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); }, - onScheduleTask: function (delegate, _, target, task) { - return delegate.scheduleTask(target, task); - }, - onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) { - return delegate.invokeTask(target, task, applyThis, applyArgs); - }, - onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); } - }; - var ZoneDelegate = /** @class */ (function () { - function ZoneDelegate(zone, parentDelegate, zoneSpec) { - this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 }; - this.zone = zone; - this._parentDelegate = parentDelegate; - this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS); - this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt); - this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate.zone); - this._interceptZS = - zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS); - this._interceptDlgt = - zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt); - this._interceptCurrZone = - zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate.zone); - this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS); - this._invokeDlgt = - zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt); - this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate.zone); - this._handleErrorZS = - zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS); - this._handleErrorDlgt = - zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt); - this._handleErrorCurrZone = - zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate.zone); - this._scheduleTaskZS = - zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS); - this._scheduleTaskDlgt = zoneSpec && - (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt); - this._scheduleTaskCurrZone = - zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate.zone); - this._invokeTaskZS = - zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS); - this._invokeTaskDlgt = - zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt); - this._invokeTaskCurrZone = - zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate.zone); - this._cancelTaskZS = - zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS); - this._cancelTaskDlgt = - zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt); - this._cancelTaskCurrZone = - zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate.zone); - this._hasTaskZS = null; - this._hasTaskDlgt = null; - this._hasTaskDlgtOwner = null; - this._hasTaskCurrZone = null; - var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask; - var parentHasTask = parentDelegate && parentDelegate._hasTaskZS; - if (zoneSpecHasTask || parentHasTask) { - // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such - // a case all task related interceptors must go through this ZD. We can't short circuit it. - this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS; - this._hasTaskDlgt = parentDelegate; - this._hasTaskDlgtOwner = this; - this._hasTaskCurrZone = zone; - if (!zoneSpec.onScheduleTask) { - this._scheduleTaskZS = DELEGATE_ZS; - this._scheduleTaskDlgt = parentDelegate; - this._scheduleTaskCurrZone = this.zone; - } - if (!zoneSpec.onInvokeTask) { - this._invokeTaskZS = DELEGATE_ZS; - this._invokeTaskDlgt = parentDelegate; - this._invokeTaskCurrZone = this.zone; - } - if (!zoneSpec.onCancelTask) { - this._cancelTaskZS = DELEGATE_ZS; - this._cancelTaskDlgt = parentDelegate; - this._cancelTaskCurrZone = this.zone; - } - } - } - ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) { - return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) : - new Zone(targetZone, zoneSpec); - }; - ZoneDelegate.prototype.intercept = function (targetZone, callback, source) { - return this._interceptZS ? - this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) : - callback; - }; - ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) { - return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) : - callback.apply(applyThis, applyArgs); - }; - ZoneDelegate.prototype.handleError = function (targetZone, error) { - return this._handleErrorZS ? - this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) : - true; - }; - ZoneDelegate.prototype.scheduleTask = function (targetZone, task) { - var returnTask = task; - if (this._scheduleTaskZS) { - if (this._hasTaskZS) { - returnTask._zoneDelegates.push(this._hasTaskDlgtOwner); - } - returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task); - if (!returnTask) - returnTask = task; - } - else { - if (task.scheduleFn) { - task.scheduleFn(task); - } - else if (task.type == microTask) { - scheduleMicroTask(task); - } - else { - throw new Error('Task is missing scheduleFn.'); - } - } - return returnTask; - }; - ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) { - return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) : - task.callback.apply(applyThis, applyArgs); - }; - ZoneDelegate.prototype.cancelTask = function (targetZone, task) { - var value; - if (this._cancelTaskZS) { - value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task); - } - else { - if (!task.cancelFn) { - throw Error('Task is not cancelable'); - } - value = task.cancelFn(task); - } - return value; - }; - ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) { - // hasTask should not throw error so other ZoneDelegate - // can still trigger hasTask callback - try { - this._hasTaskZS && - this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty); - } - catch (err) { - this.handleError(targetZone, err); - } - }; - ZoneDelegate.prototype._updateTaskCount = function (type, count) { - var counts = this._taskCounts; - var prev = counts[type]; - var next = counts[type] = prev + count; - if (next < 0) { - throw new Error('More tasks executed then were scheduled.'); - } - if (prev == 0 || next == 0) { - var isEmpty = { - microTask: counts['microTask'] > 0, - macroTask: counts['macroTask'] > 0, - eventTask: counts['eventTask'] > 0, - change: type - }; - this.hasTask(this.zone, isEmpty); - } - }; - return ZoneDelegate; - }()); - var ZoneTask = /** @class */ (function () { - function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) { - this._zone = null; - this.runCount = 0; - this._zoneDelegates = null; - this._state = 'notScheduled'; - this.type = type; - this.source = source; - this.data = options; - this.scheduleFn = scheduleFn; - this.cancelFn = cancelFn; - this.callback = callback; - var self = this; - // TODO: @JiaLiPassion options should have interface - if (type === eventTask && options && options.useG) { - this.invoke = ZoneTask.invokeTask; - } - else { - this.invoke = function () { - return ZoneTask.invokeTask.call(global, self, this, arguments); - }; - } - } - ZoneTask.invokeTask = function (task, target, args) { - if (!task) { - task = this; - } - _numberOfNestedTaskFrames++; - try { - task.runCount++; - return task.zone.runTask(task, target, args); - } - finally { - if (_numberOfNestedTaskFrames == 1) { - drainMicroTaskQueue(); - } - _numberOfNestedTaskFrames--; - } - }; - Object.defineProperty(ZoneTask.prototype, "zone", { - get: function () { - return this._zone; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ZoneTask.prototype, "state", { - get: function () { - return this._state; - }, - enumerable: true, - configurable: true - }); - ZoneTask.prototype.cancelScheduleRequest = function () { - this._transitionTo(notScheduled, scheduling); - }; - ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) { - if (this._state === fromState1 || this._state === fromState2) { - this._state = toState; - if (toState == notScheduled) { - this._zoneDelegates = null; - } - } - else { - throw new Error(this.type + " '" + this.source + "': can not transition to '" + toState + "', expecting state '" + fromState1 + "'" + (fromState2 ? ' or \'' + fromState2 + '\'' : '') + ", was '" + this._state + "'."); - } - }; - ZoneTask.prototype.toString = function () { - if (this.data && typeof this.data.handleId !== 'undefined') { - return this.data.handleId.toString(); - } - else { - return Object.prototype.toString.call(this); - } - }; - // add toJSON method to prevent cyclic error when - // call JSON.stringify(zoneTask) - ZoneTask.prototype.toJSON = function () { - return { - type: this.type, - state: this.state, - source: this.source, - zone: this.zone.name, - runCount: this.runCount - }; - }; - return ZoneTask; - }()); - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// MICROTASK QUEUE - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - var symbolSetTimeout = __symbol__('setTimeout'); - var symbolPromise = __symbol__('Promise'); - var symbolThen = __symbol__('then'); - var _microTaskQueue = []; - var _isDrainingMicrotaskQueue = false; - var nativeMicroTaskQueuePromise; - function scheduleMicroTask(task) { - // if we are not running in any task, and there has not been anything scheduled - // we must bootstrap the initial task creation by manually scheduling the drain - if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) { - // We are not running in Task, so we need to kickstart the microtask queue. - if (!nativeMicroTaskQueuePromise) { - if (global[symbolPromise]) { - nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0); - } - } - if (nativeMicroTaskQueuePromise) { - var nativeThen = nativeMicroTaskQueuePromise[symbolThen]; - if (!nativeThen) { - // native Promise is not patchable, we need to use `then` directly - // issue 1078 - nativeThen = nativeMicroTaskQueuePromise['then']; - } - nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue); - } - else { - global[symbolSetTimeout](drainMicroTaskQueue, 0); - } - } - task && _microTaskQueue.push(task); - } - function drainMicroTaskQueue() { - if (!_isDrainingMicrotaskQueue) { - _isDrainingMicrotaskQueue = true; - while (_microTaskQueue.length) { - var queue = _microTaskQueue; - _microTaskQueue = []; - for (var i = 0; i < queue.length; i++) { - var task = queue[i]; - try { - task.zone.runTask(task, null, null); - } - catch (error) { - _api.onUnhandledError(error); - } - } - } - _api.microtaskDrainDone(); - _isDrainingMicrotaskQueue = false; - } - } - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// BOOTSTRAP - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - var NO_ZONE = { name: 'NO ZONE' }; - var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown'; - var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask'; - var patches = {}; - var _api = { - symbol: __symbol__, - currentZoneFrame: function () { return _currentZoneFrame; }, - onUnhandledError: noop, - microtaskDrainDone: noop, - scheduleMicroTask: scheduleMicroTask, - showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; }, - patchEventTarget: function () { return []; }, - patchOnProperties: noop, - patchMethod: function () { return noop; }, - bindArguments: function () { return []; }, - patchThen: function () { return noop; }, - setNativePromise: function (NativePromise) { - // sometimes NativePromise.resolve static function - // is not ready yet, (such as core-js/es6.promise) - // so we need to check here. - if (NativePromise && typeof NativePromise.resolve === 'function') { - nativeMicroTaskQueuePromise = NativePromise.resolve(0); - } - }, - }; - var _currentZoneFrame = { parent: null, zone: new Zone(null, null) }; - var _currentTask = null; - var _numberOfNestedTaskFrames = 0; - function noop() { } - function __symbol__(name) { - return '__zone_symbol__' + name; - } - performanceMeasure('Zone', 'Zone'); - return global['Zone'] = Zone; -})(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global); - -var __values = (undefined && undefined.__values) || function (o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; -}; -Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) { - var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var ObjectDefineProperty = Object.defineProperty; - function readableObjectToString(obj) { - if (obj && obj.toString === Object.prototype.toString) { - var className = obj.constructor && obj.constructor.name; - return (className ? className : '') + ': ' + JSON.stringify(obj); - } - return obj ? obj.toString() : Object.prototype.toString.call(obj); - } - var __symbol__ = api.symbol; - var _uncaughtPromiseErrors = []; - var symbolPromise = __symbol__('Promise'); - var symbolThen = __symbol__('then'); - var creationTrace = '__creationTrace__'; - api.onUnhandledError = function (e) { - if (api.showUncaughtError()) { - var rejection = e && e.rejection; - if (rejection) { - console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined); - } - else { - console.error(e); - } - } - }; - api.microtaskDrainDone = function () { - while (_uncaughtPromiseErrors.length) { - var _loop_1 = function () { - var uncaughtPromiseError = _uncaughtPromiseErrors.shift(); - try { - uncaughtPromiseError.zone.runGuarded(function () { - throw uncaughtPromiseError; - }); - } - catch (error) { - handleUnhandledRejection(error); - } - }; - while (_uncaughtPromiseErrors.length) { - _loop_1(); - } - } - }; - var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler'); - function handleUnhandledRejection(e) { - api.onUnhandledError(e); - try { - var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL]; - if (handler && typeof handler === 'function') { - handler.call(this, e); - } - } - catch (err) { - } - } - function isThenable(value) { - return value && value.then; - } - function forwardResolution(value) { - return value; - } - function forwardRejection(rejection) { - return ZoneAwarePromise.reject(rejection); - } - var symbolState = __symbol__('state'); - var symbolValue = __symbol__('value'); - var symbolFinally = __symbol__('finally'); - var symbolParentPromiseValue = __symbol__('parentPromiseValue'); - var symbolParentPromiseState = __symbol__('parentPromiseState'); - var source = 'Promise.then'; - var UNRESOLVED = null; - var RESOLVED = true; - var REJECTED = false; - var REJECTED_NO_CATCH = 0; - function makeResolver(promise, state) { - return function (v) { - try { - resolvePromise(promise, state, v); - } - catch (err) { - resolvePromise(promise, false, err); - } - // Do not return value or you will break the Promise spec. - }; - } - var once = function () { - var wasCalled = false; - return function wrapper(wrappedFunction) { - return function () { - if (wasCalled) { - return; - } - wasCalled = true; - wrappedFunction.apply(null, arguments); - }; - }; - }; - var TYPE_ERROR = 'Promise resolved with itself'; - var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace'); - // Promise Resolution - function resolvePromise(promise, state, value) { - var onceWrapper = once(); - if (promise === value) { - throw new TypeError(TYPE_ERROR); - } - if (promise[symbolState] === UNRESOLVED) { - // should only get value.then once based on promise spec. - var then = null; - try { - if (typeof value === 'object' || typeof value === 'function') { - then = value && value.then; - } - } - catch (err) { - onceWrapper(function () { - resolvePromise(promise, false, err); - })(); - return promise; - } - // if (value instanceof ZoneAwarePromise) { - if (state !== REJECTED && value instanceof ZoneAwarePromise && - value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) && - value[symbolState] !== UNRESOLVED) { - clearRejectedNoCatch(value); - resolvePromise(promise, value[symbolState], value[symbolValue]); - } - else if (state !== REJECTED && typeof then === 'function') { - try { - then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))); - } - catch (err) { - onceWrapper(function () { - resolvePromise(promise, false, err); - })(); - } - } - else { - promise[symbolState] = state; - var queue = promise[symbolValue]; - promise[symbolValue] = value; - if (promise[symbolFinally] === symbolFinally) { - // the promise is generated by Promise.prototype.finally - if (state === RESOLVED) { - // the state is resolved, should ignore the value - // and use parent promise value - promise[symbolState] = promise[symbolParentPromiseState]; - promise[symbolValue] = promise[symbolParentPromiseValue]; - } - } - // record task information in value when error occurs, so we can - // do some additional work such as render longStackTrace - if (state === REJECTED && value instanceof Error) { - // check if longStackTraceZone is here - var trace = Zone.currentTask && Zone.currentTask.data && - Zone.currentTask.data[creationTrace]; - if (trace) { - // only keep the long stack trace into error when in longStackTraceZone - ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace }); - } - } - for (var i = 0; i < queue.length;) { - scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]); - } - if (queue.length == 0 && state == REJECTED) { - promise[symbolState] = REJECTED_NO_CATCH; - try { - // try to print more readable error log - throw new Error('Uncaught (in promise): ' + readableObjectToString(value) + - (value && value.stack ? '\n' + value.stack : '')); - } - catch (err) { - var error_1 = err; - error_1.rejection = value; - error_1.promise = promise; - error_1.zone = Zone.current; - error_1.task = Zone.currentTask; - _uncaughtPromiseErrors.push(error_1); - api.scheduleMicroTask(); // to make sure that it is running - } - } - } - } - // Resolving an already resolved promise is a noop. - return promise; - } - var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler'); - function clearRejectedNoCatch(promise) { - if (promise[symbolState] === REJECTED_NO_CATCH) { - // if the promise is rejected no catch status - // and queue.length > 0, means there is a error handler - // here to handle the rejected promise, we should trigger - // windows.rejectionhandled eventHandler or nodejs rejectionHandled - // eventHandler - try { - var handler = Zone[REJECTION_HANDLED_HANDLER]; - if (handler && typeof handler === 'function') { - handler.call(this, { rejection: promise[symbolValue], promise: promise }); - } - } - catch (err) { - } - promise[symbolState] = REJECTED; - for (var i = 0; i < _uncaughtPromiseErrors.length; i++) { - if (promise === _uncaughtPromiseErrors[i].promise) { - _uncaughtPromiseErrors.splice(i, 1); - } - } - } - } - function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) { - clearRejectedNoCatch(promise); - var promiseState = promise[symbolState]; - var delegate = promiseState ? - (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution : - (typeof onRejected === 'function') ? onRejected : forwardRejection; - zone.scheduleMicroTask(source, function () { - try { - var parentPromiseValue = promise[symbolValue]; - var isFinallyPromise = chainPromise && symbolFinally === chainPromise[symbolFinally]; - if (isFinallyPromise) { - // if the promise is generated from finally call, keep parent promise's state and value - chainPromise[symbolParentPromiseValue] = parentPromiseValue; - chainPromise[symbolParentPromiseState] = promiseState; - } - // should not pass value to finally callback - var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ? - [] : - [parentPromiseValue]); - resolvePromise(chainPromise, true, value); - } - catch (error) { - // if error occurs, should always return this error - resolvePromise(chainPromise, false, error); - } - }, chainPromise); - } - var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }'; - var ZoneAwarePromise = /** @class */ (function () { - function ZoneAwarePromise(executor) { - var promise = this; - if (!(promise instanceof ZoneAwarePromise)) { - throw new Error('Must be an instanceof Promise.'); - } - promise[symbolState] = UNRESOLVED; - promise[symbolValue] = []; // queue; - try { - executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED)); - } - catch (error) { - resolvePromise(promise, false, error); - } - } - ZoneAwarePromise.toString = function () { - return ZONE_AWARE_PROMISE_TO_STRING; - }; - ZoneAwarePromise.resolve = function (value) { - return resolvePromise(new this(null), RESOLVED, value); - }; - ZoneAwarePromise.reject = function (error) { - return resolvePromise(new this(null), REJECTED, error); - }; - ZoneAwarePromise.race = function (values) { - var e_1, _a; - var resolve; - var reject; - var promise = new this(function (res, rej) { - resolve = res; - reject = rej; - }); - function onResolve(value) { - promise && (promise = false || resolve(value)); - } - function onReject(error) { - promise && (promise = false || reject(error)); - } - try { - for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) { - var value = values_1_1.value; - if (!isThenable(value)) { - value = this.resolve(value); - } - value.then(onResolve, onReject); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1); - } - finally { if (e_1) throw e_1.error; } - } - return promise; - }; - ZoneAwarePromise.all = function (values) { - var e_2, _a; - var resolve; - var reject; - var promise = new this(function (res, rej) { - resolve = res; - reject = rej; - }); - // Start at 2 to prevent prematurely resolving if .then is called immediately. - var unresolvedCount = 2; - var valueIndex = 0; - var resolvedValues = []; - var _loop_2 = function (value) { - if (!isThenable(value)) { - value = this_1.resolve(value); - } - var curValueIndex = valueIndex; - value.then(function (value) { - resolvedValues[curValueIndex] = value; - unresolvedCount--; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - }, reject); - unresolvedCount++; - valueIndex++; - }; - var this_1 = this; - try { - for (var values_2 = __values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) { - var value = values_2_1.value; - _loop_2(value); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2); - } - finally { if (e_2) throw e_2.error; } - } - // Make the unresolvedCount zero-based again. - unresolvedCount -= 2; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - return promise; - }; - ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) { - var chainPromise = new this.constructor(null); - var zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected); - } - return chainPromise; - }; - ZoneAwarePromise.prototype.catch = function (onRejected) { - return this.then(null, onRejected); - }; - ZoneAwarePromise.prototype.finally = function (onFinally) { - var chainPromise = new this.constructor(null); - chainPromise[symbolFinally] = symbolFinally; - var zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFinally, onFinally); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally); - } - return chainPromise; - }; - return ZoneAwarePromise; - }()); - // Protect against aggressive optimizers dropping seemingly unused properties. - // E.g. Closure Compiler in advanced mode. - ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve; - ZoneAwarePromise['reject'] = ZoneAwarePromise.reject; - ZoneAwarePromise['race'] = ZoneAwarePromise.race; - ZoneAwarePromise['all'] = ZoneAwarePromise.all; - var NativePromise = global[symbolPromise] = global['Promise']; - var ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise'); - var desc = ObjectGetOwnPropertyDescriptor(global, 'Promise'); - if (!desc || desc.configurable) { - desc && delete desc.writable; - desc && delete desc.value; - if (!desc) { - desc = { configurable: true, enumerable: true }; - } - desc.get = function () { - // if we already set ZoneAwarePromise, use patched one - // otherwise return native one. - return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise]; - }; - desc.set = function (NewNativePromise) { - if (NewNativePromise === ZoneAwarePromise) { - // if the NewNativePromise is ZoneAwarePromise - // save to global - global[ZONE_AWARE_PROMISE] = NewNativePromise; - } - else { - // if the NewNativePromise is not ZoneAwarePromise - // for example: after load zone.js, some library just - // set es6-promise to global, if we set it to global - // directly, assertZonePatched will fail and angular - // will not loaded, so we just set the NewNativePromise - // to global[symbolPromise], so the result is just like - // we load ES6 Promise before zone.js - global[symbolPromise] = NewNativePromise; - if (!NewNativePromise.prototype[symbolThen]) { - patchThen(NewNativePromise); - } - api.setNativePromise(NewNativePromise); - } - }; - ObjectDefineProperty(global, 'Promise', desc); - } - global['Promise'] = ZoneAwarePromise; - var symbolThenPatched = __symbol__('thenPatched'); - function patchThen(Ctor) { - var proto = Ctor.prototype; - var prop = ObjectGetOwnPropertyDescriptor(proto, 'then'); - if (prop && (prop.writable === false || !prop.configurable)) { - // check Ctor.prototype.then propertyDescriptor is writable or not - // in meteor env, writable is false, we should ignore such case - return; - } - var originalThen = proto.then; - // Keep a reference to the original method. - proto[symbolThen] = originalThen; - Ctor.prototype.then = function (onResolve, onReject) { - var _this = this; - var wrapped = new ZoneAwarePromise(function (resolve, reject) { - originalThen.call(_this, resolve, reject); - }); - return wrapped.then(onResolve, onReject); - }; - Ctor[symbolThenPatched] = true; - } - api.patchThen = patchThen; - if (NativePromise) { - patchThen(NativePromise); - } - // This is not part of public API, but it is useful for tests, so we expose it. - Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors; - return ZoneAwarePromise; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -Zone.__load_patch('fetch', function (global, Zone, api) { - var fetch = global['fetch']; - var ZoneAwarePromise = global.Promise; - var symbolThenPatched = api.symbol('thenPatched'); - var fetchTaskScheduling = api.symbol('fetchTaskScheduling'); - var fetchTaskAborting = api.symbol('fetchTaskAborting'); - if (typeof fetch !== 'function') { - return; - } - var OriginalAbortController = global['AbortController']; - var supportAbort = typeof OriginalAbortController === 'function'; - var abortNative = null; - if (supportAbort) { - global['AbortController'] = function () { - var abortController = new OriginalAbortController(); - var signal = abortController.signal; - signal.abortController = abortController; - return abortController; - }; - abortNative = api.patchMethod(OriginalAbortController.prototype, 'abort', function (delegate) { return function (self, args) { - if (self.task) { - return self.task.zone.cancelTask(self.task); - } - return delegate.apply(self, args); - }; }); - } - var placeholder = function () { }; - global['fetch'] = function () { - var _this = this; - var args = Array.prototype.slice.call(arguments); - var options = args.length > 1 ? args[1] : null; - var signal = options && options.signal; - return new Promise(function (res, rej) { - var task = Zone.current.scheduleMacroTask('fetch', placeholder, args, function () { - var fetchPromise; - var zone = Zone.current; - try { - zone[fetchTaskScheduling] = true; - fetchPromise = fetch.apply(_this, args); - } - catch (error) { - rej(error); - return; - } - finally { - zone[fetchTaskScheduling] = false; - } - if (!(fetchPromise instanceof ZoneAwarePromise)) { - var ctor = fetchPromise.constructor; - if (!ctor[symbolThenPatched]) { - api.patchThen(ctor); - } - } - fetchPromise.then(function (resource) { - if (task.state !== 'notScheduled') { - task.invoke(); - } - res(resource); - }, function (error) { - if (task.state !== 'notScheduled') { - task.invoke(); - } - rej(error); - }); - }, function () { - if (!supportAbort) { - rej('No AbortController supported, can not cancel fetch'); - return; - } - if (signal && signal.abortController && !signal.aborted && - typeof signal.abortController.abort === 'function' && abortNative) { - try { - Zone.current[fetchTaskAborting] = true; - abortNative.call(signal.abortController); - } - finally { - Zone.current[fetchTaskAborting] = false; - } - } - else { - rej('cancel fetch need a AbortController.signal'); - } - }); - if (signal && signal.abortController) { - signal.abortController.task = task; - } - }); - }; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * Suppress closure compiler errors about unknown 'Zone' variable - * @fileoverview - * @suppress {undefinedVars,globalThis,missingRequire} - */ -// issue #989, to reduce bundle size, use short name -/** Object.getOwnPropertyDescriptor */ -var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -/** Object.defineProperty */ -var ObjectDefineProperty = Object.defineProperty; -/** Object.getPrototypeOf */ -var ObjectGetPrototypeOf = Object.getPrototypeOf; -/** Object.create */ -var ObjectCreate = Object.create; -/** Array.prototype.slice */ -var ArraySlice = Array.prototype.slice; -/** addEventListener string const */ -var ADD_EVENT_LISTENER_STR = 'addEventListener'; -/** removeEventListener string const */ -var REMOVE_EVENT_LISTENER_STR = 'removeEventListener'; -/** zoneSymbol addEventListener */ -var ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR); -/** zoneSymbol removeEventListener */ -var ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR); -/** true string const */ -var TRUE_STR = 'true'; -/** false string const */ -var FALSE_STR = 'false'; -/** __zone_symbol__ string const */ -var ZONE_SYMBOL_PREFIX = '__zone_symbol__'; -function wrapWithCurrentZone(callback, source) { - return Zone.current.wrap(callback, source); -} -function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) { - return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel); -} -var zoneSymbol = Zone.__symbol__; -var isWindowExists = typeof window !== 'undefined'; -var internalWindow = isWindowExists ? window : undefined; -var _global = isWindowExists && internalWindow || typeof self === 'object' && self || global; -var REMOVE_ATTRIBUTE = 'removeAttribute'; -var NULL_ON_PROP_VALUE = [null]; -function bindArguments(args, source) { - for (var i = args.length - 1; i >= 0; i--) { - if (typeof args[i] === 'function') { - args[i] = wrapWithCurrentZone(args[i], source + '_' + i); - } - } - return args; -} -function patchPrototype(prototype, fnNames) { - var source = prototype.constructor['name']; - var _loop_1 = function (i) { - var name_1 = fnNames[i]; - var delegate = prototype[name_1]; - if (delegate) { - var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1); - if (!isPropertyWritable(prototypeDesc)) { - return "continue"; - } - prototype[name_1] = (function (delegate) { - var patched = function () { - return delegate.apply(this, bindArguments(arguments, source + '.' + name_1)); - }; - attachOriginToPatched(patched, delegate); - return patched; - })(delegate); - } - }; - for (var i = 0; i < fnNames.length; i++) { - _loop_1(i); - } -} -function isPropertyWritable(propertyDesc) { - if (!propertyDesc) { - return true; - } - if (propertyDesc.writable === false) { - return false; - } - return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined'); -} -var isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope); -// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify -// this code. -var isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]'); -var isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); -// we are in electron of nw, so we are both browser and nodejs -// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify -// this code. -var isMix = typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]' && !isWebWorker && - !!(isWindowExists && internalWindow['HTMLElement']); -var zoneSymbolEventNames = {}; -var wrapFn = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - var eventNameSymbol = zoneSymbolEventNames[event.type]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type); - } - var target = this || event.target || _global; - var listener = target[eventNameSymbol]; - var result; - if (isBrowser && target === internalWindow && event.type === 'error') { - // window.onerror have different signiture - // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror - // and onerror callback will prevent default when callback return true - var errorEvent = event; - result = listener && - listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error); - if (result === true) { - event.preventDefault(); - } - } - else { - result = listener && listener.apply(this, arguments); - if (result != undefined && !result) { - event.preventDefault(); - } - } - return result; -}; -function patchProperty(obj, prop, prototype) { - var desc = ObjectGetOwnPropertyDescriptor(obj, prop); - if (!desc && prototype) { - // when patch window object, use prototype to check prop exist or not - var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop); - if (prototypeDesc) { - desc = { enumerable: true, configurable: true }; - } - } - // if the descriptor not exists or is not configurable - // just return - if (!desc || !desc.configurable) { - return; - } - var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched'); - if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) { - return; - } - // A property descriptor cannot have getter/setter and be writable - // deleting the writable and value properties avoids this error: - // - // TypeError: property descriptors must not specify a value or be writable when a - // getter or setter has been specified - delete desc.writable; - delete desc.value; - var originalDescGet = desc.get; - var originalDescSet = desc.set; - // substr(2) cuz 'onclick' -> 'click', etc - var eventName = prop.substr(2); - var eventNameSymbol = zoneSymbolEventNames[eventName]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName); - } - desc.set = function (newValue) { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - var target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return; - } - var previousValue = target[eventNameSymbol]; - if (previousValue) { - target.removeEventListener(eventName, wrapFn); - } - // issue #978, when onload handler was added before loading zone.js - // we should remove it with originalDescSet - if (originalDescSet) { - originalDescSet.apply(target, NULL_ON_PROP_VALUE); - } - if (typeof newValue === 'function') { - target[eventNameSymbol] = newValue; - target.addEventListener(eventName, wrapFn, false); - } - else { - target[eventNameSymbol] = null; - } - }; - // The getter would return undefined for unassigned properties but the default value of an - // unassigned property is null - desc.get = function () { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - var target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return null; - } - var listener = target[eventNameSymbol]; - if (listener) { - return listener; - } - else if (originalDescGet) { - // result will be null when use inline event attribute, - // such as - // because the onclick function is internal raw uncompiled handler - // the onclick will be evaluated when first time event was triggered or - // the property is accessed, https://github.com/angular/zone.js/issues/525 - // so we should use original native get to retrieve the handler - var value = originalDescGet && originalDescGet.call(this); - if (value) { - desc.set.call(this, value); - if (typeof target[REMOVE_ATTRIBUTE] === 'function') { - target.removeAttribute(prop); - } - return value; - } - } - return null; - }; - ObjectDefineProperty(obj, prop, desc); - obj[onPropPatchedSymbol] = true; -} -function patchOnProperties(obj, properties, prototype) { - if (properties) { - for (var i = 0; i < properties.length; i++) { - patchProperty(obj, 'on' + properties[i], prototype); - } - } - else { - var onProperties = []; - for (var prop in obj) { - if (prop.substr(0, 2) == 'on') { - onProperties.push(prop); - } - } - for (var j = 0; j < onProperties.length; j++) { - patchProperty(obj, onProperties[j], prototype); - } - } -} -var originalInstanceKey = zoneSymbol('originalInstance'); -// wrap some native API on `window` -function patchClass(className) { - var OriginalClass = _global[className]; - if (!OriginalClass) - return; - // keep original class in global - _global[zoneSymbol(className)] = OriginalClass; - _global[className] = function () { - var a = bindArguments(arguments, className); - switch (a.length) { - case 0: - this[originalInstanceKey] = new OriginalClass(); - break; - case 1: - this[originalInstanceKey] = new OriginalClass(a[0]); - break; - case 2: - this[originalInstanceKey] = new OriginalClass(a[0], a[1]); - break; - case 3: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); - break; - case 4: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); - break; - default: - throw new Error('Arg list too long.'); - } - }; - // attach original delegate to patched function - attachOriginToPatched(_global[className], OriginalClass); - var instance = new OriginalClass(function () { }); - var prop; - for (prop in instance) { - // https://bugs.webkit.org/show_bug.cgi?id=44721 - if (className === 'XMLHttpRequest' && prop === 'responseBlob') - continue; - (function (prop) { - if (typeof instance[prop] === 'function') { - _global[className].prototype[prop] = function () { - return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments); - }; - } - else { - ObjectDefineProperty(_global[className].prototype, prop, { - set: function (fn) { - if (typeof fn === 'function') { - this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop); - // keep callback in wrapped function so we can - // use it in Function.prototype.toString to return - // the native one. - attachOriginToPatched(this[originalInstanceKey][prop], fn); - } - else { - this[originalInstanceKey][prop] = fn; - } - }, - get: function () { - return this[originalInstanceKey][prop]; - } - }); - } - }(prop)); - } - for (prop in OriginalClass) { - if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { - _global[className][prop] = OriginalClass[prop]; - } - } -} -function copySymbolProperties(src, dest) { - if (typeof Object.getOwnPropertySymbols !== 'function') { - return; - } - var symbols = Object.getOwnPropertySymbols(src); - symbols.forEach(function (symbol) { - var desc = Object.getOwnPropertyDescriptor(src, symbol); - Object.defineProperty(dest, symbol, { - get: function () { - return src[symbol]; - }, - set: function (value) { - if (desc && (!desc.writable || typeof desc.set !== 'function')) { - // if src[symbol] is not writable or not have a setter, just return - return; - } - src[symbol] = value; - }, - enumerable: desc ? desc.enumerable : true, - configurable: desc ? desc.configurable : true - }); - }); -} -var shouldCopySymbolProperties = false; - -function patchMethod(target, name, patchFn) { - var proto = target; - while (proto && !proto.hasOwnProperty(name)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && target[name]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = target; - } - var delegateName = zoneSymbol(name); - var delegate = null; - if (proto && !(delegate = proto[delegateName])) { - delegate = proto[delegateName] = proto[name]; - // check whether proto[name] is writable - // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob - var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name); - if (isPropertyWritable(desc)) { - var patchDelegate_1 = patchFn(delegate, delegateName, name); - proto[name] = function () { - return patchDelegate_1(this, arguments); - }; - attachOriginToPatched(proto[name], delegate); - if (shouldCopySymbolProperties) { - copySymbolProperties(delegate, proto[name]); - } - } - } - return delegate; -} -// TODO: @JiaLiPassion, support cancel task later if necessary -function patchMacroTask(obj, funcName, metaCreator) { - var setNative = null; - function scheduleTask(task) { - var data = task.data; - data.args[data.cbIdx] = function () { - task.invoke.apply(this, arguments); - }; - setNative.apply(data.target, data.args); - return task; - } - setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) { - var meta = metaCreator(self, args); - if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { - return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask); - } - else { - // cause an error by calling it directly. - return delegate.apply(self, args); - } - }; }); -} - -function attachOriginToPatched(patched, original) { - patched[zoneSymbol('OriginalDelegate')] = original; -} -var isDetectedIEOrEdge = false; -var ieOrEdge = false; -function isIE() { - try { - var ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) { - return true; - } - } - catch (error) { - } - return false; -} -function isIEOrEdge() { - if (isDetectedIEOrEdge) { - return ieOrEdge; - } - isDetectedIEOrEdge = true; - try { - var ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) { - ieOrEdge = true; - } - return ieOrEdge; - } - catch (error) { - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// override Function.prototype.toString to make zone.js patched function -// look like native function -Zone.__load_patch('toString', function (global) { - // patch Func.prototype.toString to let them look like native - var originalFunctionToString = Function.prototype.toString; - var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate'); - var PROMISE_SYMBOL = zoneSymbol('Promise'); - var ERROR_SYMBOL = zoneSymbol('Error'); - var newFunctionToString = function toString() { - if (typeof this === 'function') { - var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL]; - if (originalDelegate) { - if (typeof originalDelegate === 'function') { - return originalFunctionToString.apply(this[ORIGINAL_DELEGATE_SYMBOL], arguments); - } - else { - return Object.prototype.toString.call(originalDelegate); - } - } - if (this === Promise) { - var nativePromise = global[PROMISE_SYMBOL]; - if (nativePromise) { - return originalFunctionToString.apply(nativePromise, arguments); - } - } - if (this === Error) { - var nativeError = global[ERROR_SYMBOL]; - if (nativeError) { - return originalFunctionToString.apply(nativeError, arguments); - } - } - } - return originalFunctionToString.apply(this, arguments); - }; - newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString; - Function.prototype.toString = newFunctionToString; - // patch Object.prototype.toString to let them look like native - var originalObjectToString = Object.prototype.toString; - var PROMISE_OBJECT_TO_STRING = '[object Promise]'; - Object.prototype.toString = function () { - if (this instanceof Promise) { - return PROMISE_OBJECT_TO_STRING; - } - return originalObjectToString.apply(this, arguments); - }; -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -var passiveSupported = false; -if (typeof window !== 'undefined') { - try { - var options = Object.defineProperty({}, 'passive', { - get: function () { - passiveSupported = true; - } - }); - window.addEventListener('test', options, options); - window.removeEventListener('test', options, options); - } - catch (err) { - passiveSupported = false; - } -} -// an identifier to tell ZoneTask do not create a new invoke closure -var OPTIMIZED_ZONE_EVENT_TASK_DATA = { - useG: true -}; -var zoneSymbolEventNames$1 = {}; -var globalSources = {}; -var EVENT_NAME_SYMBOL_REGX = /^__zone_symbol__(\w+)(true|false)$/; -var IMMEDIATE_PROPAGATION_SYMBOL = ('__zone_symbol__propagationStopped'); -function patchEventTarget(_global, apis, patchOptions) { - var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR; - var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR; - var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners'; - var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners'; - var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER); - var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':'; - var PREPEND_EVENT_LISTENER = 'prependListener'; - var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':'; - var invokeTask = function (task, target, event) { - // for better performance, check isRemoved which is set - // by removeEventListener - if (task.isRemoved) { - return; - } - var delegate = task.callback; - if (typeof delegate === 'object' && delegate.handleEvent) { - // create the bind version of handleEvent when invoke - task.callback = function (event) { return delegate.handleEvent(event); }; - task.originalDelegate = delegate; - } - // invoke static task.invoke - task.invoke(task, target, [event]); - var options = task.options; - if (options && typeof options === 'object' && options.once) { - // if options.once is true, after invoke once remove listener here - // only browser need to do this, nodejs eventEmitter will cal removeListener - // inside EventEmitter.once - var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback; - target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options); - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = false - var globalZoneAwareCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - var target = this || event.target || _global; - var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - var copyTasks = tasks.slice(); - for (var i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = true - var globalZoneAwareCaptureCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - var target = this || event.target || _global; - var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - var copyTasks = tasks.slice(); - for (var i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - function patchEventTargetMethods(obj, patchOptions) { - if (!obj) { - return false; - } - var useGlobalCallback = true; - if (patchOptions && patchOptions.useG !== undefined) { - useGlobalCallback = patchOptions.useG; - } - var validateHandler = patchOptions && patchOptions.vh; - var checkDuplicate = true; - if (patchOptions && patchOptions.chkDup !== undefined) { - checkDuplicate = patchOptions.chkDup; - } - var returnTarget = false; - if (patchOptions && patchOptions.rt !== undefined) { - returnTarget = patchOptions.rt; - } - var proto = obj; - while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && obj[ADD_EVENT_LISTENER]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = obj; - } - if (!proto) { - return false; - } - if (proto[zoneSymbolAddEventListener]) { - return false; - } - var eventNameToString = patchOptions && patchOptions.eventNameToString; - // a shared global taskData to pass data for scheduleEventTask - // so we do not need to create a new object just for pass some data - var taskData = {}; - var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; - var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = - proto[REMOVE_EVENT_LISTENER]; - var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = - proto[LISTENERS_EVENT_LISTENER]; - var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; - var nativePrependEventListener; - if (patchOptions && patchOptions.prepend) { - nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] = - proto[patchOptions.prepend]; - } - function checkIsPassive(task) { - if (!passiveSupported && typeof taskData.options !== 'boolean' && - typeof taskData.options !== 'undefined' && taskData.options !== null) { - // options is a non-null non-undefined object - // passive is not supported - // don't pass options as object - // just pass capture as a boolean - task.options = !!taskData.options.capture; - taskData.options = task.options; - } - } - var customScheduleGlobal = function (task) { - // if there is already a task for the eventName + capture, - // just return, because we use the shared globalZoneAwareCallback here. - if (taskData.isExisting) { - return; - } - checkIsPassive(task); - return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options); - }; - var customCancelGlobal = function (task) { - // if task is not marked as isRemoved, this call is directly - // from Zone.prototype.cancelTask, we should remove the task - // from tasksList of target first - if (!task.isRemoved) { - var symbolEventNames = zoneSymbolEventNames$1[task.eventName]; - var symbolEventName = void 0; - if (symbolEventNames) { - symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = symbolEventName && task.target[symbolEventName]; - if (existingTasks) { - for (var i = 0; i < existingTasks.length; i++) { - var existingTask = existingTasks[i]; - if (existingTask === task) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - task.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - task.allRemoved = true; - task.target[symbolEventName] = null; - } - break; - } - } - } - } - // if all tasks for the eventName + capture have gone, - // we will really remove the global event callback, - // if not, return - if (!task.allRemoved) { - return; - } - return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options); - }; - var customScheduleNonGlobal = function (task) { - checkIsPassive(task); - return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - var customSchedulePrepend = function (task) { - return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - var customCancelNonGlobal = function (task) { - return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options); - }; - var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; - var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; - var compareTaskCallbackVsDelegate = function (task, delegate) { - var typeOfDelegate = typeof delegate; - return (typeOfDelegate === 'function' && task.callback === delegate) || - (typeOfDelegate === 'object' && task.originalDelegate === delegate); - }; - var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate; - var blackListedEvents = Zone[Zone.__symbol__('BLACK_LISTED_EVENTS')]; - var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) { - if (returnTarget === void 0) { returnTarget = false; } - if (prepend === void 0) { prepend = false; } - return function () { - var target = this || _global; - var eventName = arguments[0]; - var delegate = arguments[1]; - if (!delegate) { - return nativeListener.apply(this, arguments); - } - if (isNode && eventName === 'uncaughtException') { - // don't patch uncaughtException of nodejs to prevent endless loop - return nativeListener.apply(this, arguments); - } - // don't create the bind delegate function for handleEvent - // case here to improve addEventListener performance - // we will create the bind delegate when invoke - var isHandleEvent = false; - if (typeof delegate !== 'function') { - if (!delegate.handleEvent) { - return nativeListener.apply(this, arguments); - } - isHandleEvent = true; - } - if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { - return; - } - var options = arguments[2]; - if (blackListedEvents) { - // check black list - for (var i = 0; i < blackListedEvents.length; i++) { - if (eventName === blackListedEvents[i]) { - return nativeListener.apply(this, arguments); - } - } - } - var capture; - var once = false; - if (options === undefined) { - capture = false; - } - else if (options === true) { - capture = true; - } - else if (options === false) { - capture = false; - } - else { - capture = options ? !!options.capture : false; - once = options ? !!options.once : false; - } - var zone = Zone.current; - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - var symbolEventName; - if (!symbolEventNames) { - // the code is duplicate, but I just want to get some better performance - var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR; - var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR; - var symbol = ZONE_SYMBOL_PREFIX + falseEventName; - var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames$1[eventName] = {}; - zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture; - symbolEventName = capture ? symbolCapture : symbol; - } - else { - symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = target[symbolEventName]; - var isExisting = false; - if (existingTasks) { - // already have task registered - isExisting = true; - if (checkDuplicate) { - for (var i = 0; i < existingTasks.length; i++) { - if (compare(existingTasks[i], delegate)) { - // same callback, same capture, same event name, just return - return; - } - } - } - } - else { - existingTasks = target[symbolEventName] = []; - } - var source; - var constructorName = target.constructor['name']; - var targetSource = globalSources[constructorName]; - if (targetSource) { - source = targetSource[eventName]; - } - if (!source) { - source = constructorName + addSource + - (eventNameToString ? eventNameToString(eventName) : eventName); - } - // do not create a new object as task.data to pass those things - // just use the global shared one - taskData.options = options; - if (once) { - // if addEventListener with once options, we don't pass it to - // native addEventListener, instead we keep the once setting - // and handle ourselves. - taskData.options.once = false; - } - taskData.target = target; - taskData.capture = capture; - taskData.eventName = eventName; - taskData.isExisting = isExisting; - var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined; - // keep taskData into data to allow onScheduleEventTask to access the task information - if (data) { - data.taskData = taskData; - } - var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); - // should clear taskData.target to avoid memory leak - // issue, https://github.com/angular/angular/issues/20442 - taskData.target = null; - // need to clear up taskData because it is a global object - if (data) { - data.taskData = null; - } - // have to save those information to task in case - // application may call task.zone.cancelTask() directly - if (once) { - options.once = true; - } - if (!(!passiveSupported && typeof task.options === 'boolean')) { - // if not support passive, and we pass an option object - // to addEventListener, we should save the options to task - task.options = options; - } - task.target = target; - task.capture = capture; - task.eventName = eventName; - if (isHandleEvent) { - // save original delegate for compare to check duplicate - task.originalDelegate = delegate; - } - if (!prepend) { - existingTasks.push(task); - } - else { - existingTasks.unshift(task); - } - if (returnTarget) { - return target; - } - }; - }; - proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget); - if (nativePrependEventListener) { - proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true); - } - proto[REMOVE_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - var options = arguments[2]; - var capture; - if (options === undefined) { - capture = false; - } - else if (options === true) { - capture = true; - } - else if (options === false) { - capture = false; - } - else { - capture = options ? !!options.capture : false; - } - var delegate = arguments[1]; - if (!delegate) { - return nativeRemoveEventListener.apply(this, arguments); - } - if (validateHandler && - !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { - return; - } - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - var symbolEventName; - if (symbolEventNames) { - symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - } - var existingTasks = symbolEventName && target[symbolEventName]; - if (existingTasks) { - for (var i = 0; i < existingTasks.length; i++) { - var existingTask = existingTasks[i]; - if (compare(existingTask, delegate)) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - existingTask.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - existingTask.allRemoved = true; - target[symbolEventName] = null; - } - existingTask.zone.cancelTask(existingTask); - if (returnTarget) { - return target; - } - return; - } - } - } - // issue 930, didn't find the event name or callback - // from zone kept existingTasks, the callback maybe - // added outside of zone, we need to call native removeEventListener - // to try to remove it. - return nativeRemoveEventListener.apply(this, arguments); - }; - proto[LISTENERS_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - var listeners = []; - var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName); - for (var i = 0; i < tasks.length; i++) { - var task = tasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - listeners.push(delegate); - } - return listeners; - }; - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () { - var target = this || _global; - var eventName = arguments[0]; - if (!eventName) { - var keys = Object.keys(target); - for (var i = 0; i < keys.length; i++) { - var prop = keys[i]; - var match = EVENT_NAME_SYMBOL_REGX.exec(prop); - var evtName = match && match[1]; - // in nodejs EventEmitter, removeListener event is - // used for monitoring the removeListener call, - // so just keep removeListener eventListener until - // all other eventListeners are removed - if (evtName && evtName !== 'removeListener') { - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName); - } - } - // remove removeListener listener finally - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener'); - } - else { - var symbolEventNames = zoneSymbolEventNames$1[eventName]; - if (symbolEventNames) { - var symbolEventName = symbolEventNames[FALSE_STR]; - var symbolCaptureEventName = symbolEventNames[TRUE_STR]; - var tasks = target[symbolEventName]; - var captureTasks = target[symbolCaptureEventName]; - if (tasks) { - var removeTasks = tasks.slice(); - for (var i = 0; i < removeTasks.length; i++) { - var task = removeTasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - if (captureTasks) { - var removeTasks = captureTasks.slice(); - for (var i = 0; i < removeTasks.length; i++) { - var task = removeTasks[i]; - var delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - } - } - if (returnTarget) { - return this; - } - }; - // for native toString patch - attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); - attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); - if (nativeRemoveAllListeners) { - attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); - } - if (nativeListeners) { - attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); - } - return true; - } - var results = []; - for (var i = 0; i < apis.length; i++) { - results[i] = patchEventTargetMethods(apis[i], patchOptions); - } - return results; -} -function findEventTasks(target, eventName) { - var foundTasks = []; - for (var prop in target) { - var match = EVENT_NAME_SYMBOL_REGX.exec(prop); - var evtName = match && match[1]; - if (evtName && (!eventName || evtName === eventName)) { - var tasks = target[prop]; - if (tasks) { - for (var i = 0; i < tasks.length; i++) { - foundTasks.push(tasks[i]); - } - } - } - } - return foundTasks; -} -function patchEventPrototype(global, api) { - var Event = global['Event']; - if (Event && Event.prototype) { - api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) { - self[IMMEDIATE_PROPAGATION_SYMBOL] = true; - // we need to call the native stopImmediatePropagation - // in case in some hybrid application, some part of - // application will be controlled by zone, some are not - delegate && delegate.apply(self, args); - }; }); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -var taskSymbol = zoneSymbol('zoneTask'); -function patchTimer(window, setName, cancelName, nameSuffix) { - var setNative = null; - var clearNative = null; - setName += nameSuffix; - cancelName += nameSuffix; - var tasksByHandleId = {}; - function scheduleTask(task) { - var data = task.data; - function timer() { - try { - task.invoke.apply(this, arguments); - } - finally { - // issue-934, task will be cancelled - // even it is a periodic task such as - // setInterval - if (!(task.data && task.data.isPeriodic)) { - if (typeof data.handleId === 'number') { - // in non-nodejs env, we remove timerId - // from local cache - delete tasksByHandleId[data.handleId]; - } - else if (data.handleId) { - // Node returns complex objects as handleIds - // we remove task reference from timer object - data.handleId[taskSymbol] = null; - } - } - } - } - data.args[0] = timer; - data.handleId = setNative.apply(window, data.args); - return task; - } - function clearTask(task) { - return clearNative(task.data.handleId); - } - setNative = - patchMethod(window, setName, function (delegate) { return function (self, args) { - if (typeof args[0] === 'function') { - var options = { - isPeriodic: nameSuffix === 'Interval', - delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 : - undefined, - args: args - }; - var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask); - if (!task) { - return task; - } - // Node.js must additionally support the ref and unref functions. - var handle = task.data.handleId; - if (typeof handle === 'number') { - // for non nodejs env, we save handleId: task - // mapping in local cache for clearTimeout - tasksByHandleId[handle] = task; - } - else if (handle) { - // for nodejs env, we save task - // reference in timerId Object for clearTimeout - handle[taskSymbol] = task; - } - // check whether handle is null, because some polyfill or browser - // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame - if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' && - typeof handle.unref === 'function') { - task.ref = handle.ref.bind(handle); - task.unref = handle.unref.bind(handle); - } - if (typeof handle === 'number' || handle) { - return handle; - } - return task; - } - else { - // cause an error by calling it directly. - return delegate.apply(window, args); - } - }; }); - clearNative = - patchMethod(window, cancelName, function (delegate) { return function (self, args) { - var id = args[0]; - var task; - if (typeof id === 'number') { - // non nodejs env. - task = tasksByHandleId[id]; - } - else { - // nodejs env. - task = id && id[taskSymbol]; - // other environments. - if (!task) { - task = id; - } - } - if (task && typeof task.type === 'string') { - if (task.state !== 'notScheduled' && - (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) { - if (typeof id === 'number') { - delete tasksByHandleId[id]; - } - else if (id) { - id[taskSymbol] = null; - } - // Do not cancel already canceled functions - task.zone.cancelTask(task); - } - } - else { - // cause an error by calling it directly. - delegate.apply(window, args); - } - }; }); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/* - * This is necessary for Chrome and Chrome mobile, to enable - * things like redefining `createdCallback` on an element. - */ -var _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty; -var _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] = - Object.getOwnPropertyDescriptor; -var _create = Object.create; -var unconfigurablesKey = zoneSymbol('unconfigurables'); -function propertyPatch() { - Object.defineProperty = function (obj, prop, desc) { - if (isUnconfigurable(obj, prop)) { - throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj); - } - var originalConfigurableFlag = desc.configurable; - if (prop !== 'prototype') { - desc = rewriteDescriptor(obj, prop, desc); - } - return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag); - }; - Object.defineProperties = function (obj, props) { - Object.keys(props).forEach(function (prop) { - Object.defineProperty(obj, prop, props[prop]); - }); - return obj; - }; - Object.create = function (obj, proto) { - if (typeof proto === 'object' && !Object.isFrozen(proto)) { - Object.keys(proto).forEach(function (prop) { - proto[prop] = rewriteDescriptor(obj, prop, proto[prop]); - }); - } - return _create(obj, proto); - }; - Object.getOwnPropertyDescriptor = function (obj, prop) { - var desc = _getOwnPropertyDescriptor(obj, prop); - if (desc && isUnconfigurable(obj, prop)) { - desc.configurable = false; - } - return desc; - }; -} -function _redefineProperty(obj, prop, desc) { - var originalConfigurableFlag = desc.configurable; - desc = rewriteDescriptor(obj, prop, desc); - return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag); -} -function isUnconfigurable(obj, prop) { - return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop]; -} -function rewriteDescriptor(obj, prop, desc) { - // issue-927, if the desc is frozen, don't try to change the desc - if (!Object.isFrozen(desc)) { - desc.configurable = true; - } - if (!desc.configurable) { - // issue-927, if the obj is frozen, don't try to set the desc to obj - if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) { - _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} }); - } - if (obj[unconfigurablesKey]) { - obj[unconfigurablesKey][prop] = true; - } - } - return desc; -} -function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) { - try { - return _defineProperty(obj, prop, desc); - } - catch (error) { - if (desc.configurable) { - // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's - // retry with the original flag value - if (typeof originalConfigurableFlag == 'undefined') { - delete desc.configurable; - } - else { - desc.configurable = originalConfigurableFlag; - } - try { - return _defineProperty(obj, prop, desc); - } - catch (error) { - var descJson = null; - try { - descJson = JSON.stringify(desc); - } - catch (error) { - descJson = desc.toString(); - } - console.log("Attempting to configure '" + prop + "' with descriptor '" + descJson + "' on object '" + obj + "' and got error, giving up: " + error); - } - } - else { - throw error; - } - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// we have to patch the instance since the proto is non-configurable -function apply(api, _global) { - var WS = _global.WebSocket; - // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener - // On older Chrome, no need since EventTarget was already patched - if (!_global.EventTarget) { - patchEventTarget(_global, [WS.prototype]); - } - _global.WebSocket = function (x, y) { - var socket = arguments.length > 1 ? new WS(x, y) : new WS(x); - var proxySocket; - var proxySocketProto; - // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance - var onmessageDesc = ObjectGetOwnPropertyDescriptor(socket, 'onmessage'); - if (onmessageDesc && onmessageDesc.configurable === false) { - proxySocket = ObjectCreate(socket); - // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror' - // but proxySocket not, so we will keep socket as prototype and pass it to - // patchOnProperties method - proxySocketProto = socket; - [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) { - proxySocket[propName] = function () { - var args = ArraySlice.call(arguments); - if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) { - var eventName = args.length > 0 ? args[0] : undefined; - if (eventName) { - var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName); - socket[propertySymbol] = proxySocket[propertySymbol]; - } - } - return socket[propName].apply(socket, args); - }; - }); - } - else { - // we can patch the real socket - proxySocket = socket; - } - patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto); - return proxySocket; - }; - var globalWebSocket = _global['WebSocket']; - for (var prop in WS) { - globalWebSocket[prop] = WS[prop]; - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {globalThis} - */ -var globalEventHandlersEventNames = [ - 'abort', - 'animationcancel', - 'animationend', - 'animationiteration', - 'auxclick', - 'beforeinput', - 'blur', - 'cancel', - 'canplay', - 'canplaythrough', - 'change', - 'compositionstart', - 'compositionupdate', - 'compositionend', - 'cuechange', - 'click', - 'close', - 'contextmenu', - 'curechange', - 'dblclick', - 'drag', - 'dragend', - 'dragenter', - 'dragexit', - 'dragleave', - 'dragover', - 'drop', - 'durationchange', - 'emptied', - 'ended', - 'error', - 'focus', - 'focusin', - 'focusout', - 'gotpointercapture', - 'input', - 'invalid', - 'keydown', - 'keypress', - 'keyup', - 'load', - 'loadstart', - 'loadeddata', - 'loadedmetadata', - 'lostpointercapture', - 'mousedown', - 'mouseenter', - 'mouseleave', - 'mousemove', - 'mouseout', - 'mouseover', - 'mouseup', - 'mousewheel', - 'orientationchange', - 'pause', - 'play', - 'playing', - 'pointercancel', - 'pointerdown', - 'pointerenter', - 'pointerleave', - 'pointerlockchange', - 'mozpointerlockchange', - 'webkitpointerlockerchange', - 'pointerlockerror', - 'mozpointerlockerror', - 'webkitpointerlockerror', - 'pointermove', - 'pointout', - 'pointerover', - 'pointerup', - 'progress', - 'ratechange', - 'reset', - 'resize', - 'scroll', - 'seeked', - 'seeking', - 'select', - 'selectionchange', - 'selectstart', - 'show', - 'sort', - 'stalled', - 'submit', - 'suspend', - 'timeupdate', - 'volumechange', - 'touchcancel', - 'touchmove', - 'touchstart', - 'touchend', - 'transitioncancel', - 'transitionend', - 'waiting', - 'wheel' -]; -var documentEventNames = [ - 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange', - 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror', - 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange', - 'visibilitychange', 'resume' -]; -var windowEventNames = [ - 'absolutedeviceorientation', - 'afterinput', - 'afterprint', - 'appinstalled', - 'beforeinstallprompt', - 'beforeprint', - 'beforeunload', - 'devicelight', - 'devicemotion', - 'deviceorientation', - 'deviceorientationabsolute', - 'deviceproximity', - 'hashchange', - 'languagechange', - 'message', - 'mozbeforepaint', - 'offline', - 'online', - 'paint', - 'pageshow', - 'pagehide', - 'popstate', - 'rejectionhandled', - 'storage', - 'unhandledrejection', - 'unload', - 'userproximity', - 'vrdisplyconnected', - 'vrdisplaydisconnected', - 'vrdisplaypresentchange' -]; -var htmlElementEventNames = [ - 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend', - 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend', - 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend' -]; -var mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend']; -var ieElementEventNames = [ - 'activate', - 'afterupdate', - 'ariarequest', - 'beforeactivate', - 'beforedeactivate', - 'beforeeditfocus', - 'beforeupdate', - 'cellchange', - 'controlselect', - 'dataavailable', - 'datasetchanged', - 'datasetcomplete', - 'errorupdate', - 'filterchange', - 'layoutcomplete', - 'losecapture', - 'move', - 'moveend', - 'movestart', - 'propertychange', - 'resizeend', - 'resizestart', - 'rowenter', - 'rowexit', - 'rowsdelete', - 'rowsinserted', - 'command', - 'compassneedscalibration', - 'deactivate', - 'help', - 'mscontentzoom', - 'msmanipulationstatechanged', - 'msgesturechange', - 'msgesturedoubletap', - 'msgestureend', - 'msgesturehold', - 'msgesturestart', - 'msgesturetap', - 'msgotpointercapture', - 'msinertiastart', - 'mslostpointercapture', - 'mspointercancel', - 'mspointerdown', - 'mspointerenter', - 'mspointerhover', - 'mspointerleave', - 'mspointermove', - 'mspointerout', - 'mspointerover', - 'mspointerup', - 'pointerout', - 'mssitemodejumplistitemremoved', - 'msthumbnailclick', - 'stop', - 'storagecommit' -]; -var webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror']; -var formEventNames = ['autocomplete', 'autocompleteerror']; -var detailEventNames = ['toggle']; -var frameEventNames = ['load']; -var frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror']; -var marqueeEventNames = ['bounce', 'finish', 'start']; -var XMLHttpRequestEventNames = [ - 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend', - 'readystatechange' -]; -var IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close']; -var websocketEventNames = ['close', 'error', 'open', 'message']; -var workerEventNames = ['error', 'message']; -var eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames); -function filterProperties(target, onProperties, ignoreProperties) { - if (!ignoreProperties || ignoreProperties.length === 0) { - return onProperties; - } - var tip = ignoreProperties.filter(function (ip) { return ip.target === target; }); - if (!tip || tip.length === 0) { - return onProperties; - } - var targetIgnoreProperties = tip[0].ignoreProperties; - return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; }); -} -function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) { - // check whether target is available, sometimes target will be undefined - // because different browser or some 3rd party plugin. - if (!target) { - return; - } - var filteredProperties = filterProperties(target, onProperties, ignoreProperties); - patchOnProperties(target, filteredProperties, prototype); -} -function propertyDescriptorPatch(api, _global) { - if (isNode && !isMix) { - return; - } - var supportsWebSocket = typeof WebSocket !== 'undefined'; - if (canPatchViaPropertyDescriptor()) { - var ignoreProperties = _global['__Zone_ignore_on_properties']; - // for browsers that we can patch the descriptor: Chrome & Firefox - if (isBrowser) { - var internalWindow = window; - var ignoreErrorProperties = isIE ? [{ target: internalWindow, ignoreProperties: ['error'] }] : []; - // in IE/Edge, onProp not exist in window object, but in WindowPrototype - // so we need to pass WindowPrototype to check onProp exist or not - patchFilteredProperties(internalWindow, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow)); - patchFilteredProperties(Document.prototype, eventNames, ignoreProperties); - if (typeof internalWindow['SVGElement'] !== 'undefined') { - patchFilteredProperties(internalWindow['SVGElement'].prototype, eventNames, ignoreProperties); - } - patchFilteredProperties(Element.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties); - patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties); - patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties); - var HTMLMarqueeElement_1 = internalWindow['HTMLMarqueeElement']; - if (HTMLMarqueeElement_1) { - patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties); - } - var Worker_1 = internalWindow['Worker']; - if (Worker_1) { - patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties); - } - } - patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties); - var XMLHttpRequestEventTarget_1 = _global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget_1) { - patchFilteredProperties(XMLHttpRequestEventTarget_1 && XMLHttpRequestEventTarget_1.prototype, XMLHttpRequestEventNames, ignoreProperties); - } - if (typeof IDBIndex !== 'undefined') { - patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties); - } - if (supportsWebSocket) { - patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties); - } - } - else { - // Safari, Android browsers (Jelly Bean) - patchViaCapturingAllTheEvents(); - patchClass('XMLHttpRequest'); - if (supportsWebSocket) { - apply(api, _global); - } - } -} -function canPatchViaPropertyDescriptor() { - if ((isBrowser || isMix) && !ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') && - typeof Element !== 'undefined') { - // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364 - // IDL interface attributes are not configurable - var desc = ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick'); - if (desc && !desc.configurable) - return false; - } - var ON_READY_STATE_CHANGE = 'onreadystatechange'; - var XMLHttpRequestPrototype = XMLHttpRequest.prototype; - var xhrDesc = ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE); - // add enumerable and configurable here because in opera - // by default XMLHttpRequest.prototype.onreadystatechange is undefined - // without adding enumerable and configurable will cause onreadystatechange - // non-configurable - // and if XMLHttpRequest.prototype.onreadystatechange is undefined, - // we should set a real desc instead a fake one - if (xhrDesc) { - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, { - enumerable: true, - configurable: true, - get: function () { - return true; - } - }); - var req = new XMLHttpRequest(); - var result = !!req.onreadystatechange; - // restore original desc - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {}); - return result; - } - else { - var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = zoneSymbol('fake'); - ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, { - enumerable: true, - configurable: true, - get: function () { - return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1]; - }, - set: function (value) { - this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value; - } - }); - var req = new XMLHttpRequest(); - var detectFunc = function () { }; - req.onreadystatechange = detectFunc; - var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc; - req.onreadystatechange = null; - return result; - } -} -var unboundKey = zoneSymbol('unbound'); -// Whenever any eventListener fires, we check the eventListener target and all parents -// for `onwhatever` properties and replace them with zone-bound functions -// - Chrome (for now) -function patchViaCapturingAllTheEvents() { - var _loop_1 = function (i) { - var property = eventNames[i]; - var onproperty = 'on' + property; - self.addEventListener(property, function (event) { - var elt = event.target, bound, source; - if (elt) { - source = elt.constructor['name'] + '.' + onproperty; - } - else { - source = 'unknown.' + onproperty; - } - while (elt) { - if (elt[onproperty] && !elt[onproperty][unboundKey]) { - bound = wrapWithCurrentZone(elt[onproperty], source); - bound[unboundKey] = elt[onproperty]; - elt[onproperty] = bound; - } - elt = elt.parentElement; - } - }, true); - }; - for (var i = 0; i < eventNames.length; i++) { - _loop_1(i); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function eventTargetPatch(_global, api) { - var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video'; - var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket' - .split(','); - var EVENT_TARGET = 'EventTarget'; - var apis = []; - var isWtf = _global['wtf']; - var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(','); - if (isWtf) { - // Workaround for: https://github.com/google/tracing-framework/issues/555 - apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET); - } - else if (_global[EVENT_TARGET]) { - apis.push(EVENT_TARGET); - } - else { - // Note: EventTarget is not available in all browsers, - // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget - apis = NO_EVENT_TARGET; - } - var isDisableIECheck = _global['__Zone_disable_IE_check'] || false; - var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false; - var ieOrEdge = isIEOrEdge(); - var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:'; - var FUNCTION_WRAPPER = '[object FunctionWrapper]'; - var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }'; - // predefine all __zone_symbol__ + eventName + true/false string - for (var i = 0; i < eventNames.length; i++) { - var eventName = eventNames[i]; - var falseEventName = eventName + FALSE_STR; - var trueEventName = eventName + TRUE_STR; - var symbol = ZONE_SYMBOL_PREFIX + falseEventName; - var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames$1[eventName] = {}; - zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture; - } - // predefine all task.source string - for (var i = 0; i < WTF_ISSUE_555.length; i++) { - var target = WTF_ISSUE_555_ARRAY[i]; - var targets = globalSources[target] = {}; - for (var j = 0; j < eventNames.length; j++) { - var eventName = eventNames[j]; - targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName; - } - } - var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) { - if (!isDisableIECheck && ieOrEdge) { - if (isEnableCrossContextCheck) { - try { - var testString = delegate.toString(); - if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) { - nativeDelegate.apply(target, args); - return false; - } - } - catch (error) { - nativeDelegate.apply(target, args); - return false; - } - } - else { - var testString = delegate.toString(); - if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) { - nativeDelegate.apply(target, args); - return false; - } - } - } - else if (isEnableCrossContextCheck) { - try { - delegate.toString(); - } - catch (error) { - nativeDelegate.apply(target, args); - return false; - } - } - return true; - }; - var apiTypes = []; - for (var i = 0; i < apis.length; i++) { - var type = _global[apis[i]]; - apiTypes.push(type && type.prototype); - } - // vh is validateHandler to check event handler - // is valid or not(for security check) - patchEventTarget(_global, apiTypes, { vh: checkIEAndCrossContext }); - api.patchEventTarget = patchEventTarget; - return true; -} -function patchEvent(global, api) { - patchEventPrototype(global, api); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -function patchCallbacks(target, targetName, method, callbacks) { - var symbol = Zone.__symbol__(method); - if (target[symbol]) { - return; - } - var nativeDelegate = target[symbol] = target[method]; - target[method] = function (name, opts, options) { - if (opts && opts.prototype) { - callbacks.forEach(function (callback) { - var source = targetName + "." + method + "::" + callback; - var prototype = opts.prototype; - if (prototype.hasOwnProperty(callback)) { - var descriptor = ObjectGetOwnPropertyDescriptor(prototype, callback); - if (descriptor && descriptor.value) { - descriptor.value = wrapWithCurrentZone(descriptor.value, source); - _redefineProperty(opts.prototype, callback, descriptor); - } - else if (prototype[callback]) { - prototype[callback] = wrapWithCurrentZone(prototype[callback], source); - } - } - else if (prototype[callback]) { - prototype[callback] = wrapWithCurrentZone(prototype[callback], source); - } - }); - } - return nativeDelegate.call(target, name, opts, options); - }; - attachOriginToPatched(target[method], nativeDelegate); -} -function registerElementPatch(_global) { - if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) { - return; - } - var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback']; - patchCallbacks(document, 'Document', 'registerElement', callbacks); -} -function patchCustomElements(_global) { - if ((!isBrowser && !isMix) || !('customElements' in _global)) { - return; - } - var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback']; - patchCallbacks(_global.customElements, 'customElements', 'define', callbacks); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * @fileoverview - * @suppress {missingRequire} - */ -Zone.__load_patch('util', function (global, Zone, api) { - api.patchOnProperties = patchOnProperties; - api.patchMethod = patchMethod; - api.bindArguments = bindArguments; -}); -Zone.__load_patch('timers', function (global) { - var set = 'set'; - var clear = 'clear'; - patchTimer(global, set, clear, 'Timeout'); - patchTimer(global, set, clear, 'Interval'); - patchTimer(global, set, clear, 'Immediate'); -}); -Zone.__load_patch('requestAnimationFrame', function (global) { - patchTimer(global, 'request', 'cancel', 'AnimationFrame'); - patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame'); - patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame'); -}); -Zone.__load_patch('blocking', function (global, Zone) { - var blockingMethods = ['alert', 'prompt', 'confirm']; - for (var i = 0; i < blockingMethods.length; i++) { - var name_1 = blockingMethods[i]; - patchMethod(global, name_1, function (delegate, symbol, name) { - return function (s, args) { - return Zone.current.run(delegate, global, args, name); - }; - }); - } -}); -Zone.__load_patch('EventTarget', function (global, Zone, api) { - // load blackListEvents from global - var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS'); - if (global[SYMBOL_BLACK_LISTED_EVENTS]) { - Zone[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS]; - } - patchEvent(global, api); - eventTargetPatch(global, api); - // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener - var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { - api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]); - } - patchClass('MutationObserver'); - patchClass('WebKitMutationObserver'); - patchClass('IntersectionObserver'); - patchClass('FileReader'); -}); -Zone.__load_patch('on_property', function (global, Zone, api) { - propertyDescriptorPatch(api, global); - propertyPatch(); -}); -Zone.__load_patch('customElements', function (global, Zone, api) { - registerElementPatch(global); - patchCustomElements(global); -}); -Zone.__load_patch('canvas', function (global) { - var HTMLCanvasElement = global['HTMLCanvasElement']; - if (typeof HTMLCanvasElement !== 'undefined' && HTMLCanvasElement.prototype && - HTMLCanvasElement.prototype.toBlob) { - patchMacroTask(HTMLCanvasElement.prototype, 'toBlob', function (self, args) { - return { name: 'HTMLCanvasElement.toBlob', target: self, cbIdx: 0, args: args }; - }); - } -}); -Zone.__load_patch('XHR', function (global, Zone) { - // Treat XMLHttpRequest as a macrotask. - patchXHR(global); - var XHR_TASK = zoneSymbol('xhrTask'); - var XHR_SYNC = zoneSymbol('xhrSync'); - var XHR_LISTENER = zoneSymbol('xhrListener'); - var XHR_SCHEDULED = zoneSymbol('xhrScheduled'); - var XHR_URL = zoneSymbol('xhrURL'); - var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled'); - function patchXHR(window) { - var XMLHttpRequestPrototype = XMLHttpRequest.prototype; - function findPendingTask(target) { - return target[XHR_TASK]; - } - var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - if (!oriAddListener) { - var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget_1) { - var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype; - oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - } - var READY_STATE_CHANGE = 'readystatechange'; - var SCHEDULED = 'scheduled'; - function scheduleTask(task) { - var data = task.data; - var target = data.target; - target[XHR_SCHEDULED] = false; - target[XHR_ERROR_BEFORE_SCHEDULED] = false; - // remove existing event listener - var listener = target[XHR_LISTENER]; - if (!oriAddListener) { - oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - if (listener) { - oriRemoveListener.call(target, READY_STATE_CHANGE, listener); - } - var newListener = target[XHR_LISTENER] = function () { - if (target.readyState === target.DONE) { - // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with - // readyState=4 multiple times, so we need to check task state here - if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) { - // check whether the xhr has registered onload listener - // if that is the case, the task should invoke after all - // onload listeners finish. - var loadTasks = target['__zone_symbol__loadfalse']; - if (loadTasks && loadTasks.length > 0) { - var oriInvoke_1 = task.invoke; - task.invoke = function () { - // need to load the tasks again, because in other - // load listener, they may remove themselves - var loadTasks = target['__zone_symbol__loadfalse']; - for (var i = 0; i < loadTasks.length; i++) { - if (loadTasks[i] === task) { - loadTasks.splice(i, 1); - } - } - if (!data.aborted && task.state === SCHEDULED) { - oriInvoke_1.call(task); - } - }; - loadTasks.push(task); - } - else { - task.invoke(); - } - } - else if (!data.aborted && target[XHR_SCHEDULED] === false) { - // error occurs when xhr.send() - target[XHR_ERROR_BEFORE_SCHEDULED] = true; - } - } - }; - oriAddListener.call(target, READY_STATE_CHANGE, newListener); - var storedTask = target[XHR_TASK]; - if (!storedTask) { - target[XHR_TASK] = task; - } - sendNative.apply(target, data.args); - target[XHR_SCHEDULED] = true; - return task; - } - function placeholderCallback() { } - function clearTask(task) { - var data = task.data; - // Note - ideally, we would call data.target.removeEventListener here, but it's too late - // to prevent it from firing. So instead, we store info for the event listener. - data.aborted = true; - return abortNative.apply(data.target, data.args); - } - var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) { - self[XHR_SYNC] = args[2] == false; - self[XHR_URL] = args[1]; - return openNative.apply(self, args); - }; }); - var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send'; - var fetchTaskAborting = zoneSymbol('fetchTaskAborting'); - var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling'); - var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) { - if (Zone.current[fetchTaskScheduling] === true) { - // a fetch is scheduling, so we are using xhr to polyfill fetch - // and because we already schedule macroTask for fetch, we should - // not schedule a macroTask for xhr again - return sendNative.apply(self, args); - } - if (self[XHR_SYNC]) { - // if the XHR is sync there is no task to schedule, just execute the code. - return sendNative.apply(self, args); - } - else { - var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false }; - var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask); - if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted && - task.state === SCHEDULED) { - // xhr request throw error when send - // we should invoke task instead of leaving a scheduled - // pending macroTask - task.invoke(); - } - } - }; }); - var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) { - var task = findPendingTask(self); - if (task && typeof task.type == 'string') { - // If the XHR has already completed, do nothing. - // If the XHR has already been aborted, do nothing. - // Fix #569, call abort multiple times before done will cause - // macroTask task count be negative number - if (task.cancelFn == null || (task.data && task.data.aborted)) { - return; - } - task.zone.cancelTask(task); - } - else if (Zone.current[fetchTaskAborting] === true) { - // the abort is called from fetch polyfill, we need to call native abort of XHR. - return abortNative.apply(self, args); - } - // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no - // task - // to cancel. Do nothing. - }; }); - } -}); -Zone.__load_patch('geolocation', function (global) { - /// GEO_LOCATION - if (global['navigator'] && global['navigator'].geolocation) { - patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']); - } -}); -Zone.__load_patch('PromiseRejectionEvent', function (global, Zone) { - // handle unhandled promise rejection - function findPromiseRejectionHandler(evtName) { - return function (e) { - var eventTasks = findEventTasks(global, evtName); - eventTasks.forEach(function (eventTask) { - // windows has added unhandledrejection event listener - // trigger the event listener - var PromiseRejectionEvent = global['PromiseRejectionEvent']; - if (PromiseRejectionEvent) { - var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection }); - eventTask.invoke(evt); - } - }); - }; - } - if (global['PromiseRejectionEvent']) { - Zone[zoneSymbol('unhandledPromiseRejectionHandler')] = - findPromiseRejectionHandler('unhandledrejection'); - Zone[zoneSymbol('rejectionHandledHandler')] = - findPromiseRejectionHandler('rejectionhandled'); - } -}); - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -}))); - - -/***/ }), - -/***/ "./src/polyfills.ts": -/*!**************************!*\ - !*** ./src/polyfills.ts ***! - \**************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zone.js/dist/zone */ "./node_modules/zone.js/dist/zone.js"); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_0__); -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ -/*************************************************************************************************** - * BROWSER POLYFILLS - */ -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/weak-map'; -// import 'core-js/es6/set'; -/** - * If the application will be indexed by Google Search, the following is required. - * Googlebot uses a renderer based on Chrome 41. - * https://developers.google.com/search/docs/guides/rendering - **/ -// import 'core-js/es6/array'; -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. -/** IE10 and IE11 requires the following for the Reflect API. */ -// import 'core-js/es6/reflect'; -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - */ -// (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame -// (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick -// (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames -/* -* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js -* with the following flag, it will bypass `zone.js` patch for IE/Edge -*/ -// (window as any).__Zone_enable_cross_context_check = true; -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ - // Included with Angular CLI. -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - - -/***/ }), - -/***/ 1: -/*!***************************************************************************************************************************!*\ - !*** multi ./src/polyfills.ts ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \***************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! D:\Project\WORK_NEW\zano\src\gui\qt-daemon\html_source\src\polyfills.ts */"./src/polyfills.ts"); -module.exports = __webpack_require__(/*! D:\Project\WORK_NEW\zano\src\gui\qt-daemon\html_source\node_modules\@angular-devkit\build-angular\src\angular-cli-files\models\jit-polyfills.js */"./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js"); - - -/***/ }) - -},[[1,"runtime"]]]); -//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/src/gui/qt-daemon/html/polyfills.js.map b/src/gui/qt-daemon/html/polyfills.js.map deleted file mode 100644 index cab8347c..00000000 --- a/src/gui/qt-daemon/html/polyfills.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js","webpack:///./node_modules/core-js/es7/reflect.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_array-from-iterable.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///./node_modules/core-js/modules/_metadata.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es7.reflect.define-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.delete-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","webpack:///./node_modules/core-js/modules/es7.reflect.get-own-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.has-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.has-own-metadata.js","webpack:///./node_modules/core-js/modules/es7.reflect.metadata.js","webpack:///./node_modules/zone.js/dist/zone.js","webpack:///./src/polyfills.ts"],"names":[],"mappings":"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A;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,cAAc,mBAAO,CAAC,wDAAS;AAC/B,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,YAAY,mBAAO,CAAC,4DAAW;AAC/B,wBAAwB,mBAAO,CAAC,0EAAkB;AAClD,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,sFAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;ACpFa;AACb,aAAa,mBAAO,CAAC,4DAAW;AAChC,cAAc,mBAAO,CAAC,4DAAW;AACjC,eAAe,mBAAO,CAAC,gE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AgB,mBAAmB;AACnC;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;;;;;ACpEA,eAAe,mBAAO,CAAC,sDAAQ;AAC/B;;AAEA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;;;;;ACrBA;AACA,UAAU;AACV;;;;;;;;;;;;ACFA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,kEAAc;AACrC,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,cAAc,mBAAO,CAAC,kEAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,0DAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA,UAAU,mBAAO,CAAC,4DAAW;AAC7B,cAAc,mBAAO,CAAC,4DAAW;AACjC,aAAa,mBAAO,CAAC,4DAAW;AAChC,iDAAiD,mBAAO,CAAC,sEAAgB;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB,EAAE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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AAO,CAAC,gEAAa;AACpC,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;;AAEA,cAAc;AACd;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;ACRH,gBAAgB,mBAAO,CAAC,gEAAa;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA;;AAEA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE;;;;;;;;;;;;ACdH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,KAA4D;AAC7D,CAAC,SACW;AACZ,CAAC,qBAAqB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE,+CAA+C,EAAE;AAClH;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,4DAA4D,0CAA0C;AACtG;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B,EAAE;AACnE;AACA;AACA;AACA,wCAAwC,6DAA6D,EAAE;AACvG,uCAAuC,WAAW,EAAE;AACpD;AACA,kCAAkC,aAAa,EAAE;AACjD,oCAAoC,WAAW,EAAE;AACjD,gCAAgC,aAAa,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B;AAC7B;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,wBAAwB,oCAAoC;AACxL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,sEAAsE;AACtJ;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,oDAAoD;AAC5F;AACA;AACA;AACA;AACA;AACA,2BAA2B,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qEAAqE,gBAAgB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,sCAAsC,MAAI;AAC1C;AACA;AACA,sCAAsC,MAAI;AAC1C;AACA;AACA,mFAAmF,kBAAkB;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,mFAAmF,kBAAkB;AACrG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,oCAAoC;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0BAA0B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAsB;AAChE,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0BAA0B,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,6BAA6B,EAAE;AACpF;AACA;AACA;AACA;AACA,8CAA8C,kDAAkD,EAAE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sDAAsD;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+BAA+B,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,gBAAgB;AACrF;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA,yCAAyC,6BAA6B;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAsB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAA0C;AAC5G;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;;ACjxGD;AAAA;AAAA;AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AAEH,mEAAmE;AACnE,+BAA+B;AAC/B,+BAA+B;AAC/B,iCAAiC;AACjC,kCAAkC;AAClC,oCAAoC;AACpC,+BAA+B;AAC/B,6BAA6B;AAC7B,+BAA+B;AAC/B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,4BAA4B;AAC5B,iCAAiC;AACjC,4BAA4B;AAE5B;;;;IAII;AACJ,8BAA8B;AAE9B,+EAA+E;AAC/E,oEAAoE;AAEpE,gEAAgE;AAChE,gCAAgC;AAEhC;;;;IAII;AACJ,8EAA8E;AAE9E;;;GAGG;AAEF,sGAAsG;AACtG,iGAAiG;AACjG,sHAAsH;AAEtH;;;EAGE;AACH,4DAA4D;AAE5D;;GAEG;AACwB,CAAE,6BAA6B;AAG1D;;GAEG","file":"polyfills.js","sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport 'core-js/es7/reflect';\n","require('../modules/es7.reflect.define-metadata');\nrequire('../modules/es7.reflect.delete-metadata');\nrequire('../modules/es7.reflect.get-metadata');\nrequire('../modules/es7.reflect.get-metadata-keys');\nrequire('../modules/es7.reflect.get-own-metadata');\nrequire('../modules/es7.reflect.get-own-metadata-keys');\nrequire('../modules/es7.reflect.has-metadata');\nrequire('../modules/es7.reflect.has-own-metadata');\nrequire('../modules/es7.reflect.metadata');\nmodule.exports = require('../modules/_core').Reflect;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","/**\n* @license\n* Copyright Google Inc. All Rights Reserved.\n*\n* Use of this source code is governed by an MIT-style license that can be\n* found in the LICENSE file at https://angular.io/license\n*/\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(factory());\n}(this, (function () { 'use strict';\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar Zone$1 = (function (global) {\n var performance = global['performance'];\n function mark(name) {\n performance && performance['mark'] && performance['mark'](name);\n }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n var checkDuplicate = global[('__zone_symbol__forceDuplicateZoneCheck')] === true;\n if (global['Zone']) {\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') {\n throw new Error('Zone already loaded.');\n }\n else {\n return global['Zone'];\n }\n }\n var Zone = /** @class */ (function () {\n function Zone(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = zoneSpec && zoneSpec.properties || {};\n this._zoneDelegate =\n new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n Zone.assertZonePatched = function () {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n };\n Object.defineProperty(Zone, \"root\", {\n get: function () {\n var zone = Zone.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"current\", {\n get: function () {\n return _currentZoneFrame.zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone, \"currentTask\", {\n get: function () {\n return _currentTask;\n },\n enumerable: true,\n configurable: true\n });\n Zone.__load_patch = function (name, fn) {\n if (patches.hasOwnProperty(name)) {\n if (checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n var perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, Zone, _api);\n performanceMeasure(perfName, perfName);\n }\n };\n Object.defineProperty(Zone.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Zone.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Zone.prototype.get = function (key) {\n var zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n };\n Zone.prototype.getZoneWith = function (key) {\n var current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n };\n Zone.prototype.fork = function (zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n };\n Zone.prototype.wrap = function (callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n var _callback = this._zoneDelegate.intercept(this, callback, source);\n var zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n };\n Zone.prototype.run = function (callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {\n if (applyThis === void 0) { applyThis = null; }\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n };\n Zone.prototype.runTask = function (task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n }\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) {\n return;\n }\n var reEntryGuard = task.state != running;\n reEntryGuard && task._transitionTo(running, scheduled);\n task.runCount++;\n var previousTask = _currentTask;\n _currentTask = task;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (task.type == macroTask && task.data && !task.data.isPeriodic) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n if (task.state !== notScheduled && task.state !== unknown) {\n if (task.type == eventTask || (task.data && task.data.isPeriodic)) {\n reEntryGuard && task._transitionTo(scheduled, running);\n }\n else {\n task.runCount = 0;\n this._updateTaskCount(task, -1);\n reEntryGuard &&\n task._transitionTo(notScheduled, running, notScheduled);\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n };\n Zone.prototype.scheduleTask = function (task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n var newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(\"can not reschedule task to \" + this.name + \" which is descendants of the original zone \" + task.zone.name);\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n var zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n };\n Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n };\n Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n };\n Zone.prototype.cancelTask = function (task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = 0;\n return task;\n };\n Zone.prototype._updateTaskCount = function (task, count) {\n var zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (var i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n };\n Zone.__symbol__ = __symbol__;\n return Zone;\n }());\n var DELEGATE_ZS = {\n name: '',\n onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); },\n onScheduleTask: function (delegate, _, target, task) {\n return delegate.scheduleTask(target, task);\n },\n onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) {\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n },\n onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); }\n };\n var ZoneDelegate = /** @class */ (function () {\n function ZoneDelegate(zone, parentDelegate, zoneSpec) {\n this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 };\n this.zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate.zone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate.zone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate.zone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate.zone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt = zoneSpec &&\n (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate.zone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate.zone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate.zone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this.zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this.zone;\n }\n }\n }\n ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {\n return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :\n new Zone(targetZone, zoneSpec);\n };\n ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {\n return this._interceptZS ?\n this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :\n callback;\n };\n ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :\n callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.handleError = function (targetZone, error) {\n return this._handleErrorZS ?\n this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :\n true;\n };\n ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {\n var returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n };\n ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :\n task.callback.apply(applyThis, applyArgs);\n };\n ZoneDelegate.prototype.cancelTask = function (targetZone, task) {\n var value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n };\n ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n };\n ZoneDelegate.prototype._updateTaskCount = function (type, count) {\n var counts = this._taskCounts;\n var prev = counts[type];\n var next = counts[type] = prev + count;\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n var isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type\n };\n this.hasTask(this.zone, isEmpty);\n }\n };\n return ZoneDelegate;\n }());\n var ZoneTask = /** @class */ (function () {\n function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {\n this._zone = null;\n this.runCount = 0;\n this._zoneDelegates = null;\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n this.callback = callback;\n var self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n ZoneTask.invokeTask = function (task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n };\n Object.defineProperty(ZoneTask.prototype, \"zone\", {\n get: function () {\n return this._zone;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZoneTask.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: true,\n configurable: true\n });\n ZoneTask.prototype.cancelScheduleRequest = function () {\n this._transitionTo(notScheduled, scheduling);\n };\n ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(this.type + \" '\" + this.source + \"': can not transition to '\" + toState + \"', expecting state '\" + fromState1 + \"'\" + (fromState2 ? ' or \\'' + fromState2 + '\\'' : '') + \", was '\" + this._state + \"'.\");\n }\n };\n ZoneTask.prototype.toString = function () {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n };\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n ZoneTask.prototype.toJSON = function () {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount\n };\n };\n return ZoneTask;\n }());\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var symbolSetTimeout = __symbol__('setTimeout');\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var _microTaskQueue = [];\n var _isDrainingMicrotaskQueue = false;\n var nativeMicroTaskQueuePromise;\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n var nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue);\n }\n else {\n global[symbolSetTimeout](drainMicroTaskQueue, 0);\n }\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n var queue = _microTaskQueue;\n _microTaskQueue = [];\n for (var i = 0; i < queue.length; i++) {\n var task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n var NO_ZONE = { name: 'NO ZONE' };\n var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n var patches = {};\n var _api = {\n symbol: __symbol__,\n currentZoneFrame: function () { return _currentZoneFrame; },\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; },\n patchEventTarget: function () { return []; },\n patchOnProperties: noop,\n patchMethod: function () { return noop; },\n bindArguments: function () { return []; },\n patchThen: function () { return noop; },\n setNativePromise: function (NativePromise) {\n // sometimes NativePromise.resolve static function\n // is not ready yet, (such as core-js/es6.promise)\n // so we need to check here.\n if (NativePromise && typeof NativePromise.resolve === 'function') {\n nativeMicroTaskQueuePromise = NativePromise.resolve(0);\n }\n },\n };\n var _currentZoneFrame = { parent: null, zone: new Zone(null, null) };\n var _currentTask = null;\n var _numberOfNestedTaskFrames = 0;\n function noop() { }\n function __symbol__(name) {\n return '__zone_symbol__' + name;\n }\n performanceMeasure('Zone', 'Zone');\n return global['Zone'] = Zone;\n})(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global);\n\nvar __values = (undefined && undefined.__values) || function (o) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n if (m) return m.call(o);\n return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n};\nZone.__load_patch('ZoneAwarePromise', function (global, Zone, api) {\n var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n var className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n var __symbol__ = api.symbol;\n var _uncaughtPromiseErrors = [];\n var symbolPromise = __symbol__('Promise');\n var symbolThen = __symbol__('then');\n var creationTrace = '__creationTrace__';\n api.onUnhandledError = function (e) {\n if (api.showUncaughtError()) {\n var rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = function () {\n while (_uncaughtPromiseErrors.length) {\n var _loop_1 = function () {\n var uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(function () {\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n };\n while (_uncaughtPromiseErrors.length) {\n _loop_1();\n }\n }\n };\n var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (handler && typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) {\n }\n }\n function isThenable(value) {\n return value && value.then;\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n var symbolState = __symbol__('state');\n var symbolValue = __symbol__('value');\n var symbolFinally = __symbol__('finally');\n var symbolParentPromiseValue = __symbol__('parentPromiseValue');\n var symbolParentPromiseState = __symbol__('parentPromiseState');\n var source = 'Promise.then';\n var UNRESOLVED = null;\n var RESOLVED = true;\n var REJECTED = false;\n var REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return function (v) {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n var once = function () {\n var wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n var TYPE_ERROR = 'Promise resolved with itself';\n var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n var onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n var then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED && value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(function () {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n var queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n var trace = Zone.currentTask && Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace });\n }\n }\n for (var i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n try {\n // try to print more readable error log\n throw new Error('Uncaught (in promise): ' + readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n var error_1 = err;\n error_1.rejection = value;\n error_1.promise = promise;\n error_1.zone = Zone.current;\n error_1.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(error_1);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n var handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) {\n }\n promise[symbolState] = REJECTED;\n for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n var promiseState = promise[symbolState];\n var delegate = promiseState ?\n (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :\n (typeof onRejected === 'function') ? onRejected : forwardRejection;\n zone.scheduleMicroTask(source, function () {\n try {\n var parentPromiseValue = promise[symbolValue];\n var isFinallyPromise = chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ?\n [] :\n [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n var ZoneAwarePromise = /** @class */ (function () {\n function ZoneAwarePromise(executor) {\n var promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n ZoneAwarePromise.toString = function () {\n return ZONE_AWARE_PROMISE_TO_STRING;\n };\n ZoneAwarePromise.resolve = function (value) {\n return resolvePromise(new this(null), RESOLVED, value);\n };\n ZoneAwarePromise.reject = function (error) {\n return resolvePromise(new this(null), REJECTED, error);\n };\n ZoneAwarePromise.race = function (values) {\n var e_1, _a;\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) {\n promise && (promise = null || resolve(value));\n }\n function onReject(error) {\n promise && (promise = null || reject(error));\n }\n try {\n for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n var value = values_1_1.value;\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return promise;\n };\n ZoneAwarePromise.all = function (values) {\n var e_2, _a;\n var resolve;\n var reject;\n var promise = new this(function (res, rej) {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n var unresolvedCount = 2;\n var valueIndex = 0;\n var resolvedValues = [];\n var _loop_2 = function (value) {\n if (!isThenable(value)) {\n value = this_1.resolve(value);\n }\n var curValueIndex = valueIndex;\n value.then(function (value) {\n resolvedValues[curValueIndex] = value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, reject);\n unresolvedCount++;\n valueIndex++;\n };\n var this_1 = this;\n try {\n for (var values_2 = __values(values), values_2_1 = values_2.next(); !values_2_1.done; values_2_1 = values_2.next()) {\n var value = values_2_1.value;\n _loop_2(value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (values_2_1 && !values_2_1.done && (_a = values_2.return)) _a.call(values_2);\n }\n finally { if (e_2) throw e_2.error; }\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n };\n ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {\n var chainPromise = new this.constructor(null);\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n };\n ZoneAwarePromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n ZoneAwarePromise.prototype.finally = function (onFinally) {\n var chainPromise = new this.constructor(null);\n chainPromise[symbolFinally] = symbolFinally;\n var zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n };\n return ZoneAwarePromise;\n }());\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n var NativePromise = global[symbolPromise] = global['Promise'];\n var ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise');\n var desc = ObjectGetOwnPropertyDescriptor(global, 'Promise');\n if (!desc || desc.configurable) {\n desc && delete desc.writable;\n desc && delete desc.value;\n if (!desc) {\n desc = { configurable: true, enumerable: true };\n }\n desc.get = function () {\n // if we already set ZoneAwarePromise, use patched one\n // otherwise return native one.\n return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise];\n };\n desc.set = function (NewNativePromise) {\n if (NewNativePromise === ZoneAwarePromise) {\n // if the NewNativePromise is ZoneAwarePromise\n // save to global\n global[ZONE_AWARE_PROMISE] = NewNativePromise;\n }\n else {\n // if the NewNativePromise is not ZoneAwarePromise\n // for example: after load zone.js, some library just\n // set es6-promise to global, if we set it to global\n // directly, assertZonePatched will fail and angular\n // will not loaded, so we just set the NewNativePromise\n // to global[symbolPromise], so the result is just like\n // we load ES6 Promise before zone.js\n global[symbolPromise] = NewNativePromise;\n if (!NewNativePromise.prototype[symbolThen]) {\n patchThen(NewNativePromise);\n }\n api.setNativePromise(NewNativePromise);\n }\n };\n ObjectDefineProperty(global, 'Promise', desc);\n }\n global['Promise'] = ZoneAwarePromise;\n var symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n var proto = Ctor.prototype;\n var prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n var originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n var _this = this;\n var wrapped = new ZoneAwarePromise(function (resolve, reject) {\n originalThen.call(_this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n if (NativePromise) {\n patchThen(NativePromise);\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nZone.__load_patch('fetch', function (global, Zone, api) {\n var fetch = global['fetch'];\n var ZoneAwarePromise = global.Promise;\n var symbolThenPatched = api.symbol('thenPatched');\n var fetchTaskScheduling = api.symbol('fetchTaskScheduling');\n var fetchTaskAborting = api.symbol('fetchTaskAborting');\n if (typeof fetch !== 'function') {\n return;\n }\n var OriginalAbortController = global['AbortController'];\n var supportAbort = typeof OriginalAbortController === 'function';\n var abortNative = null;\n if (supportAbort) {\n global['AbortController'] = function () {\n var abortController = new OriginalAbortController();\n var signal = abortController.signal;\n signal.abortController = abortController;\n return abortController;\n };\n abortNative = api.patchMethod(OriginalAbortController.prototype, 'abort', function (delegate) { return function (self, args) {\n if (self.task) {\n return self.task.zone.cancelTask(self.task);\n }\n return delegate.apply(self, args);\n }; });\n }\n var placeholder = function () { };\n global['fetch'] = function () {\n var _this = this;\n var args = Array.prototype.slice.call(arguments);\n var options = args.length > 1 ? args[1] : null;\n var signal = options && options.signal;\n return new Promise(function (res, rej) {\n var task = Zone.current.scheduleMacroTask('fetch', placeholder, args, function () {\n var fetchPromise;\n var zone = Zone.current;\n try {\n zone[fetchTaskScheduling] = true;\n fetchPromise = fetch.apply(_this, args);\n }\n catch (error) {\n rej(error);\n return;\n }\n finally {\n zone[fetchTaskScheduling] = false;\n }\n if (!(fetchPromise instanceof ZoneAwarePromise)) {\n var ctor = fetchPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n api.patchThen(ctor);\n }\n }\n fetchPromise.then(function (resource) {\n if (task.state !== 'notScheduled') {\n task.invoke();\n }\n res(resource);\n }, function (error) {\n if (task.state !== 'notScheduled') {\n task.invoke();\n }\n rej(error);\n });\n }, function () {\n if (!supportAbort) {\n rej('No AbortController supported, can not cancel fetch');\n return;\n }\n if (signal && signal.abortController && !signal.aborted &&\n typeof signal.abortController.abort === 'function' && abortNative) {\n try {\n Zone.current[fetchTaskAborting] = true;\n abortNative.call(signal.abortController);\n }\n finally {\n Zone.current[fetchTaskAborting] = false;\n }\n }\n else {\n rej('cancel fetch need a AbortController.signal');\n }\n });\n if (signal && signal.abortController) {\n signal.abortController.task = task;\n }\n });\n };\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n// issue #989, to reduce bundle size, use short name\n/** Object.getOwnPropertyDescriptor */\nvar ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n/** Object.defineProperty */\nvar ObjectDefineProperty = Object.defineProperty;\n/** Object.getPrototypeOf */\nvar ObjectGetPrototypeOf = Object.getPrototypeOf;\n/** Object.create */\nvar ObjectCreate = Object.create;\n/** Array.prototype.slice */\nvar ArraySlice = Array.prototype.slice;\n/** addEventListener string const */\nvar ADD_EVENT_LISTENER_STR = 'addEventListener';\n/** removeEventListener string const */\nvar REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n/** zoneSymbol addEventListener */\nvar ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR);\n/** zoneSymbol removeEventListener */\nvar ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR);\n/** true string const */\nvar TRUE_STR = 'true';\n/** false string const */\nvar FALSE_STR = 'false';\n/** __zone_symbol__ string const */\nvar ZONE_SYMBOL_PREFIX = '__zone_symbol__';\nfunction wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n}\nfunction scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n}\nvar zoneSymbol = Zone.__symbol__;\nvar isWindowExists = typeof window !== 'undefined';\nvar internalWindow = isWindowExists ? window : undefined;\nvar _global = isWindowExists && internalWindow || typeof self === 'object' && self || global;\nvar REMOVE_ATTRIBUTE = 'removeAttribute';\nvar NULL_ON_PROP_VALUE = [null];\nfunction bindArguments(args, source) {\n for (var i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n}\nfunction patchPrototype(prototype, fnNames) {\n var source = prototype.constructor['name'];\n var _loop_1 = function (i) {\n var name_1 = fnNames[i];\n var delegate = prototype[name_1];\n if (delegate) {\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1);\n if (!isPropertyWritable(prototypeDesc)) {\n return \"continue\";\n }\n prototype[name_1] = (function (delegate) {\n var patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n };\n for (var i = 0; i < fnNames.length; i++) {\n _loop_1(i);\n }\n}\nfunction isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n}\nvar isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nvar isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]');\nvar isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n// we are in electron of nw, so we are both browser and nodejs\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nvar isMix = typeof _global.process !== 'undefined' &&\n {}.toString.call(_global.process) === '[object process]' && !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\nvar zoneSymbolEventNames = {};\nvar wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n var eventNameSymbol = zoneSymbolEventNames[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n var target = this || event.target || _global;\n var listener = target[eventNameSymbol];\n var result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signiture\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n var errorEvent = event;\n result = listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n};\nfunction patchProperty(obj, prop, prototype) {\n var desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n var originalDescGet = desc.get;\n var originalDescSet = desc.set;\n // substr(2) cuz 'onclick' -> 'click', etc\n var eventName = prop.substr(2);\n var eventNameSymbol = zoneSymbolEventNames[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n var previousValue = target[eventNameSymbol];\n if (previousValue) {\n target.removeEventListener(eventName, wrapFn);\n }\n // issue #978, when onload handler was added before loading zone.js\n // we should remove it with originalDescSet\n if (originalDescSet) {\n originalDescSet.apply(target, NULL_ON_PROP_VALUE);\n }\n if (typeof newValue === 'function') {\n target[eventNameSymbol] = newValue;\n target.addEventListener(eventName, wrapFn, false);\n }\n else {\n target[eventNameSymbol] = null;\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n var target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n var listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n var value = originalDescGet && originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n}\nfunction patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (var i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n var onProperties = [];\n for (var prop in obj) {\n if (prop.substr(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (var j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n}\nvar originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n var OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n var a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n var instance = new OriginalClass(function () { });\n var prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n }\n });\n }\n }(prop));\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n}\nfunction copySymbolProperties(src, dest) {\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return;\n }\n var symbols = Object.getOwnPropertySymbols(src);\n symbols.forEach(function (symbol) {\n var desc = Object.getOwnPropertyDescriptor(src, symbol);\n Object.defineProperty(dest, symbol, {\n get: function () {\n return src[symbol];\n },\n set: function (value) {\n if (desc && (!desc.writable || typeof desc.set !== 'function')) {\n // if src[symbol] is not writable or not have a setter, just return\n return;\n }\n src[symbol] = value;\n },\n enumerable: desc ? desc.enumerable : true,\n configurable: desc ? desc.configurable : true\n });\n });\n}\nvar shouldCopySymbolProperties = false;\n\nfunction patchMethod(target, name, patchFn) {\n var proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n var delegateName = zoneSymbol(name);\n var delegate = null;\n if (proto && !(delegate = proto[delegateName])) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n var patchDelegate_1 = patchFn(delegate, delegateName, name);\n proto[name] = function () {\n return patchDelegate_1(this, arguments);\n };\n attachOriginToPatched(proto[name], delegate);\n if (shouldCopySymbolProperties) {\n copySymbolProperties(delegate, proto[name]);\n }\n }\n }\n return delegate;\n}\n// TODO: @JiaLiPassion, support cancel task later if necessary\nfunction patchMacroTask(obj, funcName, metaCreator) {\n var setNative = null;\n function scheduleTask(task) {\n var data = task.data;\n data.args[data.cbIdx] = function () {\n task.invoke.apply(this, arguments);\n };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) {\n var meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n }; });\n}\n\nfunction attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n}\nvar isDetectedIEOrEdge = false;\nvar ieOrEdge = false;\nfunction isIE() {\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {\n return true;\n }\n }\n catch (error) {\n }\n return false;\n}\nfunction isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n var ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n return ieOrEdge;\n }\n catch (error) {\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// override Function.prototype.toString to make zone.js patched function\n// look like native function\nZone.__load_patch('toString', function (global) {\n // patch Func.prototype.toString to let them look like native\n var originalFunctionToString = Function.prototype.toString;\n var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n var PROMISE_SYMBOL = zoneSymbol('Promise');\n var ERROR_SYMBOL = zoneSymbol('Error');\n var newFunctionToString = function toString() {\n if (typeof this === 'function') {\n var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.apply(this[ORIGINAL_DELEGATE_SYMBOL], arguments);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n var nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.apply(nativePromise, arguments);\n }\n }\n if (this === Error) {\n var nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.apply(nativeError, arguments);\n }\n }\n }\n return originalFunctionToString.apply(this, arguments);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n var originalObjectToString = Object.prototype.toString;\n var PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.apply(this, arguments);\n };\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nvar passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n }\n });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\n// an identifier to tell ZoneTask do not create a new invoke closure\nvar OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true\n};\nvar zoneSymbolEventNames$1 = {};\nvar globalSources = {};\nvar EVENT_NAME_SYMBOL_REGX = /^__zone_symbol__(\\w+)(true|false)$/;\nvar IMMEDIATE_PROPAGATION_SYMBOL = ('__zone_symbol__propagationStopped');\nfunction patchEventTarget(_global, apis, patchOptions) {\n var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n var PREPEND_EVENT_LISTENER = 'prependListener';\n var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n var invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n var delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = function (event) { return delegate.handleEvent(event); };\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n task.invoke(task, target, [event]);\n var options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options);\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = false\n var globalZoneAwareCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n var globalZoneAwareCaptureCallback = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n var target = this || event.target || _global;\n var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]];\n if (tasks) {\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n invokeTask(tasks[0], target, event);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n var copyTasks = tasks.slice();\n for (var i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n invokeTask(copyTasks[i], target, event);\n }\n }\n }\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n var useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n var validateHandler = patchOptions && patchOptions.vh;\n var checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n var returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n var proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n var eventNameToString = patchOptions && patchOptions.eventNameToString;\n // a shared global taskData to pass data for scheduleEventTask\n // so we do not need to create a new object just for pass some data\n var taskData = {};\n var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER];\n var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER];\n var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER];\n var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER];\n var nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n function checkIsPassive(task) {\n if (!passiveSupported && typeof taskData.options !== 'boolean' &&\n typeof taskData.options !== 'undefined' && taskData.options !== null) {\n // options is a non-null non-undefined object\n // passive is not supported\n // don't pass options as object\n // just pass capture as a boolean\n task.options = !!taskData.options.capture;\n taskData.options = task.options;\n }\n }\n var customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n checkIsPassive(task);\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n var customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n var symbolEventNames = zoneSymbolEventNames$1[task.eventName];\n var symbolEventName = void 0;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n var customScheduleNonGlobal = function (task) {\n checkIsPassive(task);\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n var customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n var compareTaskCallbackVsDelegate = function (task, delegate) {\n var typeOfDelegate = typeof delegate;\n return (typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate);\n };\n var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate;\n var blackListedEvents = Zone[Zone.__symbol__('BLACK_LISTED_EVENTS')];\n var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) {\n if (returnTarget === void 0) { returnTarget = false; }\n if (prepend === void 0) { prepend = false; }\n return function () {\n var target = this || _global;\n var eventName = arguments[0];\n var delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // don't create the bind delegate function for handleEvent\n // case here to improve addEventListener performance\n // we will create the bind delegate when invoke\n var isHandleEvent = false;\n if (typeof delegate !== 'function') {\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isHandleEvent = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n var options = arguments[2];\n if (blackListedEvents) {\n // check black list\n for (var i = 0; i < blackListedEvents.length; i++) {\n if (eventName === blackListedEvents[i]) {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n var capture;\n var once = false;\n if (options === undefined) {\n capture = false;\n }\n else if (options === true) {\n capture = true;\n }\n else if (options === false) {\n capture = false;\n }\n else {\n capture = options ? !!options.capture : false;\n once = options ? !!options.once : false;\n }\n var zone = Zone.current;\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n var symbolEventName;\n if (!symbolEventNames) {\n // the code is duplicate, but I just want to get some better performance\n var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames$1[eventName] = {};\n zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;\n symbolEventName = capture ? symbolCapture : symbol;\n }\n else {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = target[symbolEventName];\n var isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (var i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n var source;\n var constructorName = target.constructor['name'];\n var targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source = constructorName + addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // do not create a new object as task.data to pass those things\n // just use the global shared one\n taskData.options = options;\n if (once) {\n // if addEventListener with once options, we don't pass it to\n // native addEventListener, instead we keep the once setting\n // and handle ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n options.once = true;\n }\n if (!(!passiveSupported && typeof task.options === 'boolean')) {\n // if not support passive, and we pass an option object\n // to addEventListener, we should save the options to task\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isHandleEvent) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n var options = arguments[2];\n var capture;\n if (options === undefined) {\n capture = false;\n }\n else if (options === true) {\n capture = true;\n }\n else if (options === false) {\n capture = false;\n }\n else {\n capture = options ? !!options.capture : false;\n }\n var delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n var symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n var existingTasks = symbolEventName && target[symbolEventName];\n if (existingTasks) {\n for (var i = 0; i < existingTasks.length; i++) {\n var existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n }\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // issue 930, didn't find the event name or callback\n // from zone kept existingTasks, the callback maybe\n // added outside of zone, we need to call native removeEventListener\n // to try to remove it.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n var listeners = [];\n var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n var target = this || _global;\n var eventName = arguments[0];\n if (!eventName) {\n var keys = Object.keys(target);\n for (var i = 0; i < keys.length; i++) {\n var prop = keys[i];\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n var symbolEventNames = zoneSymbolEventNames$1[eventName];\n if (symbolEventNames) {\n var symbolEventName = symbolEventNames[FALSE_STR];\n var symbolCaptureEventName = symbolEventNames[TRUE_STR];\n var tasks = target[symbolEventName];\n var captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n var removeTasks = tasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n var removeTasks = captureTasks.slice();\n for (var i = 0; i < removeTasks.length; i++) {\n var task = removeTasks[i];\n var delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n var results = [];\n for (var i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n}\nfunction findEventTasks(target, eventName) {\n var foundTasks = [];\n for (var prop in target) {\n var match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n var evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n var tasks = target[prop];\n if (tasks) {\n for (var i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n}\nfunction patchEventPrototype(global, api) {\n var Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n }; });\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nvar taskSymbol = zoneSymbol('zoneTask');\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n var setNative = null;\n var clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n var tasksByHandleId = {};\n function scheduleTask(task) {\n var data = task.data;\n function timer() {\n try {\n task.invoke.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n if (!(task.data && task.data.isPeriodic)) {\n if (typeof data.handleId === 'number') {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[data.handleId];\n }\n else if (data.handleId) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n data.handleId[taskSymbol] = null;\n }\n }\n }\n }\n data.args[0] = timer;\n data.handleId = setNative.apply(window, data.args);\n return task;\n }\n function clearTask(task) {\n return clearNative(task.data.handleId);\n }\n setNative =\n patchMethod(window, setName, function (delegate) { return function (self, args) {\n if (typeof args[0] === 'function') {\n var options = {\n isPeriodic: nameSuffix === 'Interval',\n delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 :\n undefined,\n args: args\n };\n var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n var handle = task.data.handleId;\n if (typeof handle === 'number') {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handle] = task;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task;\n }\n // check whether handle is null, because some polyfill or browser\n // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame\n if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&\n typeof handle.unref === 'function') {\n task.ref = handle.ref.bind(handle);\n task.unref = handle.unref.bind(handle);\n }\n if (typeof handle === 'number' || handle) {\n return handle;\n }\n return task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n }; });\n clearNative =\n patchMethod(window, cancelName, function (delegate) { return function (self, args) {\n var id = args[0];\n var task;\n if (typeof id === 'number') {\n // non nodejs env.\n task = tasksByHandleId[id];\n }\n else {\n // nodejs env.\n task = id && id[taskSymbol];\n // other environments.\n if (!task) {\n task = id;\n }\n }\n if (task && typeof task.type === 'string') {\n if (task.state !== 'notScheduled' &&\n (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {\n if (typeof id === 'number') {\n delete tasksByHandleId[id];\n }\n else if (id) {\n id[taskSymbol] = null;\n }\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n }; });\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/*\n * This is necessary for Chrome and Chrome mobile, to enable\n * things like redefining `createdCallback` on an element.\n */\nvar _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;\nvar _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] =\n Object.getOwnPropertyDescriptor;\nvar _create = Object.create;\nvar unconfigurablesKey = zoneSymbol('unconfigurables');\nfunction propertyPatch() {\n Object.defineProperty = function (obj, prop, desc) {\n if (isUnconfigurable(obj, prop)) {\n throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n }\n var originalConfigurableFlag = desc.configurable;\n if (prop !== 'prototype') {\n desc = rewriteDescriptor(obj, prop, desc);\n }\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n };\n Object.defineProperties = function (obj, props) {\n Object.keys(props).forEach(function (prop) {\n Object.defineProperty(obj, prop, props[prop]);\n });\n return obj;\n };\n Object.create = function (obj, proto) {\n if (typeof proto === 'object' && !Object.isFrozen(proto)) {\n Object.keys(proto).forEach(function (prop) {\n proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n });\n }\n return _create(obj, proto);\n };\n Object.getOwnPropertyDescriptor = function (obj, prop) {\n var desc = _getOwnPropertyDescriptor(obj, prop);\n if (desc && isUnconfigurable(obj, prop)) {\n desc.configurable = false;\n }\n return desc;\n };\n}\nfunction _redefineProperty(obj, prop, desc) {\n var originalConfigurableFlag = desc.configurable;\n desc = rewriteDescriptor(obj, prop, desc);\n return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);\n}\nfunction isUnconfigurable(obj, prop) {\n return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n}\nfunction rewriteDescriptor(obj, prop, desc) {\n // issue-927, if the desc is frozen, don't try to change the desc\n if (!Object.isFrozen(desc)) {\n desc.configurable = true;\n }\n if (!desc.configurable) {\n // issue-927, if the obj is frozen, don't try to set the desc to obj\n if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {\n _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n }\n if (obj[unconfigurablesKey]) {\n obj[unconfigurablesKey][prop] = true;\n }\n }\n return desc;\n}\nfunction _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n if (desc.configurable) {\n // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's\n // retry with the original flag value\n if (typeof originalConfigurableFlag == 'undefined') {\n delete desc.configurable;\n }\n else {\n desc.configurable = originalConfigurableFlag;\n }\n try {\n return _defineProperty(obj, prop, desc);\n }\n catch (error) {\n var descJson = null;\n try {\n descJson = JSON.stringify(desc);\n }\n catch (error) {\n descJson = desc.toString();\n }\n console.log(\"Attempting to configure '\" + prop + \"' with descriptor '\" + descJson + \"' on object '\" + obj + \"' and got error, giving up: \" + error);\n }\n }\n else {\n throw error;\n }\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// we have to patch the instance since the proto is non-configurable\nfunction apply(api, _global) {\n var WS = _global.WebSocket;\n // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener\n // On older Chrome, no need since EventTarget was already patched\n if (!_global.EventTarget) {\n patchEventTarget(_global, [WS.prototype]);\n }\n _global.WebSocket = function (x, y) {\n var socket = arguments.length > 1 ? new WS(x, y) : new WS(x);\n var proxySocket;\n var proxySocketProto;\n // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n var onmessageDesc = ObjectGetOwnPropertyDescriptor(socket, 'onmessage');\n if (onmessageDesc && onmessageDesc.configurable === false) {\n proxySocket = ObjectCreate(socket);\n // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'\n // but proxySocket not, so we will keep socket as prototype and pass it to\n // patchOnProperties method\n proxySocketProto = socket;\n [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {\n proxySocket[propName] = function () {\n var args = ArraySlice.call(arguments);\n if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {\n var eventName = args.length > 0 ? args[0] : undefined;\n if (eventName) {\n var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);\n socket[propertySymbol] = proxySocket[propertySymbol];\n }\n }\n return socket[propName].apply(socket, args);\n };\n });\n }\n else {\n // we can patch the real socket\n proxySocket = socket;\n }\n patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);\n return proxySocket;\n };\n var globalWebSocket = _global['WebSocket'];\n for (var prop in WS) {\n globalWebSocket[prop] = WS[prop];\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {globalThis}\n */\nvar globalEventHandlersEventNames = [\n 'abort',\n 'animationcancel',\n 'animationend',\n 'animationiteration',\n 'auxclick',\n 'beforeinput',\n 'blur',\n 'cancel',\n 'canplay',\n 'canplaythrough',\n 'change',\n 'compositionstart',\n 'compositionupdate',\n 'compositionend',\n 'cuechange',\n 'click',\n 'close',\n 'contextmenu',\n 'curechange',\n 'dblclick',\n 'drag',\n 'dragend',\n 'dragenter',\n 'dragexit',\n 'dragleave',\n 'dragover',\n 'drop',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'focus',\n 'focusin',\n 'focusout',\n 'gotpointercapture',\n 'input',\n 'invalid',\n 'keydown',\n 'keypress',\n 'keyup',\n 'load',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'lostpointercapture',\n 'mousedown',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'mouseup',\n 'mousewheel',\n 'orientationchange',\n 'pause',\n 'play',\n 'playing',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerlockchange',\n 'mozpointerlockchange',\n 'webkitpointerlockerchange',\n 'pointerlockerror',\n 'mozpointerlockerror',\n 'webkitpointerlockerror',\n 'pointermove',\n 'pointout',\n 'pointerover',\n 'pointerup',\n 'progress',\n 'ratechange',\n 'reset',\n 'resize',\n 'scroll',\n 'seeked',\n 'seeking',\n 'select',\n 'selectionchange',\n 'selectstart',\n 'show',\n 'sort',\n 'stalled',\n 'submit',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'touchcancel',\n 'touchmove',\n 'touchstart',\n 'touchend',\n 'transitioncancel',\n 'transitionend',\n 'waiting',\n 'wheel'\n];\nvar documentEventNames = [\n 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange',\n 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror',\n 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange',\n 'visibilitychange', 'resume'\n];\nvar windowEventNames = [\n 'absolutedeviceorientation',\n 'afterinput',\n 'afterprint',\n 'appinstalled',\n 'beforeinstallprompt',\n 'beforeprint',\n 'beforeunload',\n 'devicelight',\n 'devicemotion',\n 'deviceorientation',\n 'deviceorientationabsolute',\n 'deviceproximity',\n 'hashchange',\n 'languagechange',\n 'message',\n 'mozbeforepaint',\n 'offline',\n 'online',\n 'paint',\n 'pageshow',\n 'pagehide',\n 'popstate',\n 'rejectionhandled',\n 'storage',\n 'unhandledrejection',\n 'unload',\n 'userproximity',\n 'vrdisplyconnected',\n 'vrdisplaydisconnected',\n 'vrdisplaypresentchange'\n];\nvar htmlElementEventNames = [\n 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend',\n 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend',\n 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend'\n];\nvar mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend'];\nvar ieElementEventNames = [\n 'activate',\n 'afterupdate',\n 'ariarequest',\n 'beforeactivate',\n 'beforedeactivate',\n 'beforeeditfocus',\n 'beforeupdate',\n 'cellchange',\n 'controlselect',\n 'dataavailable',\n 'datasetchanged',\n 'datasetcomplete',\n 'errorupdate',\n 'filterchange',\n 'layoutcomplete',\n 'losecapture',\n 'move',\n 'moveend',\n 'movestart',\n 'propertychange',\n 'resizeend',\n 'resizestart',\n 'rowenter',\n 'rowexit',\n 'rowsdelete',\n 'rowsinserted',\n 'command',\n 'compassneedscalibration',\n 'deactivate',\n 'help',\n 'mscontentzoom',\n 'msmanipulationstatechanged',\n 'msgesturechange',\n 'msgesturedoubletap',\n 'msgestureend',\n 'msgesturehold',\n 'msgesturestart',\n 'msgesturetap',\n 'msgotpointercapture',\n 'msinertiastart',\n 'mslostpointercapture',\n 'mspointercancel',\n 'mspointerdown',\n 'mspointerenter',\n 'mspointerhover',\n 'mspointerleave',\n 'mspointermove',\n 'mspointerout',\n 'mspointerover',\n 'mspointerup',\n 'pointerout',\n 'mssitemodejumplistitemremoved',\n 'msthumbnailclick',\n 'stop',\n 'storagecommit'\n];\nvar webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];\nvar formEventNames = ['autocomplete', 'autocompleteerror'];\nvar detailEventNames = ['toggle'];\nvar frameEventNames = ['load'];\nvar frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror'];\nvar marqueeEventNames = ['bounce', 'finish', 'start'];\nvar XMLHttpRequestEventNames = [\n 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend',\n 'readystatechange'\n];\nvar IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close'];\nvar websocketEventNames = ['close', 'error', 'open', 'message'];\nvar workerEventNames = ['error', 'message'];\nvar eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames);\nfunction filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n var tip = ignoreProperties.filter(function (ip) { return ip.target === target; });\n if (!tip || tip.length === 0) {\n return onProperties;\n }\n var targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; });\n}\nfunction patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n var filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n}\nfunction propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n var supportsWebSocket = typeof WebSocket !== 'undefined';\n if (canPatchViaPropertyDescriptor()) {\n var ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n if (isBrowser) {\n var internalWindow = window;\n var ignoreErrorProperties = isIE ? [{ target: internalWindow, ignoreProperties: ['error'] }] : [];\n // in IE/Edge, onProp not exist in window object, but in WindowPrototype\n // so we need to pass WindowPrototype to check onProp exist or not\n patchFilteredProperties(internalWindow, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow));\n patchFilteredProperties(Document.prototype, eventNames, ignoreProperties);\n if (typeof internalWindow['SVGElement'] !== 'undefined') {\n patchFilteredProperties(internalWindow['SVGElement'].prototype, eventNames, ignoreProperties);\n }\n patchFilteredProperties(Element.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties);\n patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties);\n patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);\n patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties);\n patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties);\n var HTMLMarqueeElement_1 = internalWindow['HTMLMarqueeElement'];\n if (HTMLMarqueeElement_1) {\n patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties);\n }\n var Worker_1 = internalWindow['Worker'];\n if (Worker_1) {\n patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties);\n }\n }\n patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties);\n var XMLHttpRequestEventTarget_1 = _global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n patchFilteredProperties(XMLHttpRequestEventTarget_1 && XMLHttpRequestEventTarget_1.prototype, XMLHttpRequestEventNames, ignoreProperties);\n }\n if (typeof IDBIndex !== 'undefined') {\n patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties);\n patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties);\n }\n if (supportsWebSocket) {\n patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties);\n }\n }\n else {\n // Safari, Android browsers (Jelly Bean)\n patchViaCapturingAllTheEvents();\n patchClass('XMLHttpRequest');\n if (supportsWebSocket) {\n apply(api, _global);\n }\n }\n}\nfunction canPatchViaPropertyDescriptor() {\n if ((isBrowser || isMix) && !ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&\n typeof Element !== 'undefined') {\n // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n // IDL interface attributes are not configurable\n var desc = ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');\n if (desc && !desc.configurable)\n return false;\n }\n var ON_READY_STATE_CHANGE = 'onreadystatechange';\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n var xhrDesc = ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);\n // add enumerable and configurable here because in opera\n // by default XMLHttpRequest.prototype.onreadystatechange is undefined\n // without adding enumerable and configurable will cause onreadystatechange\n // non-configurable\n // and if XMLHttpRequest.prototype.onreadystatechange is undefined,\n // we should set a real desc instead a fake one\n if (xhrDesc) {\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {\n enumerable: true,\n configurable: true,\n get: function () {\n return true;\n }\n });\n var req = new XMLHttpRequest();\n var result = !!req.onreadystatechange;\n // restore original desc\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});\n return result;\n }\n else {\n var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = zoneSymbol('fake');\n ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {\n enumerable: true,\n configurable: true,\n get: function () {\n return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1];\n },\n set: function (value) {\n this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value;\n }\n });\n var req = new XMLHttpRequest();\n var detectFunc = function () { };\n req.onreadystatechange = detectFunc;\n var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;\n req.onreadystatechange = null;\n return result;\n }\n}\nvar unboundKey = zoneSymbol('unbound');\n// Whenever any eventListener fires, we check the eventListener target and all parents\n// for `onwhatever` properties and replace them with zone-bound functions\n// - Chrome (for now)\nfunction patchViaCapturingAllTheEvents() {\n var _loop_1 = function (i) {\n var property = eventNames[i];\n var onproperty = 'on' + property;\n self.addEventListener(property, function (event) {\n var elt = event.target, bound, source;\n if (elt) {\n source = elt.constructor['name'] + '.' + onproperty;\n }\n else {\n source = 'unknown.' + onproperty;\n }\n while (elt) {\n if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n bound = wrapWithCurrentZone(elt[onproperty], source);\n bound[unboundKey] = elt[onproperty];\n elt[onproperty] = bound;\n }\n elt = elt.parentElement;\n }\n }, true);\n };\n for (var i = 0; i < eventNames.length; i++) {\n _loop_1(i);\n }\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction eventTargetPatch(_global, api) {\n var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';\n var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket'\n .split(',');\n var EVENT_TARGET = 'EventTarget';\n var apis = [];\n var isWtf = _global['wtf'];\n var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');\n if (isWtf) {\n // Workaround for: https://github.com/google/tracing-framework/issues/555\n apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);\n }\n else if (_global[EVENT_TARGET]) {\n apis.push(EVENT_TARGET);\n }\n else {\n // Note: EventTarget is not available in all browsers,\n // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n apis = NO_EVENT_TARGET;\n }\n var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;\n var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;\n var ieOrEdge = isIEOrEdge();\n var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';\n var FUNCTION_WRAPPER = '[object FunctionWrapper]';\n var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';\n // predefine all __zone_symbol__ + eventName + true/false string\n for (var i = 0; i < eventNames.length; i++) {\n var eventName = eventNames[i];\n var falseEventName = eventName + FALSE_STR;\n var trueEventName = eventName + TRUE_STR;\n var symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames$1[eventName] = {};\n zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;\n }\n // predefine all task.source string\n for (var i = 0; i < WTF_ISSUE_555.length; i++) {\n var target = WTF_ISSUE_555_ARRAY[i];\n var targets = globalSources[target] = {};\n for (var j = 0; j < eventNames.length; j++) {\n var eventName = eventNames[j];\n targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;\n }\n }\n var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {\n if (!isDisableIECheck && ieOrEdge) {\n if (isEnableCrossContextCheck) {\n try {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n else {\n var testString = delegate.toString();\n if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n }\n else if (isEnableCrossContextCheck) {\n try {\n delegate.toString();\n }\n catch (error) {\n nativeDelegate.apply(target, args);\n return false;\n }\n }\n return true;\n };\n var apiTypes = [];\n for (var i = 0; i < apis.length; i++) {\n var type = _global[apis[i]];\n apiTypes.push(type && type.prototype);\n }\n // vh is validateHandler to check event handler\n // is valid or not(for security check)\n patchEventTarget(_global, apiTypes, { vh: checkIEAndCrossContext });\n api.patchEventTarget = patchEventTarget;\n return true;\n}\nfunction patchEvent(global, api) {\n patchEventPrototype(global, api);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction patchCallbacks(target, targetName, method, callbacks) {\n var symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n var nativeDelegate = target[symbol] = target[method];\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n var source = targetName + \".\" + method + \"::\" + callback;\n var prototype = opts.prototype;\n if (prototype.hasOwnProperty(callback)) {\n var descriptor = ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = wrapWithCurrentZone(descriptor.value, source);\n _redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = wrapWithCurrentZone(prototype[callback], source);\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n attachOriginToPatched(target[method], nativeDelegate);\n}\nfunction registerElementPatch(_global) {\n if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {\n return;\n }\n var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];\n patchCallbacks(document, 'Document', 'registerElement', callbacks);\n}\nfunction patchCustomElements(_global) {\n if ((!isBrowser && !isMix) || !('customElements' in _global)) {\n return;\n }\n var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback'];\n patchCallbacks(_global.customElements, 'customElements', 'define', callbacks);\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nZone.__load_patch('util', function (global, Zone, api) {\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n});\nZone.__load_patch('timers', function (global) {\n var set = 'set';\n var clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n});\nZone.__load_patch('requestAnimationFrame', function (global) {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n});\nZone.__load_patch('blocking', function (global, Zone) {\n var blockingMethods = ['alert', 'prompt', 'confirm'];\n for (var i = 0; i < blockingMethods.length; i++) {\n var name_1 = blockingMethods[i];\n patchMethod(global, name_1, function (delegate, symbol, name) {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n});\nZone.__load_patch('EventTarget', function (global, Zone, api) {\n // load blackListEvents from global\n var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]);\n }\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n patchClass('IntersectionObserver');\n patchClass('FileReader');\n});\nZone.__load_patch('on_property', function (global, Zone, api) {\n propertyDescriptorPatch(api, global);\n propertyPatch();\n});\nZone.__load_patch('customElements', function (global, Zone, api) {\n registerElementPatch(global);\n patchCustomElements(global);\n});\nZone.__load_patch('canvas', function (global) {\n var HTMLCanvasElement = global['HTMLCanvasElement'];\n if (typeof HTMLCanvasElement !== 'undefined' && HTMLCanvasElement.prototype &&\n HTMLCanvasElement.prototype.toBlob) {\n patchMacroTask(HTMLCanvasElement.prototype, 'toBlob', function (self, args) {\n return { name: 'HTMLCanvasElement.toBlob', target: self, cbIdx: 0, args: args };\n });\n }\n});\nZone.__load_patch('XHR', function (global, Zone) {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n var XHR_TASK = zoneSymbol('xhrTask');\n var XHR_SYNC = zoneSymbol('xhrSync');\n var XHR_LISTENER = zoneSymbol('xhrListener');\n var XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n var XHR_URL = zoneSymbol('xhrURL');\n var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) {\n return target[XHR_TASK];\n }\n var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget_1) {\n var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n var READY_STATE_CHANGE = 'readystatechange';\n var SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n var data = task.data;\n var target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n var listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n var newListener = target[XHR_LISTENER] = function () {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n var loadTasks = target['__zone_symbol__loadfalse'];\n if (loadTasks && loadTasks.length > 0) {\n var oriInvoke_1 = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n var loadTasks = target['__zone_symbol__loadfalse'];\n for (var i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke_1.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n };\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n var storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n var data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n }; });\n var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n var fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false };\n var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n }; });\n var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) {\n var task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n }; });\n }\n});\nZone.__load_patch('geolocation', function (global) {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n});\nZone.__load_patch('PromiseRejectionEvent', function (global, Zone) {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n var eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach(function (eventTask) {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n var PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n});\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n})));\n","/**\r\n * This file includes polyfills needed by Angular and is loaded before the app.\r\n * You can add your own extra polyfills to this file.\r\n *\r\n * This file is divided into 2 sections:\r\n * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\r\n * 2. Application imports. Files imported after ZoneJS that should be loaded before your main\r\n * file.\r\n *\r\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\r\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\r\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\r\n *\r\n * Learn more in https://angular.io/guide/browser-support\r\n */\r\n\r\n/***************************************************************************************************\r\n * BROWSER POLYFILLS\r\n */\r\n\r\n/** IE9, IE10 and IE11 requires all of the following polyfills. **/\r\n// import 'core-js/es6/symbol';\r\n// import 'core-js/es6/object';\r\n// import 'core-js/es6/function';\r\n// import 'core-js/es6/parse-int';\r\n// import 'core-js/es6/parse-float';\r\n// import 'core-js/es6/number';\r\n// import 'core-js/es6/math';\r\n// import 'core-js/es6/string';\r\n// import 'core-js/es6/date';\r\n// import 'core-js/es6/array';\r\n// import 'core-js/es6/regexp';\r\n// import 'core-js/es6/map';\r\n// import 'core-js/es6/weak-map';\r\n// import 'core-js/es6/set';\r\n\r\n/**\r\n * If the application will be indexed by Google Search, the following is required.\r\n * Googlebot uses a renderer based on Chrome 41.\r\n * https://developers.google.com/search/docs/guides/rendering\r\n **/\r\n// import 'core-js/es6/array';\r\n\r\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\r\n// import 'classlist.js'; // Run `npm install --save classlist.js`.\r\n\r\n/** IE10 and IE11 requires the following for the Reflect API. */\r\n// import 'core-js/es6/reflect';\r\n\r\n/**\r\n * Web Animations `@angular/platform-browser/animations`\r\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\r\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\r\n **/\r\n// import 'web-animations-js'; // Run `npm install --save web-animations-js`.\r\n\r\n/**\r\n * By default, zone.js will patch all possible macroTask and DomEvents\r\n * user can disable parts of macroTask/DomEvents patch by setting following flags\r\n */\r\n\r\n // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\r\n // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\r\n // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\r\n\r\n /*\r\n * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\r\n * with the following flag, it will bypass `zone.js` patch for IE/Edge\r\n */\r\n// (window as any).__Zone_enable_cross_context_check = true;\r\n\r\n/***************************************************************************************************\r\n * Zone JS is required by default for Angular itself.\r\n */\r\nimport 'zone.js/dist/zone'; // Included with Angular CLI.\r\n\r\n\r\n/***************************************************************************************************\r\n * APPLICATION IMPORTS\r\n */\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/purchase.svg b/src/gui/qt-daemon/html/purchase.svg deleted file mode 100644 index 46e904fc..00000000 --- a/src/gui/qt-daemon/html/purchase.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/src/gui/qt-daemon/html/receive-green.svg b/src/gui/qt-daemon/html/receive-green.svg deleted file mode 100644 index 1db438b2..00000000 --- a/src/gui/qt-daemon/html/receive-green.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/receive.svg b/src/gui/qt-daemon/html/receive.svg deleted file mode 100644 index fd7e85a9..00000000 --- a/src/gui/qt-daemon/html/receive.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/runtime.js b/src/gui/qt-daemon/html/runtime.js deleted file mode 100644 index fd2c03c8..00000000 --- a/src/gui/qt-daemon/html/runtime.js +++ /dev/null @@ -1,154 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "runtime": 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // run deferred modules from other chunks -/******/ checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ([]); -//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/src/gui/qt-daemon/html/runtime.js.map b/src/gui/qt-daemon/html/runtime.js.map deleted file mode 100644 index c9491c19..00000000 --- a/src/gui/qt-daemon/html/runtime.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAiB,4BAA4B;AAC7C;AACA;AACA,0BAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAgB,uBAAuB;AACvC;;;AAGA;AACA","file":"runtime.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/gui/qt-daemon/html/safety.svg b/src/gui/qt-daemon/html/safety.svg deleted file mode 100644 index f313f3af..00000000 --- a/src/gui/qt-daemon/html/safety.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/secured.svg b/src/gui/qt-daemon/html/secured.svg deleted file mode 100644 index dc1d801c..00000000 --- a/src/gui/qt-daemon/html/secured.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/sell.svg b/src/gui/qt-daemon/html/sell.svg deleted file mode 100644 index f28f0a20..00000000 --- a/src/gui/qt-daemon/html/sell.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/send-red.svg b/src/gui/qt-daemon/html/send-red.svg deleted file mode 100644 index d96d08f4..00000000 --- a/src/gui/qt-daemon/html/send-red.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/send.svg b/src/gui/qt-daemon/html/send.svg deleted file mode 100644 index 0c7e6136..00000000 --- a/src/gui/qt-daemon/html/send.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/settings.svg b/src/gui/qt-daemon/html/settings.svg deleted file mode 100644 index ce87d8bc..00000000 --- a/src/gui/qt-daemon/html/settings.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - settings - - - - - diff --git a/src/gui/qt-daemon/html/staking.svg b/src/gui/qt-daemon/html/staking.svg deleted file mode 100644 index 2f4337f6..00000000 --- a/src/gui/qt-daemon/html/staking.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/gui/qt-daemon/html/styles.js b/src/gui/qt-daemon/html/styles.js deleted file mode 100644 index 383090a9..00000000 --- a/src/gui/qt-daemon/html/styles.js +++ /dev/null @@ -1,566 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["styles"],{ - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/lib/loader.js?!./src/styles.scss": -/*!**********************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss ***! - \**********************************************************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = [[module.i, "/*\r\n* Implementation of themes\r\n*/\n.ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}\n.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}\n.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}\n.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}\n.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}\n.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}\n.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 0 3px rgba(0,126,255,0.1)}\n.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}\n.ng-select .ng-has-value .ng-placeholder{display:none}\n.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}\n.ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,0.06)}\n.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}\n[dir=\"rtl\"] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}\n.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}\n.ng-select.ng-select-single .ng-select-container{height:36px}\n.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}\n[dir=\"rtl\"] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}\n.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}\n.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:1px 5px}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}\n.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{top:5px;padding-bottom:5px;padding-left:3px}\n[dir=\"rtl\"] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}\n.ng-select .ng-clear-wrapper{color:#999}\n.ng-select .ng-clear-wrapper:hover .ng-clear{color:#D0021B}\n.ng-select .ng-spinner-zone{padding:5px 5px 0 0}\n[dir=\"rtl\"] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}\n.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}\n[dir=\"rtl\"] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}\n.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}\n.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}\n.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,0.06);left:0}\n.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}\n.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}\n.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}\n.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}\n.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}\n.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:rgba(0,0,0,0.54);cursor:pointer}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,0.87);padding:8px 10px}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}\n[dir=\"rtl\"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}\n.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}\n[dir=\"rtl\"] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}\n[dir=\"rtl\"] .ng-dropdown-panel{direction:rtl;text-align:right}\nhtml {\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box; }\n*, *:before, *:after {\n box-sizing: inherit;\n -webkit-box-sizing: inherit;\n -moz-box-sizing: inherit;\n margin: 0;\n padding: 0;\n -webkit-touch-collout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none; }\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n border: 0;\n font-size: 100%;\n font: inherit;\n vertical-align: baseline; }\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n display: block; }\nbody {\n line-height: 1;\n font-style: normal; }\nol, ul {\n list-style: none; }\nblockquote, q {\n quotes: none; }\nblockquote:before, blockquote:after,\nq:before, q:after {\n content: none; }\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\ntd,\nth {\n padding: 0; }\ninput {\n outline: none; }\ninput:-webkit-autofill {\n -webkit-box-shadow: 0 0 0 1000px white inset; }\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n outline: none; }\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\ninput {\n line-height: normal; }\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box; }\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\na {\n text-decoration: none; }\na:active, a:hover, a:focus {\n outline: 0; }\ni {\n font-style: italic; }\nb, strong {\n font-weight: 700; }\nimg {\n width: auto;\n max-width: 100%;\n height: auto;\n vertical-align: top;\n border: 0; }\n.hidden {\n display: none !important; }\n.theme-dark .app-content .preloader .loading-bar {\n background-color: #5cda9d; }\n.theme-gray .app-content .preloader .loading-bar {\n background-color: #47cf8d; }\n.theme-white .app-content .preloader .loading-bar {\n background-color: #46c172; }\nbutton {\n border: none;\n font-family: OpenSans, sans-serif;\n font-size: 1.5rem;\n font-weight: 600;\n outline: none;\n padding: 0 1rem;\n height: 4.2rem; }\n.theme-dark button:disabled:not(.transparent-button), .theme-dark button.blue-button_reset {\n background-color: #9cadb7;\n color: #111921; }\n.theme-gray button:disabled:not(.transparent-button), .theme-gray button.blue-button_reset {\n background-color: #79848f;\n color: #1a1a1a; }\n.theme-white button:disabled:not(.transparent-button), .theme-white button.blue-button_reset {\n background-color: #90a4ae;\n color: #fefefe; }\n.theme-dark button:disabled:not(.transparent-button):hover, .theme-dark button.blue-button_reset:hover {\n background-color: #b7d1e0; }\n.theme-gray button:disabled:not(.transparent-button):hover, .theme-gray button.blue-button_reset:hover {\n background-color: #a1aebb; }\n.theme-white button:disabled:not(.transparent-button):hover, .theme-white button.blue-button_reset:hover {\n background-color: #aebec6; }\n.theme-dark button:disabled:not(.transparent-button):focus, .theme-dark button.blue-button_reset:focus {\n background-color: #a7b9c2; }\n.theme-gray button:disabled:not(.transparent-button):focus, .theme-gray button.blue-button_reset:focus {\n background-color: #8a959f; }\n.theme-white button:disabled:not(.transparent-button):focus, .theme-white button.blue-button_reset:focus {\n background-color: #a7b9c2; }\n.theme-dark button.blue-button:not(:disabled) {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray button.blue-button:not(:disabled) {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white button.blue-button:not(:disabled) {\n background-color: #2c95f1;\n color: #fefefe; }\n.theme-dark button.blue-button:not(:disabled):hover {\n background-color: #82d7ff; }\n.theme-gray button.blue-button:not(:disabled):hover {\n background-color: #86d6ff; }\n.theme-white button.blue-button:not(:disabled):hover {\n background-color: #5cb3ff; }\n.theme-dark button.blue-button:not(:disabled):focus {\n background-color: #59b5fd; }\n.theme-gray button.blue-button:not(:disabled):focus {\n background-color: #5fb6fc; }\n.theme-white button.blue-button:not(:disabled):focus {\n background-color: #379ffa; }\n.theme-dark button.green-button:not(:disabled) {\n background-color: #5cda9d;\n color: #111921; }\n.theme-gray button.green-button:not(:disabled) {\n background-color: #47cf8d;\n color: #1a1a1a; }\n.theme-white button.green-button:not(:disabled) {\n background-color: #46c172;\n color: #fefefe; }\n.theme-dark button.green-button:not(:disabled):hover {\n background-color: #8dfcc6; }\n.theme-gray button.green-button:not(:disabled):hover {\n background-color: #7bf6c6; }\n.theme-white button.green-button:not(:disabled):hover {\n background-color: #5ad586; }\n.theme-dark button.green-button:not(:disabled):focus {\n background-color: #62e0b2; }\n.theme-gray button.green-button:not(:disabled):focus {\n background-color: #5cdc9e; }\n.theme-white button.green-button:not(:disabled):focus {\n background-color: #53c77c; }\n.theme-dark button.turquoise-button:not(:disabled) {\n background-color: #4dd0e1;\n color: #111921; }\n.theme-gray button.turquoise-button:not(:disabled) {\n background-color: #3ec5d7;\n color: #1a1a1a; }\n.theme-white button.turquoise-button:not(:disabled) {\n background-color: #26b6c7;\n color: #fefefe; }\n.theme-dark button.turquoise-button:not(:disabled):hover {\n background-color: #87f4f5; }\n.theme-gray button.turquoise-button:not(:disabled):hover {\n background-color: #72edfe; }\n.theme-white button.turquoise-button:not(:disabled):hover {\n background-color: #52cbd9; }\n.theme-dark button.turquoise-button:not(:disabled):focus {\n background-color: #42d5e8; }\n.theme-gray button.turquoise-button:not(:disabled):focus {\n background-color: #50d0e1; }\n.theme-white button.turquoise-button:not(:disabled):focus {\n background-color: #31becf; }\nbutton.transparent-button {\n display: flex;\n align-items: center;\n justify-content: center; }\n.theme-dark button.transparent-button {\n background-color: transparent;\n border: 0.2rem solid #2b3644;\n color: #e0e0e0; }\n.theme-gray button.transparent-button {\n background-color: transparent;\n border: 0.2rem solid #2f3438;\n color: #e0e0e0; }\n.theme-white button.transparent-button {\n background-color: transparent;\n border: 0.2rem solid #ebebeb;\n color: #43454b; }\nbutton.transparent-button .icon {\n margin-right: 1rem;\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\n mask: url('complete-testwallet.svg') no-repeat center;\n width: 1.7rem;\n height: 1.7rem; }\n.theme-dark button.transparent-button .icon {\n background-color: #e0e0e0; }\n.theme-gray button.transparent-button .icon {\n background-color: #e0e0e0; }\n.theme-white button.transparent-button .icon {\n background-color: #43454b; }\n.input-block {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin-bottom: 0.4rem; }\n.input-block .wrap-label {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-height: 2.4rem; }\n.input-block label {\n font-size: 1.3rem;\n line-height: 2.4rem; }\n.theme-dark .input-block label {\n color: #556576; }\n.theme-gray .input-block label {\n color: #565c62; }\n.theme-white .input-block label {\n color: #a0a5ab; }\n.input-block input[type='text'], .input-block input[type='password'], .input-block select {\n border: none;\n font-size: 1.4rem;\n outline: none;\n padding: 0 1rem;\n width: 100%;\n height: 4.2rem; }\n.theme-dark .input-block input[type='text'], .theme-dark .input-block input[type='password'], .theme-dark .input-block select {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray .input-block input[type='text'], .theme-gray .input-block input[type='password'], .theme-gray .input-block select {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white .input-block input[type='text'], .theme-white .input-block input[type='password'], .theme-white .input-block select {\n background-color: #e6e6e6;\n color: #43454b; }\n.input-block.textarea {\n height: auto; }\n.input-block.textarea textarea {\n font-family: OpenSans, sans-serif;\n border: none;\n font-size: 1.4rem;\n outline: none;\n padding: 1rem;\n width: 100%;\n min-width: 100%;\n height: 100%;\n min-height: 7.5rem;\n max-height: 7.5rem;\n overflow: auto;\n resize: none; }\n.theme-dark .input-block.textarea textarea {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray .input-block.textarea textarea {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white .input-block.textarea textarea {\n background-color: #e6e6e6;\n color: #43454b; }\n.input-block .error-block {\n font-size: 1rem;\n line-height: 1.4rem;\n align-self: flex-end;\n text-align: right; }\n.theme-dark .input-block .error-block {\n color: #ff5252; }\n.theme-gray .input-block .error-block {\n color: #ff5252; }\n.theme-white .input-block .error-block {\n color: #ff5252; }\n.input-block .success-block {\n font-size: 1rem;\n line-height: 1.4rem;\n align-self: flex-end;\n text-align: right; }\n.theme-dark .input-block .success-block {\n color: #5cda9d; }\n.theme-gray .input-block .success-block {\n color: #47cf8d; }\n.theme-white .input-block .success-block {\n color: #46c172; }\n.theme-dark .error-text {\n color: #ff5252; }\n.theme-gray .error-text {\n color: #ff5252; }\n.theme-white .error-text {\n color: #ff5252; }\ninput[type='radio'].style-radio + label {\n display: flex;\n align-items: center;\n cursor: pointer;\n font-weight: 400;\n padding-left: 2.4rem;\n -webkit-touch-collout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none; }\n.theme-dark input[type='radio'].style-radio + label {\n color: #556576; }\n.theme-gray input[type='radio'].style-radio + label {\n color: #565c62; }\n.theme-white input[type='radio'].style-radio + label {\n color: #a0a5ab; }\ninput[type='radio'].style-radio:not(checked) {\n position: absolute;\n opacity: 0; }\ninput[type='radio'].style-radio:not(checked) + label {\n position: relative; }\ninput[type='radio'].style-radio:not(checked) + label:before {\n content: '';\n position: absolute;\n top: 0.7rem;\n left: 0;\n background: transparent;\n border-radius: 50%;\n width: 1.4rem;\n height: 1.4rem; }\n.theme-dark input[type='radio'].style-radio:not(checked) + label:before {\n border: 0.1rem solid #4db1ff; }\n.theme-gray input[type='radio'].style-radio:not(checked) + label:before {\n border: 0.1rem solid #42a5f5; }\n.theme-white input[type='radio'].style-radio:not(checked) + label:before {\n border: 0.1rem solid #2c95f1; }\ninput[type='radio'].style-radio:not(checked) + label:after {\n content: '';\n position: absolute;\n top: 1rem;\n left: 0.3rem;\n border-radius: 50%;\n opacity: 0;\n width: 0.8rem;\n height: 0.8rem; }\n.theme-dark input[type='radio'].style-radio:not(checked) + label:after {\n background-color: #4db1ff; }\n.theme-gray input[type='radio'].style-radio:not(checked) + label:after {\n background-color: #42a5f5; }\n.theme-white input[type='radio'].style-radio:not(checked) + label:after {\n background-color: #2c95f1; }\ninput[type='radio'].style-radio:checked + label:after {\n opacity: 1; }\ninput[type='checkbox'].style-checkbox + label {\n display: flex;\n align-items: center;\n cursor: pointer;\n font-weight: 400;\n padding-left: 3.6rem;\n -webkit-touch-collout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none; }\n.theme-dark input[type='checkbox'].style-checkbox + label {\n color: #556576; }\n.theme-gray input[type='checkbox'].style-checkbox + label {\n color: #565c62; }\n.theme-white input[type='checkbox'].style-checkbox + label {\n color: #a0a5ab; }\ninput[type='checkbox'].style-checkbox:not(checked) {\n position: absolute;\n top: 50%;\n left: 1.6rem;\n transform: translateY(-50%);\n visibility: hidden; }\ninput[type='checkbox'].style-checkbox:not(checked) + label {\n position: relative; }\ninput[type='checkbox'].style-checkbox:not(checked) + label:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 1.6rem;\n transform: translateY(-50%);\n background: transparent;\n width: 1.4rem;\n height: 1.4rem; }\n.theme-dark input[type='checkbox'].style-checkbox:not(checked) + label:before {\n border: 0.1rem solid #4db1ff; }\n.theme-gray input[type='checkbox'].style-checkbox:not(checked) + label:before {\n border: 0.1rem solid #42a5f5; }\n.theme-white input[type='checkbox'].style-checkbox:not(checked) + label:before {\n border: 0.1rem solid #2c95f1; }\ninput[type='checkbox'].style-checkbox:checked + label:before {\n background: url('complete-testwallet.svg'); }\n.theme-dark input[type='checkbox'].style-checkbox:checked + label:before {\n background-color: #4db1ff; }\n.theme-gray input[type='checkbox'].style-checkbox:checked + label:before {\n background-color: #42a5f5; }\n.theme-white input[type='checkbox'].style-checkbox:checked + label:before {\n background-color: #2c95f1; }\n.theme-dark .switch {\n background-color: #000000; }\n.theme-gray .switch {\n background-color: #000000; }\n.theme-white .switch {\n background-color: #e0e0e0; }\n.theme-dark .switch .circle.on {\n background-color: #4db1ff; }\n.theme-gray .switch .circle.on {\n background-color: #42a5f5; }\n.theme-white .switch .circle.on {\n background-color: #2c95f1; }\n.theme-dark .switch .circle.off {\n background-color: #556576; }\n.theme-gray .switch .circle.off {\n background-color: #565c62; }\n.theme-white .switch .circle.off {\n background-color: #a0a5ab; }\n.table-tooltip {\n padding: 1rem 2rem; }\n.theme-dark .table-tooltip {\n background: #42505f;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-gray .table-tooltip {\n background: #3e464c;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-white .table-tooltip {\n background: #ffffff;\n box-shadow: 0 0 1rem rgba(120, 120, 120, 0.5);\n color: #43454b; }\n.table-tooltip .tooltip-inner {\n font-size: 1.3rem;\n line-height: 1.8rem;\n white-space: pre-wrap; }\n.table-tooltip.ng-tooltip-top {\n margin-top: -1rem; }\n.table-tooltip.ng-tooltip-top:after {\n content: \"\";\n position: absolute;\n bottom: -1rem;\n left: calc(50% - 0.5rem);\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-top:after {\n border-color: #42505f transparent transparent transparent; }\n.theme-gray .table-tooltip.ng-tooltip-top:after {\n border-color: #3e464c transparent transparent transparent; }\n.theme-white .table-tooltip.ng-tooltip-top:after {\n border-color: #ffffff transparent transparent transparent; }\n.table-tooltip.ng-tooltip-top-left {\n margin-top: -1rem; }\n.table-tooltip.ng-tooltip-top-left:after {\n content: \"\";\n position: absolute;\n bottom: -1rem;\n left: 0.7rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-top-left:after {\n border-color: #42505f transparent transparent #42505f; }\n.theme-gray .table-tooltip.ng-tooltip-top-left:after {\n border-color: #3e464c transparent transparent #3e464c; }\n.theme-white .table-tooltip.ng-tooltip-top-left:after {\n border-color: #ffffff transparent transparent #ffffff; }\n.table-tooltip.ng-tooltip-top-right {\n margin-top: -1rem; }\n.table-tooltip.ng-tooltip-top-right:after {\n content: \"\";\n position: absolute;\n bottom: -1rem;\n right: 0.7rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-top-right:after {\n border-color: #42505f #42505f transparent transparent; }\n.theme-gray .table-tooltip.ng-tooltip-top-right:after {\n border-color: #3e464c #3e464c transparent transparent; }\n.theme-white .table-tooltip.ng-tooltip-top-right:after {\n border-color: #ffffff #ffffff transparent transparent; }\n.table-tooltip.ng-tooltip-bottom {\n margin-top: 1rem; }\n.table-tooltip.ng-tooltip-bottom:before {\n content: \"\";\n position: absolute;\n top: -1rem;\n left: calc(50% - 0.5rem);\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-bottom:before {\n border-color: transparent transparent #42505f transparent; }\n.theme-gray .table-tooltip.ng-tooltip-bottom:before {\n border-color: transparent transparent #3e464c transparent; }\n.theme-white .table-tooltip.ng-tooltip-bottom:before {\n border-color: transparent transparent #ffffff transparent; }\n.table-tooltip.ng-tooltip-bottom-left {\n margin-top: 1rem; }\n.table-tooltip.ng-tooltip-bottom-left:before {\n content: \"\";\n position: absolute;\n top: -1rem;\n left: 0.7rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-bottom-left:before {\n border-color: transparent transparent #42505f #42505f; }\n.theme-gray .table-tooltip.ng-tooltip-bottom-left:before {\n border-color: transparent transparent #3e464c #3e464c; }\n.theme-white .table-tooltip.ng-tooltip-bottom-left:before {\n border-color: transparent transparent #ffffff #ffffff; }\n.table-tooltip.ng-tooltip-bottom-right {\n margin-top: 1rem; }\n.table-tooltip.ng-tooltip-bottom-right:before {\n content: \"\";\n position: absolute;\n top: -1rem;\n right: 0.7rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-bottom-right:before {\n border-color: transparent #42505f #42505f transparent; }\n.theme-gray .table-tooltip.ng-tooltip-bottom-right:before {\n border-color: transparent #3e464c #3e464c transparent; }\n.theme-white .table-tooltip.ng-tooltip-bottom-right:before {\n border-color: transparent #ffffff #ffffff transparent; }\n.table-tooltip.ng-tooltip-left {\n margin-left: -1rem; }\n.table-tooltip.ng-tooltip-left:after {\n content: \"\";\n position: absolute;\n top: calc(50% - 0.5rem);\n right: -1rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-left:after {\n border-color: transparent transparent transparent #42505f; }\n.theme-gray .table-tooltip.ng-tooltip-left:after {\n border-color: transparent transparent transparent #3e464c; }\n.theme-white .table-tooltip.ng-tooltip-left:after {\n border-color: transparent transparent transparent #ffffff; }\n.table-tooltip.ng-tooltip-right {\n margin-left: 1rem; }\n.table-tooltip.ng-tooltip-right:before {\n content: \"\";\n position: absolute;\n top: calc(50% - 0.5rem);\n left: -1rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .table-tooltip.ng-tooltip-right:before {\n border-color: transparent #42505f transparent transparent; }\n.theme-gray .table-tooltip.ng-tooltip-right:before {\n border-color: transparent #3e464c transparent transparent; }\n.theme-white .table-tooltip.ng-tooltip-right:before {\n border-color: transparent #ffffff transparent transparent; }\n.table-tooltip-dimensions .tooltip-inner {\n overflow: auto;\n max-width: 20rem;\n max-height: 10rem; }\n.balance-tooltip {\n padding: 1.3rem; }\n.theme-dark .balance-tooltip {\n background: #42505f;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-gray .balance-tooltip {\n background: #3e464c;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-white .balance-tooltip {\n background: #ffffff;\n box-shadow: 0 0 1rem rgba(120, 120, 120, 0.5);\n color: #43454b; }\n.balance-tooltip .tooltip-inner {\n display: flex;\n flex-direction: column;\n font-size: 1.3rem; }\n.balance-tooltip .tooltip-inner .available {\n margin-bottom: 1.7rem; }\n.balance-tooltip .tooltip-inner .available b {\n font-weight: 600; }\n.balance-tooltip .tooltip-inner .locked {\n margin-bottom: 0.7rem; }\n.balance-tooltip .tooltip-inner .locked b {\n font-weight: 600; }\n.balance-tooltip .tooltip-inner .link {\n cursor: pointer; }\n.theme-dark .balance-tooltip .tooltip-inner .link {\n color: #4db1ff; }\n.theme-gray .balance-tooltip .tooltip-inner .link {\n color: #42a5f5; }\n.theme-white .balance-tooltip .tooltip-inner .link {\n color: #2c95f1; }\n.balance-tooltip.ng-tooltip-top {\n margin-top: -1rem; }\n.balance-tooltip.ng-tooltip-bottom {\n margin-top: 1rem; }\n.balance-tooltip.ng-tooltip-left {\n margin-left: -1rem; }\n.balance-tooltip.ng-tooltip-right {\n margin-left: 1rem; }\n.account-tooltip .tooltip-inner {\n word-break: break-word;\n max-width: 18rem; }\n.comment-tooltip .tooltip-inner {\n overflow: auto;\n word-break: break-word;\n max-width: 50rem;\n max-height: 25rem; }\n.update-tooltip {\n padding: 1.5rem; }\n.theme-dark .update-tooltip {\n background: #42505f;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-gray .update-tooltip {\n background: #3e464c;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);\n color: #e0e0e0; }\n.theme-white .update-tooltip {\n background: #ffffff;\n box-shadow: 0 0 1rem rgba(120, 120, 120, 0.5);\n color: #43454b; }\n.theme-dark .update-tooltip.important {\n background: #5f2b11;\n color: #e0e0e0; }\n.theme-gray .update-tooltip.important {\n background: #55240d;\n color: #e0e0e0; }\n.theme-white .update-tooltip.important {\n background: #ef6c00;\n color: #ffffff; }\n.theme-dark .update-tooltip.important.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #5f2b11 #5f2b11; }\n.theme-gray .update-tooltip.important.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #55240d #55240d; }\n.theme-white .update-tooltip.important.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #ef6c00 #ef6c00; }\n.theme-dark .update-tooltip.important.ng-tooltip-right-bottom:before {\n border-color: transparent #5f2b11 #5f2b11 transparent; }\n.theme-gray .update-tooltip.important.ng-tooltip-right-bottom:before {\n border-color: transparent #55240d #55240d transparent; }\n.theme-white .update-tooltip.important.ng-tooltip-right-bottom:before {\n border-color: transparent #ef6c00 #ef6c00 transparent; }\n.update-tooltip.critical {\n padding: 2.5rem; }\n.theme-dark .update-tooltip.critical {\n background: #5f1d1d;\n color: #e0e0e0; }\n.theme-gray .update-tooltip.critical {\n background: #4c1919;\n color: #e0e0e0; }\n.theme-white .update-tooltip.critical {\n background: #e53935;\n color: #ffffff; }\n.update-tooltip.critical .tooltip-inner {\n display: flex;\n flex-direction: column;\n align-items: center; }\n.theme-dark .update-tooltip.critical.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #5f1d1d #5f1d1d; }\n.theme-gray .update-tooltip.critical.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #4c1919 #4c1919; }\n.theme-white .update-tooltip.critical.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #e53935 #e53935; }\n.theme-dark .update-tooltip.critical.ng-tooltip-right-bottom:before {\n border-color: transparent #5f1d1d #5f1d1d transparent; }\n.theme-gray .update-tooltip.critical.ng-tooltip-right-bottom:before {\n border-color: transparent #4c1919 #4c1919 transparent; }\n.theme-white .update-tooltip.critical.ng-tooltip-right-bottom:before {\n border-color: transparent #e53935 #e53935 transparent; }\n.update-tooltip .tooltip-inner {\n font-size: 1.3rem;\n line-height: 1.8rem;\n white-space: pre-wrap; }\n.update-tooltip .tooltip-inner .standard-update {\n font-size: 1.5rem;\n line-height: 2.7rem; }\n.theme-dark .update-tooltip .tooltip-inner .standard-update {\n color: #4db1ff; }\n.theme-gray .update-tooltip .tooltip-inner .standard-update {\n color: #42a5f5; }\n.theme-white .update-tooltip .tooltip-inner .standard-update {\n color: #2c95f1; }\n.update-tooltip .tooltip-inner .important-update {\n font-size: 1.5rem;\n line-height: 2.7rem; }\n.theme-dark .update-tooltip .tooltip-inner .important-update {\n color: #ff6f00; }\n.theme-gray .update-tooltip .tooltip-inner .important-update {\n color: #ff6f00; }\n.theme-white .update-tooltip .tooltip-inner .important-update {\n color: #ffffff; }\n.update-tooltip .tooltip-inner .critical-update {\n font-size: 1.5rem;\n line-height: 2.7rem;\n text-align: center; }\n.update-tooltip .tooltip-inner .wrong-time {\n font-size: 1.5rem;\n line-height: 2.7rem; }\n.theme-dark .update-tooltip .tooltip-inner .wrong-time {\n color: #ff6f00; }\n.theme-gray .update-tooltip .tooltip-inner .wrong-time {\n color: #ff6f00; }\n.theme-white .update-tooltip .tooltip-inner .wrong-time {\n color: #ffffff; }\n.update-tooltip .tooltip-inner .icon {\n margin: 1.5rem 0;\n width: 5rem;\n height: 5rem; }\n.theme-dark .update-tooltip .tooltip-inner .icon {\n background-color: #ff5252; }\n.theme-gray .update-tooltip .tooltip-inner .icon {\n background-color: #ff5252; }\n.theme-white .update-tooltip .tooltip-inner .icon {\n background-color: #ffffff; }\n.update-tooltip.ng-tooltip-left-bottom {\n margin-left: -1.5rem; }\n.update-tooltip.ng-tooltip-left-bottom:after {\n content: \"\";\n position: absolute;\n bottom: 0.6rem;\n right: -1rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .update-tooltip.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #42505f #42505f; }\n.theme-gray .update-tooltip.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #3e464c #3e464c; }\n.theme-white .update-tooltip.ng-tooltip-left-bottom:after {\n border-color: transparent transparent #ffffff #ffffff; }\n.update-tooltip.ng-tooltip-right-bottom {\n margin-left: 1.5rem; }\n.update-tooltip.ng-tooltip-right-bottom:before {\n content: \"\";\n position: absolute;\n bottom: 0.6rem;\n left: -1rem;\n border-width: 0.5rem;\n border-style: solid; }\n.theme-dark .update-tooltip.ng-tooltip-right-bottom:before {\n border-color: transparent #42505f #42505f transparent; }\n.theme-gray .update-tooltip.ng-tooltip-right-bottom:before {\n border-color: transparent #3e464c #3e464c transparent; }\n.theme-white .update-tooltip.ng-tooltip-right-bottom:before {\n border-color: transparent #ffffff #ffffff transparent; }\n.ngx-contextmenu .dropdown-menu {\n border: none;\n padding: 0; }\n.theme-dark .ngx-contextmenu .dropdown-menu {\n background-color: #2b3644;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5); }\n.theme-gray .ngx-contextmenu .dropdown-menu {\n background-color: #292d31;\n box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5); }\n.theme-white .ngx-contextmenu .dropdown-menu {\n background-color: #e0e0e0;\n box-shadow: 0 0 1rem rgba(120, 120, 120, 0.5); }\n.ngx-contextmenu li {\n display: block;\n font-family: OpenSans, sans-serif;\n font-size: 1.3rem;\n text-transform: uppercase;\n text-align: center; }\n.ngx-contextmenu a {\n display: block;\n padding: 0.5em 1em; }\n.theme-dark .ngx-contextmenu a {\n color: #e0e0e0; }\n.theme-gray .ngx-contextmenu a {\n color: #e0e0e0; }\n.theme-white .ngx-contextmenu a {\n color: #43454b; }\n.theme-dark .ngx-contextmenu a:hover {\n background-color: #556576;\n color: #e0e0e0; }\n.theme-gray .ngx-contextmenu a:hover {\n background-color: #515960;\n color: #e0e0e0; }\n.theme-white .ngx-contextmenu a:hover {\n background-color: #ffffff;\n color: #43454b; }\n.ng-select.custom-select {\n width: 100%; }\n.ng-select.custom-select.ng-select-single .ng-select-container .ng-value-container .ng-value {\n line-height: 1.8rem; }\n.ng-select.custom-select .ng-select-container {\n border: none;\n border-radius: 0;\n cursor: pointer;\n font-size: 1.4rem;\n outline: none;\n padding: 0 1rem;\n height: 4.2rem; }\n.theme-dark .ng-select.custom-select .ng-select-container {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray .ng-select.custom-select .ng-select-container {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white .ng-select.custom-select .ng-select-container {\n background-color: #e6e6e6;\n color: #43454b; }\n.ng-select.custom-select .ng-select-container .ng-value-container {\n padding: 0; }\n.ng-select.custom-select .ng-select-container .ng-value-container .ng-input {\n top: auto; }\n.ng-select.custom-select .ng-dropdown-panel {\n border: none; }\n.theme-dark .ng-select.custom-select .ng-dropdown-panel {\n background-color: #171e27; }\n.theme-gray .ng-select.custom-select .ng-dropdown-panel {\n background-color: #292d31; }\n.theme-white .ng-select.custom-select .ng-dropdown-panel {\n background-color: #e6e6e6; }\n.ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option {\n font-size: 1.4rem;\n padding: 1rem; }\n.theme-dark .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option {\n background-color: #e6e6e6;\n color: #43454b; }\n.theme-dark .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked {\n background-color: rgba(58, 69, 85, 0.5);\n color: #e0e0e0; }\n.theme-gray .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked {\n background-color: rgba(58, 62, 66, 0.5);\n color: #e0e0e0; }\n.theme-white .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked {\n background-color: rgba(240, 240, 240, 0.5);\n color: #43454b; }\n.theme-dark .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected {\n background-color: rgba(43, 54, 68, 0.5);\n color: #e0e0e0; }\n.theme-gray .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected {\n background-color: rgba(37, 40, 43, 0.5);\n color: #e0e0e0; }\n.theme-white .ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected {\n background-color: rgba(224, 224, 224, 0.5);\n color: #43454b; }\n.ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar {\n background-color: transparent;\n cursor: default;\n width: 1rem;\n height: 1rem; }\n.ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-track {\n background: transparent; }\n.ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb {\n background-color: #556576;\n background-clip: padding-box;\n border: 0.25rem solid transparent;\n border-radius: 0.5rem; }\n.ng-select.custom-select .ng-dropdown-panel .ng-dropdown-panel-items::-webkit-scrollbar-thumb:hover {\n background-color: #556576; }\n.theme-dark app-modal-container .modal, .theme-dark app-confirm-modal .modal {\n background: url('background-dark.png');\n color: #e0e0e0; }\n.theme-gray app-modal-container .modal, .theme-gray app-confirm-modal .modal {\n background: url('background-gray.png');\n color: #e0e0e0; }\n.theme-white app-modal-container .modal, .theme-white app-confirm-modal .modal {\n background: url('background-white.png');\n color: #43454b; }\n.theme-dark app-modal-container .modal .content .icon.error, .theme-dark app-confirm-modal .modal .content .icon.error {\n background-color: #ff5252; }\n.theme-gray app-modal-container .modal .content .icon.error, .theme-gray app-confirm-modal .modal .content .icon.error {\n background-color: #ff5252; }\n.theme-white app-modal-container .modal .content .icon.error, .theme-white app-confirm-modal .modal .content .icon.error {\n background-color: #ff5252; }\n.theme-dark app-modal-container .modal .content .icon.success, .theme-dark app-confirm-modal .modal .content .icon.success {\n background-color: #5cda9d; }\n.theme-gray app-modal-container .modal .content .icon.success, .theme-gray app-confirm-modal .modal .content .icon.success {\n background-color: #47cf8d; }\n.theme-white app-modal-container .modal .content .icon.success, .theme-white app-confirm-modal .modal .content .icon.success {\n background-color: #46c172; }\n.theme-dark app-modal-container .modal .content .icon.info, .theme-dark app-confirm-modal .modal .content .icon.info {\n background-color: #4db1ff; }\n.theme-gray app-modal-container .modal .content .icon.info, .theme-gray app-confirm-modal .modal .content .icon.info {\n background-color: #42a5f5; }\n.theme-white app-modal-container .modal .content .icon.info, .theme-white app-confirm-modal .modal .content .icon.info {\n background-color: #2c95f1; }\n.theme-dark app-modal-container .modal .action-button, .theme-dark app-confirm-modal .modal .action-button {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray app-modal-container .modal .action-button, .theme-gray app-confirm-modal .modal .action-button {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white app-modal-container .modal .action-button, .theme-white app-confirm-modal .modal .action-button {\n background-color: #2c95f1;\n color: #fefefe; }\n.theme-dark app-modal-container .modal .close-button .icon, .theme-dark app-confirm-modal .modal .close-button .icon {\n background-color: #556576; }\n.theme-gray app-modal-container .modal .close-button .icon, .theme-gray app-confirm-modal .modal .close-button .icon {\n background-color: #515960; }\n.theme-white app-modal-container .modal .close-button .icon, .theme-white app-confirm-modal .modal .close-button .icon {\n background-color: #43454b; }\n.theme-dark app-transaction-details .table {\n border-top: 0.2rem solid #2b3644; }\n.theme-gray app-transaction-details .table {\n border-top: 0.2rem solid #2f3438; }\n.theme-white app-transaction-details .table {\n border-top: 0.2rem solid #ebebeb; }\n.theme-dark app-transaction-details .table .row .cell.label {\n color: #556576; }\n.theme-gray app-transaction-details .table .row .cell.label {\n color: #565c62; }\n.theme-white app-transaction-details .table .row .cell.label {\n color: #a0a5ab; }\n.theme-dark app-transaction-details .table .row .cell.value {\n color: #e0e0e0; }\n.theme-gray app-transaction-details .table .row .cell.value {\n color: #e0e0e0; }\n.theme-white app-transaction-details .table .row .cell.value {\n color: #43454b; }\n.theme-dark app-transaction-details .table .row .cell.key-value {\n color: #4db1ff; }\n.theme-gray app-transaction-details .table .row .cell.key-value {\n color: #42a5f5; }\n.theme-white app-transaction-details .table .row .cell.key-value {\n color: #2c95f1; }\n.theme-dark app-progress-container .progress-bar-container {\n color: #e0e0e0; }\n.theme-gray app-progress-container .progress-bar-container {\n color: #e0e0e0; }\n.theme-white app-progress-container .progress-bar-container {\n color: #43454b; }\n.theme-dark app-progress-container .progress-bar-container .progress-bar {\n background-color: #343f4a; }\n.theme-gray app-progress-container .progress-bar-container .progress-bar {\n background-color: #363a3e; }\n.theme-white app-progress-container .progress-bar-container .progress-bar {\n background-color: #dcdcdc; }\n.theme-dark app-progress-container .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #5cda9d; }\n.theme-gray app-progress-container .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #47cf8d; }\n.theme-white app-progress-container .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #46c172; }\n.theme-dark app-open-wallet-modal .modal {\n background: url('background-dark.png');\n color: #e0e0e0; }\n.theme-gray app-open-wallet-modal .modal {\n background: url('background-gray.png');\n color: #e0e0e0; }\n.theme-white app-open-wallet-modal .modal {\n background: url('background-white.png');\n color: #43454b; }\n.theme-dark app-send-modal .modal {\n background: url('background-dark.png');\n color: #e0e0e0; }\n.theme-gray app-send-modal .modal {\n background: url('background-gray.png');\n color: #e0e0e0; }\n.theme-white app-send-modal .modal {\n background: url('background-white.png');\n color: #43454b; }\n.theme-dark app-send-modal .modal .title {\n border-bottom: 0.2rem solid #2b3644; }\n.theme-gray app-send-modal .modal .title {\n border-bottom: 0.2rem solid #2f3438; }\n.theme-white app-send-modal .modal .title {\n border-bottom: 0.2rem solid #ebebeb; }\n.theme-dark app-send-modal .modal .action-button {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray app-send-modal .modal .action-button {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white app-send-modal .modal .action-button {\n background-color: #2c95f1;\n color: #fefefe; }\napp-main, app-create-wallet, app-open-wallet, app-restore-wallet, app-seed-phrase, app-wallet-details, app-assign-alias, app-edit-alias, app-transfer-alias, app-settings, app-login {\n flex: 1 1 auto;\n padding: 3rem;\n min-width: 85rem; }\napp-main .content, app-create-wallet .content, app-open-wallet .content, app-restore-wallet .content, app-seed-phrase .content, app-wallet-details .content, app-assign-alias .content, app-edit-alias .content, app-transfer-alias .content, app-settings .content, app-login .content {\n position: relative;\n padding: 3rem;\n min-height: 100%; }\n.theme-dark app-main .content, .theme-dark app-create-wallet .content, .theme-dark app-open-wallet .content, .theme-dark app-restore-wallet .content, .theme-dark app-seed-phrase .content, .theme-dark app-wallet-details .content, .theme-dark app-assign-alias .content, .theme-dark app-edit-alias .content, .theme-dark app-transfer-alias .content, .theme-dark app-settings .content, .theme-dark app-login .content {\n background-color: rgba(43, 54, 68, 0.5);\n color: #e0e0e0; }\n.theme-gray app-main .content, .theme-gray app-create-wallet .content, .theme-gray app-open-wallet .content, .theme-gray app-restore-wallet .content, .theme-gray app-seed-phrase .content, .theme-gray app-wallet-details .content, .theme-gray app-assign-alias .content, .theme-gray app-edit-alias .content, .theme-gray app-transfer-alias .content, .theme-gray app-settings .content, .theme-gray app-login .content {\n background-color: rgba(37, 40, 43, 0.5);\n color: #e0e0e0; }\n.theme-white app-main .content, .theme-white app-create-wallet .content, .theme-white app-open-wallet .content, .theme-white app-restore-wallet .content, .theme-white app-seed-phrase .content, .theme-white app-wallet-details .content, .theme-white app-assign-alias .content, .theme-white app-edit-alias .content, .theme-white app-transfer-alias .content, .theme-white app-settings .content, .theme-white app-login .content {\n background-color: rgba(255, 255, 255, 0.5);\n color: #43454b; }\napp-main .content .head, app-create-wallet .content .head, app-open-wallet .content .head, app-restore-wallet .content .head, app-seed-phrase .content .head, app-wallet-details .content .head, app-assign-alias .content .head, app-edit-alias .content .head, app-transfer-alias .content .head, app-settings .content .head, app-login .content .head {\n position: absolute;\n top: 0;\n left: 0; }\n.theme-dark app-main .content .add-wallet .add-wallet-help {\n color: #4db1ff; }\n.theme-gray app-main .content .add-wallet .add-wallet-help {\n color: #42a5f5; }\n.theme-white app-main .content .add-wallet .add-wallet-help {\n color: #2c95f1; }\n.theme-dark app-main .content .add-wallet .add-wallet-help .icon {\n background-color: #4db1ff; }\n.theme-gray app-main .content .add-wallet .add-wallet-help .icon {\n background-color: #42a5f5; }\n.theme-white app-main .content .add-wallet .add-wallet-help .icon {\n background-color: #2c95f1; }\n.theme-dark app-seed-phrase .seed-phrase-content {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray app-seed-phrase .seed-phrase-content {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white app-seed-phrase .seed-phrase-content {\n background-color: #e6e6e6;\n color: #43454b; }\n.theme-dark app-wallet-details .seed-phrase {\n background-color: #171e27; }\n.theme-gray app-wallet-details .seed-phrase {\n background-color: #292d31; }\n.theme-white app-wallet-details .seed-phrase {\n background-color: #e6e6e6; }\napp-settings .content {\n height: 100%;\n overflow-y: auto;\n display: flex;\n justify-content: space-between;\n flex-direction: column; }\n.theme-dark app-settings .content .theme-selection {\n color: #556576; }\n.theme-gray app-settings .content .theme-selection {\n color: #565c62; }\n.theme-white app-settings .content .theme-selection {\n color: #a0a5ab; }\n.theme-dark app-settings .content .scale-selection .button-block {\n background-color: rgba(23, 31, 39, 0.5); }\n.theme-gray app-settings .content .scale-selection .button-block {\n background-color: rgba(28, 30, 33, 0.5); }\n.theme-white app-settings .content .scale-selection .button-block {\n background-color: rgba(224, 224, 224, 0.5); }\n.theme-dark app-settings .content .scale-selection .button-block .label {\n color: #556576; }\n.theme-gray app-settings .content .scale-selection .button-block .label {\n color: #565c62; }\n.theme-white app-settings .content .scale-selection .button-block .label {\n color: #a0a5ab; }\n.theme-dark app-settings .content .scale-selection .button-block.active {\n background-color: #4db1ff; }\n.theme-gray app-settings .content .scale-selection .button-block.active {\n background-color: #42a5f5; }\n.theme-white app-settings .content .scale-selection .button-block.active {\n background-color: #2c95f1; }\n.theme-dark app-settings .content .scale-selection .button-block.active .label {\n color: #4db1ff; }\n.theme-gray app-settings .content .scale-selection .button-block.active .label {\n color: #42a5f5; }\n.theme-white app-settings .content .scale-selection .button-block.active .label {\n color: #2c95f1; }\napp-login {\n min-width: inherit; }\n.theme-dark app-sidebar {\n background-color: #171f27; }\n.theme-gray app-sidebar {\n background-color: #1c1e21; }\n.theme-white app-sidebar {\n background-color: white; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-header h3 {\n color: #e0e0e0; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-header h3 {\n color: #e0e0e0; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-header h3 {\n color: #43454b; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-header button {\n color: #4db1ff; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-header button {\n color: #42a5f5; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-header button {\n color: #2c95f1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account {\n background-color: transparent;\n color: #e0e0e0; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account {\n background-color: transparent;\n color: #e0e0e0; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account {\n background-color: transparent;\n color: #43454b; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .icon {\n background-color: #4db1ff; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .icon {\n background-color: #42a5f5; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .icon {\n background-color: #2c95f1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .text {\n color: #556576; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .text {\n color: #565c62; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .text {\n color: #a0a5ab; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .icon {\n background-color: #4db1ff; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .icon {\n background-color: #42a5f5; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .icon {\n background-color: #2c95f1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .indicator {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .indicator {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .indicator {\n background-color: #2c95f1;\n color: #fefefe; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar {\n background-color: #343f4a; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar {\n background-color: #363a3e; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar {\n background-color: #dcdcdc; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar .fill {\n background-color: #4db1ff; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar .fill {\n background-color: #42a5f5; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row .progress-bar-container .progress-bar .fill {\n background-color: #2c95f1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization {\n color: #556576; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization {\n color: #565c62; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account .sidebar-account-row.account-synchronization {\n color: #a0a5ab; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active {\n background-color: rgba(43, 54, 68, 0.5);\n color: #e0e0e0; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active {\n background-color: rgba(37, 40, 43, 0.5);\n color: #e0e0e0; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active {\n background-color: #1e88e5;\n color: #ffffff; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .text {\n color: #556576; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .text {\n color: #565c62; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .text {\n color: #91baf1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .indicator {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .indicator {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .indicator {\n background-color: #ffffff;\n color: #43454b; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .switch {\n background-color: #000000;\n color: #e0e0e0; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .switch {\n background-color: #000000;\n color: #e0e0e0; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row .switch {\n background-color: #ffffff;\n color: #43454b; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row.account-synchronization {\n color: #556576; }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row.account-synchronization {\n color: #565c62; }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account.active .sidebar-account-row.account-synchronization {\n color: #91baf1; }\n.theme-dark app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account:hover:not(.active) {\n background-color: rgba(58, 69, 85, 0.5); }\n.theme-gray app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account:hover:not(.active) {\n background-color: rgba(58, 62, 66, 0.5); }\n.theme-white app-sidebar .sidebar-accounts .sidebar-accounts-list .sidebar-account:hover:not(.active) {\n background-color: rgba(240, 240, 240, 0.5); }\n.theme-dark app-sidebar .sidebar-accounts:after {\n background: linear-gradient(to bottom, transparent 0%, #171f27 100%); }\n.theme-gray app-sidebar .sidebar-accounts:after {\n background: linear-gradient(to bottom, transparent 0%, #1c1e21 100%); }\n.theme-white app-sidebar .sidebar-accounts:after {\n background: linear-gradient(to bottom, transparent 0%, white 100%); }\n.theme-dark app-sidebar .sidebar-settings {\n border-bottom: 0.2rem solid #1f2833; }\n.theme-gray app-sidebar .sidebar-settings {\n border-bottom: 0.2rem solid #2e3337; }\n.theme-white app-sidebar .sidebar-settings {\n border-bottom: 0.2rem solid #ebebeb; }\n.theme-dark app-sidebar .sidebar-settings .wrap-button button {\n color: #e0e0e0; }\n.theme-gray app-sidebar .sidebar-settings .wrap-button button {\n color: #e0e0e0; }\n.theme-white app-sidebar .sidebar-settings .wrap-button button {\n color: #43454b; }\n.theme-dark app-sidebar .sidebar-settings .wrap-button button .icon {\n background-color: #4db1ff; }\n.theme-gray app-sidebar .sidebar-settings .wrap-button button .icon {\n background-color: #42a5f5; }\n.theme-white app-sidebar .sidebar-settings .wrap-button button .icon {\n background-color: #2c95f1; }\n.theme-dark app-sidebar .sidebar-settings .wrap-button.active button {\n background-color: rgba(43, 54, 68, 0.5) !important;\n color: #e0e0e0 !important; }\n.theme-gray app-sidebar .sidebar-settings .wrap-button.active button {\n background-color: rgba(37, 40, 43, 0.5) !important;\n color: #e0e0e0 !important; }\n.theme-white app-sidebar .sidebar-settings .wrap-button.active button {\n background-color: #1e88e5 !important;\n color: #ffffff !important; }\n.theme-dark app-sidebar .sidebar-settings .wrap-button.active button .icon {\n background-color: #4db1ff !important; }\n.theme-gray app-sidebar .sidebar-settings .wrap-button.active button .icon {\n background-color: #42a5f5 !important; }\n.theme-white app-sidebar .sidebar-settings .wrap-button.active button .icon {\n background-color: #ffffff !important; }\n.synchronization-status {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 0 0 7rem;\n font-size: 1.3rem; }\n.theme-dark .synchronization-status {\n color: #556576; }\n.theme-gray .synchronization-status {\n color: #565c62; }\n.theme-white .synchronization-status {\n color: #a0a5ab; }\n.synchronization-status .status-container {\n position: relative;\n flex-grow: 1;\n text-align: left; }\n.synchronization-status .status-container .offline, .synchronization-status .status-container .online {\n position: relative;\n display: block;\n line-height: 1.2rem;\n padding-left: 2.2rem; }\n.synchronization-status .status-container .offline:before, .synchronization-status .status-container .online:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n border-radius: 50%;\n width: 1.2rem;\n height: 1.2rem; }\n.theme-dark .synchronization-status .status-container .offline:before {\n background-color: #ff5252; }\n.theme-gray .synchronization-status .status-container .offline:before {\n background-color: #ff5252; }\n.theme-white .synchronization-status .status-container .offline:before {\n background-color: #ff5252; }\n.theme-dark .synchronization-status .status-container .online:before {\n background-color: #5cda9d; }\n.theme-gray .synchronization-status .status-container .online:before {\n background-color: #47cf8d; }\n.theme-white .synchronization-status .status-container .online:before {\n background-color: #46c172; }\n.synchronization-status .status-container .syncing, .synchronization-status .status-container .loading {\n line-height: 5rem; }\n.synchronization-status .status-container .progress-bar-container {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 0.7rem;\n width: 100%; }\n.synchronization-status .status-container .progress-bar-container .syncing {\n display: flex; }\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\n flex: 1 0 auto; }\n.theme-dark .synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\n background-color: #343f4a; }\n.theme-gray .synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\n background-color: #363a3e; }\n.theme-white .synchronization-status .status-container .progress-bar-container .syncing .progress-bar {\n background-color: #dcdcdc; }\n.synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\n height: 100%; }\n.theme-dark .synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\n background-color: #5cda9d; }\n.theme-gray .synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\n background-color: #47cf8d; }\n.theme-white .synchronization-status .status-container .progress-bar-container .syncing .progress-bar .fill {\n background-color: #46c172; }\n.theme-dark .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar {\n background-color: #343f4a; }\n.theme-gray .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar {\n background-color: #363a3e; }\n.theme-white .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar {\n background-color: #dcdcdc; }\n.theme-dark .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar .fill {\n background-color: #4db1ff; }\n.theme-gray .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar .fill {\n background-color: #42a5f5; }\n.theme-white .synchronization-status .status-container .progress-bar-container .syncing.downloading .progress-bar .fill {\n background-color: #2c95f1; }\n.synchronization-status .status-container .progress-bar-container .syncing .progress-percent {\n flex: 0 0 auto;\n font-size: 1.3rem;\n line-height: 0.7rem;\n padding-left: 0.7rem; }\n.synchronization-status .status-container .progress-bar-container .loading {\n -webkit-animation: move 5s linear infinite;\n animation: move 5s linear infinite;\n background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.125, rgba(0, 0, 0, 0.15)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.1)), color-stop(0.375, rgba(0, 0, 0, 0.1)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.15)), color-stop(0.625, rgba(0, 0, 0, 0.15)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.1)), color-stop(0.875, rgba(0, 0, 0, 0.1)), color-stop(0.875, transparent), to(transparent)), -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.125, rgba(0, 0, 0, 0.3)), color-stop(0.125, transparent), color-stop(0.25, transparent), color-stop(0.25, rgba(0, 0, 0, 0.25)), color-stop(0.375, rgba(0, 0, 0, 0.25)), color-stop(0.375, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(0, 0, 0, 0.3)), color-stop(0.625, rgba(0, 0, 0, 0.3)), color-stop(0.625, transparent), color-stop(0.75, transparent), color-stop(0.75, rgba(0, 0, 0, 0.25)), color-stop(0.875, rgba(0, 0, 0, 0.25)), color-stop(0.875, transparent), to(transparent));\n background-size: 7rem 7rem;\n height: 100%; }\n.theme-dark .synchronization-status .status-container .progress-bar-container .loading {\n background-color: #5cda9d; }\n.theme-gray .synchronization-status .status-container .progress-bar-container .loading {\n background-color: #47cf8d; }\n.theme-white .synchronization-status .status-container .progress-bar-container .loading {\n background-color: #46c172; }\n.synchronization-status .update-container {\n display: flex;\n flex-grow: 1;\n margin-left: 1rem;\n text-align: right; }\n.synchronization-status .update-container .update-text {\n flex: 1 1 auto;\n font-size: 1.2rem;\n line-height: 1.8rem;\n text-align: left; }\n.synchronization-status .update-container .update-text.time {\n font-size: 1.1rem; }\n.synchronization-status .update-container .icon {\n flex: 1 0 auto;\n margin: 0.3rem 0 0 0.6rem;\n width: 1.2rem;\n height: 1.2rem; }\n.synchronization-status .update-container .icon.update {\n -webkit-mask: url('update.svg') no-repeat center;\n mask: url('update.svg') no-repeat center; }\n.synchronization-status .update-container .icon.time {\n -webkit-mask: url('time.svg') no-repeat center;\n mask: url('time.svg') no-repeat center; }\n.theme-dark .synchronization-status .update-container .standard {\n color: #4db1ff; }\n.theme-gray .synchronization-status .update-container .standard {\n color: #42a5f5; }\n.theme-white .synchronization-status .update-container .standard {\n color: #2c95f1; }\n.theme-dark .synchronization-status .update-container .important {\n color: #ff6f00; }\n.theme-gray .synchronization-status .update-container .important {\n color: #ff6f00; }\n.theme-white .synchronization-status .update-container .important {\n color: #ff6f00; }\n.theme-dark .synchronization-status .update-container .critical {\n color: #ff5252; }\n.theme-gray .synchronization-status .update-container .critical {\n color: #ff5252; }\n.theme-white .synchronization-status .update-container .critical {\n color: #ff5252; }\n.theme-dark .synchronization-status .update-container .time {\n color: #ff6f00; }\n.theme-gray .synchronization-status .update-container .time {\n color: #ff6f00; }\n.theme-white .synchronization-status .update-container .time {\n color: #ff6f00; }\n.theme-dark .synchronization-status .update-container .icon.standard {\n background-color: #4db1ff; }\n.theme-gray .synchronization-status .update-container .icon.standard {\n background-color: #42a5f5; }\n.theme-white .synchronization-status .update-container .icon.standard {\n background-color: #2c95f1; }\n.theme-dark .synchronization-status .update-container .icon.important {\n background-color: #ff6f00; }\n.theme-gray .synchronization-status .update-container .icon.important {\n background-color: #ff6f00; }\n.theme-white .synchronization-status .update-container .icon.important {\n background-color: #ff6f00; }\n.theme-dark .synchronization-status .update-container .icon.critical {\n background-color: #ff5252; }\n.theme-gray .synchronization-status .update-container .icon.critical {\n background-color: #ff5252; }\n.theme-white .synchronization-status .update-container .icon.critical {\n background-color: #ff5252; }\n.theme-dark .synchronization-status .update-container .icon.time {\n background-color: #ff6f00; }\n.theme-gray .synchronization-status .update-container .icon.time {\n background-color: #ff6f00; }\n.theme-white .synchronization-status .update-container .icon.time {\n background-color: #ff6f00; }\n@-webkit-keyframes move {\n 0% {\n background-position: 100% -7rem; }\n 100% {\n background-position: 100% 7rem; } }\n@keyframes move {\n 0% {\n background-position: 100% -7rem; }\n 100% {\n background-position: 100% 7rem; } }\n.theme-dark app-wallet {\n color: #e0e0e0; }\n.theme-gray app-wallet {\n color: #e0e0e0; }\n.theme-white app-wallet {\n color: #43454b; }\n.theme-dark app-wallet .header button {\n color: #e0e0e0; }\n.theme-gray app-wallet .header button {\n color: #e0e0e0; }\n.theme-white app-wallet .header button {\n color: #43454b; }\n.theme-dark app-wallet .header button .icon {\n background-color: #4db1ff; }\n.theme-gray app-wallet .header button .icon {\n background-color: #42a5f5; }\n.theme-white app-wallet .header button .icon {\n background-color: #2c95f1; }\napp-wallet .header button:disabled {\n background-color: transparent !important; }\n.theme-dark app-wallet .header button:disabled .icon {\n background-color: #556576; }\n.theme-gray app-wallet .header button:disabled .icon {\n background-color: #565c62; }\n.theme-white app-wallet .header button:disabled .icon {\n background-color: #91baf1; }\n.theme-dark app-wallet .header .alias .icon {\n background-color: #4db1ff; }\n.theme-gray app-wallet .header .alias .icon {\n background-color: #42a5f5; }\n.theme-white app-wallet .header .alias .icon {\n background-color: #2c95f1; }\n.theme-dark app-wallet .address {\n color: #4db1ff; }\n.theme-gray app-wallet .address {\n color: #42a5f5; }\n.theme-white app-wallet .address {\n color: #2c95f1; }\n.theme-dark app-wallet .address .icon {\n background-color: #4db1ff; }\n.theme-gray app-wallet .address .icon {\n background-color: #42a5f5; }\n.theme-white app-wallet .address .icon {\n background-color: #2c95f1; }\n.theme-dark app-wallet .tabs .tabs-header .tab {\n background-color: rgba(23, 31, 39, 0.5); }\n.theme-gray app-wallet .tabs .tabs-header .tab {\n background-color: rgba(28, 30, 33, 0.5); }\n.theme-white app-wallet .tabs .tabs-header .tab {\n background-color: rgba(224, 224, 224, 0.5); }\n.theme-dark app-wallet .tabs .tabs-header .tab .icon {\n background-color: #4db1ff; }\n.theme-gray app-wallet .tabs .tabs-header .tab .icon {\n background-color: #42a5f5; }\n.theme-white app-wallet .tabs .tabs-header .tab .icon {\n background-color: #2c95f1; }\n.theme-dark app-wallet .tabs .tabs-header .tab .indicator {\n background-color: #4db1ff;\n color: #111921; }\n.theme-gray app-wallet .tabs .tabs-header .tab .indicator {\n background-color: #42a5f5;\n color: #1a1a1a; }\n.theme-white app-wallet .tabs .tabs-header .tab .indicator {\n background-color: #ffffff;\n color: #43454b; }\n.theme-dark app-wallet .tabs .tabs-header .tab.active {\n background-color: rgba(43, 54, 68, 0.5); }\n.theme-gray app-wallet .tabs .tabs-header .tab.active {\n background-color: rgba(37, 40, 43, 0.5); }\n.theme-white app-wallet .tabs .tabs-header .tab.active {\n background-color: rgba(255, 255, 255, 0.5); }\n.theme-dark app-wallet .tabs .tabs-header .tab:hover:not(.active):not(.disabled) {\n background-color: rgba(58, 69, 85, 0.5); }\n.theme-gray app-wallet .tabs .tabs-header .tab:hover:not(.active):not(.disabled) {\n background-color: rgba(58, 62, 66, 0.5); }\n.theme-white app-wallet .tabs .tabs-header .tab:hover:not(.active):not(.disabled) {\n background-color: #ffffff; }\n.theme-dark app-wallet .tabs .tabs-content {\n background-color: rgba(43, 54, 68, 0.5); }\n.theme-gray app-wallet .tabs .tabs-content {\n background-color: rgba(37, 40, 43, 0.5); }\n.theme-white app-wallet .tabs .tabs-content {\n background-color: rgba(255, 255, 255, 0.5); }\n.theme-dark app-wallet .tabs .pagination-wrapper {\n background-color: rgba(43, 54, 68, 0.5); }\n.theme-gray app-wallet .tabs .pagination-wrapper {\n background-color: rgba(37, 40, 43, 0.5); }\n.theme-white app-wallet .tabs .pagination-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n.theme-dark app-wallet .tabs .pagination-wrapper .pagination {\n border-top: 0.2rem solid #2b3644; }\n.theme-gray app-wallet .tabs .pagination-wrapper .pagination {\n border-top: 0.2rem solid #2f3438; }\n.theme-white app-wallet .tabs .pagination-wrapper .pagination {\n border-top: 0.2rem solid #ebebeb; }\n.theme-dark app-wallet .tabs .pagination-wrapper .pagination button {\n background-color: #2b3644;\n color: #e0e0e0; }\n.theme-gray app-wallet .tabs .pagination-wrapper .pagination button {\n background-color: #2f3438;\n color: #e0e0e0; }\n.theme-white app-wallet .tabs .pagination-wrapper .pagination button {\n background-color: #ebebeb;\n color: #43454b; }\n.theme-dark app-wallet .tabs .pagination-wrapper .pagination button.active {\n background-color: #18202a;\n color: #e0e0e0; }\n.theme-gray app-wallet .tabs .pagination-wrapper .pagination button.active {\n background-color: #25292d;\n color: #e0e0e0; }\n.theme-white app-wallet .tabs .pagination-wrapper .pagination button.active {\n background-color: #ffffff;\n color: #43454b; }\n.theme-dark app-wallet .tabs .pagination-wrapper .pagination button:hover {\n background-color: #3a485a;\n color: #e0e0e0; }\n.theme-gray app-wallet .tabs .pagination-wrapper .pagination button:hover {\n background-color: #383e43;\n color: #e0e0e0; }\n.theme-white app-wallet .tabs .pagination-wrapper .pagination button:hover {\n background-color: #ffffff;\n color: #43454b; }\n.theme-dark app-send .form-send .send-select {\n color: #e0e0e0; }\n.theme-gray app-send .form-send .send-select {\n color: #e0e0e0; }\n.theme-white app-send .form-send .send-select {\n color: #43454b; }\n.theme-dark app-send .form-send .send-select .icon {\n background-color: #4db1ff; }\n.theme-gray app-send .form-send .send-select .icon {\n background-color: #42a5f5; }\n.theme-white app-send .form-send .send-select .icon {\n background-color: #2c95f1; }\n.theme-dark app-send .form-send .additional-details {\n border: 0.2rem solid #2b3644; }\n.theme-gray app-send .form-send .additional-details {\n border: 0.2rem solid #2f3438; }\n.theme-white app-send .form-send .additional-details {\n border: 0.2rem solid #ebebeb; }\n.theme-dark app-receive .btn-copy-address {\n background-color: #4db1ff; }\n.theme-gray app-receive .btn-copy-address {\n background-color: #42a5f5; }\n.theme-white app-receive .btn-copy-address {\n background-color: #2c95f1; }\n.theme-dark app-history table tbody tr.locked-transaction {\n color: #556576; }\n.theme-gray app-history table tbody tr.locked-transaction {\n color: #565c62; }\n.theme-white app-history table tbody tr.locked-transaction {\n color: #a0a5ab; }\n.theme-dark app-history table tbody tr:nth-child(4n+1) {\n background-color: #18202a; }\n.theme-gray app-history table tbody tr:nth-child(4n+1) {\n background-color: #25292d; }\n.theme-white app-history table tbody tr:nth-child(4n+1) {\n background-color: #ffffff; }\n.theme-dark app-history table tbody tr:nth-child(4n+2) {\n background-color: #18202a; }\n.theme-gray app-history table tbody tr:nth-child(4n+2) {\n background-color: #25292d; }\n.theme-white app-history table tbody tr:nth-child(4n+2) {\n background-color: #ffffff; }\n.theme-dark app-history table tbody tr:nth-child(4n+3) {\n background-color: transparent; }\n.theme-gray app-history table tbody tr:nth-child(4n+3) {\n background-color: transparent; }\n.theme-white app-history table tbody tr:nth-child(4n+3) {\n background-color: transparent; }\n.theme-dark app-history table tbody tr:nth-child(4n+4) {\n background-color: transparent; }\n.theme-gray app-history table tbody tr:nth-child(4n+4) {\n background-color: transparent; }\n.theme-white app-history table tbody tr:nth-child(4n+4) {\n background-color: transparent; }\n.theme-dark app-history table tbody tr .status .confirmation {\n background-color: #343f4a; }\n.theme-gray app-history table tbody tr .status .confirmation {\n background-color: #363a3e; }\n.theme-white app-history table tbody tr .status .confirmation {\n background-color: #dcdcdc; }\n.theme-dark app-history table tbody tr .status .confirmation .fill {\n background-color: #5cda9d; }\n.theme-gray app-history table tbody tr .status .confirmation .fill {\n background-color: #47cf8d; }\n.theme-white app-history table tbody tr .status .confirmation .fill {\n background-color: #46c172; }\n.theme-dark app-history table tbody tr .lock-transaction {\n background-color: #ff6f00; }\n.theme-gray app-history table tbody tr .lock-transaction {\n background-color: #ff6f00; }\n.theme-white app-history table tbody tr .lock-transaction {\n background-color: #ff6f00; }\n.theme-dark app-history table tbody tr .unlock-transaction {\n background-color: #4db1ff; }\n.theme-gray app-history table tbody tr .unlock-transaction {\n background-color: #42a5f5; }\n.theme-white app-history table tbody tr .unlock-transaction {\n background-color: #2c95f1; }\n.theme-dark app-history table tbody tr .status.send .status-transaction {\n background-color: #ff5252; }\n.theme-gray app-history table tbody tr .status.send .status-transaction {\n background-color: #ff5252; }\n.theme-white app-history table tbody tr .status.send .status-transaction {\n background-color: #ff5252; }\n.theme-dark app-history table tbody tr .status.received .status-transaction {\n background-color: #5cda9d; }\n.theme-gray app-history table tbody tr .status.received .status-transaction {\n background-color: #47cf8d; }\n.theme-white app-history table tbody tr .status.received .status-transaction {\n background-color: #46c172; }\n.theme-dark app-contracts .wrap-table .contract .icon.new, .theme-dark app-contracts .wrap-table .contract .icon.alert {\n background-color: #ff5252; }\n.theme-gray app-contracts .wrap-table .contract .icon.new, .theme-gray app-contracts .wrap-table .contract .icon.alert {\n background-color: #ff5252; }\n.theme-white app-contracts .wrap-table .contract .icon.new, .theme-white app-contracts .wrap-table .contract .icon.alert {\n background-color: #ff5252; }\n.theme-dark app-contracts .wrap-table .contract .icon.purchase, .theme-dark app-contracts .wrap-table .contract .icon.sell {\n background-color: #4db1ff; }\n.theme-gray app-contracts .wrap-table .contract .icon.purchase, .theme-gray app-contracts .wrap-table .contract .icon.sell {\n background-color: #42a5f5; }\n.theme-white app-contracts .wrap-table .contract .icon.purchase, .theme-white app-contracts .wrap-table .contract .icon.sell {\n background-color: #2c95f1; }\n.theme-dark app-purchase .form-purchase .purchase-select {\n color: #e0e0e0; }\n.theme-gray app-purchase .form-purchase .purchase-select {\n color: #e0e0e0; }\n.theme-white app-purchase .form-purchase .purchase-select {\n color: #43454b; }\n.theme-dark app-purchase .form-purchase .purchase-select .icon {\n background-color: #4db1ff; }\n.theme-gray app-purchase .form-purchase .purchase-select .icon {\n background-color: #42a5f5; }\n.theme-white app-purchase .form-purchase .purchase-select .icon {\n background-color: #2c95f1; }\n.theme-dark app-purchase .form-purchase .purchase-states {\n color: #4db1ff; }\n.theme-gray app-purchase .form-purchase .purchase-states {\n color: #42a5f5; }\n.theme-white app-purchase .form-purchase .purchase-states {\n color: #2c95f1; }\n.theme-dark app-purchase .form-purchase .additional-details {\n border: 0.2rem solid #2b3644; }\n.theme-gray app-purchase .form-purchase .additional-details {\n border: 0.2rem solid #2f3438; }\n.theme-white app-purchase .form-purchase .additional-details {\n border: 0.2rem solid #ebebeb; }\n.theme-dark app-purchase .progress-bar-container .progress-bar {\n background-color: #343f4a; }\n.theme-gray app-purchase .progress-bar-container .progress-bar {\n background-color: #363a3e; }\n.theme-white app-purchase .progress-bar-container .progress-bar {\n background-color: #dcdcdc; }\n.theme-dark app-purchase .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #5cda9d; }\n.theme-gray app-purchase .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #47cf8d; }\n.theme-white app-purchase .progress-bar-container .progress-bar .progress-bar-full {\n background-color: #46c172; }\napp-messages table tbody tr td:first-child span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n.theme-dark app-messages table tbody tr td:first-child .icon {\n background-color: #ff5252; }\n.theme-gray app-messages table tbody tr td:first-child .icon {\n background-color: #ff5252; }\n.theme-white app-messages table tbody tr td:first-child .icon {\n background-color: #ff5252; }\n.theme-dark app-typing-message .head .interlocutor {\n color: #4db1ff; }\n.theme-gray app-typing-message .head .interlocutor {\n color: #42a5f5; }\n.theme-white app-typing-message .head .interlocutor {\n color: #2c95f1; }\n.theme-dark app-typing-message .messages-content .messages-list div.date {\n color: #556576; }\n.theme-gray app-typing-message .messages-content .messages-list div.date {\n color: #565c62; }\n.theme-white app-typing-message .messages-content .messages-list div.date {\n color: #a0a5ab; }\n.theme-dark app-typing-message .messages-content .messages-list div.my {\n background-color: #2a3544; }\n.theme-gray app-typing-message .messages-content .messages-list div.my {\n background-color: #30363c; }\n.theme-white app-typing-message .messages-content .messages-list div.my {\n background-color: #fff; }\napp-typing-message .messages-content .messages-list div.my:before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: -1.1rem;\n border: 1.2rem solid transparent; }\n.theme-dark app-typing-message .messages-content .messages-list div.my:before {\n border-top-color: #2a3544; }\n.theme-gray app-typing-message .messages-content .messages-list div.my:before {\n border-top-color: #30363c; }\n.theme-white app-typing-message .messages-content .messages-list div.my:before {\n border-top-color: #fff; }\n.theme-dark app-typing-message .messages-content .messages-list div.buddy {\n background-color: #18202a; }\n.theme-gray app-typing-message .messages-content .messages-list div.buddy {\n background-color: #25292d; }\n.theme-white app-typing-message .messages-content .messages-list div.buddy {\n background-color: #ededed; }\napp-typing-message .messages-content .messages-list div.buddy:after {\n content: \"\";\n display: block;\n position: absolute;\n right: -1.1rem;\n top: 0;\n border: 1.2rem solid transparent; }\n.theme-dark app-typing-message .messages-content .messages-list div.buddy:after {\n border-top-color: #18202a; }\n.theme-gray app-typing-message .messages-content .messages-list div.buddy:after {\n border-top-color: #25292d; }\n.theme-white app-typing-message .messages-content .messages-list div.buddy:after {\n border-top-color: #ededed; }\n.theme-dark app-staking .chart-header .general .label {\n color: #556576; }\n.theme-gray app-staking .chart-header .general .label {\n color: #565c62; }\n.theme-white app-staking .chart-header .general .label {\n color: #a0a5ab; }\n.theme-dark app-staking .chart-header .general .options {\n color: #e0e0e0; }\n.theme-gray app-staking .chart-header .general .options {\n color: #e0e0e0; }\n.theme-white app-staking .chart-header .general .options {\n color: #43454b; }\napp-staking .chart-header .selected {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex-grow: 1;\n font-size: 1.6rem; }\n.theme-dark app-staking .chart-options .title {\n color: #556576; }\n.theme-gray app-staking .chart-options .title {\n color: #565c62; }\n.theme-white app-staking .chart-options .title {\n color: #a0a5ab; }\n.theme-dark app-staking .chart-options .options button {\n color: #e0e0e0;\n background-color: #2b3644; }\n.theme-gray app-staking .chart-options .options button {\n color: #e0e0e0;\n background-color: #292d31; }\n.theme-white app-staking .chart-options .options button {\n color: #43454b;\n background-color: #e0e0e0; }\n.theme-dark app-staking .chart-options .options button.active {\n background-color: #556576; }\n.theme-gray app-staking .chart-options .options button.active {\n background-color: #515960; }\n.theme-white app-staking .chart-options .options button.active {\n background-color: #ffffff; }\n.input-block-alias {\n position: relative; }\n.input-block-alias .alias-dropdown {\n position: absolute;\n top: 6.5rem;\n max-height: 10rem;\n overflow: auto;\n width: 100%; }\n.theme-dark .input-block-alias .alias-dropdown {\n background-color: #171e27;\n color: #e0e0e0; }\n.theme-gray .input-block-alias .alias-dropdown {\n background-color: #292d31;\n color: #e0e0e0; }\n.theme-white .input-block-alias .alias-dropdown {\n background-color: #e6e6e6;\n color: #43454b; }\n.input-block-alias .alias-dropdown div {\n font-size: 1.4rem;\n padding: 1rem; }\n.theme-dark .input-block-alias .alias-dropdown div:hover {\n background-color: rgba(58, 69, 85, 0.5); }\n.theme-gray .input-block-alias .alias-dropdown div:hover {\n background-color: rgba(58, 62, 66, 0.5); }\n.theme-white .input-block-alias .alias-dropdown div:hover {\n background-color: rgba(240, 240, 240, 0.5); }\napp-contacts, app-add-contacts,\napp-contact-send, app-export-import {\n flex: 1 1 auto;\n padding: 3rem;\n min-width: 85rem; }\napp-contacts .content, app-add-contacts .content,\n app-contact-send .content, app-export-import .content {\n position: relative;\n padding: 3rem;\n min-height: 100%; }\n.theme-dark app-contacts .content, .theme-dark app-add-contacts .content, .theme-dark\n app-contact-send .content, .theme-dark app-export-import .content {\n background-color: rgba(43, 54, 68, 0.5);\n color: #e0e0e0; }\n.theme-gray app-contacts .content, .theme-gray app-add-contacts .content, .theme-gray\n app-contact-send .content, .theme-gray app-export-import .content {\n background-color: rgba(37, 40, 43, 0.5);\n color: #e0e0e0; }\n.theme-white app-contacts .content, .theme-white app-add-contacts .content, .theme-white\n app-contact-send .content, .theme-white app-export-import .content {\n background-color: rgba(255, 255, 255, 0.5);\n color: #43454b; }\napp-contacts .content .head, app-add-contacts .content .head,\n app-contact-send .content .head, app-export-import .content .head {\n position: absolute;\n top: 0;\n left: 0; }\n.theme-dark app-contacts table .alias {\n color: #4db1ff; }\n.theme-gray app-contacts table .alias {\n color: #42a5f5; }\n.theme-white app-contacts table .alias {\n color: #2c95f1; }\n.theme-dark app-contacts table button .icon {\n background-color: #4db1ff; }\n.theme-gray app-contacts table button .icon {\n background-color: #42a5f5; }\n.theme-white app-contacts table button .icon {\n background-color: #2c95f1; }\n.theme-dark app-contacts table button span {\n color: #e0e0e0; }\n.theme-gray app-contacts table button span {\n color: #e0e0e0; }\n.theme-white app-contacts table button span {\n color: #43454b; }\n.theme-dark app-contacts .footer {\n color: #4db1ff; }\n.theme-gray app-contacts .footer {\n color: #42a5f5; }\n.theme-white app-contacts .footer {\n color: #2c95f1; }\n.theme-dark app-contacts .footer .import-btn {\n color: #4db1ff; }\n.theme-gray app-contacts .footer .import-btn {\n color: #42a5f5; }\n.theme-white app-contacts .footer .import-btn {\n color: #2c95f1; }\n.theme-dark app-contacts .footer .import-btn .icon {\n background-color: #4db1ff; }\n.theme-gray app-contacts .footer .import-btn .icon {\n background-color: #42a5f5; }\n.theme-white app-contacts .footer .import-btn .icon {\n background-color: #2c95f1; }\n.theme-dark app-contact-send .wallets-selection button {\n color: #4db1ff; }\n.theme-gray app-contact-send .wallets-selection button {\n color: #42a5f5; }\n.theme-white app-contact-send .wallets-selection button {\n color: #2c95f1; }\n.form-details {\n margin-top: 1.8rem; }\n.form-details .input-block:first-child {\n width: 50%; }\n.form-details .wallet-buttons {\n display: flex;\n align-items: center;\n justify-content: space-between; }\n.form-details .wallet-buttons button {\n margin: 2.9rem 0;\n width: 100%;\n max-width: 15rem; }\n.form-seed label {\n font-size: 1.3rem;\n line-height: 2.4rem; }\n.theme-dark .form-seed label {\n color: #556576; }\n.theme-gray .form-seed label {\n color: #565c62; }\n.theme-white .form-seed label {\n color: #a0a5ab; }\n.form-seed .form-content {\n display: flex;\n justify-content: center;\n padding: 3rem;\n width: 100%; }\n.theme-dark .form-seed .form-content {\n border: 2px solid #2b3644; }\n.theme-gray .form-seed .form-content {\n border: 2px solid #2f3438; }\n.theme-white .form-seed .form-content {\n border: 2px solid #ebebeb; }\n.form-seed .text-coral {\n text-decoration: none; }\n.theme-dark .form-seed .text-coral {\n color: #4db1ff; }\n.theme-gray .form-seed .text-coral {\n color: #42a5f5; }\n.theme-white .form-seed .text-coral {\n color: #2c95f1; }\n.form-seed .seed-phrase-form {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 38rem;\n width: 100%; }\n.form-seed .seed-phrase-form .input-block,\n .form-seed .seed-phrase-form button {\n width: 100%; }\n.form-seed .seed-phrase-form .error-message {\n margin-top: 1rem; }\n.theme-dark .form-seed .seed-phrase-form .error-message {\n color: #ff6f00; }\n.theme-gray .form-seed .seed-phrase-form .error-message {\n color: #ff6f00; }\n.theme-white .form-seed .seed-phrase-form .error-message {\n color: #ff6f00; }\n.form-seed .seed-phrase-form .secured-seed {\n font-size: 1.2rem;\n line-height: 2.4rem;\n text-decoration: none;\n display: flex;\n align-items: center;\n cursor: pointer; }\n.theme-dark .form-seed .seed-phrase-form .secured-seed {\n color: #e0e0e0; }\n.theme-gray .form-seed .seed-phrase-form .secured-seed {\n color: #e0e0e0; }\n.theme-white .form-seed .seed-phrase-form .secured-seed {\n color: #a0a5ab; }\n.form-seed .seed-phrase-form .secured-seed .icon {\n margin-right: 1.2rem; }\n.form-seed .seed-phrase-form button {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 3rem;\n margin-bottom: 2rem; }\n.form-seed .seed-phrase-form button .icon {\n margin-right: 1.2rem; }\n.seed-phrase {\n display: flex;\n flex-direction: column;\n width: 100%;\n background-color: transparent !important; }\n.seed-phrase-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%; }\n.theme-dark .seed-phrase-title {\n color: #556576; }\n.theme-gray .seed-phrase-title {\n color: #565c62; }\n.theme-white .seed-phrase-title {\n color: #a0a5ab; }\n.seed-phrase-title .right-part {\n display: inline-flex;\n align-items: center; }\n.seed-phrase-title .right-part .icon {\n cursor: pointer;\n width: 1.7rem;\n height: 1.7rem; }\n.seed-phrase-title .right-part .icon.copy {\n margin-right: 1.2rem;\n -webkit-mask: url('copy.svg') no-repeat center;\n mask: url('copy.svg') no-repeat center; }\n.theme-dark .seed-phrase-title .right-part .icon.copy {\n background-color: #4db1ff; }\n.theme-gray .seed-phrase-title .right-part .icon.copy {\n background-color: #42a5f5; }\n.theme-white .seed-phrase-title .right-part .icon.copy {\n background-color: #2c95f1; }\n.seed-phrase-title .right-part .icon.copy:hover {\n opacity: 0.75; }\n.seed-phrase-title .right-part .icon.copied {\n margin-right: 1.2rem;\n -webkit-mask: url('complete-testwallet.svg') no-repeat center;\n mask: url('complete-testwallet.svg') no-repeat center; }\n.theme-dark .seed-phrase-title .right-part .icon.copied {\n background-color: #4db1ff; }\n.theme-gray .seed-phrase-title .right-part .icon.copied {\n background-color: #42a5f5; }\n.theme-white .seed-phrase-title .right-part .icon.copied {\n background-color: #2c95f1; }\n.seed-phrase-title .right-part .icon.secured, .seed-phrase-title .right-part .icon.unsecured {\n margin-left: 1.2rem; }\n.seed-phrase-title .right-part span {\n font-size: 1.3rem;\n line-height: 2.4rem;\n display: inline-flex;\n align-items: center; }\n.seed-phrase-title .right-part span .icon {\n margin-left: 1.2rem; }\n.seed-phrase-content {\n padding: 1rem 0 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n margin-bottom: 1rem; }\n.theme-dark .seed-phrase-content {\n border-top: 2px solid #2b3644;\n border-bottom: 2px solid #2b3644; }\n.theme-gray .seed-phrase-content {\n border-top: 2px solid #2f3438;\n border-bottom: 2px solid #2f3438; }\n.theme-white .seed-phrase-content {\n border-top: 2px solid #ebebeb;\n border-bottom: 2px solid #ebebeb; }\n.seed-phrase-content .item {\n display: flex;\n align-items: center;\n padding: 0 2rem;\n width: calc(100% / 7);\n min-height: 35px;\n font-size: 1.3rem; }\n.theme-dark .seed-phrase-content .item {\n color: #e0e0e0; }\n.theme-gray .seed-phrase-content .item {\n color: #e0e0e0; }\n.theme-white .seed-phrase-content .item {\n color: #43454b; }\n.theme-dark .seed-phrase-content .item.dark {\n background-color: #18202a; }\n.theme-gray .seed-phrase-content .item.dark {\n background-color: #292d31; }\n.theme-white .seed-phrase-content .item.dark {\n background-color: #e6e6e6; }\n.seed-phrase-footer {\n text-align: center; }\n.seed-phrase-footer .title {\n font-size: 1.3rem;\n line-height: 2.4rem; }\n.theme-dark .seed-phrase-footer .title {\n color: #e0e0e0; }\n.theme-gray .seed-phrase-footer .title {\n color: #e0e0e0; }\n.theme-white .seed-phrase-footer .title {\n color: #43454b; }\n.icon {\n display: inline-flex;\n width: 1.6rem;\n height: 1.6rem; }\n.icon.secured {\n -webkit-mask: url('secured.svg') no-repeat center;\n mask: url('secured.svg') no-repeat center; }\n.theme-dark .icon.secured {\n background-color: #5cda9d; }\n.theme-gray .icon.secured {\n background-color: #47cf8d; }\n.theme-white .icon.secured {\n background-color: #46c172; }\n.icon.info {\n -webkit-mask: url('info.svg') no-repeat center;\n mask: url('info.svg') no-repeat center; }\n.theme-dark .icon.info {\n background-color: #4db1ff; }\n.theme-gray .icon.info {\n background-color: #42a5f5; }\n.theme-white .icon.info {\n background-color: #2c95f1; }\n.icon.unsecured {\n -webkit-mask: url('unsecured.svg') no-repeat center;\n mask: url('unsecured.svg') no-repeat center; }\n.theme-dark .icon.unsecured {\n background-color: #ff6f00; }\n.theme-gray .icon.unsecured {\n background-color: #ff6f00; }\n.theme-white .icon.unsecured {\n background-color: #ff6f00; }\n.icon.safety {\n -webkit-mask: url('safety.svg') no-repeat center;\n mask: url('safety.svg') no-repeat center; }\n.theme-dark .icon.safety {\n background-color: #111921; }\n.theme-gray .icon.safety {\n background-color: #1a1a1a; }\n.theme-white .icon.safety {\n background-color: #fefefe; }\n.wrap-buttons {\n display: flex; }\n.wrap-buttons .seed-phrase-button {\n margin: 2.8rem 0;\n width: 25%;\n min-width: 1.5rem; }\n.wrap-buttons .copy-button {\n margin: 2.8rem 1rem;\n width: 25%;\n min-width: 1.5rem; }\n.head {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n font-size: 1.3rem;\n padding: 0 3rem;\n width: 100%;\n height: 3rem; }\n.theme-dark .head {\n color: #4db1ff; }\n.theme-gray .head {\n color: #42a5f5; }\n.theme-white .head {\n color: #2c95f1; }\n.head .breadcrumbs > span:not(:last-child), .head .breadcrumbs a:not(:last-child) {\n position: relative;\n cursor: pointer;\n margin-right: 20px;\n outline-style: none; }\n.head .breadcrumbs > span:not(:last-child):after, .head .breadcrumbs a:not(:last-child):after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0.5rem;\n right: -1.5rem;\n width: 0.9rem;\n height: 0.9rem;\n -webkit-mask: url('arrow-right.svg') no-repeat center;\n mask: url('arrow-right.svg') no-repeat center;\n -webkit-mask-size: cover;\n mask-size: cover; }\n.theme-dark .head .breadcrumbs > span:not(:last-child):after, .theme-dark .head .breadcrumbs a:not(:last-child):after {\n background-color: #4db1ff; }\n.theme-gray .head .breadcrumbs > span:not(:last-child):after, .theme-gray .head .breadcrumbs a:not(:last-child):after {\n background-color: #42a5f5; }\n.theme-white .head .breadcrumbs > span:not(:last-child):after, .theme-white .head .breadcrumbs a:not(:last-child):after {\n background-color: #2c95f1; }\n.head .back-btn {\n display: flex;\n align-items: center;\n background-color: transparent;\n color: #4db1ff;\n font-size: inherit;\n font-weight: 400;\n line-height: 1.3rem;\n padding: 0;\n height: auto; }\n.head .back-btn .icon {\n margin-right: 0.7rem;\n -webkit-mask: url('back.svg') no-repeat center;\n mask: url('back.svg') no-repeat center;\n width: 0.9rem;\n height: 0.9rem; }\n.theme-dark .head .back-btn .icon {\n background-color: #4db1ff; }\n.theme-gray .head .back-btn .icon {\n background-color: #42a5f5; }\n.theme-white .head .back-btn .icon {\n background-color: #2c95f1; }\n.scrolled-content::-webkit-scrollbar {\n background-color: transparent;\n cursor: default;\n width: 1rem;\n height: 1rem; }\n.scrolled-content::-webkit-scrollbar-track {\n background: transparent; }\n.scrolled-content::-webkit-scrollbar-thumb {\n background-color: #556576;\n background-clip: padding-box;\n border: 0.25rem solid transparent;\n border-radius: 0.5rem; }\n.scrolled-content::-webkit-scrollbar-thumb:hover {\n background-color: #556576; }\ntable {\n font-size: 1.3rem;\n width: 100%; }\ntable thead {\n text-align: left; }\n.theme-dark table thead {\n color: #556576; }\n.theme-gray table thead {\n color: #565c62; }\n.theme-white table thead {\n color: #a0a5ab; }\ntable thead tr {\n height: 4rem; }\ntable thead tr th {\n padding: 1rem;\n vertical-align: bottom; }\ntable thead tr th:first-child {\n padding-left: 3rem; }\ntable thead tr th:last-child {\n padding-right: 3rem; }\ntable tbody {\n text-align: left; }\n.theme-dark table tbody {\n color: #e0e0e0; }\n.theme-gray table tbody {\n color: #e0e0e0; }\n.theme-white table tbody {\n color: #43454b; }\ntable tbody tr {\n height: 3.5rem; }\n.theme-dark table tbody tr:nth-child(odd) {\n background-color: #18202a; }\n.theme-gray table tbody tr:nth-child(odd) {\n background-color: #25292d; }\n.theme-white table tbody tr:nth-child(odd) {\n background-color: #ffffff; }\ntable tbody tr td {\n line-height: 1.7rem;\n padding: 0 1rem;\n vertical-align: middle;\n white-space: nowrap;\n max-width: 20rem; }\ntable tbody tr td:first-child {\n padding-left: 3rem; }\ntable tbody tr td:last-child {\n padding-right: 3rem; }\n@font-face {\n font-family: OpenSans;\n src: url('OpenSans-Light.ttf');\n font-weight: 300; }\n@font-face {\n font-family: OpenSans;\n src: url('OpenSans-Regular.ttf');\n font-weight: 400; }\n@font-face {\n font-family: OpenSans;\n src: url('OpenSans-SemiBold.ttf');\n font-weight: 600; }\n@font-face {\n font-family: OpenSans;\n src: url('OpenSans-Bold.ttf');\n font-weight: 700; }\n@font-face {\n font-family: OpenSans;\n src: url('OpenSans-ExtraBold.ttf');\n font-weight: 800; }\nhtml {\n font-family: OpenSans, sans-serif;\n font-size: 10px; }\nbody {\n font-family: OpenSans, sans-serif;\n font-size: 1.6rem;\n width: 100vw;\n height: 100vh; }\nbody.theme-dark {\n background: #131921 url('background-dark.png') no-repeat center;\n background-size: cover; }\nbody.theme-gray {\n background: #101417 url('background-gray.png') no-repeat center;\n background-size: cover; }\nbody.theme-white {\n background: #eeeeee url('background-white.png') no-repeat center;\n background-size: cover; }\nbody app-root {\n display: flex;\n width: 100%;\n height: 100%; }\n.update-tooltip .tooltip-inner .icon {\n -webkit-mask: url('update-alert.svg') no-repeat center;\n mask: url('update-alert.svg') no-repeat center; }\n\r\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXNzZXRzXFxzY3NzXFxiYXNlXFxfbWl4aW5zLnNjc3MiLCJzcmMvc3R5bGVzLnNjc3MiLCJub2RlX21vZHVsZXMvQG5nLXNlbGVjdC9uZy1zZWxlY3QvdGhlbWVzL2RlZmF1bHQudGhlbWUuY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXGJhc2VcXF9udWxsLnNjc3MiLCJzcmMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFzc2V0c1xcc2Nzc1xcYmFzZVxcX2Jhc2Uuc2NzcyIsInNyYy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXNzZXRzXFxzY3NzXFxiYXNlXFxfdGhlbWUuc2NzcyIsInNyYy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXNzZXRzXFxzY3NzXFxsYXlvdXRcXF9tYWluLnNjc3MiLCJzcmMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFzc2V0c1xcc2Nzc1xcbGF5b3V0XFxfc2lkZWJhci5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXGxheW91dFxcX3N0YXR1cy5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXGxheW91dFxcX3dhbGxldC5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXGxheW91dFxcX2NvbnRhY3Quc2NzcyIsInNyYy9EOlxcUHJvamVjdFxcV09SS19ORVdcXHphbm9cXHNyY1xcZ3VpXFxxdC1kYWVtb25cXGh0bWxfc291cmNlL3NyY1xcYXNzZXRzXFxzY3NzXFxsYXlvdXRcXF9zZWVkLXBocmFzZS5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXG1vZHVsZXNcXF9oZWFkLnNjc3MiLCJzcmMvRDpcXFByb2plY3RcXFdPUktfTkVXXFx6YW5vXFxzcmNcXGd1aVxccXQtZGFlbW9uXFxodG1sX3NvdXJjZS9zcmNcXGFzc2V0c1xcc2Nzc1xcbW9kdWxlc1xcX3Njcm9sbC5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxhc3NldHNcXHNjc3NcXG1vZHVsZXNcXF90YWJsZS5zY3NzIiwic3JjL0Q6XFxQcm9qZWN0XFxXT1JLX05FV1xcemFub1xcc3JjXFxndWlcXHF0LWRhZW1vblxcaHRtbF9zb3VyY2Uvc3JjXFxzdHlsZXMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4RUE7O0NDNUVDO0FDRkQsaURBQWlELGVBQWUsQ0FBQyxpQ0FBaUM7QUFBQyx1REFBdUQsZUFBZTtBQUFDLDJEQUEyRCxRQUFRLENBQUMseUNBQXlDLENBQUMsc0JBQXNCO0FBQUMsaUVBQWlFLHlDQUF5QztBQUFDLGtFQUFrRSw0QkFBNEIsQ0FBQywyQkFBMkI7QUFBQywrREFBK0QseUJBQXlCLENBQUMsd0JBQXdCO0FBQUMseUVBQXlF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QVk7RUFDWixpQ0FBaUM7RUFDakMsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQixhQUFhO0VBQ2IsZUFBZTtFQUNmLGNBQWMsRUFBQTtBSitEWjtJSXpERSx5QkNSb0M7SURTcEMsY0NsQjJCLEVBQUE7QUwwRTdCO0lJekRFLHlCQ29Eb0M7SURuRHBDLGNDMEMyQixFQUFBO0FMYzdCO0lJekRFLHlCQ2dIb0M7SUQvR3BDLGNDc0cyQixFQUFBO0FMOUM3QjtJSWxESSx5QkNkNkIsRUFBQTtBTGdFakM7SUlsREkseUJDOEM2QixFQUFBO0FMSWpDO0lJbERJLHlCQzBHNkIsRUFBQTtBTHhEakM7SUkzQ0kseUJDcEI2QixFQUFBO0FMK0RqQztJSTNDSSx5QkN3QzZCLEVBQUE7QUxHakM7SUkzQ0kseUJDb0c2QixFQUFBO0FMekRqQztJSW5DRSx5QkNqQ2dDO0lEa0NoQyxjQ3hDMkIsRUFBQTtBTDBFN0I7SUluQ0UseUJDMkJnQztJRDFCaEMsY0NvQjJCLEVBQUE7QUxjN0I7SUluQ0UseUJDdUZnQztJRHRGaEMsY0NnRjJCLEVBQUE7QUw5QzdCO0lJNUJJLHlCQ3ZDeUIsRUFBQTtBTG1FN0I7SUk1QkkseUJDcUJ5QixFQUFBO0FMTzdCO0lJNUJJLHlCQ2lGeUIsRUFBQTtBTHJEN0I7SUlyQkkseUJDN0N5QixFQUFBO0FMa0U3QjtJSXJCSSx5QkNleUIsRUFBQTtBTE03QjtJSXJCSSx5QkMyRXlCLEVBQUE7QUx0RDdCO0lJYkUseUJDakRpQztJRGtEakMsY0M5RDJCLEVBQUE7QUwwRTdCO0lJYkUseUJDV2lDO0lEVmpDLGNDRjJCLEVBQUE7QUxjN0I7SUliRSx5QkN1RWlDO0lEdEVqQyxjQzBEMkIsRUFBQTtBTDlDN0I7SUlOSSx5QkN2RDBCLEVBQUE7QUw2RDlCO0lJTkkseUJDSzBCLEVBQUE7QUxDOUI7SUlOSSx5QkNpRTBCLEVBQUE7QUwzRDlCO0lJQ0kseUJDN0QwQixFQUFBO0FMNEQ5QjtJSUNJLHlCQ0QwQixFQUFBO0FMQTlCO0lJQ0kseUJDMkQwQixFQUFBO0FMNUQ5QjtJSVNFLHlCQ3BFcUM7SURx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d0V0QjtNSW1QSSw0QkMvUGtCLEVBQUE7QUxZdEI7TUltUEksNEJDbk1rQixFQUFBO0FENkoxQjtFQThDTSwwQ0FBMEQsRUFBQTtBSjNQNUQ7SUk4UEkseUJDdFVrQixFQUFBO0FMd0V0QjtJSThQSSx5QkMxUWtCLEVBQUE7QUxZdEI7SUk4UEkseUJDOU1rQixFQUFBO0FMaER0QjtFSXVRQSx5QkMzVDhCLEVBQUE7QUxvRDlCO0VJdVFBLHlCQy9QOEIsRUFBQTtBTFI5QjtFSXVRQSx5QkNuTThCLEVBQUE7QUxwRTlCO0VJK1FJLHlCQ3ZWa0IsRUFBQTtBTHdFdEI7RUkrUUkseUJDM1JrQixFQUFBO0FMWXRCO0VJK1FJLHlCQy9Oa0IsRUFBQTtBTGhEdEI7RUlzUkkseUJDL1ZzQixFQUFBO0FMeUUxQjtFSXNSSSx5QkNuU3NCLEVBQUE7QUxhMUI7RUlzUkkseUJDdk9zQixFQUFBO0FENk85QjtFQUNFLGtCQUFrQixFQUFBO0FKN1JoQjtJSWdTQSxtQkNoVStCO0lEaVUvQix1Q0M1VDBDO0lENlQxQyxjQzdXc0IsRUFBQTtBTDJFdEI7SUlnU0EsbUJDcFErQjtJRHFRL0IsdUNDaFEwQztJRGlRMUMsY0NqVHNCLEVBQUE7QUxldEI7SUlnU0EsbUJDeE0rQjtJRHlNL0IsNkNDcE1nRDtJRHFNaEQsY0NyUHNCLEVBQUE7QUQrTzFCO0lBVUksaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixxQkFBcUIsRUFBQTtBQVp6QjtJQWdCSSxpQkFBaUIsRUFBQTtBQWhCckI7TUFtQk0sV0FBVztNQUNYLGtCQUFrQjtNQUNsQixhQUFhO01BQ2Isd0JBQXdCO01BQ3hCLG9CQUFvQjtNQUNwQixtQkFBbUIsRUFBQTtBSnBUckI7UUl1VEkseURBQWdGLEVBQUE7QUp2VHBGO1FJdVRJLHlEQUFnRixFQUFBO0FKdlRwRjtRSXVUSSx5REFBZ0YsRUFBQTtBQTNCeEY7SUFpQ0ksaUJBQWlCLEVBQUE7QUFqQ3JCO01Bb0NNLFdBQVc7TUFDWCxrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLFlBQVk7TUFDWixvQkFBb0I7TUFDcEIsbUJB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cEI7RUFHSSxjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixpQkFBaUIsRUFBQTtBQUlyQjtFQUNFLGVBQWUsRUFBQTtBSnhnQmI7SUkyZ0JBLG1CQzNpQitCO0lENGlCL0IsdUNDdmlCMEM7SUR3aUIxQyxjQ3hsQnNCLEVBQUE7QUwyRXRCO0lJMmdCQSxtQkMvZStCO0lEZ2YvQix1Q0MzZTBDO0lENGUxQyxjQzVoQnNCLEVBQUE7QUxldEI7SUkyZ0JBLG1CQ25iK0I7SURvYi9CLDZDQy9hZ0Q7SURnYmhELGNDaGVzQixFQUFBO0FMN0N0QjtJSW1oQkUsbUJDampCc0M7SURrakJ0QyxjQ3JrQjJCLEVBQUE7QUxpRDdCO0lJbWhCRSxtQkNyZnNDO0lEc2Z0QyxjQ3pnQjJCLEVBQUE7QUxYN0I7SUltaEJFLG1CQ3pic0M7SUQwYnRDLGNDN2MyQixFQUFBO0FMdkU3QjtJSTRoQk0scURDMWpCa0MsRUFBQTtBTDhCeEM7SUk0aEJNLHFEQzlma0MsRUFBQTtBTDlCeEM7SUk0aEJNLHFEQ2xja0MsRUFBQTtBTDFGeEM7SUlzaUJNLHFEQUFxSCxFQUFBO0FKdGlCM0g7SUlzaUJNLHFEQUFxSCxFQUFBO0FKdGlCM0g7SUlzaUJNLHFEQUFxSCxFQUFBO0FBL0IvSDtJQXNDSSxlQUFlLEVBQUE7QUo3aUJmO01JZ2pCRSxtQkM1a0JxQztNRDZrQnJDLGNDbG1CMkIsRUFBQTtBTGlEN0I7TUlnakJFLG1CQ2hoQnFDO01EaWhCckMsY0N0aUIyQixFQUFBO0FMWDdCO01JZ2pCRSxtQkNwZHFDO01EcWRyQyxjQzFlMkIsRUFBQTtBRGdjakM7TUE4Q00sYUFBYTtNQUNiLHNCQUFzQjtNQUN0QixtQkFBbUIsRUFBQTtBSnZqQnJCO01JK2pCTSxxREMzbEJpQyxFQUFBO0FMNEJ2QztNSStqQk0scURDL2hCaUMsRUFBQTtBTGhDdkM7TUkrakJNLHFEQ25laUMsRUFBQTtBTDVGdkM7TUl5a0JNLHFEQUFtSCxFQUFBO0FKemtCekg7TUl5a0JNLHFEQUFtSCxFQUFBO0FKemtCekg7TUl5a0JNLHFEQUFtSCxFQUFB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SW12QkkseUJDMXlCeUIsRUFBQTtBTHVEN0I7TUltdkJJLHlCQzl1QnlCLEVBQUE7QUxMN0I7TUltdkJJLHlCQ2xyQnlCLEVBQUE7QUR3b0JqQztNQWdEVSxpQkFBaUI7TUFDakIsYUFBYSxFQUFBO0FKMXZCbkI7UUk2dkJRLHlCQ3B6QnFCO1FEcXpCckIsY0N6MEJjLEVBQUE7QUwyRXRCO1FJNnZCUSx5QkN4dkJxQjtRRHl2QnJCLGNDN3dCYyxFQUFBO0FMZXRCO1FJNnZCUSx5QkM1ckJxQjtRRDZyQnJCLGNDanRCYyxFQUFBO0FMN0N0QjtRSW93QlUsdUNDMXpCNkI7UUQyekI3QixjQ2gxQlksRUFBQTtBTDJFdEI7UUlvd0JVLHVDQzl2QjZCO1FEK3ZCN0IsY0NweEJZLEVBQUE7QUxldEI7UUlvd0JVLDBDQ2xzQmdDO1FEbXNCaEMsY0N4dEJZLEVBQUE7QUw3Q3RCO1FJNHdCVSx1Q0NqMEJnQztRRGswQmhDLGNDeDFCWSxFQUFBO0FMMkV0QjtRSTR3QlUsdUNDcndCZ0M7UURzd0JoQyxjQzV4QlksRUFBQTtBTGV0QjtRSTR3QlUsMENDenNCbUM7UUQwc0JuQyxjQ2h1QlksRUFBQTtBRDRwQjFCO01BMEVVLDZCQUE2QjtNQUM3QixlQUFlO01BQ2YsV0FBVztNQUNYLFlBQVksRUFBQTtBQTdFdEI7TUFpRlUsdUJBQXVCLEVBQUE7QUFqRmpDO01BcUZVLHlCQUF5QjtNQUN6Qiw0QkFBNEI7TUFDNUIsaUNBQWlDO01BQ2pDLHFCQUFxQixFQUFBO0FBeEYvQjtNQTRGVSx5QkFBeUIsRUFBQTtBSnJ5Qi9CO0VJaXpCRSxzQ0MzMEIwRDtFRDQwQjFELGNDNzNCb0IsRUFBQTtBTDJFdEI7RUlpekJFLHNDQy93QjBEO0VEZ3hCMUQsY0NqMEJvQixFQUFBO0FMZXRCO0VJaXpCRSx1Q0NudEIyRDtFRG90QjNELGNDcndCb0IsRUFBQTtBTDdDdEI7RUkwekJNLHlCQy8zQmUsRUFBQTtBTHFFckI7RUkwekJNLHlCQ24wQmUsRUFBQTtBTFNyQjtFSTB6Qk0seUJDdndCZSxFQUFBO0FMbkRyQjtFSWkwQk0seUJDeDRCaUIsRUFBQTtBTHVFdkI7RUlpMEJNLHlCQzUwQmlCLEVBQUE7QUxXdkI7RUlpMEJNLHlCQ2h4QmlCLEVBQUE7QUxqRHZCO0VJdzBCTSx5QkNoNUJnQixFQUFBO0FMd0V0QjtFSXcwQk0seUJDcDFCZ0IsRUFBQTtBTFl0QjtFSXcwQk0seUJDeHhCZ0IsRUFBQTtBTGhEdEI7RUlnMUJJLHlCQ3g1QmtCO0VEeTVCbEIsY0MzNUJ5QixFQUFBO0FMMEU3QjtFSWcxQkkseUJDNTFCa0I7RUQ2MUJsQixjQy8xQnlCLEVBQUE7QUxjN0I7RUlnMUJJLHlCQ2h5QmtCO0VEaXlCbEIsY0NueUJ5QixFQUFBO0FMOUM3QjtFSTAxQk0seUJDbjNCbUIsRUFBQTtBTHlCekI7RUkwMUJNLHlCQ3Z6Qm1CLEVBQUE7QUxuQ3pCO0VJMDFCTSx5QkMzdkJtQixFQUFBO0FML0Z6QjtFSXMyQkUsZ0NDOTVCbUMsRUFBQTtBTHdEckM7RUlzMkJFLGdDQ2wyQm1DLEVBQUE7QUxKckM7RUlzMkJFLGdDQ3R5Qm1DLEVBQUE7QUxoRXJDO0VJZzNCUSxjQ3o3QmtCLEVBQUE7QUx5RTFCO0VJZzNCUSxjQzczQmtCLEVBQUE7QUxhMUI7RUlnM0JRLGNDajBCa0IsRUFBQTtBTC9DMUI7RUl1M0JRLGNDbDhCYyxFQUFBO0FMMkV0QjtFSXUzQlEsY0N0NEJjLEVBQUE7QUxldEI7RUl1M0JRLGNDMTBCYyxFQUFBO0FMN0N0QjtFSTgzQlEsY0N0OEJjLEVBQUE7QUx3RXRCO0VJODNCUSxjQzE0QmMsRUFBQTtBTFl0QjtFSTgzQlEsY0M5MEJjLEVBQUE7QUxoRHRCO0VJMjRCRSxjQ3Q5Qm9CLEVBQUE7QUwyRXRCO0VJMjRCRSxjQzE1Qm9CLEVBQUE7QUxldEI7RUkyNEJFLGNDOTFCb0IsRUFBQTtBTDdDdEI7RUlpNUJJLHlCQ3I3QitCLEVBQUE7QUxvQ25DO0VJaTVCSSx5QkN6M0IrQixFQUFBO0FMeEJuQztFSWk1QkkseUJDN3pCK0IsRUFBQTtBTHBGbkM7RUl1NUJNLHlCQzE3QmlDLEVBQUE7QUxtQ3ZDO0VJdTVCTSx5QkM5M0JpQyxFQUFBO0FMekJ2QztFSXU1Qk0seUJDbDBCaUMsRUFBQTtBTHJGdkM7RUltNkJFLHNDQzc3QjBEO0VEODdCMUQsY0MvK0JvQixFQUFBO0FMMkV0QjtFSW02QkUsc0NDajRCMEQ7RURrNEIxRCxjQ243Qm9CLEVBQUE7QUxldEI7RUltNkJFLHVDQ3IwQjJEO0VEczBCM0QsY0N2M0JvQixFQUFBO0FMN0N0QjtFSTY2QkUsc0NDdjhCMEQ7RUR3OEIxRCxjQ3ovQm9CLEVBQUE7QUwyRXRCO0VJNjZCRSxzQ0MzNEIwRDtFRDQ0QjFELGNDNzdCb0IsRUFBQTtBTGV0QjtFSTY2QkUsdUNDLzBCMkQ7RURnMUIzRCxjQ2o0Qm9CLEVBQUE7QUw3Q3RCO0VJbzdCSSxtQ0M1K0JpQyxFQUFBO0FMd0RyQztFSW83QkksbUNDaDdCaUMsRUFBQTtBTEpyQztFSW83QkksbUNDcDNCaUMsRUFBQTtBTGhFckM7RUk0N0JJLHlCQ3BnQ2tCO0VEcWdDbEIsY0N2Z0N5QixFQUFBO0FMMEU3QjtFSTQ3QkkseUJDeDhCa0I7RUR5OEJsQixjQzM4QnlCLEVBQUE7QUxjN0I7RUk0N0JJLHlCQzU0QmtCO0VENjRCbEIsY0MvNEJ5QixFQUFBO0FDaklqQztFQUNFLGNBQWM7RUFDZCxhQUFhO0VBQ2IsZ0JBQWdCLEVBQUE7QUFIbEI7SUFNSSxrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLGdCQUFnQixFQUFBO0FOMkVoQjtNTXhFRSx1Q0RKMkM7TUNLM0MsY0RKb0IsRUFBQTtBTDJFdEI7TU14RUUsdUNEd0QyQztNQ3ZEM0MsY0R3RG9CLEVBQUE7QUxldEI7TU14RUUsMENEb0g4QztNQ25IOUMsY0RvSG9CLEVBQUE7QUNoSTFCO01BZ0JNLGtCQUFrQjtNQUNsQixNQUFNO01BQ04sT0FBTyxFQUFBO0FOaUVUO0VNbkRNLGNEckJnQixFQUFBO0FMd0V0QjtFTW5ETSxjRHVDZ0IsRUFBQTtBTFl0QjtFTW5ETSxjRG1HZ0IsRUFBQTtBTGhEdEI7RU03Q1EseUJEM0JjLEVBQUE7QUx3RXRCO0VNN0NRLHlCRGlDYyxFQUFBO0FMWXRCO0VNN0NRLHlCRDZGYyxFQUFBO0FMaER0QjtFTWhDRSx5QkR2QjJCO0VDd0IzQixjRDVDb0IsRUFBQTtBTDJFdEI7RU1oQ0UseUJEcUMyQjtFQ3BDM0IsY0RnQm9CLEVBQUE7QUxldEI7RU1oQ0UseUJEaUcyQjtFQ2hHM0IsY0Q0RW9CLEVBQUE7QUw3Q3RCO0VNckJFLHlCRGxDMkIsRUFBQTtBTHVEN0I7RU1yQkUseUJEMEIyQixFQUFBO0FMTDdCO0VNckJFLHlCRHNGMkIsRUFBQTtBQ2pGakM7RUFHSSxZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLGFBQWE7RUFDYiw4QkFBOEI7RUFDOUIsc0JBQXNCLEVBQUE7QU5TdEI7SU1KSSxjRHJFc0IsRUFBQTtBTHlFMUI7SU1KSSxjRFRzQixFQUFBO0FMYTFCO0lNSkksY0RtRHNCLEVBQUE7QUwvQzFCO0lNS00sdUNEOUMyQyxFQUFBO0FMeUNqRDtJTUtNLHVDRGMyQyxFQUFBO0FMbkJqRDtJTUtNLDBDRDBFOEMsRUFBQTtBTC9FcEQ7SU1XUSxjRHBGa0IsRUFBQTtBTHlFMUI7SU1XUSxjRHhCa0IsRUFBQTtBTGExQjtJTVdRLGNEb0NrQixFQUFBO0FML0MxQjtJTWtCUSx5QkQxRmMsRUFBQTtBTHdFdEI7SU1rQlEseUJEOUJjLEVBQUE7QUxZdEI7SU1rQlEseUJEOEJjLEVBQUE7QUxoRHRCO0lNd0JVLGNEaEdZLEVBQUE7QUx3RXRCO0lNd0JVLGNEcENZLEVBQUE7QUxZdEI7SU13QlUsY0R3QlksRUFBQTtBQ2YxQjtFQUNFLGtCQUFrQixFQUFBO0FObENoQjtFT2hGQSx5QkZBMkMsRUFBQTtBTGdGM0M7RU9oRkEseUJGNEQyQyxFQUFBO0FMb0IzQztFT2hGQSx1QkZ3SDhDLEVBQUE7QUx4QzlDO0VPdEVNLGNGTGdCLEVBQUE7QUwyRXRCO0VPdEVNLGNGdURnQixFQUFBO0FMZXRCO0VPdEVNLGNGbUhnQixFQUFBO0FMN0N0QjtFTy9ETSxjRlRnQixFQUFBO0FMd0V0QjtFTy9ETSxjRm1EZ0IsRUFBQTtBTFl0QjtFTy9ETSxjRitHZ0IsRUFBQTtBTGhEdEI7RU9yRE0sNkJBQTZCO0VBQzdCLGNGdkJnQixFQUFBO0FMMkV0QjtFT3JETSw2QkFBNkI7RUFDN0IsY0ZxQ2dCLEVBQUE7QUxldEI7RU9yRE0sNkJBQTZCO0VBQzdCLGNGaUdnQixFQUFBO0FMN0N0QjtFTzlDUSx5QkYxQmMsRUFBQTtBTHdFdEI7RU85Q1EseUJGa0NjLEVBQUE7QUxZdEI7RU85Q1EseUJGOEZjLEVBQUE7QUxoRHRCO0VPckNVLGNGcENnQixFQUFBO0FMeUUxQjtFT3JDVSxjRndCZ0IsRUFBQTtBTGExQjtFT3JDVSxjRm9GZ0IsRUFBQTtBTC9DMUI7RU85QlUseUJGMUNZLEVBQUE7QUx3RXRCO0VPOUJVLHlCRmtCWSxFQUFBO0FMWXRCO0VPOUJVLHlCRjhFWSxFQUFBO0FMaER0QjtFT3ZCVSx5QkY3Q3dCO0VFOEN4QixjRnBEbUIsRUFBQTtBTDBFN0I7RU92QlUseUJGZXdCO0VFZHhCLGNGUW1CLEVBQUE7QUxjN0I7RU92QlUseUJGMkV3QjtFRTFFeEIsY0ZvRW1CLEVBQUE7QUw5QzdCO0VPYlkseUJGdkJ1QixFQUFBO0FMb0NuQztFT2JZLHlCRnFDdUIsRUFBQTtBTHhCbkM7RU9iWSx5QkZpR3VCLEVBQUE7QUxwRm5DO0VPUGMseUJGakVRLEVBQUE7QUx3RXRCO0VPUGMseUJGTFEsRUFBQTtBTFl0QjtFT1BjLHlCRnVEUSxFQUFBO0FMaER0QjtFT0VVLGNGM0VnQixFQUFBO0FMeUUxQjtFT0VVLGNGZmdCLEVBQUE7QUxhMUI7RU9FVSxjRjZDZ0IsRUFBQTtBTC9DMUI7RU9VUSx1Q0Y3RHFDO0VFOERyQyxjRjVEcUIsRUFBQTtBTGlEN0I7RU9VUSx1Q0ZEcUM7RUVFckMsY0ZBcUIsRUFBQTtBTFg3QjtFT1VRLHlCRjJEcUM7RUUxRHJDLGNGNERxQixFQUFBO0FMdkU3QjtFT21CWSxjRmhFcUIsRUFBQTtBTDZDakM7RU9tQlksY0ZKcUIsRUFBQTtBTGZqQztFT21CWSxjRndEcUIsRUFBQTtBTDNFakM7RU8wQlkseUJGcEU0QjtFRXFFNUIsY0Z2RXNCLEVBQUE7QUw0Q2xDO0VPMEJZLHlCRlI0QjtFRVM1QixjRlhzQixFQUFBO0FMaEJsQztFTzBCWSx5QkZvRDRCO0VFbkQ1QixjRmlEc0IsRUFBQTtBTDVFbEM7RU9rQ1kseUJGN0V5QjtFRThFekIsY0Y5R1UsRUFBQTtBTDJFdEI7RU9rQ1kseUJGakJ5QjtFRWtCekIsY0ZsRFUsRUFBQTtBTGV0QjtFT2tDWSx5QkYyQ3lCO0VFMUN6QixjRlVVLEVBQUE7QUw3Q3RCO0VPMENZLGNGdkZxQixFQUFBO0FMNkNqQztFTzBDWSxjRjNCcUIsRUFBQTtBTGZqQztFTzBDWSxjRmlDcUIsRUFBQTtBTDNFakM7RU9tRFEsdUNGckcwQyxFQUFBO0FMa0RsRDtFT21EUSx1Q0Z6QzBDLEVBQUE7QUxWbEQ7RU9tRFEsMENGbUI2QyxFQUFBO0FMdEVyRDtFTzRESSxvRUFBMkYsRUFBQTtBUDVEL0Y7RU80REksb0VBQTJGLEVBQUE7QVA1RC9GO0VPNERJLGtFQUEyRixFQUFBO0FQNUQvRjtFT29FRSxtQ0ZuSnlCLEVBQUE7QUwrRTNCO0VPb0VFLG1DRnZGeUIsRUFBQTtBTG1CM0I7RU9vRUUsbUNGM0J5QixFQUFBO0FMekMzQjtFTzRFTSxjRnZKZ0IsRUFBQTtBTDJFdEI7RU80RU0sY0YzRmdCLEVBQUE7QUxldEI7RU80RU0sY0YvQmdCLEVBQUE7QUw3Q3RCO0VPa0ZRLHlCRjFKYyxFQUFBO0FMd0V0QjtFT2tGUSx5QkY5RmMsRUFBQTtBTFl0QjtFT2tGUSx5QkZsQ2MsRUFBQTtBTGhEdEI7RU80RlEsa0RBQTBEO0VBQzFELHlCQUE2QyxFQUFBO0FQN0ZyRDtFTzRGUSxrREFBMEQ7RUFDMUQseUJBQTZDLEVBQUE7QVA3RnJEO0VPNEZRLG9DQUEwRDtFQUMxRCx5QkFBNkMsRUFBQTtBUDdGckQ7RU9tR1Usb0NBQW1FLEVBQUE7QVBuRzdFO0VPbUdVLG9DQUFtRSxFQUFBO0FQbkc3RTtFT21HVSxvQ0FBbUUsRUFBQTtBQ3RMakY7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDJCQUEyQjtFQUMzQixjQUFjO0VBQ2QsaUJBQWlCLEVBQUE7QVI4RWY7SVE1RUEsY0hHMEIsRUFBQTtBTHlFMUI7SVE1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LHlCSG5NZSxFQUFBO0FMcUVyQjtNUThITSx5Qkh2SWUsRUFBQTtBTFNyQjtNUThITSx5QkgzRWUsRUFBQTtBTG5EckI7TVFxSU0seUJIM01rQixFQUFBO0FMc0V4QjtNUXFJTSx5QkgvSWtCLEVBQUE7QUxVeEI7TVFxSU0seUJIbkZrQixFQUFBO0FHMkY1QjtFQUNFO0lBQ0UsK0JBQStCLEVBQUE7RUFFakM7SUFDRSw4QkFBOEIsRUFBQSxFQUFBO0FBTGxDO0VBQ0U7SUFDRSwrQkFBK0IsRUFBQTtFQUVqQztJQUNFLDhCQUE4QixFQUFBLEVBQUE7QVJsSjlCO0VTaEZBLGNKS3NCLEVBQUE7QUwyRXRCO0VTaEZBLGNKaUVzQixFQUFBO0FMZXRCO0VTaEZBLGNKNkhzQixFQUFBO0FMN0N0QjtFU3hFSSxjSkhrQixFQUFBO0FMMkV0QjtFU3hFSSxjSnlEa0IsRUFBQTtBTGV0QjtFU3hFSSxjSnFIa0IsRUFBQTtBTDdDdEI7RVNsRU0seUJKTmdCLEVBQUE7QUx3RXRCO0VTbEVNLHlCSnNEZ0IsRUFBQTtBTFl0QjtFU2xFTSx5QkprSGdCLEVBQUE7QUluSTFCO0VBcUJRLHdDQUF3QyxFQUFBO0FUOEQ1QztJUzNEUSx5QkpjeUIsRUFBQTtBTDZDakM7SVMzRFEseUJKMEV5QixFQUFBO0FMZmpDO0lTM0RRLHlCSnNJeUIsRUFBQTtBTDNFakM7RVNoRE0seUJKeEJnQixFQUFBO0FMd0V0QjtFU2hETSx5QkpvQ2dCLEVBQUE7QUxZdEI7RVNoRE0seUJKZ0dnQixFQUFBO0FMaER0QjtFU3ZDRSxjSmpDb0IsRUFBQTtBTHdFdEI7RVN2Q0UsY0oyQm9CLEVBQUE7QUxZdEI7RVN2Q0UsY0p1Rm9CLEVBQUE7QUxoRHRCO0VTakNJLHlCSnZDa0IsRUFBQTtBTHdFdEI7RVNqQ0kseUJKcUJrQixFQUFBO0FMWXRCO0VTakNJLHlCSmlGa0IsRUFBQTtBTGhEdEI7RVNyQk0sdUNKcEIyQyxFQUFBO0FMeUNqRDtFU3JCTSx1Q0p3QzJDLEVBQUE7QUxuQmpEO0VTckJNLDBDSm9HOEMsRUFBQTtBTC9FcEQ7RVNmUSx5Qkp6RGMsRUFBQTtBTHdFdEI7RVNmUSx5QkpHYyxFQUFBO0FMWXRCO0VTZlEseUJKK0RjLEVBQUE7QUxoRHRCO0VTUlEseUJKbENnQztFSW1DaEMsY0pyQzBCLEVBQUE7QUw0Q2xDO0VTUlEseUJKMEJnQztFSXpCaEMsY0p1QjBCLEVBQUE7QUxoQmxDO0VTUlEseUJKc0ZnQztFSXJGaEMsY0ptRjBCLEVBQUE7QUw1RWxDO0VTQVEsdUNKNUVxQyxFQUFBO0FMNEU3QztFU0FRLHVDSmhCcUMsRUFBQTtBTGdCN0M7RVNBUSwwQ0o0Q3dDLEVBQUE7QUw1Q2hEO0VTT1EsdUNKL0NzQyxFQUFBO0FMd0M5QztFU09RLHVDSmFzQyxFQUFBO0FMcEI5QztFU09RLHlCSnlFd0IsRUFBQTtBTGhGaEM7RVNnQkksdUNKNUZ5QyxFQUFBO0FMNEU3QztFU2dCSSx1Q0poQ3lDLEVBQUE7QUxnQjdDO0VTZ0JJLDBDSjRCNEMsRUFBQTtBTDVDaEQ7RVN1QkksdUNKbkd5QyxFQUFBO0FMNEU3QztFU3VCSSx1Q0p2Q3lDLEVBQUE7QUxnQjdDO0VTdUJJLDBDSnFCNEMsRUFBQTtBTDVDaEQ7RVM2Qk0sZ0NKckYrQixFQUFBO0FMd0RyQztFUzZCTSxnQ0p6QitCLEVBQUE7QUxKckM7RVM2Qk0sZ0NKbUMrQixFQUFBO0FMaEVyQztFU2tDUSx5QkoxRjZCO0VJMkY3QixjSjlHYyxFQUFBO0FMMkV0QjtFU2tDUSx5Qko5QjZCO0VJK0I3QixjSmxEYyxFQUFBO0FMZXRCO0VTa0NRLHlCSjhCNkI7RUk3QjdCLGNKVWMsRUFBQTtBTDdDdEI7RVN3Q1UseUJKL0VtQjtFSWdGbkIsY0pwSFksRUFBQTtBTDJFdEI7RVN3Q1UseUJKbkJtQjtFSW9CbkIsY0p4RFksRUFBQTtBTGV0QjtFU3dDVSx5Qkp5Q21CO0VJeENuQixjSklZLEVBQUE7QUw3Q3RCO0VTK0NVLHlCSnZFUTtFSXdFUixjSjNIWSxFQUFBO0FMMkV0QjtFUytDVSx5QkpYUTtFSVlSLGNKL0RZLEVBQUE7QUxldEI7RVMrQ1UseUJKaURRO0VJaERSLGNKSFksRUFBQTtBTDdDdEI7RVNnRUksY0ozSWtCLEVBQUE7QUwyRXRCO0VTZ0VJLGNKL0VrQixFQUFBO0FMZXRCO0VTZ0VJLGNKbkJrQixFQUFBO0FMN0N0QjtFU3NFTSx5Qko5SWdCLEVBQUE7QUx3RXRCO0VTc0VNLHlCSmxGZ0IsRUFBQTtBTFl0QjtFU3NFTSx5Qkp0QmdCLEVBQUE7QUxoRHRCO0VTOEVJLDRCSnRJaUMsRUFBQTtBTHdEckM7RVM4RUksNEJKMUVpQyxFQUFBO0FMSnJDO0VTOEVJLDRCSmRpQyxFQUFBO0FMaEVyQztFU3lGRSx5QkpqS29CLEVBQUE7QUx3RXRCO0VTeUZFLHlCSnJHb0IsRUFBQTtBTFl0QjtFU3lGRSx5Qkp6Q29CLEVBQUE7QUxoRHRCO0VTeUdRLGNKbExrQixFQUFBO0FMeUUxQjtFU3lHUSxjSnRIa0IsRUFBQTtBTGExQjtFU3lHUSxjSjFEa0IsRUFBQTtBTC9DMUI7RVNnSFEseUJKdkpxQixFQUFBO0FMdUM3QjtFU2dIUSx5QkozRnFCLEVBQUE7QUxyQjdCO0VTZ0hRLHlCSi9CcUIsRUFBQTtBTGpGN0I7RVN1SFEseUJKOUpxQixFQUFBO0FMdUM3QjtFU3VIUSx5QkpsR3FCLEVBQUE7QUxyQjdCO0VTdUhRLHlCSnRDcUIsRUFBQTtBTGpGN0I7RVM4SFEsNkJBQTZCLEVBQUE7QVQ5SHJDO0VTOEhRLDZCQUE2QixFQUFBO0FUOUhyQztFUzhIUSw2QkFBNkIsRUFBQTtBVDlIckM7RVNxSVEsNkJBQTZCLEVBQUE7QVRySXJDO0VTcUlRLDZCQUE2QixFQUFBO0FUcklyQztFU3FJUSw2QkFBNkIsRUFBQTtBVHJJckM7RVM4SVUseUJKbEx5QixFQUFBO0FMb0NuQztFUzhJVSx5Qkp0SHlCLEVBQUE7QUx4Qm5DO0VTOElVLHlCSjFEeUIsRUFBQTtBTHBGbkM7RVNvSlkseUJKdkwyQixFQUFBO0FMbUN2QztFU29KWSx5QkozSDJCLEVBQUE7QUx6QnZDO0VTb0pZLHlCSi9EMkIsRUFBQTtBTHJGdkM7RVM2SlEseUJKbk9nQixFQUFBO0FMc0V4QjtFUzZKUSx5Qkp2S2dCLEVBQUE7QUxVeEI7RVM2SlEseUJKM0dnQixFQUFBO0FMbER4QjtFU29LUSx5Qko1T2MsRUFBQTtBTHdFdEI7RVNvS1EseUJKaExjLEVBQUE7QUxZdEI7RVNvS1EseUJKcEhjLEVBQUE7QUxoRHRCO0VTNktVLHlCSmxQVyxFQUFBO0FMcUVyQjtFUzZLVSx5Qkp0TFcsRUFBQTtBTFNyQjtFUzZLVSx5QkoxSFcsRUFBQTtBTG5EckI7RVN1TFUseUJKOVBhLEVBQUE7QUx1RXZCO0VTdUxVLHlCSmxNYSxFQUFBO0FMV3ZCO0VTdUxVLHlCSnRJYSxFQUFBO0FMakR2QjtFUzJNUSx5QkpoUmEsRUFBQTtBTHFFckI7RVMyTVEseUJKcE5hLEVBQUE7QUxTckI7RVMyTVEseUJKeEphLEVBQUE7QUxuRHJCO0VTa05RLHlCSjFSYyxFQUFBO0FMd0V0QjtFU2tOUSx5Qko5TmMsRUFBQTtBTFl0QjtFU2tOUSx5QkpsS2MsRUFBQTtBTGhEdEI7RVNpT0ksY0o1U2tCLEVBQUE7QUwyRXRCO0VTaU9JLGNKaFBrQixFQUFBO0FMZXRCO0VTaU9JLGNKcExrQixFQUFBO0FMN0N0QjtFU3VPTSx5QkovU2dCLEVBQUE7QUx3RXRCO0VTdU9NLHlCSm5QZ0IsRUFBQTtBTFl0QjtFU3VPTSx5Qkp2TGdCLEVBQUE7QUxoRHRCO0VTK09JLGNKdlRrQixFQUFBO0FMd0V0QjtFUytPSSxjSjNQa0IsRUFBQTtBTFl0QjtFUytPSSxjSi9Ma0IsRUFBQTtBTGhEdEI7RVNzUEksNEJKOVNpQyxFQUFBO0FMd0RyQztFU3NQSSw0QkpsUGlDLEVBQUE7QUxKckM7RVNzUEksNEJKdExpQyxFQUFBO0FMaEVyQztFU2dRSSx5QkpwUytCLEVBQUE7QUxvQ25DO0VTZ1FJLHlCSnhPK0IsRUFBQTtBTHhCbkM7RVNnUUkseUJKNUsrQixFQUFBO0FMcEZuQztFU3NRTSx5Qkp6U2lDLEVBQUE7QUxtQ3ZDO0VTc1FNLHlCSjdPaUMsRUFBQTtBTHpCdkM7RVNzUU0seUJKakxpQyxFQUFBO0FJd0wzQztFVC9WRSxnQkFBZ0I7RUFDaEIsdUJBQXVCO0VBQ3ZCLG1CQUFtQixFQUFBO0FBZ0ZqQjtFUzhSVSx5QkpuV1csRUFBQTtBTHFFckI7RVM4UlUseUJKdlNXLEVBQUE7QUxTckI7RVM4UlUseUJKM09XLEVBQUE7QUxuRHJCO0VTOFNJLGNKdFhrQixFQUFBO0FMd0V0QjtFUzhTSSxjSjFUa0IsRUFBQTtBTFl0QjtFUzhTSSxjSjlQa0IsRUFBQTtBTGhEdEI7RVM0VFEsY0pyWWtCLEVBQUE7QUx5RTFCO0VTNFRRLGNKelVrQixFQUFBO0FMYTFCO0VTNFRRLGNKN1FrQixFQUFBO0FML0MxQjtFU21VUSx5Qkp6V3lCLEVBQUE7QUxzQ2pDO0VTbVVRLHlCSjdTeUIsRUFBQTtBTHRCakM7RVNtVVEsc0JKalBzQixFQUFBO0FJcU5sQztFVGpURSxXQUQwRDtFQUUxRCxjQUY0QjtFQUc1QixrQkFINEM7RVNvVmxDLE1BQU07RUFDTixhQUFhO0VBQ2IsZ0NBQWdDLEVBQUE7QVQzVXhDO0lTOFVVLHlCSnBYdUIsRUFBQTtBTHNDakM7SVM4VVUseUJKeFR1QixFQUFBO0FMdEJqQztJUzhVVSxzQko1UG9CLEVBQUE7QUxsRjlCO0VTc1ZRLHlCSjNYNEIsRUFBQTtBTHFDcEM7RVNzVlEseUJKL1Q0QixFQUFBO0FMdkJwQztFU3NWUSx5QkpuUTRCLEVBQUE7QUlvTnhDO0VUalRFLFdBRDBEO0VBRTFELGNBRjRCO0VBRzVCLGtCQUg0QztFU3VXbEMsY0FBYztFQUNkLE1BQU07RUFDTixnQ0FBZ0MsRUFBQTtBVDlWeEM7SVNpV1UseUJKdFkwQixFQUFBO0FMcUNwQztJU2lXVSx5QkoxVTBCLEVBQUE7QUx2QnBDO0lTaVdVLHlCSjlRMEIsRUFBQTtBTG5GcEM7RVNtWE0sY0o1Ym9CLEVBQUE7QUx5RTFCO0VTbVhNLGNKaFlvQixFQUFBO0FMYTFCO0VTbVhNLGNKcFVvQixFQUFBO0FML0MxQjtFUzBYTSxjSnJjZ0IsRUFBQTtBTDJFdEI7RVMwWE0sY0p6WWdCLEVBQUE7QUxldEI7RVMwWE0sY0o3VWdCLEVBQUE7QUk2VDFCO0VBc0JNLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIseUJBQXlCO0VBQ3pCLFlBQVk7RUFDWixpQkFBaUIsRUFBQTtBVHBZbkI7RVM2WUksY0p0ZHNCLEVBQUE7QUx5RTFCO0VTNllJLGNKMVpzQixFQUFBO0FMYTFCO0VTNllJLGNKOVZzQixFQUFBO0FML0MxQjtFU3NaTSxjSmplZ0I7RUlrZWhCLHlCSnpiOEIsRUFBQTtBTGtDcEM7RVNzWk0sY0pyYWdCO0VJc2FoQix5Qko3WDhCLEVBQUE7QUwxQnBDO0VTc1pNLGNKeldnQjtFSTBXaEIseUJKalU4QixFQUFBO0FMdEZwQztFUzZaUSx5Qko5YnVCLEVBQUE7QUxpQy9CO0VTNlpRLHlCSmxZdUIsRUFBQTtBTDNCL0I7RVM2WlEseUJKdFV1QixFQUFBO0FJOFVuQztFQUNFLGtCQUFrQixFQUFBO0FBRHBCO0lBSUksa0JBQWtCO0lBQ2xCLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsY0FBYztJQUNkLFdBQVcsRUFBQTtBVDdhWDtNU2diRSx5Qkp2ZTJCO01Jd2UzQixjSjVmb0IsRUFBQTtBTDJFdEI7TVNnYkUseUJKM2EyQjtNSTRhM0IsY0poY29CLEVBQUE7QUxldEI7TVNnYkUseUJKL1cyQjtNSWdYM0IsY0pwWW9CLEVBQUE7QUl3WDFCO01BZ0JNLGlCQUFpQjtNQUNqQixhQUFhLEVBQUE7QVR0YmY7UVMwYk0sdUNKaGZpQyxFQUFBO0FMc0R2QztRUzBiTSx1Q0pwYmlDLEVBQUE7QUxOdkM7UVMwYk0sMENKeFhvQyxFQUFBO0FLcko5Qzs7RUFFRSxjQUFjO0VBQ2QsYUFBYTtFQUNiLGdCQUFnQixFQUFBO0FBSmxCOztJQU9JLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsZ0JBQWdCLEVBQUE7QVYwRWhCOztNVXZFRSx1Q0xMMkM7TUtNM0MsY0xMb0IsRUFBQTtBTDJFdEI7O01VdkVFLHVDTHVEMkM7TUt0RDNDLGNMdURvQixFQUFBO0FMZXRCOztNVXZFRSwwQ0xtSDhDO01LbEg5QyxjTG1Ib0IsRUFBQTtBS2hJMUI7O01BaUJNLGtCQUFrQjtNQUNsQixNQUFNO01BQ04sT0FBTyxFQUFBO0FWZ0VUO0VVcERNLGNMcEJnQixFQUFBO0FMd0V0QjtFVXBETSxjTHdDZ0IsRUFBQTtBTFl0QjtFVXBETSxjTG9HZ0IsRUFBQTtBTGhEdEI7RVUzQ00seUJMN0JnQixFQUFBO0FMd0V0QjtFVTNDTSx5QkwrQmdCLEVBQUE7QUxZdEI7RVUzQ00seUJMMkZnQixFQUFBO0FMaER0QjtFVXBDTSxjTHZDZ0IsRUFBQTtBTDJFdEI7RVVwQ00sY0xxQmdCLEVBQUE7QUxldEI7RVVwQ00sY0xpRmdCLEVBQUE7QUw3Q3RCO0VVM0JFLGNMN0NvQixFQUFBO0FMd0V0QjtFVTNCRSxjTGVvQixFQUFBO0FMWXRCO0VVM0JFLGNMMkVvQixFQUFBO0FMaER0QjtFVXJCSSxjTG5Ea0IsRUFBQTtBTHdFdEI7RVVyQkksY0xTa0IsRUFBQTtBTFl0QjtFVXJCSSxjTHFFa0IsRUFBQTtBTGhEdEI7RVVmTSx5Qkx6RGdCLEVBQUE7QUx3RXRCO0VVZk0seUJMR2dCLEVBQUE7QUxZdEI7RVVmTSx5QkwrRGdCLEVBQUE7QUxoRHRCO0VVQUksY0x4RWtCLEVBQUE7QUx3RXRCO0VVQUksY0xaa0IsRUFBQTtBTFl0QjtFVUFJLGNMZ0RrQixFQUFBO0FNbkkxQjtFQUNJLGtCQUFrQixFQUFBO0FBRHRCO0lBTVksVUFBVSxFQUFBO0FBTnRCO0lBV1EsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEIsRUFBQTtBQWJ0QztNQWdCWSxnQkFBZ0I7TUFDaEIsV0FBVztNQUNYLGdCQUFnQixFQUFBO0FBSzVCO0VBT1EsaUJBQWlCO0VBQ2pCLG1CQUFtQixFQUFBO0FYb0R2QjtJV3hEUSxjTmpCa0IsRUFBQTtBTHlFMUI7SVd4RFEsY04yQ2tCLEVBQUE7QUxhMUI7SVd4RFEsY051R2tCLEVBQUE7QU0zRzlCO0VBZ0JRLGFBQWE7RUFDYix1QkFBdUI7RUFDdkIsYUFBYTtFQUNiLFdBQVcsRUFBQTtBWHlDZjtJVy9DUSx5Qk5UNkIsRUFBQTtBTHdEckM7SVcvQ1EseUJObUQ2QixFQUFBO0FMSnJDO0lXL0NRLHlCTitHNkIsRUFBQTtBTTVIekM7RUEwQlEscUJBQXFCLEVBQUE7QVhrQ3pCO0lXcENRLGNOcENjLEVBQUE7QUx3RXRC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VEV1QixFQUFBO0FMdUM3QjtRY3pDTSx5QlQ4RHVCLEVBQUE7QUxyQjdCO1FjekNNLHlCVDBIdUIsRUFBQTtBU3BLakM7UUErQ1EsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLGdCQUFnQixFQUFBO0FBbkR4QjtVQXNEVSxrQkFBa0IsRUFBQTtBQXRENUI7VUEwRFUsbUJBQW1CLEVBQUE7QUNwQzdCO0VBQ0UscUJBQXFCO0VBQ3JCLDhCQUE4QztFQUM5QyxnQkFBZ0IsRUFBQTtBQUdsQjtFQUNFLHFCQUFxQjtFQUNyQixnQ0FBZ0Q7RUFDaEQsZ0JBQWdCLEVBQUE7QUFHbEI7RUFDRSxxQkFBcUI7RUFDckIsaUNBQWlEO0VBQ2pELGdCQUFnQixFQUFBO0FBR2xCO0VBQ0UscUJBQXFCO0VBQ3JCLDZCQUE2QztFQUM3QyxnQkFBZ0IsRUFBQTtBQUdsQjtFQUNFLHFCQUFxQjtFQUNyQixrQ0FBa0Q7RUFDbEQsZ0JBQWdCLEVBQUE7QUFJbEI7RUFDRSxpQ0FBaUM7RUFDakMsZUFBZSxFQUFBO0FBR2pCO0VBQ0UsaUNBQWlDO0VBQ2pDLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osYUFBYSxFQUFBO0FBSmY7SUFPSSwrREFBNkU7SUFDN0Usc0JBQXNCLEVBQUE7QUFSMUI7SUFZSSwrREFBNkU7SUFDN0Usc0JBQXNCLEVBQUE7QUFiMUI7SUFpQkksZ0VBQThFO0lBQzlFLHNCQUFzQixFQUFBO0FBbEIxQjtJQXNCSSxhQUFhO0lBQ2IsV0FBVztJQUNYLFlBQVksRUFBQTtBQUloQjtFQUtNLHNEQUF5RDtVQUF6RCw4Q0FBeUQsRUFBQSIsImZpbGUiOiJzcmMvc3R5bGVzLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAbWl4aW4gdGV4dC10cnVuY2F0ZSB7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbkBtaXhpbiB0ZXh0V3JhcCB7XHJcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xyXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcclxuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgbGluZS1icmVhazogc3RyaWN0O1xyXG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcclxuICAtbXMtaHlwaGVuczogYXV0bztcclxuICBoeXBoZW5zOiBhdXRvO1xyXG59XHJcbkBtaXhpbiBjb3ZlckJveCB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogMDtcclxuXHRsZWZ0OiAwO1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG5AbWl4aW4gYWJzICgkdG9wOiBhdXRvLCAkcmlnaHQ6IGF1dG8sICRib3R0b206IGF1dG8sICRsZWZ0OiBhdXRvKSB7XHJcbiAgdG9wOiAkdG9wO1xyXG4gIHJpZ2h0OiAkcmlnaHQ7XHJcbiAgYm90dG9tOiAkYm90dG9tO1xyXG4gIGxlZnQ6ICRsZWZ0O1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxufVxyXG5AbWl4aW4gY292ZXJJbWcge1xyXG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcblx0LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xyXG5cdC1vLWJhY2tncm91bmQtc2l6ZTogY292ZXI7XHJcblx0YmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xyXG59XHJcbkBtaXhpbiB2YWxpbmdCb3gge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6ICA1MCU7XHJcblx0bGVmdDogNTAlO1xyXG5cdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG59XHJcbkBtaXhpbiB1blNlbGVjdCB7XHJcblx0LXdlYmtpdC10b3VjaC1jb2xsb3V0OiBub25lO1xyXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xyXG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xyXG4gIHVzZXItc2VsZWN0OiBub25lO1xyXG59XHJcbkBtaXhpbiBtYXgxMTk5IHsgLy8gbWFrZXQgMTE3MVxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbWF4MTE3MCB7IC8vIG1ha2V0cyA5OTJcclxuICBAbWVkaWEgKG1heC13aWR0aDogMTE3MHB4KSB7IEBjb250ZW50OyB9XHJcbn1cclxuQG1peGluIG1heDk5MSB7IC8vIG1ha2V0cyA3NjJcclxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHsgQGNvbnRlbnQ7IH1cclxufVxyXG5AbWl4aW4gbWF4NzYxIHsgLy8gbWFrZXRzIDU3NlxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjFweCkgeyBAY29udGVudDsgfVxyXG59XHJcbkBtaXhpbiBtYXg1NzUgeyAvLyBtYWtldHMgNDAwXHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7IEBjb250ZW50OyB9XHJcbn1cclxuQG1peGluIG1vYmlsZSB7XHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDM5OXB4KSB7IEBjb250ZW50OyB9XHJcbn1cclxuQG1peGluIGljb0NlbnRlciB7XHJcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcclxufVxyXG5AbWl4aW4gcHNldWRvICgkZGlzcGxheTogYmxvY2ssICRwb3M6IGFic29sdXRlLCAkY29udGVudDogJycpe1xyXG4gIGNvbnRlbnQ6ICRjb250ZW50O1xyXG4gIGRpc3BsYXk6ICRkaXNwbGF5O1xyXG4gIHBvc2l0aW9uOiAkcG9zO1xyXG59XHJcblxyXG4vKlxyXG4qIEltcGxlbWVudGF0aW9uIG9mIHRoZW1lc1xyXG4qL1xyXG5AbWl4aW4gdGhlbWlmeSgkdGhlbWVzOiAkdGhlbWVzKSB7XHJcbiAgQGVhY2ggJHRoZW1lLCAkbWFwIGluICR0aGVtZXMge1xyXG4gICAgLnRoZW1lLSN7JHRoZW1lfSAmIHtcclxuICAgICAgJHRoZW1lLW1hcDogKCkgIWdsb2JhbDtcclxuICAgICAgQGVhY2ggJGtleSwgJHN1Ym1hcCBpbiAkbWFwIHtcclxuICAgICAgICAkdmFsdWU6IG1hcC1nZXQobWFwLWdldCgkdGhlbWVzLCAkdGhlbWUpLCAnI3ska2V5fScpO1xyXG4gICAgICAgICR0aGVtZS1tYXA6IG1hcC1tZXJnZSgkdGhlbWUtbWFwLCAoJGtleTogJHZhbHVlKSkgIWdsb2JhbDtcclxuICAgICAgfVxyXG4gICAgICBAY29udGVudDtcclxuICAgICAgJHRoZW1lLW1hcDogbnVsbCAhZ2xvYmFsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQGZ1bmN0aW9uIHRoZW1lZCgka2V5KSB7XHJcbiAgQHJldHVybiBtYXAtZ2V0KCR0aGVtZS1tYXAsICRrZXkpO1xyXG59XHJcbiIsIi8qXHJcbiogSW1wbGVtZW50YXRpb24gb2YgdGhlbWVzXHJcbiovXG5AaW1wb3J0IHVybCh+QG5nLXNlbGVjdC9uZy1zZWxlY3QvdGhlbWVzL2RlZmF1bHQudGhlbWUuY3NzKTtcbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gIC13ZWJraXQtYm94LXNpemluZzogaW5oZXJpdDtcbiAgLW1vei1ib3gtc2l6aW5nOiBpbmhlcml0O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIC13ZWJraXQtdG91Y2gtY29sbG91dDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lOyB9XG5cbmh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcbmEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcbmRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXG5iLCB1LCBpLCBjZW50ZXIsXG5kbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXG50YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCxcbmFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXG50aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuICBib3JkZXI6IDA7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgZm9udDogaW5oZXJpdDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9XG5cbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG5ib2R5IHtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxuXG5vbCwgdWwge1xuICBsaXN0LXN0eWxlOiBub25lOyB9XG5cbmJsb2NrcXVvdGUsIHEge1xuICBxdW90ZXM6IG5vbmU7IH1cblxuYmxvY2txdW90ZTpiZWZvcmUsIGJsb2NrcXVvdGU6YWZ0ZXIsXG5xOmJlZm9yZSwgcTphZnRlciB7XG4gIGNvbnRlbnQ6IG5vbmU7IH1cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDsgfVxuXG5pbnB1dCB7XG4gIG91dGxpbmU6IG5vbmU7IH1cbiAgaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxMDAwcHggd2hpdGUgaW5zZXQ7IH1cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG91dGxpbmU6IG5vbmU7IH1cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0OyB9XG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwOyB9XG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsgfVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyB9XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyB9XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgYTphY3RpdmUsIGE6aG92ZXIsIGE6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7IH1cblxuaSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG5iLCBzdHJvbmcge1xuICBmb250LXdlaWdodDogNzAwOyB9XG5cbmltZyB7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgYm9yZGVyOiAwOyB9XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuLnRoZW1lLWRhcmsgLmFwcC1jb250ZW50IC5wcmVsb2FkZXIgLmxvYWRpbmctYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDsgfVxuXG4udGhlbWUtZ3JheSAuYXBwLWNvbnRlbnQgLnByZWxvYWRlciAubG9hZGluZy1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDdjZjhkOyB9XG5cbi50aGVtZS13aGl0ZSAuYXBwLWNvbnRlbnQgLnByZWxvYWRlciAubG9hZGluZy1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDZjMTcyOyB9XG5cbmJ1dHRvbiB7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDEuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBoZWlnaHQ6IDQuMnJlbTsgfVxuICAudGhlbWUtZGFyayBidXR0b246ZGlzYWJsZWQ6bm90KC50cmFuc3BhcmVudC1idXR0b24pLCAudGhlbWUtZGFyayBidXR0b24uYmx1ZS1idXR0b25fcmVzZXQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM5Y2FkYjc7XG4gICAgY29sb3I6ICMxMTE5MjE7IH1cbiAgLnRoZW1lLWdyYXkgYnV0dG9uOmRpc2FibGVkOm5vdCgudHJhbnNwYXJlbnQtYnV0dG9uKSwgLnRoZW1lLWdyYXkgYnV0dG9uLmJsdWUtYnV0dG9uX3Jlc2V0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzk4NDhmO1xuICAgIGNvbG9yOiAjMWExYTFhOyB9XG4gIC50aGVtZS13aGl0ZSBidXR0b246ZGlzYWJsZWQ6bm90KC50cmFuc3BhcmVudC1idXR0b24pLCAudGhlbWUtd2hpdGUgYnV0dG9uLmJsdWUtYnV0dG9uX3Jlc2V0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBhNGFlO1xuICAgIGNvbG9yOiAjZmVmZWZlOyB9XG4gIC50aGVtZS1kYXJrIGJ1dHRvbjpkaXNhYmxlZDpub3QoLnRyYW5zcGFyZW50LWJ1dHRvbik6aG92ZXIsIC50aGVtZS1kYXJrIGJ1dHRvbi5ibHVlLWJ1dHRvbl9yZXNldDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2I3ZDFlMDsgfVxuICAudGhlbWUtZ3JheSBidXR0b246ZGlzYWJsZWQ6bm90KC50cmFuc3BhcmVudC1idXR0b24pOmhvdmVyLCAudGhlbWUtZ3JheSBidXR0b24uYmx1ZS1idXR0b25fcmVzZXQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNhMWFlYmI7IH1cbiAgLnRoZW1lLXdoaXRlIGJ1dHRvbjpkaXNhYmxlZDpub3QoLnRyYW5zcGFyZW50LWJ1dHRvbik6aG92ZXIsIC50aGVtZS13aGl0ZSBidXR0b24uYmx1ZS1idXR0b25fcmVzZXQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNhZWJlYzY7IH1cbiAgLnRoZW1lLWRhcmsgYnV0dG9uOmRpc2FibGVkOm5vdCgudHJhbnNwYXJlbnQtYnV0dG9uKTpmb2N1cywgLnRoZW1lLWRhcmsgYnV0dG9uLmJsdWUtYnV0dG9uX3Jlc2V0OmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTdiOWMyOyB9XG4gIC50aGVtZS1ncmF5IGJ1dHRvbjpkaXNhYmxlZDpub3QoLnRyYW5zcGFyZW50LWJ1dHRvbik6Zm9jdXMsIC50aGVtZS1ncmF5IGJ1dHRvbi5ibHVlLWJ1dHRvbl9yZXNldDpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzhhOTU5ZjsgfVxuICAudGhlbWUtd2hpdGUgYnV0dG9uOmRpc2FibGVkOm5vdCgudHJhbnNwYXJlbnQtYnV0dG9uKTpmb2N1cywgLnRoZW1lLXdoaXRlIGJ1dHRvbi5ibHVlLWJ1dHRvbl9yZXNldDpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2E3YjljMjsgfVxuICAudGhlbWUtZGFyayBidXR0b24uYmx1ZS1idXR0b246bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7XG4gICAgY29sb3I6ICMxMTE5MjE7IH1cbiAgLnRoZW1lLWdyYXkgYnV0dG9uLmJsdWUtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1O1xuICAgIGNvbG9yOiAjMWExYTFhOyB9XG4gIC50aGVtZS13aGl0ZSBidXR0b24uYmx1ZS1idXR0b246bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLnRoZW1lLWRhcmsgYnV0dG9uLmJsdWUtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODJkN2ZmOyB9XG4gIC50aGVtZS1ncmF5IGJ1dHRvbi5ibHVlLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzg2ZDZmZjsgfVxuICAudGhlbWUtd2hpdGUgYnV0dG9uLmJsdWUtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiM2ZmOyB9XG4gIC50aGVtZS1kYXJrIGJ1dHRvbi5ibHVlLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU5YjVmZDsgfVxuICAudGhlbWUtZ3JheSBidXR0b24uYmx1ZS1idXR0b246bm90KDpkaXNhYmxlZCk6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1ZmI2ZmM7IH1cbiAgLnRoZW1lLXdoaXRlIGJ1dHRvbi5ibHVlLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzM3OWZmYTsgfVxuICAudGhlbWUtZGFyayBidXR0b24uZ3JlZW4tYnV0dG9uOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNkYTlkO1xuICAgIGNvbG9yOiAjMTExOTIxOyB9XG4gIC50aGVtZS1ncmF5IGJ1dHRvbi5ncmVlbi1idXR0b246bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0N2NmOGQ7XG4gICAgY29sb3I6ICMxYTFhMWE7IH1cbiAgLnRoZW1lLXdoaXRlIGJ1dHRvbi5ncmVlbi1idXR0b246bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0NmMxNzI7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLnRoZW1lLWRhcmsgYnV0dG9uLmdyZWVuLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzhkZmNjNjsgfVxuICAudGhlbWUtZ3JheSBidXR0b24uZ3JlZW4tYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2JmNmM2OyB9XG4gIC50aGVtZS13aGl0ZSBidXR0b24uZ3JlZW4tYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWFkNTg2OyB9XG4gIC50aGVtZS1kYXJrIGJ1dHRvbi5ncmVlbi1idXR0b246bm90KDpkaXNhYmxlZCk6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2MmUwYjI7IH1cbiAgLnRoZW1lLWdyYXkgYnV0dG9uLmdyZWVuLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGM5ZTsgfVxuICAudGhlbWUtd2hpdGUgYnV0dG9uLmdyZWVuLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzUzYzc3YzsgfVxuICAudGhlbWUtZGFyayBidXR0b24udHVycXVvaXNlLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzRkZDBlMTtcbiAgICBjb2xvcjogIzExMTkyMTsgfVxuICAudGhlbWUtZ3JheSBidXR0b24udHVycXVvaXNlLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzNlYzVkNztcbiAgICBjb2xvcjogIzFhMWExYTsgfVxuICAudGhlbWUtd2hpdGUgYnV0dG9uLnR1cnF1b2lzZS1idXR0b246bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyNmI2Yzc7XG4gICAgY29sb3I6ICNmZWZlZmU7IH1cbiAgLnRoZW1lLWRhcmsgYnV0dG9uLnR1cnF1b2lzZS1idXR0b246bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM4N2Y0ZjU7IH1cbiAgLnRoZW1lLWdyYXkgYnV0dG9uLnR1cnF1b2lzZS1idXR0b246bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM3MmVkZmU7IH1cbiAgLnRoZW1lLXdoaXRlIGJ1dHRvbi50dXJxdW9pc2UtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTJjYmQ5OyB9XG4gIC50aGVtZS1kYXJrIGJ1dHRvbi50dXJxdW9pc2UtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJkNWU4OyB9XG4gIC50aGVtZS1ncmF5IGJ1dHRvbi50dXJxdW9pc2UtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTBkMGUxOyB9XG4gIC50aGVtZS13aGl0ZSBidXR0b24udHVycXVvaXNlLWJ1dHRvbjpub3QoOmRpc2FibGVkKTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzMxYmVjZjsgfVxuICBidXR0b24udHJhbnNwYXJlbnQtYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAudGhlbWUtZGFyayBidXR0b24udHJhbnNwYXJlbnQtYnV0dG9uIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiAwLjJyZW0gc29saWQgIzJiMzY0NDtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgYnV0dG9uLnRyYW5zcGFyZW50LWJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMC4ycmVtIHNvbGlkICMyZjM0Mzg7XG4gICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgIC50aGVtZS13aGl0ZSBidXR0b24udHJhbnNwYXJlbnQtYnV0dG9uIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiAwLjJyZW0gc29saWQgI2ViZWJlYjtcbiAgICAgIGNvbG9yOiAjNDM0NTRiOyB9XG4gICAgYnV0dG9uLnRyYW5zcGFyZW50LWJ1dHRvbiAuaWNvbiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvY29tcGxldGUtdGVzdHdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgICB3aWR0aDogMS43cmVtO1xuICAgICAgaGVpZ2h0OiAxLjdyZW07IH1cbiAgICAgIC50aGVtZS1kYXJrIGJ1dHRvbi50cmFuc3BhcmVudC1idXR0b24gLmljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSBidXR0b24udHJhbnNwYXJlbnQtYnV0dG9uIC5pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsgfVxuICAgICAgLnRoZW1lLXdoaXRlIGJ1dHRvbi50cmFuc3BhcmVudC1idXR0b24gLmljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDM0NTRiOyB9XG5cbi5pbnB1dC1ibG9jayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBtYXJnaW4tYm90dG9tOiAwLjRyZW07IH1cbiAgLmlucHV0LWJsb2NrIC53cmFwLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIG1pbi1oZWlnaHQ6IDIuNHJlbTsgfVxuICAuaW5wdXQtYmxvY2sgbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjRyZW07IH1cbiAgICAudGhlbWUtZGFyayAuaW5wdXQtYmxvY2sgbGFiZWwge1xuICAgICAgY29sb3I6ICM1NTY1NzY7IH1cbiAgICAudGhlbWUtZ3JheSAuaW5wdXQtYmxvY2sgbGFiZWwge1xuICAgICAgY29sb3I6ICM1NjVjNjI7IH1cbiAgICAudGhlbWUtd2hpdGUgLmlucHV0LWJsb2NrIGxhYmVsIHtcbiAgICAgIGNvbG9yOiAjYTBhNWFiOyB9XG4gIC5pbnB1dC1ibG9jayBpbnB1dFt0eXBlPSd0ZXh0J10sIC5pbnB1dC1ibG9jayBpbnB1dFt0eXBlPSdwYXNzd29yZCddLCAuaW5wdXQtYmxvY2sgc2VsZWN0IHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwIDFyZW07XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA0LjJyZW07IH1cbiAgICAudGhlbWUtZGFyayAuaW5wdXQtYmxvY2sgaW5wdXRbdHlwZT0ndGV4dCddLCAudGhlbWUtZGFyayAuaW5wdXQtYmxvY2sgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXSwgLnRoZW1lLWRhcmsgLmlucHV0LWJsb2NrIHNlbGVjdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTcxZTI3O1xuICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAudGhlbWUtZ3JheSAuaW5wdXQtYmxvY2sgaW5wdXRbdHlwZT0ndGV4dCddLCAudGhlbWUtZ3JheSAuaW5wdXQtYmxvY2sgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXSwgLnRoZW1lLWdyYXkgLmlucHV0LWJsb2NrIHNlbGVjdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxO1xuICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAudGhlbWUtd2hpdGUgLmlucHV0LWJsb2NrIGlucHV0W3R5cGU9J3RleHQnXSwgLnRoZW1lLXdoaXRlIC5pbnB1dC1ibG9jayBpbnB1dFt0eXBlPSdwYXNzd29yZCddLCAudGhlbWUtd2hpdGUgLmlucHV0LWJsb2NrIHNlbGVjdCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgLmlucHV0LWJsb2NrLnRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IGF1dG87IH1cbiAgICAuaW5wdXQtYmxvY2sudGV4dGFyZWEgdGV4dGFyZWEge1xuICAgICAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLCBzYW5zLXNlcmlmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNy41cmVtO1xuICAgICAgbWF4LWhlaWdodDogNy41cmVtO1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICByZXNpemU6IG5vbmU7IH1cbiAgICAgIC50aGVtZS1kYXJrIC5pbnB1dC1ibG9jay50ZXh0YXJlYSB0ZXh0YXJlYSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzFlMjc7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSAuaW5wdXQtYmxvY2sudGV4dGFyZWEgdGV4dGFyZWEge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxO1xuICAgICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC5pbnB1dC1ibG9jay50ZXh0YXJlYSB0ZXh0YXJlYSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gICAgICAgIGNvbG9yOiAjNDM0NTRiOyB9XG4gIC5pbnB1dC1ibG9jayAuZXJyb3ItYmxvY2sge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS40cmVtO1xuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICAgLnRoZW1lLWRhcmsgLmlucHV0LWJsb2NrIC5lcnJvci1ibG9jayB7XG4gICAgICBjb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS1ncmF5IC5pbnB1dC1ibG9jayAuZXJyb3ItYmxvY2sge1xuICAgICAgY29sb3I6ICNmZjUyNTI7IH1cbiAgICAudGhlbWUtd2hpdGUgLmlucHV0LWJsb2NrIC5lcnJvci1ibG9jayB7XG4gICAgICBjb2xvcjogI2ZmNTI1MjsgfVxuICAuaW5wdXQtYmxvY2sgLnN1Y2Nlc3MtYmxvY2sge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS40cmVtO1xuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICAgLnRoZW1lLWRhcmsgLmlucHV0LWJsb2NrIC5zdWNjZXNzLWJsb2NrIHtcbiAgICAgIGNvbG9yOiAjNWNkYTlkOyB9XG4gICAgLnRoZW1lLWdyYXkgLmlucHV0LWJsb2NrIC5zdWNjZXNzLWJsb2NrIHtcbiAgICAgIGNvbG9yOiAjNDdjZjhkOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5pbnB1dC1ibG9jayAuc3VjY2Vzcy1ibG9jayB7XG4gICAgICBjb2xvcjogIzQ2YzE3MjsgfVxuXG4udGhlbWUtZGFyayAuZXJyb3ItdGV4dCB7XG4gIGNvbG9yOiAjZmY1MjUyOyB9XG5cbi50aGVtZS1ncmF5IC5lcnJvci10ZXh0IHtcbiAgY29sb3I6ICNmZjUyNTI7IH1cblxuLnRoZW1lLXdoaXRlIC5lcnJvci10ZXh0IHtcbiAgY29sb3I6ICNmZjUyNTI7IH1cblxuaW5wdXRbdHlwZT0ncmFkaW8nXS5zdHlsZS1yYWRpbyArIGxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogNDAwO1xuICBwYWRkaW5nLWxlZnQ6IDIuNHJlbTtcbiAgLXdlYmtpdC10b3VjaC1jb2xsb3V0OiBub25lO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7IH1cbiAgLnRoZW1lLWRhcmsgaW5wdXRbdHlwZT0ncmFkaW8nXS5zdHlsZS1yYWRpbyArIGxhYmVsIHtcbiAgICBjb2xvcjogIzU1NjU3NjsgfVxuICAudGhlbWUtZ3JheSBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvICsgbGFiZWwge1xuICAgIGNvbG9yOiAjNTY1YzYyOyB9XG4gIC50aGVtZS13aGl0ZSBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvICsgbGFiZWwge1xuICAgIGNvbG9yOiAjYTBhNWFiOyB9XG5cbmlucHV0W3R5cGU9J3JhZGlvJ10uc3R5bGUtcmFkaW86bm90KGNoZWNrZWQpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBvcGFjaXR5OiAwOyB9XG4gIGlucHV0W3R5cGU9J3JhZGlvJ10uc3R5bGUtcmFkaW86bm90KGNoZWNrZWQpICsgbGFiZWwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvOm5vdChjaGVja2VkKSArIGxhYmVsOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC43cmVtO1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHdpZHRoOiAxLjRyZW07XG4gICAgaGVpZ2h0OiAxLjRyZW07IH1cbiAgICAudGhlbWUtZGFyayBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvOm5vdChjaGVja2VkKSArIGxhYmVsOmJlZm9yZSB7XG4gICAgICBib3JkZXI6IDAuMXJlbSBzb2xpZCAjNGRiMWZmOyB9XG4gICAgLnRoZW1lLWdyYXkgaW5wdXRbdHlwZT0ncmFkaW8nXS5zdHlsZS1yYWRpbzpub3QoY2hlY2tlZCkgKyBsYWJlbDpiZWZvcmUge1xuICAgICAgYm9yZGVyOiAwLjFyZW0gc29saWQgIzQyYTVmNTsgfVxuICAgIC50aGVtZS13aGl0ZSBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvOm5vdChjaGVja2VkKSArIGxhYmVsOmJlZm9yZSB7XG4gICAgICBib3JkZXI6IDAuMXJlbSBzb2xpZCAjMmM5NWYxOyB9XG4gIGlucHV0W3R5cGU9J3JhZGlvJ10uc3R5bGUtcmFkaW86bm90KGNoZWNrZWQpICsgbGFiZWw6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDFyZW07XG4gICAgbGVmdDogMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiAwLjhyZW07XG4gICAgaGVpZ2h0OiAwLjhyZW07IH1cbiAgICAudGhlbWUtZGFyayBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvOm5vdChjaGVja2VkKSArIGxhYmVsOmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cbiAgICAudGhlbWUtZ3JheSBpbnB1dFt0eXBlPSdyYWRpbyddLnN0eWxlLXJhZGlvOm5vdChjaGVja2VkKSArIGxhYmVsOmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cbiAgICAudGhlbWUtd2hpdGUgaW5wdXRbdHlwZT0ncmFkaW8nXS5zdHlsZS1yYWRpbzpub3QoY2hlY2tlZCkgKyBsYWJlbDphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbmlucHV0W3R5cGU9J3JhZGlvJ10uc3R5bGUtcmFkaW86Y2hlY2tlZCArIGxhYmVsOmFmdGVyIHtcbiAgb3BhY2l0eTogMTsgfVxuXG5pbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94ICsgbGFiZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHBhZGRpbmctbGVmdDogMy42cmVtO1xuICAtd2Via2l0LXRvdWNoLWNvbGxvdXQ6IG5vbmU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTsgfVxuICAudGhlbWUtZGFyayBpbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94ICsgbGFiZWwge1xuICAgIGNvbG9yOiAjNTU2NTc2OyB9XG4gIC50aGVtZS1ncmF5IGlucHV0W3R5cGU9J2NoZWNrYm94J10uc3R5bGUtY2hlY2tib3ggKyBsYWJlbCB7XG4gICAgY29sb3I6ICM1NjVjNjI7IH1cbiAgLnRoZW1lLXdoaXRlIGlucHV0W3R5cGU9J2NoZWNrYm94J10uc3R5bGUtY2hlY2tib3ggKyBsYWJlbCB7XG4gICAgY29sb3I6ICNhMGE1YWI7IH1cblxuaW5wdXRbdHlwZT0nY2hlY2tib3gnXS5zdHlsZS1jaGVja2JveDpub3QoY2hlY2tlZCkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxLjZyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuOyB9XG4gIGlucHV0W3R5cGU9J2NoZWNrYm94J10uc3R5bGUtY2hlY2tib3g6bm90KGNoZWNrZWQpICsgbGFiZWwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICBpbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94Om5vdChjaGVja2VkKSArIGxhYmVsOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDEuNnJlbTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgd2lkdGg6IDEuNHJlbTtcbiAgICBoZWlnaHQ6IDEuNHJlbTsgfVxuICAgIC50aGVtZS1kYXJrIGlucHV0W3R5cGU9J2NoZWNrYm94J10uc3R5bGUtY2hlY2tib3g6bm90KGNoZWNrZWQpICsgbGFiZWw6YmVmb3JlIHtcbiAgICAgIGJvcmRlcjogMC4xcmVtIHNvbGlkICM0ZGIxZmY7IH1cbiAgICAudGhlbWUtZ3JheSBpbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94Om5vdChjaGVja2VkKSArIGxhYmVsOmJlZm9yZSB7XG4gICAgICBib3JkZXI6IDAuMXJlbSBzb2xpZCAjNDJhNWY1OyB9XG4gICAgLnRoZW1lLXdoaXRlIGlucHV0W3R5cGU9J2NoZWNrYm94J10uc3R5bGUtY2hlY2tib3g6bm90KGNoZWNrZWQpICsgbGFiZWw6YmVmb3JlIHtcbiAgICAgIGJvcmRlcjogMC4xcmVtIHNvbGlkICMyYzk1ZjE7IH1cblxuaW5wdXRbdHlwZT0nY2hlY2tib3gnXS5zdHlsZS1jaGVja2JveDpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHtcbiAgYmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2NvbXBsZXRlLXRlc3R3YWxsZXQuc3ZnKTsgfVxuICAudGhlbWUtZGFyayBpbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94OmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cbiAgLnRoZW1lLWdyYXkgaW5wdXRbdHlwZT0nY2hlY2tib3gnXS5zdHlsZS1jaGVja2JveDpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG4gIC50aGVtZS13aGl0ZSBpbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94OmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgLnN3aXRjaCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IH1cblxuLnRoZW1lLWdyYXkgLnN3aXRjaCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IH1cblxuLnRoZW1lLXdoaXRlIC5zd2l0Y2gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1kYXJrIC5zd2l0Y2ggLmNpcmNsZS5vbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgLnN3aXRjaCAuY2lyY2xlLm9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgLnN3aXRjaCAuY2lyY2xlLm9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayAuc3dpdGNoIC5jaXJjbGUub2ZmIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSAuc3dpdGNoIC5jaXJjbGUub2ZmIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU2NWM2MjsgfVxuXG4udGhlbWUtd2hpdGUgLnN3aXRjaCAuY2lyY2xlLm9mZiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhMGE1YWI7IH1cblxuLnRhYmxlLXRvb2x0aXAge1xuICBwYWRkaW5nOiAxcmVtIDJyZW07IH1cbiAgLnRoZW1lLWRhcmsgLnRhYmxlLXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6ICM0MjUwNWY7XG4gICAgYm94LXNoYWRvdzogMCAwIDFyZW0gcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwIHtcbiAgICBiYWNrZ3JvdW5kOiAjM2U0NjRjO1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcmVtIHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAudGhlbWUtd2hpdGUgLnRhYmxlLXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm94LXNoYWRvdzogMCAwIDFyZW0gcmdiYSgxMjAsIDEyMCwgMTIwLCAwLjUpO1xuICAgIGNvbG9yOiAjNDM0NTRiOyB9XG4gIC50YWJsZS10b29sdGlwIC50b29sdGlwLWlubmVyIHtcbiAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMS44cmVtO1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgfVxuICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcCB7XG4gICAgbWFyZ2luLXRvcDogLTFyZW07IH1cbiAgICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcDphZnRlciB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtMXJlbTtcbiAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC41cmVtKTtcbiAgICAgIGJvcmRlci13aWR0aDogMC41cmVtO1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC10b3A6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICM0MjUwNWYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wOmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjM2U0NjRjIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC10b3A6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICNmZmZmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cbiAgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC10b3AtbGVmdCB7XG4gICAgbWFyZ2luLXRvcDogLTFyZW07IH1cbiAgICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcC1sZWZ0OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC0xcmVtO1xuICAgICAgbGVmdDogMC43cmVtO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkOyB9XG4gICAgICAudGhlbWUtZGFyayAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcC1sZWZ0OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDI1MDVmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM0MjUwNWY7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wLWxlZnQ6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICMzZTQ2NGMgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzNlNDY0YzsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wLWxlZnQ6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICNmZmZmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZmZmZjsgfVxuICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcC1yaWdodCB7XG4gICAgbWFyZ2luLXRvcDogLTFyZW07IH1cbiAgICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcC1yaWdodDphZnRlciB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtMXJlbTtcbiAgICAgIHJpZ2h0OiAwLjdyZW07XG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7IH1cbiAgICAgIC50aGVtZS1kYXJrIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wLXJpZ2h0OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDI1MDVmICM0MjUwNWYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wLXJpZ2h0OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjM2U0NjRjICMzZTQ2NGMgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXRvcC1yaWdodDphZnRlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZmZmZiAjZmZmZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50OyB9XG4gIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tIHtcbiAgICBtYXJnaW4tdG9wOiAxcmVtOyB9XG4gICAgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1ib3R0b206YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0xcmVtO1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSAwLjVyZW0pO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkOyB9XG4gICAgICAudGhlbWUtZGFyayAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLWJvdHRvbTpiZWZvcmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM0MjUwNWYgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzNlNDY0YyB0cmFuc3BhcmVudDsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZmZmZiB0cmFuc3BhcmVudDsgfVxuICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLWJvdHRvbS1sZWZ0IHtcbiAgICBtYXJnaW4tdG9wOiAxcmVtOyB9XG4gICAgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTFyZW07XG4gICAgICBsZWZ0OiAwLjdyZW07XG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7IH1cbiAgICAgIC50aGVtZS1kYXJrIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNDI1MDVmICM0MjUwNWY7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjM2U0NjRjICMzZTQ2NGM7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZmZmZiAjZmZmZmZmOyB9XG4gIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tLXJpZ2h0IHtcbiAgICBtYXJnaW4tdG9wOiAxcmVtOyB9XG4gICAgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1ib3R0b20tcmlnaHQ6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0xcmVtO1xuICAgICAgcmlnaHQ6IDAuN3JlbTtcbiAgICAgIGJvcmRlci13aWR0aDogMC41cmVtO1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1ib3R0b20tcmlnaHQ6YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjNDI1MDVmICM0MjUwNWYgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzNlNDY0YyAjM2U0NjRjIHRyYW5zcGFyZW50OyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1ib3R0b20tcmlnaHQ6YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZmZmZmZmICNmZmZmZmYgdHJhbnNwYXJlbnQ7IH1cbiAgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1sZWZ0IHtcbiAgICBtYXJnaW4tbGVmdDogLTFyZW07IH1cbiAgICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLWxlZnQ6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogY2FsYyg1MCUgLSAwLjVyZW0pO1xuICAgICAgcmlnaHQ6IC0xcmVtO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkOyB9XG4gICAgICAudGhlbWUtZGFyayAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLWxlZnQ6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM0MjUwNWY7IH1cbiAgICAgIC50aGVtZS1ncmF5IC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtbGVmdDphZnRlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzNlNDY0YzsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtbGVmdDphZnRlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZmZmZjsgfVxuICAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXJpZ2h0IHtcbiAgICBtYXJnaW4tbGVmdDogMXJlbTsgfVxuICAgIC50YWJsZS10b29sdGlwLm5nLXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gMC41cmVtKTtcbiAgICAgIGxlZnQ6IC0xcmVtO1xuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkOyB9XG4gICAgICAudGhlbWUtZGFyayAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzQyNTA1ZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfVxuICAgICAgLnRoZW1lLWdyYXkgLnRhYmxlLXRvb2x0aXAubmctdG9vbHRpcC1yaWdodDpiZWZvcmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICMzZTQ2NGMgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudGFibGUtdG9vbHRpcC5uZy10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgI2ZmZmZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsgfVxuXG4udGFibGUtdG9vbHRpcC1kaW1lbnNpb25zIC50b29sdGlwLWlubmVyIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIG1heC13aWR0aDogMjByZW07XG4gIG1heC1oZWlnaHQ6IDEwcmVtOyB9XG5cbi5iYWxhbmNlLXRvb2x0aXAge1xuICBwYWRkaW5nOiAxLjNyZW07IH1cbiAgLnRoZW1lLWRhcmsgLmJhbGFuY2UtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogIzQyNTA1ZjtcbiAgICBib3gtc2hhZG93OiAwIDAgMXJlbSByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgLnRoZW1lLWdyYXkgLmJhbGFuY2UtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogIzNlNDY0YztcbiAgICBib3gtc2hhZG93OiAwIDAgMXJlbSByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgLnRoZW1lLXdoaXRlIC5iYWxhbmNlLXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm94LXNoYWRvdzogMCAwIDFyZW0gcmdiYSgxMjAsIDEyMCwgMTIwLCAwLjUpO1xuICAgIGNvbG9yOiAjNDM0NTRiOyB9XG4gIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmb250LXNpemU6IDEuM3JlbTsgfVxuICAgIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmF2YWlsYWJsZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxLjdyZW07IH1cbiAgICAgIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmF2YWlsYWJsZSBiIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmxvY2tlZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwLjdyZW07IH1cbiAgICAgIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmxvY2tlZCBiIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmxpbmsge1xuICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICAudGhlbWUtZGFyayAuYmFsYW5jZS10b29sdGlwIC50b29sdGlwLWlubmVyIC5saW5rIHtcbiAgICAgICAgY29sb3I6ICM0ZGIxZmY7IH1cbiAgICAgIC50aGVtZS1ncmF5IC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmxpbmsge1xuICAgICAgICBjb2xvcjogIzQyYTVmNTsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC5iYWxhbmNlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmxpbmsge1xuICAgICAgICBjb2xvcjogIzJjOTVmMTsgfVxuICAuYmFsYW5jZS10b29sdGlwLm5nLXRvb2x0aXAtdG9wIHtcbiAgICBtYXJnaW4tdG9wOiAtMXJlbTsgfVxuICAuYmFsYW5jZS10b29sdGlwLm5nLXRvb2x0aXAtYm90dG9tIHtcbiAgICBtYXJnaW4tdG9wOiAxcmVtOyB9XG4gIC5iYWxhbmNlLXRvb2x0aXAubmctdG9vbHRpcC1sZWZ0IHtcbiAgICBtYXJnaW4tbGVmdDogLTFyZW07IH1cbiAgLmJhbGFuY2UtdG9vbHRpcC5uZy10b29sdGlwLXJpZ2h0IHtcbiAgICBtYXJnaW4tbGVmdDogMXJlbTsgfVxuXG4uYWNjb3VudC10b29sdGlwIC50b29sdGlwLWlubmVyIHtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgbWF4LXdpZHRoOiAxOHJlbTsgfVxuXG4uY29tbWVudC10b29sdGlwIC50b29sdGlwLWlubmVyIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIG1heC13aWR0aDogNTByZW07XG4gIG1heC1oZWlnaHQ6IDI1cmVtOyB9XG5cbi51cGRhdGUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDEuNXJlbTsgfVxuICAudGhlbWUtZGFyayAudXBkYXRlLXRvb2x0aXAge1xuICAgIGJhY2tncm91bmQ6ICM0MjUwNWY7XG4gICAgYm94LXNoYWRvdzogMCAwIDFyZW0gcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gIC50aGVtZS1ncmF5IC51cGRhdGUtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogIzNlNDY0YztcbiAgICBib3gtc2hhZG93OiAwIDAgMXJlbSByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgLnRoZW1lLXdoaXRlIC51cGRhdGUtdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBib3gtc2hhZG93OiAwIDAgMXJlbSByZ2JhKDEyMCwgMTIwLCAxMjAsIDAuNSk7XG4gICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgLnRoZW1lLWRhcmsgLnVwZGF0ZS10b29sdGlwLmltcG9ydGFudCB7XG4gICAgYmFja2dyb3VuZDogIzVmMmIxMTtcbiAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAudGhlbWUtZ3JheSAudXBkYXRlLXRvb2x0aXAuaW1wb3J0YW50IHtcbiAgICBiYWNrZ3JvdW5kOiAjNTUyNDBkO1xuICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAuaW1wb3J0YW50IHtcbiAgICBiYWNrZ3JvdW5kOiAjZWY2YzAwO1xuICAgIGNvbG9yOiAjZmZmZmZmOyB9XG4gIC50aGVtZS1kYXJrIC51cGRhdGUtdG9vbHRpcC5pbXBvcnRhbnQubmctdG9vbHRpcC1sZWZ0LWJvdHRvbTphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNWYyYjExICM1ZjJiMTE7IH1cbiAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLmltcG9ydGFudC5uZy10b29sdGlwLWxlZnQtYm90dG9tOmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM1NTI0MGQgIzU1MjQwZDsgfVxuICAudGhlbWUtd2hpdGUgLnVwZGF0ZS10b29sdGlwLmltcG9ydGFudC5uZy10b29sdGlwLWxlZnQtYm90dG9tOmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNlZjZjMDAgI2VmNmMwMDsgfVxuICAudGhlbWUtZGFyayAudXBkYXRlLXRvb2x0aXAuaW1wb3J0YW50Lm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tOmJlZm9yZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjNWYyYjExICM1ZjJiMTEgdHJhbnNwYXJlbnQ7IH1cbiAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLmltcG9ydGFudC5uZy10b29sdGlwLXJpZ2h0LWJvdHRvbTpiZWZvcmUge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzU1MjQwZCAjNTUyNDBkIHRyYW5zcGFyZW50OyB9XG4gIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAuaW1wb3J0YW50Lm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tOmJlZm9yZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZWY2YzAwICNlZjZjMDAgdHJhbnNwYXJlbnQ7IH1cbiAgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsIHtcbiAgICBwYWRkaW5nOiAyLjVyZW07IH1cbiAgICAudGhlbWUtZGFyayAudXBkYXRlLXRvb2x0aXAuY3JpdGljYWwge1xuICAgICAgYmFja2dyb3VuZDogIzVmMWQxZDtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsIHtcbiAgICAgIGJhY2tncm91bmQ6ICM0YzE5MTk7XG4gICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAuY3JpdGljYWwge1xuICAgICAgYmFja2dyb3VuZDogI2U1MzkzNTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmOyB9XG4gICAgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsIC50b29sdGlwLWlubmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIC50aGVtZS1kYXJrIC51cGRhdGUtdG9vbHRpcC5jcml0aWNhbC5uZy10b29sdGlwLWxlZnQtYm90dG9tOmFmdGVyIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzVmMWQxZCAjNWYxZDFkOyB9XG4gICAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsLm5nLXRvb2x0aXAtbGVmdC1ib3R0b206YWZ0ZXIge1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjNGMxOTE5ICM0YzE5MTk7IH1cbiAgICAudGhlbWUtd2hpdGUgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsLm5nLXRvb2x0aXAtbGVmdC1ib3R0b206YWZ0ZXIge1xuICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZTUzOTM1ICNlNTM5MzU7IH1cbiAgICAudGhlbWUtZGFyayAudXBkYXRlLXRvb2x0aXAuY3JpdGljYWwubmctdG9vbHRpcC1yaWdodC1ib3R0b206YmVmb3JlIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzVmMWQxZCAjNWYxZDFkIHRyYW5zcGFyZW50OyB9XG4gICAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLmNyaXRpY2FsLm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tOmJlZm9yZSB7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50ICM0YzE5MTkgIzRjMTkxOSB0cmFuc3BhcmVudDsgfVxuICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAuY3JpdGljYWwubmctdG9vbHRpcC1yaWdodC1ib3R0b206YmVmb3JlIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgI2U1MzkzNSAjZTUzOTM1IHRyYW5zcGFyZW50OyB9XG4gIC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciB7XG4gICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IH1cbiAgICAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLnN0YW5kYXJkLXVwZGF0ZSB7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07IH1cbiAgICAgIC50aGVtZS1kYXJrIC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuc3RhbmRhcmQtdXBkYXRlIHtcbiAgICAgICAgY29sb3I6ICM0ZGIxZmY7IH1cbiAgICAgIC50aGVtZS1ncmF5IC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuc3RhbmRhcmQtdXBkYXRlIHtcbiAgICAgICAgY29sb3I6ICM0MmE1ZjU7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLnN0YW5kYXJkLXVwZGF0ZSB7XG4gICAgICAgIGNvbG9yOiAjMmM5NWYxOyB9XG4gICAgLnVwZGF0ZS10b29sdGlwIC50b29sdGlwLWlubmVyIC5pbXBvcnRhbnQtdXBkYXRlIHtcbiAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDIuN3JlbTsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnVwZGF0ZS10b29sdGlwIC50b29sdGlwLWlubmVyIC5pbXBvcnRhbnQtdXBkYXRlIHtcbiAgICAgICAgY29sb3I6ICNmZjZmMDA7IH1cbiAgICAgIC50aGVtZS1ncmF5IC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuaW1wb3J0YW50LXVwZGF0ZSB7XG4gICAgICAgIGNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnVwZGF0ZS10b29sdGlwIC50b29sdGlwLWlubmVyIC5pbXBvcnRhbnQtdXBkYXRlIHtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7IH1cbiAgICAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmNyaXRpY2FsLXVwZGF0ZSB7XG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLndyb25nLXRpbWUge1xuICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICBsaW5lLWhlaWdodDogMi43cmVtOyB9XG4gICAgICAudGhlbWUtZGFyayAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLndyb25nLXRpbWUge1xuICAgICAgICBjb2xvcjogI2ZmNmYwMDsgfVxuICAgICAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwIC50b29sdGlwLWlubmVyIC53cm9uZy10aW1lIHtcbiAgICAgICAgY29sb3I6ICNmZjZmMDA7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLndyb25nLXRpbWUge1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjsgfVxuICAgIC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuaWNvbiB7XG4gICAgICBtYXJnaW46IDEuNXJlbSAwO1xuICAgICAgd2lkdGg6IDVyZW07XG4gICAgICBoZWlnaHQ6IDVyZW07IH1cbiAgICAgIC50aGVtZS1kYXJrIC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuaWNvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cbiAgICAgIC50aGVtZS1ncmF5IC51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuaWNvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAgLnRvb2x0aXAtaW5uZXIgLmljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9XG4gIC51cGRhdGUtdG9vbHRpcC5uZy10b29sdGlwLWxlZnQtYm90dG9tIHtcbiAgICBtYXJnaW4tbGVmdDogLTEuNXJlbTsgfVxuICAgIC51cGRhdGUtdG9vbHRpcC5uZy10b29sdGlwLWxlZnQtYm90dG9tOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDAuNnJlbTtcbiAgICAgIHJpZ2h0OiAtMXJlbTtcbiAgICAgIGJvcmRlci13aWR0aDogMC41cmVtO1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnVwZGF0ZS10b29sdGlwLm5nLXRvb2x0aXAtbGVmdC1ib3R0b206YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM0MjUwNWYgIzQyNTA1ZjsgfVxuICAgICAgLnRoZW1lLWdyYXkgLnVwZGF0ZS10b29sdGlwLm5nLXRvb2x0aXAtbGVmdC1ib3R0b206YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMzZTQ2NGMgIzNlNDY0YzsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC51cGRhdGUtdG9vbHRpcC5uZy10b29sdGlwLWxlZnQtYm90dG9tOmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmZmZmZmICNmZmZmZmY7IH1cbiAgLnVwZGF0ZS10b29sdGlwLm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tIHtcbiAgICBtYXJnaW4tbGVmdDogMS41cmVtOyB9XG4gICAgLnVwZGF0ZS10b29sdGlwLm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwLjZyZW07XG4gICAgICBsZWZ0OiAtMXJlbTtcbiAgICAgIGJvcmRlci13aWR0aDogMC41cmVtO1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnVwZGF0ZS10b29sdGlwLm5nLXRvb2x0aXAtcmlnaHQtYm90dG9tOmJlZm9yZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIzQyNTA1ZiAjNDI1MDVmIHRyYW5zcGFyZW50OyB9XG4gICAgICAudGhlbWUtZ3JheSAudXBkYXRlLXRvb2x0aXAubmctdG9vbHRpcC1yaWdodC1ib3R0b206YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjM2U0NjRjICMzZTQ2NGMgdHJhbnNwYXJlbnQ7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAudXBkYXRlLXRvb2x0aXAubmctdG9vbHRpcC1yaWdodC1ib3R0b206YmVmb3JlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjZmZmZmZmICNmZmZmZmYgdHJhbnNwYXJlbnQ7IH1cblxuLm5neC1jb250ZXh0bWVudSAuZHJvcGRvd24tbWVudSB7XG4gIGJvcmRlcjogbm9uZTtcbiAgcGFkZGluZzogMDsgfVxuICAudGhlbWUtZGFyayAubmd4LWNvbnRleHRtZW51IC5kcm9wZG93bi1tZW51IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzNjQ0O1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcmVtIHJnYmEoMCwgMCwgMCwgMC41KTsgfVxuICAudGhlbWUtZ3JheSAubmd4LWNvbnRleHRtZW51IC5kcm9wZG93bi1tZW51IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxO1xuICAgIGJveC1zaGFkb3c6IDAgMCAxcmVtIHJnYmEoMCwgMCwgMCwgMC41KTsgfVxuICAudGhlbWUtd2hpdGUgLm5neC1jb250ZXh0bWVudSAuZHJvcGRvd24tbWVudSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDtcbiAgICBib3gtc2hhZG93OiAwIDAgMXJlbSByZ2JhKDEyMCwgMTIwLCAxMjAsIDAuNSk7IH1cblxuLm5neC1jb250ZXh0bWVudSBsaSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogT3BlblNhbnMsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuLm5neC1jb250ZXh0bWVudSBhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAuNWVtIDFlbTsgfVxuICAudGhlbWUtZGFyayAubmd4LWNvbnRleHRtZW51IGEge1xuICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gIC50aGVtZS1ncmF5IC5uZ3gtY29udGV4dG1lbnUgYSB7XG4gICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgLnRoZW1lLXdoaXRlIC5uZ3gtY29udGV4dG1lbnUgYSB7XG4gICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgLnRoZW1lLWRhcmsgLm5neC1jb250ZXh0bWVudSBhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2O1xuICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gIC50aGVtZS1ncmF5IC5uZ3gtY29udGV4dG1lbnUgYTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzUxNTk2MDtcbiAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAudGhlbWUtd2hpdGUgLm5neC1jb250ZXh0bWVudSBhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCB7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdC5uZy1zZWxlY3Qtc2luZ2xlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLXZhbHVlIHtcbiAgICBsaW5lLWhlaWdodDogMS44cmVtOyB9XG4gIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgcGFkZGluZzogMCAxcmVtO1xuICAgIGhlaWdodDogNC4ycmVtOyB9XG4gICAgLnRoZW1lLWRhcmsgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1zZWxlY3QtY29udGFpbmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzFlMjc7XG4gICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgIC50aGVtZS1ncmF5IC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxO1xuICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAudGhlbWUtd2hpdGUgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1zZWxlY3QtY29udGFpbmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gICAgICBjb2xvcjogIzQzNDU0YjsgfVxuICAgIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy1pbnB1dCB7XG4gICAgICAgIHRvcDogYXV0bzsgfVxuICAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIHtcbiAgICBib3JkZXI6IG5vbmU7IH1cbiAgICAudGhlbWUtZGFyayAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzFlMjc7IH1cbiAgICAudGhlbWUtZ3JheSAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTJkMzE7IH1cbiAgICAudGhlbWUtd2hpdGUgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OyB9XG4gICAgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbiB7XG4gICAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICAgIHBhZGRpbmc6IDFyZW07IH1cbiAgICAgIC50aGVtZS1kYXJrIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTcxZTI3O1xuICAgICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgICAgLnRoZW1lLWdyYXkgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTJkMzE7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gICAgICAgIGNvbG9yOiAjNDM0NTRiOyB9XG4gICAgICAudGhlbWUtZGFyayAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1tYXJrZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU4LCA2OSwgODUsIDAuNSk7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1tYXJrZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU4LCA2MiwgNjYsIDAuNSk7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbi5uZy1vcHRpb24tbWFya2VkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDI0MCwgMjQwLCAwLjUpO1xuICAgICAgICBjb2xvcjogIzQzNDU0YjsgfVxuICAgICAgLnRoZW1lLWRhcmsgLm5nLXNlbGVjdC5jdXN0b20tc2VsZWN0IC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbi5uZy1vcHRpb24tc2VsZWN0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQzLCA1NCwgNjgsIDAuNSk7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzcsIDQwLCA0MywgMC41KTtcbiAgICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAgIC50aGVtZS13aGl0ZSAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjI0LCAyMjQsIDIyNCwgMC41KTtcbiAgICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgICAubmctc2VsZWN0LmN1c3RvbS1zZWxlY3QgLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB3aWR0aDogMXJlbTtcbiAgICAgIGhlaWdodDogMXJlbTsgfVxuICAgIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICAgIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2O1xuICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgIGJvcmRlcjogMC4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTsgfVxuICAgIC5uZy1zZWxlY3QuY3VzdG9tLXNlbGVjdCAubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2OyB9XG5cbi50aGVtZS1kYXJrIGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsLCAudGhlbWUtZGFyayBhcHAtY29uZmlybS1tb2RhbCAubW9kYWwge1xuICBiYWNrZ3JvdW5kOiB1cmwofnNyYy9hc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtZGFyay5wbmcpO1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtbW9kYWwtY29udGFpbmVyIC5tb2RhbCwgLnRoZW1lLWdyYXkgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIHtcbiAgYmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLWdyYXkucG5nKTtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsLCAudGhlbWUtd2hpdGUgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIHtcbiAgYmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLXdoaXRlLnBuZyk7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5jb250ZW50IC5pY29uLmVycm9yLCAudGhlbWUtZGFyayBhcHAtY29uZmlybS1tb2RhbCAubW9kYWwgLmNvbnRlbnQgLmljb24uZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5jb250ZW50IC5pY29uLmVycm9yLCAudGhlbWUtZ3JheSBhcHAtY29uZmlybS1tb2RhbCAubW9kYWwgLmNvbnRlbnQgLmljb24uZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtbW9kYWwtY29udGFpbmVyIC5tb2RhbCAuY29udGVudCAuaWNvbi5lcnJvciwgLnRoZW1lLXdoaXRlIGFwcC1jb25maXJtLW1vZGFsIC5tb2RhbCAuY29udGVudCAuaWNvbi5lcnJvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLW1vZGFsLWNvbnRhaW5lciAubW9kYWwgLmNvbnRlbnQgLmljb24uc3VjY2VzcywgLnRoZW1lLWRhcmsgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5jb250ZW50IC5pY29uLnN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNkYTlkOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5jb250ZW50IC5pY29uLnN1Y2Nlc3MsIC50aGVtZS1ncmF5IGFwcC1jb25maXJtLW1vZGFsIC5tb2RhbCAuY29udGVudCAuaWNvbi5zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ3Y2Y4ZDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLW1vZGFsLWNvbnRhaW5lciAubW9kYWwgLmNvbnRlbnQgLmljb24uc3VjY2VzcywgLnRoZW1lLXdoaXRlIGFwcC1jb25maXJtLW1vZGFsIC5tb2RhbCAuY29udGVudCAuaWNvbi5zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ2YzE3MjsgfVxuXG4udGhlbWUtZGFyayBhcHAtbW9kYWwtY29udGFpbmVyIC5tb2RhbCAuY29udGVudCAuaWNvbi5pbmZvLCAudGhlbWUtZGFyayBhcHAtY29uZmlybS1tb2RhbCAubW9kYWwgLmNvbnRlbnQgLmljb24uaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLW1vZGFsLWNvbnRhaW5lciAubW9kYWwgLmNvbnRlbnQgLmljb24uaW5mbywgLnRoZW1lLWdyYXkgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5jb250ZW50IC5pY29uLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtbW9kYWwtY29udGFpbmVyIC5tb2RhbCAuY29udGVudCAuaWNvbi5pbmZvLCAudGhlbWUtd2hpdGUgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5jb250ZW50IC5pY29uLmluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5hY3Rpb24tYnV0dG9uLCAudGhlbWUtZGFyayBhcHAtY29uZmlybS1tb2RhbCAubW9kYWwgLmFjdGlvbi1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmO1xuICBjb2xvcjogIzExMTkyMTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtbW9kYWwtY29udGFpbmVyIC5tb2RhbCAuYWN0aW9uLWJ1dHRvbiwgLnRoZW1lLWdyYXkgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5hY3Rpb24tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTtcbiAgY29sb3I6ICMxYTFhMWE7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5hY3Rpb24tYnV0dG9uLCAudGhlbWUtd2hpdGUgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5hY3Rpb24tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cblxuLnRoZW1lLWRhcmsgYXBwLW1vZGFsLWNvbnRhaW5lciAubW9kYWwgLmNsb3NlLWJ1dHRvbiAuaWNvbiwgLnRoZW1lLWRhcmsgYXBwLWNvbmZpcm0tbW9kYWwgLm1vZGFsIC5jbG9zZS1idXR0b24gLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1tb2RhbC1jb250YWluZXIgLm1vZGFsIC5jbG9zZS1idXR0b24gLmljb24sIC50aGVtZS1ncmF5IGFwcC1jb25maXJtLW1vZGFsIC5tb2RhbCAuY2xvc2UtYnV0dG9uIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxNTk2MDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLW1vZGFsLWNvbnRhaW5lciAubW9kYWwgLmNsb3NlLWJ1dHRvbiAuaWNvbiwgLnRoZW1lLXdoaXRlIGFwcC1jb25maXJtLW1vZGFsIC5tb2RhbCAuY2xvc2UtYnV0dG9uIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUge1xuICBib3JkZXItdG9wOiAwLjJyZW0gc29saWQgIzJiMzY0NDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUge1xuICBib3JkZXItdG9wOiAwLjJyZW0gc29saWQgIzJmMzQzODsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXRyYW5zYWN0aW9uLWRldGFpbHMgLnRhYmxlIHtcbiAgYm9yZGVyLXRvcDogMC4ycmVtIHNvbGlkICNlYmViZWI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXRyYW5zYWN0aW9uLWRldGFpbHMgLnRhYmxlIC5yb3cgLmNlbGwubGFiZWwge1xuICBjb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUgLnJvdyAuY2VsbC5sYWJlbCB7XG4gIGNvbG9yOiAjNTY1YzYyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUgLnJvdyAuY2VsbC5sYWJlbCB7XG4gIGNvbG9yOiAjYTBhNWFiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC10cmFuc2FjdGlvbi1kZXRhaWxzIC50YWJsZSAucm93IC5jZWxsLnZhbHVlIHtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXRyYW5zYWN0aW9uLWRldGFpbHMgLnRhYmxlIC5yb3cgLmNlbGwudmFsdWUge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXRyYW5zYWN0aW9uLWRldGFpbHMgLnRhYmxlIC5yb3cgLmNlbGwudmFsdWUge1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUgLnJvdyAuY2VsbC5rZXktdmFsdWUge1xuICBjb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtdHJhbnNhY3Rpb24tZGV0YWlscyAudGFibGUgLnJvdyAuY2VsbC5rZXktdmFsdWUge1xuICBjb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXRyYW5zYWN0aW9uLWRldGFpbHMgLnRhYmxlIC5yb3cgLmNlbGwua2V5LXZhbHVlIHtcbiAgY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXByb2dyZXNzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1wcm9ncmVzcy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXByb2dyZXNzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1wcm9ncmVzcy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNDNmNGE7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXByb2dyZXNzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM2M2EzZTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXByb2dyZXNzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsgfVxuXG4udGhlbWUtZGFyayBhcHAtcHJvZ3Jlc3MtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIgLnByb2dyZXNzLWJhci1mdWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtcHJvZ3Jlc3MtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIgLnByb2dyZXNzLWJhci1mdWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ3Y2Y4ZDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXByb2dyZXNzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIC5wcm9ncmVzcy1iYXItZnVsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NmMxNzI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLW9wZW4td2FsbGV0LW1vZGFsIC5tb2RhbCB7XG4gIGJhY2tncm91bmQ6IHVybCh+c3JjL2Fzc2V0cy9pbWFnZXMvYmFja2dyb3VuZC1kYXJrLnBuZyk7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1vcGVuLXdhbGxldC1tb2RhbCAubW9kYWwge1xuICBiYWNrZ3JvdW5kOiB1cmwofnNyYy9hc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtZ3JheS5wbmcpO1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLW9wZW4td2FsbGV0LW1vZGFsIC5tb2RhbCB7XG4gIGJhY2tncm91bmQ6IHVybCh+c3JjL2Fzc2V0cy9pbWFnZXMvYmFja2dyb3VuZC13aGl0ZS5wbmcpO1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2VuZC1tb2RhbCAubW9kYWwge1xuICBiYWNrZ3JvdW5kOiB1cmwofnNyYy9hc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtZGFyay5wbmcpO1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2VuZC1tb2RhbCAubW9kYWwge1xuICBiYWNrZ3JvdW5kOiB1cmwofnNyYy9hc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtZ3JheS5wbmcpO1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNlbmQtbW9kYWwgLm1vZGFsIHtcbiAgYmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLXdoaXRlLnBuZyk7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zZW5kLW1vZGFsIC5tb2RhbCAudGl0bGUge1xuICBib3JkZXItYm90dG9tOiAwLjJyZW0gc29saWQgIzJiMzY0NDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2VuZC1tb2RhbCAubW9kYWwgLnRpdGxlIHtcbiAgYm9yZGVyLWJvdHRvbTogMC4ycmVtIHNvbGlkICMyZjM0Mzg7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zZW5kLW1vZGFsIC5tb2RhbCAudGl0bGUge1xuICBib3JkZXItYm90dG9tOiAwLjJyZW0gc29saWQgI2ViZWJlYjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2VuZC1tb2RhbCAubW9kYWwgLmFjdGlvbi1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmO1xuICBjb2xvcjogIzExMTkyMTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2VuZC1tb2RhbCAubW9kYWwgLmFjdGlvbi1idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1O1xuICBjb2xvcjogIzFhMWExYTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNlbmQtbW9kYWwgLm1vZGFsIC5hY3Rpb24tYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cblxuYXBwLW1haW4sIGFwcC1jcmVhdGUtd2FsbGV0LCBhcHAtb3Blbi13YWxsZXQsIGFwcC1yZXN0b3JlLXdhbGxldCwgYXBwLXNlZWQtcGhyYXNlLCBhcHAtd2FsbGV0LWRldGFpbHMsIGFwcC1hc3NpZ24tYWxpYXMsIGFwcC1lZGl0LWFsaWFzLCBhcHAtdHJhbnNmZXItYWxpYXMsIGFwcC1zZXR0aW5ncywgYXBwLWxvZ2luIHtcbiAgZmxleDogMSAxIGF1dG87XG4gIHBhZGRpbmc6IDNyZW07XG4gIG1pbi13aWR0aDogODVyZW07IH1cbiAgYXBwLW1haW4gLmNvbnRlbnQsIGFwcC1jcmVhdGUtd2FsbGV0IC5jb250ZW50LCBhcHAtb3Blbi13YWxsZXQgLmNvbnRlbnQsIGFwcC1yZXN0b3JlLXdhbGxldCAuY29udGVudCwgYXBwLXNlZWQtcGhyYXNlIC5jb250ZW50LCBhcHAtd2FsbGV0LWRldGFpbHMgLmNvbnRlbnQsIGFwcC1hc3NpZ24tYWxpYXMgLmNvbnRlbnQsIGFwcC1lZGl0LWFsaWFzIC5jb250ZW50LCBhcHAtdHJhbnNmZXItYWxpYXMgLmNvbnRlbnQsIGFwcC1zZXR0aW5ncyAuY29udGVudCwgYXBwLWxvZ2luIC5jb250ZW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogM3JlbTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlOyB9XG4gICAgLnRoZW1lLWRhcmsgYXBwLW1haW4gLmNvbnRlbnQsIC50aGVtZS1kYXJrIGFwcC1jcmVhdGUtd2FsbGV0IC5jb250ZW50LCAudGhlbWUtZGFyayBhcHAtb3Blbi13YWxsZXQgLmNvbnRlbnQsIC50aGVtZS1kYXJrIGFwcC1yZXN0b3JlLXdhbGxldCAuY29udGVudCwgLnRoZW1lLWRhcmsgYXBwLXNlZWQtcGhyYXNlIC5jb250ZW50LCAudGhlbWUtZGFyayBhcHAtd2FsbGV0LWRldGFpbHMgLmNvbnRlbnQsIC50aGVtZS1kYXJrIGFwcC1hc3NpZ24tYWxpYXMgLmNvbnRlbnQsIC50aGVtZS1kYXJrIGFwcC1lZGl0LWFsaWFzIC5jb250ZW50LCAudGhlbWUtZGFyayBhcHAtdHJhbnNmZXItYWxpYXMgLmNvbnRlbnQsIC50aGVtZS1kYXJrIGFwcC1zZXR0aW5ncyAuY29udGVudCwgLnRoZW1lLWRhcmsgYXBwLWxvZ2luIC5jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDMsIDU0LCA2OCwgMC41KTtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgYXBwLW1haW4gLmNvbnRlbnQsIC50aGVtZS1ncmF5IGFwcC1jcmVhdGUtd2FsbGV0IC5jb250ZW50LCAudGhlbWUtZ3JheSBhcHAtb3Blbi13YWxsZXQgLmNvbnRlbnQsIC50aGVtZS1ncmF5IGFwcC1yZXN0b3JlLXdhbGxldCAuY29udGVudCwgLnRoZW1lLWdyYXkgYXBwLXNlZWQtcGhyYXNlIC5jb250ZW50LCAudGhlbWUtZ3JheSBhcHAtd2FsbGV0LWRldGFpbHMgLmNvbnRlbnQsIC50aGVtZS1ncmF5IGFwcC1hc3NpZ24tYWxpYXMgLmNvbnRlbnQsIC50aGVtZS1ncmF5IGFwcC1lZGl0LWFsaWFzIC5jb250ZW50LCAudGhlbWUtZ3JheSBhcHAtdHJhbnNmZXItYWxpYXMgLmNvbnRlbnQsIC50aGVtZS1ncmF5IGFwcC1zZXR0aW5ncyAuY29udGVudCwgLnRoZW1lLWdyYXkgYXBwLWxvZ2luIC5jb250ZW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzcsIDQwLCA0MywgMC41KTtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLXdoaXRlIGFwcC1tYWluIC5jb250ZW50LCAudGhlbWUtd2hpdGUgYXBwLWNyZWF0ZS13YWxsZXQgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtb3Blbi13YWxsZXQgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtcmVzdG9yZS13YWxsZXQgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtc2VlZC1waHJhc2UgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtd2FsbGV0LWRldGFpbHMgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtYXNzaWduLWFsaWFzIC5jb250ZW50LCAudGhlbWUtd2hpdGUgYXBwLWVkaXQtYWxpYXMgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtdHJhbnNmZXItYWxpYXMgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtc2V0dGluZ3MgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtbG9naW4gLmNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgICBhcHAtbWFpbiAuY29udGVudCAuaGVhZCwgYXBwLWNyZWF0ZS13YWxsZXQgLmNvbnRlbnQgLmhlYWQsIGFwcC1vcGVuLXdhbGxldCAuY29udGVudCAuaGVhZCwgYXBwLXJlc3RvcmUtd2FsbGV0IC5jb250ZW50IC5oZWFkLCBhcHAtc2VlZC1waHJhc2UgLmNvbnRlbnQgLmhlYWQsIGFwcC13YWxsZXQtZGV0YWlscyAuY29udGVudCAuaGVhZCwgYXBwLWFzc2lnbi1hbGlhcyAuY29udGVudCAuaGVhZCwgYXBwLWVkaXQtYWxpYXMgLmNvbnRlbnQgLmhlYWQsIGFwcC10cmFuc2Zlci1hbGlhcyAuY29udGVudCAuaGVhZCwgYXBwLXNldHRpbmdzIC5jb250ZW50IC5oZWFkLCBhcHAtbG9naW4gLmNvbnRlbnQgLmhlYWQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDsgfVxuXG4udGhlbWUtZGFyayBhcHAtbWFpbiAuY29udGVudCAuYWRkLXdhbGxldCAuYWRkLXdhbGxldC1oZWxwIHtcbiAgY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLW1haW4gLmNvbnRlbnQgLmFkZC13YWxsZXQgLmFkZC13YWxsZXQtaGVscCB7XG4gIGNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtbWFpbiAuY29udGVudCAuYWRkLXdhbGxldCAuYWRkLXdhbGxldC1oZWxwIHtcbiAgY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLW1haW4gLmNvbnRlbnQgLmFkZC13YWxsZXQgLmFkZC13YWxsZXQtaGVscCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLW1haW4gLmNvbnRlbnQgLmFkZC13YWxsZXQgLmFkZC13YWxsZXQtaGVscCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1tYWluIC5jb250ZW50IC5hZGQtd2FsbGV0IC5hZGQtd2FsbGV0LWhlbHAgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zZWVkLXBocmFzZSAuc2VlZC1waHJhc2UtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxNzFlMjc7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zZWVkLXBocmFzZSAuc2VlZC1waHJhc2UtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyOTJkMzE7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2VlZC1waHJhc2UgLnNlZWQtcGhyYXNlLWNvbnRlbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0LWRldGFpbHMgLnNlZWQtcGhyYXNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE3MWUyNzsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0LWRldGFpbHMgLnNlZWQtcGhyYXNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI5MmQzMTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldC1kZXRhaWxzIC5zZWVkLXBocmFzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7IH1cblxuYXBwLXNldHRpbmdzIC5jb250ZW50IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgLnRoZW1lLWRhcmsgYXBwLXNldHRpbmdzIC5jb250ZW50IC50aGVtZS1zZWxlY3Rpb24ge1xuICAgIGNvbG9yOiAjNTU2NTc2OyB9XG4gIC50aGVtZS1ncmF5IGFwcC1zZXR0aW5ncyAuY29udGVudCAudGhlbWUtc2VsZWN0aW9uIHtcbiAgICBjb2xvcjogIzU2NWM2MjsgfVxuICAudGhlbWUtd2hpdGUgYXBwLXNldHRpbmdzIC5jb250ZW50IC50aGVtZS1zZWxlY3Rpb24ge1xuICAgIGNvbG9yOiAjYTBhNWFiOyB9XG4gIC50aGVtZS1kYXJrIGFwcC1zZXR0aW5ncyAuY29udGVudCAuc2NhbGUtc2VsZWN0aW9uIC5idXR0b24tYmxvY2sge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjMsIDMxLCAzOSwgMC41KTsgfVxuICAudGhlbWUtZ3JheSBhcHAtc2V0dGluZ3MgLmNvbnRlbnQgLnNjYWxlLXNlbGVjdGlvbiAuYnV0dG9uLWJsb2NrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI4LCAzMCwgMzMsIDAuNSk7IH1cbiAgLnRoZW1lLXdoaXRlIGFwcC1zZXR0aW5ncyAuY29udGVudCAuc2NhbGUtc2VsZWN0aW9uIC5idXR0b24tYmxvY2sge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjI0LCAyMjQsIDIyNCwgMC41KTsgfVxuICAudGhlbWUtZGFyayBhcHAtc2V0dGluZ3MgLmNvbnRlbnQgLnNjYWxlLXNlbGVjdGlvbiAuYnV0dG9uLWJsb2NrIC5sYWJlbCB7XG4gICAgY29sb3I6ICM1NTY1NzY7IH1cbiAgLnRoZW1lLWdyYXkgYXBwLXNldHRpbmdzIC5jb250ZW50IC5zY2FsZS1zZWxlY3Rpb24gLmJ1dHRvbi1ibG9jayAubGFiZWwge1xuICAgIGNvbG9yOiAjNTY1YzYyOyB9XG4gIC50aGVtZS13aGl0ZSBhcHAtc2V0dGluZ3MgLmNvbnRlbnQgLnNjYWxlLXNlbGVjdGlvbiAuYnV0dG9uLWJsb2NrIC5sYWJlbCB7XG4gICAgY29sb3I6ICNhMGE1YWI7IH1cbiAgLnRoZW1lLWRhcmsgYXBwLXNldHRpbmdzIC5jb250ZW50IC5zY2FsZS1zZWxlY3Rpb24gLmJ1dHRvbi1ibG9jay5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cbiAgLnRoZW1lLWdyYXkgYXBwLXNldHRpbmdzIC5jb250ZW50IC5zY2FsZS1zZWxlY3Rpb24gLmJ1dHRvbi1ibG9jay5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cbiAgLnRoZW1lLXdoaXRlIGFwcC1zZXR0aW5ncyAuY29udGVudCAuc2NhbGUtc2VsZWN0aW9uIC5idXR0b24tYmxvY2suYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG4gIC50aGVtZS1kYXJrIGFwcC1zZXR0aW5ncyAuY29udGVudCAuc2NhbGUtc2VsZWN0aW9uIC5idXR0b24tYmxvY2suYWN0aXZlIC5sYWJlbCB7XG4gICAgY29sb3I6ICM0ZGIxZmY7IH1cbiAgLnRoZW1lLWdyYXkgYXBwLXNldHRpbmdzIC5jb250ZW50IC5zY2FsZS1zZWxlY3Rpb24gLmJ1dHRvbi1ibG9jay5hY3RpdmUgLmxhYmVsIHtcbiAgICBjb2xvcjogIzQyYTVmNTsgfVxuICAudGhlbWUtd2hpdGUgYXBwLXNldHRpbmdzIC5jb250ZW50IC5zY2FsZS1zZWxlY3Rpb24gLmJ1dHRvbi1ibG9jay5hY3RpdmUgLmxhYmVsIHtcbiAgICBjb2xvcjogIzJjOTVmMTsgfVxuXG5hcHAtbG9naW4ge1xuICBtaW4td2lkdGg6IGluaGVyaXQ7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTcxZjI3OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFjMWUyMTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1oZWFkZXIgaDMge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1oZWFkZXIgaDMge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtaGVhZGVyIGgzIHtcbiAgY29sb3I6ICM0MzQ1NGI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtaGVhZGVyIGJ1dHRvbiB7XG4gIGNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWhlYWRlciBidXR0b24ge1xuICBjb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtaGVhZGVyIGJ1dHRvbiB7XG4gIGNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC50ZXh0IHtcbiAgY29sb3I6ICM1NTY1NzY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC50ZXh0IHtcbiAgY29sb3I6ICM1NjVjNjI7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAudGV4dCB7XG4gIGNvbG9yOiAjYTBhNWFiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQgLnNpZGViYXItYWNjb3VudC1yb3cgLmluZGljYXRvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7XG4gIGNvbG9yOiAjMTExOTIxOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAuaW5kaWNhdG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTtcbiAgY29sb3I6ICMxYTFhMWE7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAuaW5kaWNhdG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTtcbiAgY29sb3I6ICNmZWZlZmU7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzZjRhOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM2M2EzZTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93IC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNkY2RjOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQgLnNpZGViYXItYWNjb3VudC1yb3cgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciAuZmlsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudCAuc2lkZWJhci1hY2NvdW50LXJvdyAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQgLnNpZGViYXItYWNjb3VudC1yb3cuYWNjb3VudC1zeW5jaHJvbml6YXRpb24ge1xuICBjb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQgLnNpZGViYXItYWNjb3VudC1yb3cuYWNjb3VudC1zeW5jaHJvbml6YXRpb24ge1xuICBjb2xvcjogIzU2NWM2MjsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50IC5zaWRlYmFyLWFjY291bnQtcm93LmFjY291bnQtc3luY2hyb25pemF0aW9uIHtcbiAgY29sb3I6ICNhMGE1YWI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDMsIDU0LCA2OCwgMC41KTtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzcsIDQwLCA0MywgMC41KTtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudC5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4OGU1O1xuICBjb2xvcjogI2ZmZmZmZjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQuYWN0aXZlIC5zaWRlYmFyLWFjY291bnQtcm93IC50ZXh0IHtcbiAgY29sb3I6ICM1NTY1NzY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSAuc2lkZWJhci1hY2NvdW50LXJvdyAudGV4dCB7XG4gIGNvbG9yOiAjNTY1YzYyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQuYWN0aXZlIC5zaWRlYmFyLWFjY291bnQtcm93IC50ZXh0IHtcbiAgY29sb3I6ICM5MWJhZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSAuc2lkZWJhci1hY2NvdW50LXJvdyAuaW5kaWNhdG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjtcbiAgY29sb3I6ICMxMTE5MjE7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSAuc2lkZWJhci1hY2NvdW50LXJvdyAuaW5kaWNhdG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTtcbiAgY29sb3I6ICMxYTFhMWE7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudC5hY3RpdmUgLnNpZGViYXItYWNjb3VudC1yb3cgLmluZGljYXRvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudC5hY3RpdmUgLnNpZGViYXItYWNjb3VudC1yb3cgLnN3aXRjaCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzIC5zaWRlYmFyLWFjY291bnRzLWxpc3QgLnNpZGViYXItYWNjb3VudC5hY3RpdmUgLnNpZGViYXItYWNjb3VudC1yb3cgLnN3aXRjaCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQuYWN0aXZlIC5zaWRlYmFyLWFjY291bnQtcm93IC5zd2l0Y2gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQuYWN0aXZlIC5zaWRlYmFyLWFjY291bnQtcm93LmFjY291bnQtc3luY2hyb25pemF0aW9uIHtcbiAgY29sb3I6ICM1NTY1NzY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50LmFjdGl2ZSAuc2lkZWJhci1hY2NvdW50LXJvdy5hY2NvdW50LXN5bmNocm9uaXphdGlvbiB7XG4gIGNvbG9yOiAjNTY1YzYyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQuYWN0aXZlIC5zaWRlYmFyLWFjY291bnQtcm93LmFjY291bnQtc3luY2hyb25pemF0aW9uIHtcbiAgY29sb3I6ICM5MWJhZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHMgLnNpZGViYXItYWNjb3VudHMtbGlzdCAuc2lkZWJhci1hY2NvdW50OmhvdmVyOm5vdCguYWN0aXZlKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTgsIDY5LCA4NSwgMC41KTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQ6aG92ZXI6bm90KC5hY3RpdmUpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OCwgNjIsIDY2LCAwLjUpOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1hY2NvdW50cyAuc2lkZWJhci1hY2NvdW50cy1saXN0IC5zaWRlYmFyLWFjY291bnQ6aG92ZXI6bm90KC5hY3RpdmUpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDI0MCwgMjQwLCAwLjUpOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLWFjY291bnRzOmFmdGVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQgMCUsICMxNzFmMjcgMTAwJSk7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHM6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCAwJSwgIzFjMWUyMSAxMDAlKTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItYWNjb3VudHM6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCAwJSwgd2hpdGUgMTAwJSk7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItc2V0dGluZ3Mge1xuICBib3JkZXItYm90dG9tOiAwLjJyZW0gc29saWQgIzFmMjgzMzsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyB7XG4gIGJvcmRlci1ib3R0b206IDAuMnJlbSBzb2xpZCAjMmUzMzM3OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyB7XG4gIGJvcmRlci1ib3R0b206IDAuMnJlbSBzb2xpZCAjZWJlYmViOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zaWRlYmFyIC5zaWRlYmFyLXNldHRpbmdzIC53cmFwLWJ1dHRvbiBidXR0b24ge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24gYnV0dG9uIHtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zaWRlYmFyIC5zaWRlYmFyLXNldHRpbmdzIC53cmFwLWJ1dHRvbiBidXR0b24ge1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24gYnV0dG9uIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24gYnV0dG9uIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItc2V0dGluZ3MgLndyYXAtYnV0dG9uIGJ1dHRvbiAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNpZGViYXIgLnNpZGViYXItc2V0dGluZ3MgLndyYXAtYnV0dG9uLmFjdGl2ZSBidXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQzLCA1NCwgNjgsIDAuNSkgIWltcG9ydGFudDtcbiAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24uYWN0aXZlIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzcsIDQwLCA0MywgMC41KSAhaW1wb3J0YW50O1xuICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24uYWN0aXZlIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcbiAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24uYWN0aXZlIGJ1dHRvbiAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmYgIWltcG9ydGFudDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2lkZWJhciAuc2lkZWJhci1zZXR0aW5ncyAud3JhcC1idXR0b24uYWN0aXZlIGJ1dHRvbiAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjUgIWltcG9ydGFudDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXNpZGViYXIgLnNpZGViYXItc2V0dGluZ3MgLndyYXAtYnV0dG9uLmFjdGl2ZSBidXR0b24gLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7IH1cblxuLnN5bmNocm9uaXphdGlvbi1zdGF0dXMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZsZXg6IDAgMCA3cmVtO1xuICBmb250LXNpemU6IDEuM3JlbTsgfVxuICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyB7XG4gICAgY29sb3I6ICM1NTY1NzY7IH1cbiAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMge1xuICAgIGNvbG9yOiAjNTY1YzYyOyB9XG4gIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyB7XG4gICAgY29sb3I6ICNhMGE1YWI7IH1cbiAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5vZmZsaW5lLCAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAub25saW5lIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMi4ycmVtOyB9XG4gICAgICAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAub2ZmbGluZTpiZWZvcmUsIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5vbmxpbmU6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHdpZHRoOiAxLjJyZW07XG4gICAgICAgIGhlaWdodDogMS4ycmVtOyB9XG4gICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLm9mZmxpbmU6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cbiAgICAudGhlbWUtZ3JheSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAub2ZmbGluZTpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAub2ZmbGluZTpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS1kYXJrIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5vbmxpbmU6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1Y2RhOWQ7IH1cbiAgICAudGhlbWUtZ3JheSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAub25saW5lOmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDdjZjhkOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5vbmxpbmU6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0NmMxNzI7IH1cbiAgICAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAuc3luY2luZywgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLmxvYWRpbmcge1xuICAgICAgbGluZS1oZWlnaHQ6IDVyZW07IH1cbiAgICAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgaGVpZ2h0OiAwLjdyZW07XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnN5bmNpbmcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nIC5wcm9ncmVzcy1iYXIge1xuICAgICAgICAgIGZsZXg6IDEgMCBhdXRvOyB9XG4gICAgICAgICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnN5bmNpbmcgLnByb2dyZXNzLWJhciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzZjRhOyB9XG4gICAgICAgICAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnN5bmNpbmcgLnByb2dyZXNzLWJhciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzYTNlOyB9XG4gICAgICAgICAgLnRoZW1lLXdoaXRlIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nIC5wcm9ncmVzcy1iYXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RjZGNkYzsgfVxuICAgICAgICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nIC5wcm9ncmVzcy1iYXIgLmZpbGwge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOyB9XG4gICAgICAgICAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAuc3luY2luZyAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDsgfVxuICAgICAgICAgICAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnN5bmNpbmcgLnByb2dyZXNzLWJhciAuZmlsbCB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0N2NmOGQ7IH1cbiAgICAgICAgICAgIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAuc3luY2luZyAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQ2YzE3MjsgfVxuICAgICAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAuc3luY2luZy5kb3dubG9hZGluZyAucHJvZ3Jlc3MtYmFyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQzZjRhOyB9XG4gICAgICAgIC50aGVtZS1ncmF5IC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nLmRvd25sb2FkaW5nIC5wcm9ncmVzcy1iYXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzNjNhM2U7IH1cbiAgICAgICAgLnRoZW1lLXdoaXRlIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nLmRvd25sb2FkaW5nIC5wcm9ncmVzcy1iYXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkY2RjZGM7IH1cbiAgICAgICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnN5bmNpbmcuZG93bmxvYWRpbmcgLnByb2dyZXNzLWJhciAuZmlsbCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuICAgICAgICAudGhlbWUtZ3JheSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAuc3luY2luZy5kb3dubG9hZGluZyAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG4gICAgICAgIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAuc3luY2luZy5kb3dubG9hZGluZyAucHJvZ3Jlc3MtYmFyIC5maWxsIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG4gICAgICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC5zdGF0dXMtY29udGFpbmVyIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5zeW5jaW5nIC5wcm9ncmVzcy1wZXJjZW50IHtcbiAgICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMC43cmVtO1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMC43cmVtOyB9XG4gICAgICAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAubG9hZGluZyB7XG4gICAgICAgIGFuaW1hdGlvbjogbW92ZSA1cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDEwMCUgMTAwJSwgY29sb3Itc3RvcCgwLjEyNSwgcmdiYSgwLCAwLCAwLCAwLjE1KSksIGNvbG9yLXN0b3AoMC4xMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjM3NSwgcmdiYSgwLCAwLCAwLCAwLjEpKSwgY29sb3Itc3RvcCgwLjM3NSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgwLCAwLCAwLCAwLjE1KSksIGNvbG9yLXN0b3AoMC42MjUsIHJnYmEoMCwgMCwgMCwgMC4xNSkpLCBjb2xvci1zdG9wKDAuNjI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNzUsIHJnYmEoMCwgMCwgMCwgMC4xKSksIGNvbG9yLXN0b3AoMC44NzUsIHJnYmEoMCwgMCwgMCwgMC4xKSksIGNvbG9yLXN0b3AoMC44NzUsIHRyYW5zcGFyZW50KSwgdG8odHJhbnNwYXJlbnQpKSwgLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMTAwJSwgMTAwJSAwLCBjb2xvci1zdG9wKDAuMTI1LCByZ2JhKDAsIDAsIDAsIDAuMykpLCBjb2xvci1zdG9wKDAuMTI1LCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuMjUsIHJnYmEoMCwgMCwgMCwgMC4yNSkpLCBjb2xvci1zdG9wKDAuMzc1LCByZ2JhKDAsIDAsIDAsIDAuMjUpKSwgY29sb3Itc3RvcCgwLjM3NSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgwLCAwLCAwLCAwLjMpKSwgY29sb3Itc3RvcCgwLjYyNSwgcmdiYSgwLCAwLCAwLCAwLjMpKSwgY29sb3Itc3RvcCgwLjYyNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNzUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjc1LCByZ2JhKDAsIDAsIDAsIDAuMjUpKSwgY29sb3Itc3RvcCgwLjg3NSwgcmdiYSgwLCAwLCAwLCAwLjI1KSksIGNvbG9yLXN0b3AoMC44NzUsIHRyYW5zcGFyZW50KSwgdG8odHJhbnNwYXJlbnQpKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3cmVtIDdyZW07XG4gICAgICAgIGhlaWdodDogMTAwJTsgfVxuICAgICAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAubG9hZGluZyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDsgfVxuICAgICAgICAudGhlbWUtZ3JheSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAuc3RhdHVzLWNvbnRhaW5lciAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciAubG9hZGluZyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQ3Y2Y4ZDsgfVxuICAgICAgICAudGhlbWUtd2hpdGUgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnN0YXR1cy1jb250YWluZXIgLnByb2dyZXNzLWJhci1jb250YWluZXIgLmxvYWRpbmcge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0NmMxNzI7IH1cbiAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1ncm93OiAxO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLnVwZGF0ZS10ZXh0IHtcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44cmVtO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAgICAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLnVwZGF0ZS10ZXh0LnRpbWUge1xuICAgICAgICBmb250LXNpemU6IDEuMXJlbTsgfVxuICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pY29uIHtcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xuICAgICAgbWFyZ2luOiAwLjNyZW0gMCAwIDAuNnJlbTtcbiAgICAgIHdpZHRoOiAxLjJyZW07XG4gICAgICBoZWlnaHQ6IDEuMnJlbTsgfVxuICAgICAgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24udXBkYXRlIHtcbiAgICAgICAgbWFzazogdXJsKC4vYXNzZXRzL2ljb25zL3VwZGF0ZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7IH1cbiAgICAgIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pY29uLnRpbWUge1xuICAgICAgICBtYXNrOiB1cmwoLi9hc3NldHMvaWNvbnMvdGltZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7IH1cbiAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAuc3RhbmRhcmQge1xuICAgICAgY29sb3I6ICM0ZGIxZmY7IH1cbiAgICAudGhlbWUtZ3JheSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAuc3RhbmRhcmQge1xuICAgICAgY29sb3I6ICM0MmE1ZjU7IH1cbiAgICAudGhlbWUtd2hpdGUgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLnN0YW5kYXJkIHtcbiAgICAgIGNvbG9yOiAjMmM5NWYxOyB9XG4gICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmltcG9ydGFudCB7XG4gICAgICBjb2xvcjogI2ZmNmYwMDsgfVxuICAgIC50aGVtZS1ncmF5IC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pbXBvcnRhbnQge1xuICAgICAgY29sb3I6ICNmZjZmMDA7IH1cbiAgICAudGhlbWUtd2hpdGUgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmltcG9ydGFudCB7XG4gICAgICBjb2xvcjogI2ZmNmYwMDsgfVxuICAgIC50aGVtZS1kYXJrIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5jcml0aWNhbCB7XG4gICAgICBjb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS1ncmF5IC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5jcml0aWNhbCB7XG4gICAgICBjb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAuY3JpdGljYWwge1xuICAgICAgY29sb3I6ICNmZjUyNTI7IH1cbiAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAudGltZSB7XG4gICAgICBjb2xvcjogI2ZmNmYwMDsgfVxuICAgIC50aGVtZS1ncmF5IC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC50aW1lIHtcbiAgICAgIGNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC50aW1lIHtcbiAgICAgIGNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24uc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuICAgIC50aGVtZS1ncmF5IC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pY29uLnN0YW5kYXJkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cbiAgICAudGhlbWUtd2hpdGUgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24uc3RhbmRhcmQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuICAgIC50aGVtZS1kYXJrIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pY29uLmltcG9ydGFudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24uaW1wb3J0YW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cbiAgICAudGhlbWUtd2hpdGUgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24uaW1wb3J0YW50IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cbiAgICAudGhlbWUtZGFyayAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAuaWNvbi5jcml0aWNhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG4gICAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24uY3JpdGljYWwge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuICAgIC50aGVtZS13aGl0ZSAuc3luY2hyb25pemF0aW9uLXN0YXR1cyAudXBkYXRlLWNvbnRhaW5lciAuaWNvbi5jcml0aWNhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG4gICAgLnRoZW1lLWRhcmsgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24udGltZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLWdyYXkgLnN5bmNocm9uaXphdGlvbi1zdGF0dXMgLnVwZGF0ZS1jb250YWluZXIgLmljb24udGltZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5zeW5jaHJvbml6YXRpb24tc3RhdHVzIC51cGRhdGUtY29udGFpbmVyIC5pY29uLnRpbWUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNmYwMDsgfVxuXG5Aa2V5ZnJhbWVzIG1vdmUge1xuICAwJSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtN3JlbTsgfVxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDdyZW07IH0gfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0IHtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXdhbGxldCB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IHtcbiAgY29sb3I6ICM0MzQ1NGI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAuaGVhZGVyIGJ1dHRvbiB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLmhlYWRlciBidXR0b24ge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAuaGVhZGVyIGJ1dHRvbiB7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLmhlYWRlciBidXR0b24gLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLmhlYWRlciBidXR0b24gLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IC5oZWFkZXIgYnV0dG9uIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG5hcHAtd2FsbGV0IC5oZWFkZXIgYnV0dG9uOmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgfVxuICAudGhlbWUtZGFyayBhcHAtd2FsbGV0IC5oZWFkZXIgYnV0dG9uOmRpc2FibGVkIC5pY29uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2OyB9XG4gIC50aGVtZS1ncmF5IGFwcC13YWxsZXQgLmhlYWRlciBidXR0b246ZGlzYWJsZWQgLmljb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1NjVjNjI7IH1cbiAgLnRoZW1lLXdoaXRlIGFwcC13YWxsZXQgLmhlYWRlciBidXR0b246ZGlzYWJsZWQgLmljb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM5MWJhZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAuaGVhZGVyIC5hbGlhcyAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXdhbGxldCAuaGVhZGVyIC5hbGlhcyAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC13YWxsZXQgLmhlYWRlciAuYWxpYXMgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLmFkZHJlc3Mge1xuICBjb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC5hZGRyZXNzIHtcbiAgY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC13YWxsZXQgLmFkZHJlc3Mge1xuICBjb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0IC5hZGRyZXNzIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC5hZGRyZXNzIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAuYWRkcmVzcyAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAudGFicyAudGFicy1oZWFkZXIgLnRhYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjMsIDMxLCAzOSwgMC41KTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyOCwgMzAsIDMzLCAwLjUpOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjUpOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtaGVhZGVyIC50YWIgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtaGVhZGVyIC50YWIgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiIC5pbmRpY2F0b3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmO1xuICBjb2xvcjogIzExMTkyMTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiIC5pbmRpY2F0b3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1O1xuICBjb2xvcjogIzFhMWExYTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAudGFicyAudGFicy1oZWFkZXIgLnRhYiAuaW5kaWNhdG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgY29sb3I6ICM0MzQ1NGI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAudGFicyAudGFicy1oZWFkZXIgLnRhYi5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQzLCA1NCwgNjgsIDAuNSk7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXdhbGxldCAudGFicyAudGFicy1oZWFkZXIgLnRhYi5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM3LCA0MCwgNDMsIDAuNSk7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtaGVhZGVyIC50YWIuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtaGVhZGVyIC50YWI6aG92ZXI6bm90KC5hY3RpdmUpOm5vdCguZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OCwgNjksIDg1LCAwLjUpOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtaGVhZGVyIC50YWI6aG92ZXI6bm90KC5hY3RpdmUpOm5vdCguZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OCwgNjIsIDY2LCAwLjUpOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IC50YWJzIC50YWJzLWhlYWRlciAudGFiOmhvdmVyOm5vdCguYWN0aXZlKTpub3QoLmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAudGFicyAudGFicy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg0MywgNTQsIDY4LCAwLjUpOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLnRhYnMgLnRhYnMtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMzcsIDQwLCA0MywgMC41KTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAudGFicyAudGFicy1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLnRhYnMgLnBhZ2luYXRpb24td3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDMsIDU0LCA2OCwgMC41KTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC50YWJzIC5wYWdpbmF0aW9uLXdyYXBwZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM3LCA0MCwgNDMsIDAuNSk7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC13YWxsZXQgLnRhYnMgLnBhZ2luYXRpb24td3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0IC50YWJzIC5wYWdpbmF0aW9uLXdyYXBwZXIgLnBhZ2luYXRpb24ge1xuICBib3JkZXItdG9wOiAwLjJyZW0gc29saWQgIzJiMzY0NDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtd2FsbGV0IC50YWJzIC5wYWdpbmF0aW9uLXdyYXBwZXIgLnBhZ2luYXRpb24ge1xuICBib3JkZXItdG9wOiAwLjJyZW0gc29saWQgIzJmMzQzODsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIHtcbiAgYm9yZGVyLXRvcDogMC4ycmVtIHNvbGlkICNlYmViZWI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYjM2NDQ7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC13YWxsZXQgLnRhYnMgLnBhZ2luYXRpb24td3JhcHBlciAucGFnaW5hdGlvbiBidXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYzNDM4O1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIGJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYmViZWI7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC13YWxsZXQgLnRhYnMgLnBhZ2luYXRpb24td3JhcHBlciAucGFnaW5hdGlvbiBidXR0b24uYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4MjAyYTtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIGJ1dHRvbi5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjUyOTJkO1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIGJ1dHRvbi5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtd2FsbGV0IC50YWJzIC5wYWdpbmF0aW9uLXdyYXBwZXIgLnBhZ2luYXRpb24gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhNDg1YTtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXdhbGxldCAudGFicyAucGFnaW5hdGlvbi13cmFwcGVyIC5wYWdpbmF0aW9uIGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNlNDM7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtd2FsbGV0IC50YWJzIC5wYWdpbmF0aW9uLXdyYXBwZXIgLnBhZ2luYXRpb24gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgY29sb3I6ICM0MzQ1NGI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXNlbmQgLmZvcm0tc2VuZCAuc2VuZC1zZWxlY3Qge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2VuZCAuZm9ybS1zZW5kIC5zZW5kLXNlbGVjdCB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc2VuZCAuZm9ybS1zZW5kIC5zZW5kLXNlbGVjdCB7XG4gIGNvbG9yOiAjNDM0NTRiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zZW5kIC5mb3JtLXNlbmQgLnNlbmQtc2VsZWN0IC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc2VuZCAuZm9ybS1zZW5kIC5zZW5kLXNlbGVjdCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zZW5kIC5mb3JtLXNlbmQgLnNlbmQtc2VsZWN0IC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtc2VuZCAuZm9ybS1zZW5kIC5hZGRpdGlvbmFsLWRldGFpbHMge1xuICBib3JkZXI6IDAuMnJlbSBzb2xpZCAjMmIzNjQ0OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zZW5kIC5mb3JtLXNlbmQgLmFkZGl0aW9uYWwtZGV0YWlscyB7XG4gIGJvcmRlcjogMC4ycmVtIHNvbGlkICMyZjM0Mzg7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zZW5kIC5mb3JtLXNlbmQgLmFkZGl0aW9uYWwtZGV0YWlscyB7XG4gIGJvcmRlcjogMC4ycmVtIHNvbGlkICNlYmViZWI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXJlY2VpdmUgLmJ0bi1jb3B5LWFkZHJlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1yZWNlaXZlIC5idG4tY29weS1hZGRyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXJlY2VpdmUgLmJ0bi1jb3B5LWFkZHJlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyLmxvY2tlZC10cmFuc2FjdGlvbiB7XG4gIGNvbG9yOiAjNTU2NTc2OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyLmxvY2tlZC10cmFuc2FjdGlvbiB7XG4gIGNvbG9yOiAjNTY1YzYyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ci5sb2NrZWQtdHJhbnNhY3Rpb24ge1xuICBjb2xvcjogI2EwYTVhYjsgfVxuXG4udGhlbWUtZGFyayBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rMSkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgyMDJhOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyOm50aC1jaGlsZCg0bisxKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNTI5MmQ7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyOm50aC1jaGlsZCg0bisxKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKDRuKzIpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4MjAyYTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rMikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjUyOTJkOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rMikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyOm50aC1jaGlsZCg0biszKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyOm50aC1jaGlsZCg0biszKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rMykge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuXG4udGhlbWUtZGFyayBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rNCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQoNG4rNCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKDRuKzQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLnN0YXR1cyAuY29uZmlybWF0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM0M2Y0YTsgfVxuXG4udGhlbWUtZ3JheSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAuc3RhdHVzIC5jb25maXJtYXRpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzYTNlOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAuc3RhdHVzIC5jb25maXJtYXRpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNkY2RjOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC5zdGF0dXMgLmNvbmZpcm1hdGlvbiAuZmlsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2RhOWQ7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLnN0YXR1cyAuY29uZmlybWF0aW9uIC5maWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ3Y2Y4ZDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLnN0YXR1cyAuY29uZmlybWF0aW9uIC5maWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ2YzE3MjsgfVxuXG4udGhlbWUtZGFyayBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAubG9jay10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLmxvY2stdHJhbnNhY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAubG9jay10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLnVubG9jay10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWhpc3RvcnkgdGFibGUgdGJvZHkgdHIgLnVubG9jay10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC51bmxvY2stdHJhbnNhY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC5zdGF0dXMuc2VuZCAuc3RhdHVzLXRyYW5zYWN0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAuc3RhdHVzLnNlbmQgLnN0YXR1cy10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC5zdGF0dXMuc2VuZCAuc3RhdHVzLXRyYW5zYWN0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuXG4udGhlbWUtZGFyayBhcHAtaGlzdG9yeSB0YWJsZSB0Ym9keSB0ciAuc3RhdHVzLnJlY2VpdmVkIC5zdGF0dXMtdHJhbnNhY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNkYTlkOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC5zdGF0dXMucmVjZWl2ZWQgLnN0YXR1cy10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0N2NmOGQ7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1oaXN0b3J5IHRhYmxlIHRib2R5IHRyIC5zdGF0dXMucmVjZWl2ZWQgLnN0YXR1cy10cmFuc2FjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NmMxNzI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWNvbnRyYWN0cyAud3JhcC10YWJsZSAuY29udHJhY3QgLmljb24ubmV3LCAudGhlbWUtZGFyayBhcHAtY29udHJhY3RzIC53cmFwLXRhYmxlIC5jb250cmFjdCAuaWNvbi5hbGVydCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWNvbnRyYWN0cyAud3JhcC10YWJsZSAuY29udHJhY3QgLmljb24ubmV3LCAudGhlbWUtZ3JheSBhcHAtY29udHJhY3RzIC53cmFwLXRhYmxlIC5jb250cmFjdCAuaWNvbi5hbGVydCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1jb250cmFjdHMgLndyYXAtdGFibGUgLmNvbnRyYWN0IC5pY29uLm5ldywgLnRoZW1lLXdoaXRlIGFwcC1jb250cmFjdHMgLndyYXAtdGFibGUgLmNvbnRyYWN0IC5pY29uLmFsZXJ0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuXG4udGhlbWUtZGFyayBhcHAtY29udHJhY3RzIC53cmFwLXRhYmxlIC5jb250cmFjdCAuaWNvbi5wdXJjaGFzZSwgLnRoZW1lLWRhcmsgYXBwLWNvbnRyYWN0cyAud3JhcC10YWJsZSAuY29udHJhY3QgLmljb24uc2VsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWNvbnRyYWN0cyAud3JhcC10YWJsZSAuY29udHJhY3QgLmljb24ucHVyY2hhc2UsIC50aGVtZS1ncmF5IGFwcC1jb250cmFjdHMgLndyYXAtdGFibGUgLmNvbnRyYWN0IC5pY29uLnNlbGwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtY29udHJhY3RzIC53cmFwLXRhYmxlIC5jb250cmFjdCAuaWNvbi5wdXJjaGFzZSwgLnRoZW1lLXdoaXRlIGFwcC1jb250cmFjdHMgLndyYXAtdGFibGUgLmNvbnRyYWN0IC5pY29uLnNlbGwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1wdXJjaGFzZSAuZm9ybS1wdXJjaGFzZSAucHVyY2hhc2Utc2VsZWN0IHtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXB1cmNoYXNlIC5mb3JtLXB1cmNoYXNlIC5wdXJjaGFzZS1zZWxlY3Qge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXB1cmNoYXNlIC5mb3JtLXB1cmNoYXNlIC5wdXJjaGFzZS1zZWxlY3Qge1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtcHVyY2hhc2UgLmZvcm0tcHVyY2hhc2UgLnB1cmNoYXNlLXNlbGVjdCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXB1cmNoYXNlIC5mb3JtLXB1cmNoYXNlIC5wdXJjaGFzZS1zZWxlY3QgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtcHVyY2hhc2UgLmZvcm0tcHVyY2hhc2UgLnB1cmNoYXNlLXNlbGVjdCAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXB1cmNoYXNlIC5mb3JtLXB1cmNoYXNlIC5wdXJjaGFzZS1zdGF0ZXMge1xuICBjb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtcHVyY2hhc2UgLmZvcm0tcHVyY2hhc2UgLnB1cmNoYXNlLXN0YXRlcyB7XG4gIGNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtcHVyY2hhc2UgLmZvcm0tcHVyY2hhc2UgLnB1cmNoYXNlLXN0YXRlcyB7XG4gIGNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1wdXJjaGFzZSAuZm9ybS1wdXJjaGFzZSAuYWRkaXRpb25hbC1kZXRhaWxzIHtcbiAgYm9yZGVyOiAwLjJyZW0gc29saWQgIzJiMzY0NDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtcHVyY2hhc2UgLmZvcm0tcHVyY2hhc2UgLmFkZGl0aW9uYWwtZGV0YWlscyB7XG4gIGJvcmRlcjogMC4ycmVtIHNvbGlkICMyZjM0Mzg7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1wdXJjaGFzZSAuZm9ybS1wdXJjaGFzZSAuYWRkaXRpb25hbC1kZXRhaWxzIHtcbiAgYm9yZGVyOiAwLjJyZW0gc29saWQgI2ViZWJlYjsgfVxuXG4udGhlbWUtZGFyayBhcHAtcHVyY2hhc2UgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzNDNmNGE7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXB1cmNoYXNlIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzYTNlOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtcHVyY2hhc2UgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkY2RjZGM7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXB1cmNoYXNlIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIC5wcm9ncmVzcy1iYXIgLnByb2dyZXNzLWJhci1mdWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjZGE5ZDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtcHVyY2hhc2UgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciAucHJvZ3Jlc3MtYmFyLWZ1bGwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDdjZjhkOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtcHVyY2hhc2UgLnByb2dyZXNzLWJhci1jb250YWluZXIgLnByb2dyZXNzLWJhciAucHJvZ3Jlc3MtYmFyLWZ1bGwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDZjMTcyOyB9XG5cbmFwcC1tZXNzYWdlcyB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZCBzcGFuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLnRoZW1lLWRhcmsgYXBwLW1lc3NhZ2VzIHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxkIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtbWVzc2FnZXMgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGQgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtbWVzc2FnZXMgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGQgLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY1MjUyOyB9XG5cbi50aGVtZS1kYXJrIGFwcC10eXBpbmctbWVzc2FnZSAuaGVhZCAuaW50ZXJsb2N1dG9yIHtcbiAgY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXR5cGluZy1tZXNzYWdlIC5oZWFkIC5pbnRlcmxvY3V0b3Ige1xuICBjb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXR5cGluZy1tZXNzYWdlIC5oZWFkIC5pbnRlcmxvY3V0b3Ige1xuICBjb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtdHlwaW5nLW1lc3NhZ2UgLm1lc3NhZ2VzLWNvbnRlbnQgLm1lc3NhZ2VzLWxpc3QgZGl2LmRhdGUge1xuICBjb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtdHlwaW5nLW1lc3NhZ2UgLm1lc3NhZ2VzLWNvbnRlbnQgLm1lc3NhZ2VzLWxpc3QgZGl2LmRhdGUge1xuICBjb2xvcjogIzU2NWM2MjsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5kYXRlIHtcbiAgY29sb3I6ICNhMGE1YWI7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5teSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyYTM1NDQ7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5teSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMDM2M2M7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYubXkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbmFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYubXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAtMS4xcmVtO1xuICBib3JkZXI6IDEuMnJlbSBzb2xpZCB0cmFuc3BhcmVudDsgfVxuICAudGhlbWUtZGFyayBhcHAtdHlwaW5nLW1lc3NhZ2UgLm1lc3NhZ2VzLWNvbnRlbnQgLm1lc3NhZ2VzLWxpc3QgZGl2Lm15OmJlZm9yZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzJhMzU0NDsgfVxuICAudGhlbWUtZ3JheSBhcHAtdHlwaW5nLW1lc3NhZ2UgLm1lc3NhZ2VzLWNvbnRlbnQgLm1lc3NhZ2VzLWxpc3QgZGl2Lm15OmJlZm9yZSB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzMwMzYzYzsgfVxuICAudGhlbWUtd2hpdGUgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5teTpiZWZvcmUge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNmZmY7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5idWRkeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxODIwMmE7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXR5cGluZy1tZXNzYWdlIC5tZXNzYWdlcy1jb250ZW50IC5tZXNzYWdlcy1saXN0IGRpdi5idWRkeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNTI5MmQ7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYuYnVkZHkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyB9XG5cbmFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYuYnVkZHk6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTEuMXJlbTtcbiAgdG9wOiAwO1xuICBib3JkZXI6IDEuMnJlbSBzb2xpZCB0cmFuc3BhcmVudDsgfVxuICAudGhlbWUtZGFyayBhcHAtdHlwaW5nLW1lc3NhZ2UgLm1lc3NhZ2VzLWNvbnRlbnQgLm1lc3NhZ2VzLWxpc3QgZGl2LmJ1ZGR5OmFmdGVyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjMTgyMDJhOyB9XG4gIC50aGVtZS1ncmF5IGFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYuYnVkZHk6YWZ0ZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMyNTI5MmQ7IH1cbiAgLnRoZW1lLXdoaXRlIGFwcC10eXBpbmctbWVzc2FnZSAubWVzc2FnZXMtY29udGVudCAubWVzc2FnZXMtbGlzdCBkaXYuYnVkZHk6YWZ0ZXIge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICNlZGVkZWQ7IH1cblxuLnRoZW1lLWRhcmsgYXBwLXN0YWtpbmcgLmNoYXJ0LWhlYWRlciAuZ2VuZXJhbCAubGFiZWwge1xuICBjb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc3Rha2luZyAuY2hhcnQtaGVhZGVyIC5nZW5lcmFsIC5sYWJlbCB7XG4gIGNvbG9yOiAjNTY1YzYyOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc3Rha2luZyAuY2hhcnQtaGVhZGVyIC5nZW5lcmFsIC5sYWJlbCB7XG4gIGNvbG9yOiAjYTBhNWFiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zdGFraW5nIC5jaGFydC1oZWFkZXIgLmdlbmVyYWwgLm9wdGlvbnMge1xuICBjb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc3Rha2luZyAuY2hhcnQtaGVhZGVyIC5nZW5lcmFsIC5vcHRpb25zIHtcbiAgY29sb3I6ICNlMGUwZTA7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zdGFraW5nIC5jaGFydC1oZWFkZXIgLmdlbmVyYWwgLm9wdGlvbnMge1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG5hcHAtc3Rha2luZyAuY2hhcnQtaGVhZGVyIC5zZWxlY3RlZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZm9udC1zaXplOiAxLjZyZW07IH1cblxuLnRoZW1lLWRhcmsgYXBwLXN0YWtpbmcgLmNoYXJ0LW9wdGlvbnMgLnRpdGxlIHtcbiAgY29sb3I6ICM1NTY1NzY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLXN0YWtpbmcgLmNoYXJ0LW9wdGlvbnMgLnRpdGxlIHtcbiAgY29sb3I6ICM1NjVjNjI7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1zdGFraW5nIC5jaGFydC1vcHRpb25zIC50aXRsZSB7XG4gIGNvbG9yOiAjYTBhNWFiOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1zdGFraW5nIC5jaGFydC1vcHRpb25zIC5vcHRpb25zIGJ1dHRvbiB7XG4gIGNvbG9yOiAjZTBlMGUwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmIzNjQ0OyB9XG5cbi50aGVtZS1ncmF5IGFwcC1zdGFraW5nIC5jaGFydC1vcHRpb25zIC5vcHRpb25zIGJ1dHRvbiB7XG4gIGNvbG9yOiAjZTBlMGUwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtc3Rha2luZyAuY2hhcnQtb3B0aW9ucyAub3B0aW9ucyBidXR0b24ge1xuICBjb2xvcjogIzQzNDU0YjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsgfVxuXG4udGhlbWUtZGFyayBhcHAtc3Rha2luZyAuY2hhcnQtb3B0aW9ucyAub3B0aW9ucyBidXR0b24uYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1NjU3NjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtc3Rha2luZyAuY2hhcnQtb3B0aW9ucyAub3B0aW9ucyBidXR0b24uYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxNTk2MDsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLXN0YWtpbmcgLmNoYXJ0LW9wdGlvbnMgLm9wdGlvbnMgYnV0dG9uLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7IH1cblxuLmlucHV0LWJsb2NrLWFsaWFzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5pbnB1dC1ibG9jay1hbGlhcyAuYWxpYXMtZHJvcGRvd24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDYuNXJlbTtcbiAgICBtYXgtaGVpZ2h0OiAxMHJlbTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgIC50aGVtZS1kYXJrIC5pbnB1dC1ibG9jay1hbGlhcyAuYWxpYXMtZHJvcGRvd24ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzE3MWUyNztcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgLmlucHV0LWJsb2NrLWFsaWFzIC5hbGlhcy1kcm9wZG93biB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxO1xuICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAudGhlbWUtd2hpdGUgLmlucHV0LWJsb2NrLWFsaWFzIC5hbGlhcy1kcm9wZG93biB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgICAuaW5wdXQtYmxvY2stYWxpYXMgLmFsaWFzLWRyb3Bkb3duIGRpdiB7XG4gICAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICAgIHBhZGRpbmc6IDFyZW07IH1cbiAgICAgIC50aGVtZS1kYXJrIC5pbnB1dC1ibG9jay1hbGlhcyAuYWxpYXMtZHJvcGRvd24gZGl2OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1OCwgNjksIDg1LCAwLjUpOyB9XG4gICAgICAudGhlbWUtZ3JheSAuaW5wdXQtYmxvY2stYWxpYXMgLmFsaWFzLWRyb3Bkb3duIGRpdjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTgsIDYyLCA2NiwgMC41KTsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC5pbnB1dC1ibG9jay1hbGlhcyAuYWxpYXMtZHJvcGRvd24gZGl2OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDI0MCwgMjQwLCAwLjUpOyB9XG5cbmFwcC1jb250YWN0cywgYXBwLWFkZC1jb250YWN0cyxcbmFwcC1jb250YWN0LXNlbmQsIGFwcC1leHBvcnQtaW1wb3J0IHtcbiAgZmxleDogMSAxIGF1dG87XG4gIHBhZGRpbmc6IDNyZW07XG4gIG1pbi13aWR0aDogODVyZW07IH1cbiAgYXBwLWNvbnRhY3RzIC5jb250ZW50LCBhcHAtYWRkLWNvbnRhY3RzIC5jb250ZW50LFxuICBhcHAtY29udGFjdC1zZW5kIC5jb250ZW50LCBhcHAtZXhwb3J0LWltcG9ydCAuY29udGVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDNyZW07XG4gICAgbWluLWhlaWdodDogMTAwJTsgfVxuICAgIC50aGVtZS1kYXJrIGFwcC1jb250YWN0cyAuY29udGVudCwgLnRoZW1lLWRhcmsgYXBwLWFkZC1jb250YWN0cyAuY29udGVudCwgLnRoZW1lLWRhcmtcbiAgICBhcHAtY29udGFjdC1zZW5kIC5jb250ZW50LCAudGhlbWUtZGFyayBhcHAtZXhwb3J0LWltcG9ydCAuY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDQzLCA1NCwgNjgsIDAuNSk7XG4gICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgIC50aGVtZS1ncmF5IGFwcC1jb250YWN0cyAuY29udGVudCwgLnRoZW1lLWdyYXkgYXBwLWFkZC1jb250YWN0cyAuY29udGVudCwgLnRoZW1lLWdyYXlcbiAgICBhcHAtY29udGFjdC1zZW5kIC5jb250ZW50LCAudGhlbWUtZ3JheSBhcHAtZXhwb3J0LWltcG9ydCAuY29udGVudCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDM3LCA0MCwgNDMsIDAuNSk7XG4gICAgICBjb2xvcjogI2UwZTBlMDsgfVxuICAgIC50aGVtZS13aGl0ZSBhcHAtY29udGFjdHMgLmNvbnRlbnQsIC50aGVtZS13aGl0ZSBhcHAtYWRkLWNvbnRhY3RzIC5jb250ZW50LCAudGhlbWUtd2hpdGVcbiAgICBhcHAtY29udGFjdC1zZW5kIC5jb250ZW50LCAudGhlbWUtd2hpdGUgYXBwLWV4cG9ydC1pbXBvcnQgLmNvbnRlbnQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgICBhcHAtY29udGFjdHMgLmNvbnRlbnQgLmhlYWQsIGFwcC1hZGQtY29udGFjdHMgLmNvbnRlbnQgLmhlYWQsXG4gICAgYXBwLWNvbnRhY3Qtc2VuZCAuY29udGVudCAuaGVhZCwgYXBwLWV4cG9ydC1pbXBvcnQgLmNvbnRlbnQgLmhlYWQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDsgfVxuXG4udGhlbWUtZGFyayBhcHAtY29udGFjdHMgdGFibGUgLmFsaWFzIHtcbiAgY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWNvbnRhY3RzIHRhYmxlIC5hbGlhcyB7XG4gIGNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtY29udGFjdHMgdGFibGUgLmFsaWFzIHtcbiAgY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWNvbnRhY3RzIHRhYmxlIGJ1dHRvbiAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cblxuLnRoZW1lLWdyYXkgYXBwLWNvbnRhY3RzIHRhYmxlIGJ1dHRvbiAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1jb250YWN0cyB0YWJsZSBidXR0b24gLmljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1jb250YWN0cyB0YWJsZSBidXR0b24gc3BhbiB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1jb250YWN0cyB0YWJsZSBidXR0b24gc3BhbiB7XG4gIGNvbG9yOiAjZTBlMGUwOyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtY29udGFjdHMgdGFibGUgYnV0dG9uIHNwYW4ge1xuICBjb2xvcjogIzQzNDU0YjsgfVxuXG4udGhlbWUtZGFyayBhcHAtY29udGFjdHMgLmZvb3RlciB7XG4gIGNvbG9yOiAjNGRiMWZmOyB9XG5cbi50aGVtZS1ncmF5IGFwcC1jb250YWN0cyAuZm9vdGVyIHtcbiAgY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1jb250YWN0cyAuZm9vdGVyIHtcbiAgY29sb3I6ICMyYzk1ZjE7IH1cblxuLnRoZW1lLWRhcmsgYXBwLWNvbnRhY3RzIC5mb290ZXIgLmltcG9ydC1idG4ge1xuICBjb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtY29udGFjdHMgLmZvb3RlciAuaW1wb3J0LWJ0biB7XG4gIGNvbG9yOiAjNDJhNWY1OyB9XG5cbi50aGVtZS13aGl0ZSBhcHAtY29udGFjdHMgLmZvb3RlciAuaW1wb3J0LWJ0biB7XG4gIGNvbG9yOiAjMmM5NWYxOyB9XG5cbi50aGVtZS1kYXJrIGFwcC1jb250YWN0cyAuZm9vdGVyIC5pbXBvcnQtYnRuIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtY29udGFjdHMgLmZvb3RlciAuaW1wb3J0LWJ0biAuaWNvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cblxuLnRoZW1lLXdoaXRlIGFwcC1jb250YWN0cyAuZm9vdGVyIC5pbXBvcnQtYnRuIC5pY29uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJjOTVmMTsgfVxuXG4udGhlbWUtZGFyayBhcHAtY29udGFjdC1zZW5kIC53YWxsZXRzLXNlbGVjdGlvbiBidXR0b24ge1xuICBjb2xvcjogIzRkYjFmZjsgfVxuXG4udGhlbWUtZ3JheSBhcHAtY29udGFjdC1zZW5kIC53YWxsZXRzLXNlbGVjdGlvbiBidXR0b24ge1xuICBjb2xvcjogIzQyYTVmNTsgfVxuXG4udGhlbWUtd2hpdGUgYXBwLWNvbnRhY3Qtc2VuZCAud2FsbGV0cy1zZWxlY3Rpb24gYnV0dG9uIHtcbiAgY29sb3I6ICMyYzk1ZjE7IH1cblxuLmZvcm0tZGV0YWlscyB7XG4gIG1hcmdpbi10b3A6IDEuOHJlbTsgfVxuICAuZm9ybS1kZXRhaWxzIC5pbnB1dC1ibG9jazpmaXJzdC1jaGlsZCB7XG4gICAgd2lkdGg6IDUwJTsgfVxuICAuZm9ybS1kZXRhaWxzIC53YWxsZXQtYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgIC5mb3JtLWRldGFpbHMgLndhbGxldC1idXR0b25zIGJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDIuOXJlbSAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDE1cmVtOyB9XG5cbi5mb3JtLXNlZWQgbGFiZWwge1xuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTsgfVxuICAudGhlbWUtZGFyayAuZm9ybS1zZWVkIGxhYmVsIHtcbiAgICBjb2xvcjogIzU1NjU3NjsgfVxuICAudGhlbWUtZ3JheSAuZm9ybS1zZWVkIGxhYmVsIHtcbiAgICBjb2xvcjogIzU2NWM2MjsgfVxuICAudGhlbWUtd2hpdGUgLmZvcm0tc2VlZCBsYWJlbCB7XG4gICAgY29sb3I6ICNhMGE1YWI7IH1cblxuLmZvcm0tc2VlZCAuZm9ybS1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDNyZW07XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC50aGVtZS1kYXJrIC5mb3JtLXNlZWQgLmZvcm0tY29udGVudCB7XG4gICAgYm9yZGVyOiAycHggc29saWQgIzJiMzY0NDsgfVxuICAudGhlbWUtZ3JheSAuZm9ybS1zZWVkIC5mb3JtLWNvbnRlbnQge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICMyZjM0Mzg7IH1cbiAgLnRoZW1lLXdoaXRlIC5mb3JtLXNlZWQgLmZvcm0tY29udGVudCB7XG4gICAgYm9yZGVyOiAycHggc29saWQgI2ViZWJlYjsgfVxuXG4uZm9ybS1zZWVkIC50ZXh0LWNvcmFsIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gIC50aGVtZS1kYXJrIC5mb3JtLXNlZWQgLnRleHQtY29yYWwge1xuICAgIGNvbG9yOiAjNGRiMWZmOyB9XG4gIC50aGVtZS1ncmF5IC5mb3JtLXNlZWQgLnRleHQtY29yYWwge1xuICAgIGNvbG9yOiAjNDJhNWY1OyB9XG4gIC50aGVtZS13aGl0ZSAuZm9ybS1zZWVkIC50ZXh0LWNvcmFsIHtcbiAgICBjb2xvcjogIzJjOTVmMTsgfVxuXG4uZm9ybS1zZWVkIC5zZWVkLXBocmFzZS1mb3JtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1heC13aWR0aDogMzhyZW07XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gLmlucHV0LWJsb2NrLFxuICAuZm9ybS1zZWVkIC5zZWVkLXBocmFzZS1mb3JtIGJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLmZvcm0tc2VlZCAuc2VlZC1waHJhc2UtZm9ybSAuZXJyb3ItbWVzc2FnZSB7XG4gICAgbWFyZ2luLXRvcDogMXJlbTsgfVxuICAgIC50aGVtZS1kYXJrIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gLmVycm9yLW1lc3NhZ2Uge1xuICAgICAgY29sb3I6ICNmZjZmMDA7IH1cbiAgICAudGhlbWUtZ3JheSAuZm9ybS1zZWVkIC5zZWVkLXBocmFzZS1mb3JtIC5lcnJvci1tZXNzYWdlIHtcbiAgICAgIGNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gLmVycm9yLW1lc3NhZ2Uge1xuICAgICAgY29sb3I6ICNmZjZmMDA7IH1cbiAgLmZvcm0tc2VlZCAuc2VlZC1waHJhc2UtZm9ybSAuc2VjdXJlZC1zZWVkIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgLnRoZW1lLWRhcmsgLmZvcm0tc2VlZCAuc2VlZC1waHJhc2UtZm9ybSAuc2VjdXJlZC1zZWVkIHtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgLmZvcm0tc2VlZCAuc2VlZC1waHJhc2UtZm9ybSAuc2VjdXJlZC1zZWVkIHtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLXdoaXRlIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gLnNlY3VyZWQtc2VlZCB7XG4gICAgICBjb2xvcjogI2EwYTVhYjsgfVxuICAgIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gLnNlY3VyZWQtc2VlZCAuaWNvbiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEuMnJlbTsgfVxuICAuZm9ybS1zZWVkIC5zZWVkLXBocmFzZS1mb3JtIGJ1dHRvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDNyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTsgfVxuICAgIC5mb3JtLXNlZWQgLnNlZWQtcGhyYXNlLWZvcm0gYnV0dG9uIC5pY29uIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtOyB9XG5cbi5zZWVkLXBocmFzZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyB9XG4gIC5zZWVkLXBocmFzZS10aXRsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgIC50aGVtZS1kYXJrIC5zZWVkLXBocmFzZS10aXRsZSB7XG4gICAgICBjb2xvcjogIzU1NjU3NjsgfVxuICAgIC50aGVtZS1ncmF5IC5zZWVkLXBocmFzZS10aXRsZSB7XG4gICAgICBjb2xvcjogIzU2NWM2MjsgfVxuICAgIC50aGVtZS13aGl0ZSAuc2VlZC1waHJhc2UtdGl0bGUge1xuICAgICAgY29sb3I6ICNhMGE1YWI7IH1cbiAgICAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24ge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHdpZHRoOiAxLjdyZW07XG4gICAgICAgIGhlaWdodDogMS43cmVtOyB9XG4gICAgICAgIC5zZWVkLXBocmFzZS10aXRsZSAucmlnaHQtcGFydCAuaWNvbi5jb3B5IHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMnJlbTtcbiAgICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvY29weS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7IH1cbiAgICAgICAgICAudGhlbWUtZGFyayAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24uY29weSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG4gICAgICAgICAgLnRoZW1lLWdyYXkgLnNlZWQtcGhyYXNlLXRpdGxlIC5yaWdodC1wYXJ0IC5pY29uLmNvcHkge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuICAgICAgICAgIC50aGVtZS13aGl0ZSAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24uY29weSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG4gICAgICAgICAgLnNlZWQtcGhyYXNlLXRpdGxlIC5yaWdodC1wYXJ0IC5pY29uLmNvcHk6aG92ZXIge1xuICAgICAgICAgICAgb3BhY2l0eTogMC43NTsgfVxuICAgICAgICAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24uY29waWVkIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMnJlbTtcbiAgICAgICAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvY29tcGxldGUtdGVzdHdhbGxldC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7IH1cbiAgICAgICAgICAudGhlbWUtZGFyayAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24uY29waWVkIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZGIxZmY7IH1cbiAgICAgICAgICAudGhlbWUtZ3JheSAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24uY29waWVkIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0MmE1ZjU7IH1cbiAgICAgICAgICAudGhlbWUtd2hpdGUgLnNlZWQtcGhyYXNlLXRpdGxlIC5yaWdodC1wYXJ0IC5pY29uLmNvcGllZCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM5NWYxOyB9XG4gICAgICAgIC5zZWVkLXBocmFzZS10aXRsZSAucmlnaHQtcGFydCAuaWNvbi5zZWN1cmVkLCAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgLmljb24udW5zZWN1cmVkIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMS4ycmVtOyB9XG4gICAgICAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgc3BhbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgICAuc2VlZC1waHJhc2UtdGl0bGUgLnJpZ2h0LXBhcnQgc3BhbiAuaWNvbiB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDEuMnJlbTsgfVxuICAuc2VlZC1waHJhc2UtY29udGVudCB7XG4gICAgcGFkZGluZzogMXJlbSAwIDFyZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gICAgLnRoZW1lLWRhcmsgLnNlZWQtcGhyYXNlLWNvbnRlbnQge1xuICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICMyYjM2NDQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzJiMzY0NDsgfVxuICAgIC50aGVtZS1ncmF5IC5zZWVkLXBocmFzZS1jb250ZW50IHtcbiAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjMmYzNDM4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMyZjM0Mzg7IH1cbiAgICAudGhlbWUtd2hpdGUgLnNlZWQtcGhyYXNlLWNvbnRlbnQge1xuICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNlYmViZWI7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ViZWJlYjsgfVxuICAgIC5zZWVkLXBocmFzZS1jb250ZW50IC5pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZzogMCAycmVtO1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgICAgbWluLWhlaWdodDogMzVweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4zcmVtOyB9XG4gICAgICAudGhlbWUtZGFyayAuc2VlZC1waHJhc2UtY29udGVudCAuaXRlbSB7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSAuc2VlZC1waHJhc2UtY29udGVudCAuaXRlbSB7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnNlZWQtcGhyYXNlLWNvbnRlbnQgLml0ZW0ge1xuICAgICAgICBjb2xvcjogIzQzNDU0YjsgfVxuICAgICAgLnRoZW1lLWRhcmsgLnNlZWQtcGhyYXNlLWNvbnRlbnQgLml0ZW0uZGFyayB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxODIwMmE7IH1cbiAgICAgIC50aGVtZS1ncmF5IC5zZWVkLXBocmFzZS1jb250ZW50IC5pdGVtLmRhcmsge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyZDMxOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnNlZWQtcGhyYXNlLWNvbnRlbnQgLml0ZW0uZGFyayB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7IH1cbiAgLnNlZWQtcGhyYXNlLWZvb3RlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgLnNlZWQtcGhyYXNlLWZvb3RlciAudGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgICBsaW5lLWhlaWdodDogMi40cmVtOyB9XG4gICAgICAudGhlbWUtZGFyayAuc2VlZC1waHJhc2UtZm9vdGVyIC50aXRsZSB7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtZ3JheSAuc2VlZC1waHJhc2UtZm9vdGVyIC50aXRsZSB7XG4gICAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgICAudGhlbWUtd2hpdGUgLnNlZWQtcGhyYXNlLWZvb3RlciAudGl0bGUge1xuICAgICAgICBjb2xvcjogIzQzNDU0YjsgfVxuXG4uaWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTsgfVxuICAuaWNvbi5zZWN1cmVkIHtcbiAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvc2VjdXJlZC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7IH1cbiAgICAudGhlbWUtZGFyayAuaWNvbi5zZWN1cmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1Y2RhOWQ7IH1cbiAgICAudGhlbWUtZ3JheSAuaWNvbi5zZWN1cmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0N2NmOGQ7IH1cbiAgICAudGhlbWUtd2hpdGUgLmljb24uc2VjdXJlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDZjMTcyOyB9XG4gIC5pY29uLmluZm8ge1xuICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjsgfVxuICAgIC50aGVtZS1kYXJrIC5pY29uLmluZm8ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuICAgIC50aGVtZS1ncmF5IC5pY29uLmluZm8ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuICAgIC50aGVtZS13aGl0ZSAuaWNvbi5pbmZvIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cbiAgLmljb24udW5zZWN1cmVkIHtcbiAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvdW5zZWN1cmVkLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjsgfVxuICAgIC50aGVtZS1kYXJrIC5pY29uLnVuc2VjdXJlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2ZjAwOyB9XG4gICAgLnRoZW1lLWdyYXkgLmljb24udW5zZWN1cmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cbiAgICAudGhlbWUtd2hpdGUgLmljb24udW5zZWN1cmVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjZmMDA7IH1cbiAgLmljb24uc2FmZXR5IHtcbiAgICBtYXNrOiB1cmwofnNyYy9hc3NldHMvaWNvbnMvc2FmZXR5LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjsgfVxuICAgIC50aGVtZS1kYXJrIC5pY29uLnNhZmV0eSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOTIxOyB9XG4gICAgLnRoZW1lLWdyYXkgLmljb24uc2FmZXR5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxYTFhMWE7IH1cbiAgICAudGhlbWUtd2hpdGUgLmljb24uc2FmZXR5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7IH1cblxuLndyYXAtYnV0dG9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgLndyYXAtYnV0dG9ucyAuc2VlZC1waHJhc2UtYnV0dG9uIHtcbiAgICBtYXJnaW46IDIuOHJlbSAwO1xuICAgIHdpZHRoOiAyNSU7XG4gICAgbWluLXdpZHRoOiAxLjVyZW07IH1cbiAgLndyYXAtYnV0dG9ucyAuY29weS1idXR0b24ge1xuICAgIG1hcmdpbjogMi44cmVtIDFyZW07XG4gICAgd2lkdGg6IDI1JTtcbiAgICBtaW4td2lkdGg6IDEuNXJlbTsgfVxuXG4uaGVhZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmb250LXNpemU6IDEuM3JlbTtcbiAgcGFkZGluZzogMCAzcmVtO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzcmVtOyB9XG4gIC50aGVtZS1kYXJrIC5oZWFkIHtcbiAgICBjb2xvcjogIzRkYjFmZjsgfVxuICAudGhlbWUtZ3JheSAuaGVhZCB7XG4gICAgY29sb3I6ICM0MmE1ZjU7IH1cbiAgLnRoZW1lLXdoaXRlIC5oZWFkIHtcbiAgICBjb2xvcjogIzJjOTVmMTsgfVxuICAuaGVhZCAuYnJlYWRjcnVtYnMgPiBzcGFuOm5vdCg6bGFzdC1jaGlsZCksIC5oZWFkIC5icmVhZGNydW1icyBhOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgIG91dGxpbmUtc3R5bGU6IG5vbmU7IH1cbiAgICAuaGVhZCAuYnJlYWRjcnVtYnMgPiBzcGFuOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIsIC5oZWFkIC5icmVhZGNydW1icyBhOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwLjVyZW07XG4gICAgICByaWdodDogLTEuNXJlbTtcbiAgICAgIHdpZHRoOiAwLjlyZW07XG4gICAgICBoZWlnaHQ6IDAuOXJlbTtcbiAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1yaWdodC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgICBtYXNrLXNpemU6IGNvdmVyOyB9XG4gICAgICAudGhlbWUtZGFyayAuaGVhZCAuYnJlYWRjcnVtYnMgPiBzcGFuOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIsIC50aGVtZS1kYXJrIC5oZWFkIC5icmVhZGNydW1icyBhOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGRiMWZmOyB9XG4gICAgICAudGhlbWUtZ3JheSAuaGVhZCAuYnJlYWRjcnVtYnMgPiBzcGFuOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIsIC50aGVtZS1ncmF5IC5oZWFkIC5icmVhZGNydW1icyBhOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDJhNWY1OyB9XG4gICAgICAudGhlbWUtd2hpdGUgLmhlYWQgLmJyZWFkY3J1bWJzID4gc3Bhbjpub3QoOmxhc3QtY2hpbGQpOmFmdGVyLCAudGhlbWUtd2hpdGUgLmhlYWQgLmJyZWFkY3J1bWJzIGE6bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cbiAgLmhlYWQgLmJhY2stYnRuIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICM0ZGIxZmY7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuM3JlbTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGhlaWdodDogYXV0bzsgfVxuICAgIC5oZWFkIC5iYWNrLWJ0biAuaWNvbiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuN3JlbTtcbiAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9iYWNrLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAwLjlyZW07XG4gICAgICBoZWlnaHQ6IDAuOXJlbTsgfVxuICAgICAgLnRoZW1lLWRhcmsgLmhlYWQgLmJhY2stYnRuIC5pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRkYjFmZjsgfVxuICAgICAgLnRoZW1lLWdyYXkgLmhlYWQgLmJhY2stYnRuIC5pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyYTVmNTsgfVxuICAgICAgLnRoZW1lLXdoaXRlIC5oZWFkIC5iYWNrLWJ0biAuaWNvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyYzk1ZjE7IH1cblxuLnNjcm9sbGVkLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTsgfVxuXG4uc2Nyb2xsZWQtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuXG4uc2Nyb2xsZWQtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2O1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6IDAuMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDAuNXJlbTsgfVxuXG4uc2Nyb2xsZWQtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2OyB9XG5cbnRhYmxlIHtcbiAgZm9udC1zaXplOiAxLjNyZW07XG4gIHdpZHRoOiAxMDAlOyB9XG4gIHRhYmxlIHRoZWFkIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gICAgLnRoZW1lLWRhcmsgdGFibGUgdGhlYWQge1xuICAgICAgY29sb3I6ICM1NTY1NzY7IH1cbiAgICAudGhlbWUtZ3JheSB0YWJsZSB0aGVhZCB7XG4gICAgICBjb2xvcjogIzU2NWM2MjsgfVxuICAgIC50aGVtZS13aGl0ZSB0YWJsZSB0aGVhZCB7XG4gICAgICBjb2xvcjogI2EwYTVhYjsgfVxuICAgIHRhYmxlIHRoZWFkIHRyIHtcbiAgICAgIGhlaWdodDogNHJlbTsgfVxuICAgICAgdGFibGUgdGhlYWQgdHIgdGgge1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyB9XG4gICAgICAgIHRhYmxlIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDNyZW07IH1cbiAgICAgICAgdGFibGUgdGhlYWQgdHIgdGg6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogM3JlbTsgfVxuICB0YWJsZSB0Ym9keSB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAgIC50aGVtZS1kYXJrIHRhYmxlIHRib2R5IHtcbiAgICAgIGNvbG9yOiAjZTBlMGUwOyB9XG4gICAgLnRoZW1lLWdyYXkgdGFibGUgdGJvZHkge1xuICAgICAgY29sb3I6ICNlMGUwZTA7IH1cbiAgICAudGhlbWUtd2hpdGUgdGFibGUgdGJvZHkge1xuICAgICAgY29sb3I6ICM0MzQ1NGI7IH1cbiAgICB0YWJsZSB0Ym9keSB0ciB7XG4gICAgICBoZWlnaHQ6IDMuNXJlbTsgfVxuICAgICAgLnRoZW1lLWRhcmsgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKG9kZCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgyMDJhOyB9XG4gICAgICAudGhlbWUtZ3JheSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTI5MmQ7IH1cbiAgICAgIC50aGVtZS13aGl0ZSB0YWJsZSB0Ym9keSB0cjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7IH1cbiAgICAgIHRhYmxlIHRib2R5IHRyIHRkIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMCAxcmVtO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBtYXgtd2lkdGg6IDIwcmVtOyB9XG4gICAgICAgIHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDNyZW07IH1cbiAgICAgICAgdGFibGUgdGJvZHkgdHIgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogM3JlbTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zO1xuICBzcmM6IHVybCh+c3JjL2Fzc2V0cy9mb250cy9PcGVuU2Fucy1MaWdodC50dGYpO1xuICBmb250LXdlaWdodDogMzAwOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogT3BlblNhbnM7XG4gIHNyYzogdXJsKH5zcmMvYXNzZXRzL2ZvbnRzL09wZW5TYW5zLVJlZ3VsYXIudHRmKTtcbiAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zO1xuICBzcmM6IHVybCh+c3JjL2Fzc2V0cy9mb250cy9PcGVuU2Fucy1TZW1pQm9sZC50dGYpO1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogT3BlblNhbnM7XG4gIHNyYzogdXJsKH5zcmMvYXNzZXRzL2ZvbnRzL09wZW5TYW5zLUJvbGQudHRmKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zO1xuICBzcmM6IHVybCh+c3JjL2Fzc2V0cy9mb250cy9PcGVuU2Fucy1FeHRyYUJvbGQudHRmKTtcbiAgZm9udC13ZWlnaHQ6IDgwMDsgfVxuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDEwcHg7IH1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiBPcGVuU2Fucywgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxLjZyZW07XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiAxMDB2aDsgfVxuICBib2R5LnRoZW1lLWRhcmsge1xuICAgIGJhY2tncm91bmQ6ICMxMzE5MjEgdXJsKFwiYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLWRhcmsucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxuICBib2R5LnRoZW1lLWdyYXkge1xuICAgIGJhY2tncm91bmQ6ICMxMDE0MTcgdXJsKFwiYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLWdyYXkucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxuICBib2R5LnRoZW1lLXdoaXRlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZWVlZWVlIHVybChcImFzc2V0cy9pbWFnZXMvYmFja2dyb3VuZC13aGl0ZS5wbmdcIikgbm8tcmVwZWF0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyB9XG4gIGJvZHkgYXBwLXJvb3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlOyB9XG5cbi51cGRhdGUtdG9vbHRpcCAudG9vbHRpcC1pbm5lciAuaWNvbiB7XG4gIG1hc2s6IHVybChhc3NldHMvaWNvbnMvdXBkYXRlLWFsZXJ0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjsgfVxuIiwiLm5nLXNlbGVjdC5uZy1zZWxlY3Qtb3BlbmVkPi5uZy1zZWxlY3QtY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2IzYjNiMyAjY2NjICNkOWQ5ZDl9Lm5nLXNlbGVjdC5uZy1zZWxlY3Qtb3BlbmVkPi5uZy1zZWxlY3QtY29udGFpbmVyOmhvdmVye2JveC1zaGFkb3c6bm9uZX0ubmctc2VsZWN0Lm5nLXNlbGVjdC1vcGVuZWQ+Lm5nLXNlbGVjdC1jb250YWluZXIgLm5nLWFycm93e3RvcDotMnB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjOTk5O2JvcmRlci13aWR0aDowIDVweCA1cHh9Lm5nLXNlbGVjdC5uZy1zZWxlY3Qtb3BlbmVkPi5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy1hcnJvdzpob3Zlcntib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzMzM30ubmctc2VsZWN0Lm5nLXNlbGVjdC1vcGVuZWQubmctc2VsZWN0LWJvdHRvbT4ubmctc2VsZWN0LWNvbnRhaW5lcntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubmctc2VsZWN0Lm5nLXNlbGVjdC1vcGVuZWQubmctc2VsZWN0LXRvcD4ubmctc2VsZWN0LWNvbnRhaW5lcntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0ubmctc2VsZWN0Lm5nLXNlbGVjdC1mb2N1c2VkOm5vdCgubmctc2VsZWN0LW9wZW5lZCk+Lm5nLXNlbGVjdC1jb250YWluZXJ7Ym9yZGVyLWNvbG9yOiMwMDdlZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDAgM3B4IHJnYmEoMCwxMjYsMjU1LDAuMSl9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtZGlzYWJsZWQ+Lm5nLXNlbGVjdC1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS5uZy1zZWxlY3QgLm5nLWhhcy12YWx1ZSAubmctcGxhY2Vob2xkZXJ7ZGlzcGxheTpub25lfS5uZy1zZWxlY3QgLm5nLXNlbGVjdC1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2NjYzttaW4taGVpZ2h0OjM2cHg7YWxpZ24taXRlbXM6Y2VudGVyfS5uZy1zZWxlY3QgLm5nLXNlbGVjdC1jb250YWluZXI6aG92ZXJ7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4wNil9Lm5nLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVye2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1bZGlyPVwicnRsXCJdIC5uZy1zZWxlY3QgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lcntwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjB9Lm5nLXNlbGVjdCAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy1wbGFjZWhvbGRlcntjb2xvcjojOTk5fS5uZy1zZWxlY3Qubmctc2VsZWN0LXNpbmdsZSAubmctc2VsZWN0LWNvbnRhaW5lcntoZWlnaHQ6MzZweH0ubmctc2VsZWN0Lm5nLXNlbGVjdC1zaW5nbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctaW5wdXR7dG9wOjVweDtsZWZ0OjA7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDo1MHB4fVtkaXI9XCJydGxcIl0gLm5nLXNlbGVjdC5uZy1zZWxlY3Qtc2luZ2xlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLWlucHV0e3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6NTBweH0ubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZS5uZy1zZWxlY3QtZGlzYWJsZWQ+Lm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2U2ZTZlNn0ubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZS5uZy1zZWxlY3QtZGlzYWJsZWQ+Lm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWUgLm5nLXZhbHVlLWxhYmVse3BhZGRpbmc6MCA1cHh9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lcntwYWRkaW5nLXRvcDo1cHg7cGFkZGluZy1sZWZ0OjdweH1bZGlyPVwicnRsXCJdIC5uZy1zZWxlY3Qubmctc2VsZWN0LW11bHRpcGxlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXJ7cGFkZGluZy1yaWdodDo3cHg7cGFkZGluZy1sZWZ0OjB9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWV7Zm9udC1zaXplOi45ZW07bWFyZ2luLWJvdHRvbTo1cHg7YmFja2dyb3VuZC1jb2xvcjojZWJmNWZmO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDo1cHh9W2Rpcj1cInJ0bFwiXSAubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZSAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy12YWx1ZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo1cHh9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWUubmctdmFsdWUtZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS5uZy1zZWxlY3Qubmctc2VsZWN0LW11bHRpcGxlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLXZhbHVlLm5nLXZhbHVlLWRpc2FibGVkIC5uZy12YWx1ZS1sYWJlbHtwYWRkaW5nLWxlZnQ6NXB4fVtkaXI9XCJydGxcIl0gLm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWUubmctdmFsdWUtZGlzYWJsZWQgLm5nLXZhbHVlLWxhYmVse3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6NXB4fS5uZy1zZWxlY3Qubmctc2VsZWN0LW11bHRpcGxlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLXZhbHVlIC5uZy12YWx1ZS1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjFweCA1cHh9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWUgLm5nLXZhbHVlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoxcHggNXB4fS5uZy1zZWxlY3Qubmctc2VsZWN0LW11bHRpcGxlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLXZhbHVlIC5uZy12YWx1ZS1pY29uOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2QxZThmZn0ubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZSAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy12YWx1ZSAubmctdmFsdWUtaWNvbi5sZWZ0e2JvcmRlci1yaWdodDoxcHggc29saWQgI2I4ZGJmZn1bZGlyPVwicnRsXCJdIC5uZy1zZWxlY3Qubmctc2VsZWN0LW11bHRpcGxlIC5uZy1zZWxlY3QtY29udGFpbmVyIC5uZy12YWx1ZS1jb250YWluZXIgLm5nLXZhbHVlIC5uZy12YWx1ZS1pY29uLmxlZnR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiOGRiZmY7Ym9yZGVyLXJpZ2h0Om5vbmV9Lm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctdmFsdWUgLm5nLXZhbHVlLWljb24ucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiOGRiZmZ9W2Rpcj1cInJ0bFwiXSAubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZSAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy12YWx1ZSAubmctdmFsdWUtaWNvbi5yaWdodHtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2I4ZGJmZn0ubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZSAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy1pbnB1dHtwYWRkaW5nOjAgMCAzcHggM3B4fVtkaXI9XCJydGxcIl0gLm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctaW5wdXR7cGFkZGluZzowIDNweCAzcHggMH0ubmctc2VsZWN0Lm5nLXNlbGVjdC1tdWx0aXBsZSAubmctc2VsZWN0LWNvbnRhaW5lciAubmctdmFsdWUtY29udGFpbmVyIC5uZy1wbGFjZWhvbGRlcnt0b3A6NXB4O3BhZGRpbmctYm90dG9tOjVweDtwYWRkaW5nLWxlZnQ6M3B4fVtkaXI9XCJydGxcIl0gLm5nLXNlbGVjdC5uZy1zZWxlY3QtbXVsdGlwbGUgLm5nLXNlbGVjdC1jb250YWluZXIgLm5nLXZhbHVlLWNvbnRhaW5lciAubmctcGxhY2Vob2xkZXJ7cGFkZGluZy1yaWdodDozcHg7cGFkZGluZy1sZWZ0OjB9Lm5nLXNlbGVjdCAubmctY2xlYXItd3JhcHBlcntjb2xvcjojOTk5fS5uZy1zZWxlY3QgLm5nLWNsZWFyLXdyYXBwZXI6aG92ZXIgLm5nLWNsZWFye2NvbG9yOiNEMDAyMUJ9Lm5nLXNlbGVjdCAubmctc3Bpbm5lci16b25le3BhZGRpbmc6NXB4IDVweCAwIDB9W2Rpcj1cInJ0bFwiXSAubmctc2VsZWN0IC5uZy1zcGlubmVyLXpvbmV7cGFkZGluZzo1cHggMCAwIDVweH0ubmctc2VsZWN0IC5uZy1hcnJvdy13cmFwcGVye3dpZHRoOjI1cHg7cGFkZGluZy1yaWdodDo1cHh9W2Rpcj1cInJ0bFwiXSAubmctc2VsZWN0IC5uZy1hcnJvdy13cmFwcGVye3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDowfS5uZy1zZWxlY3QgLm5nLWFycm93LXdyYXBwZXI6aG92ZXIgLm5nLWFycm93e2JvcmRlci10b3AtY29sb3I6IzY2Nn0ubmctc2VsZWN0IC5uZy1hcnJvdy13cmFwcGVyIC5uZy1hcnJvd3tib3JkZXItY29sb3I6Izk5OSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjVweCA1cHggMi41cHh9Lm5nLWRyb3Bkb3duLXBhbmVse2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4wNik7bGVmdDowfS5uZy1kcm9wZG93bi1wYW5lbC5uZy1zZWxlY3QtYm90dG9te3RvcDoxMDAlO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWNvbG9yOiNlNmU2ZTY7bWFyZ2luLXRvcDotMXB4fS5uZy1kcm9wZG93bi1wYW5lbC5uZy1zZWxlY3QtYm90dG9tIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5uZy1kcm9wZG93bi1wYW5lbC5uZy1zZWxlY3QtdG9we2JvdHRvbToxMDAlO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWNvbG9yOiNlNmU2ZTY7bWFyZ2luLWJvdHRvbTotMXB4fS5uZy1kcm9wZG93bi1wYW5lbC5uZy1zZWxlY3QtdG9wIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uOmZpcnN0LWNoaWxke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweH0ubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NXB4IDdweH0ubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NXB4IDdweH0ubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRncm91cHt1c2VyLXNlbGVjdDpub25lO3BhZGRpbmc6OHB4IDEwcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnJnYmEoMCwwLDAsMC41NCk7Y3Vyc29yOnBvaW50ZXJ9Lm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0Z3JvdXAubmctb3B0aW9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGdyb3VwLm5nLW9wdGlvbi1tYXJrZWR7YmFja2dyb3VuZC1jb2xvcjojZjVmYWZmfS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGdyb3VwLm5nLW9wdGlvbi1zZWxlY3RlZCwubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRncm91cC5uZy1vcHRpb24tc2VsZWN0ZWQubmctb3B0aW9uLW1hcmtlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlYmY1ZmY7Zm9udC13ZWlnaHQ6NjAwfS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwwLjg3KTtwYWRkaW5nOjhweCAxMHB4fS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbi5uZy1vcHRpb24tc2VsZWN0ZWQsLm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1zZWxlY3RlZC5uZy1vcHRpb24tbWFya2Vke2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZWJmNWZmfS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbi5uZy1vcHRpb24tc2VsZWN0ZWQgLm5nLW9wdGlvbi1sYWJlbCwubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRpb24ubmctb3B0aW9uLXNlbGVjdGVkLm5nLW9wdGlvbi1tYXJrZWQgLm5nLW9wdGlvbi1sYWJlbHtmb250LXdlaWdodDo2MDB9Lm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1tYXJrZWR7YmFja2dyb3VuZC1jb2xvcjojZjVmYWZmO2NvbG9yOiMzMzN9Lm5nLWRyb3Bkb3duLXBhbmVsIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyAubmctb3B0aW9uLm5nLW9wdGlvbi1kaXNhYmxlZHtjb2xvcjojY2NjfS5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbi5uZy1vcHRpb24tY2hpbGR7cGFkZGluZy1sZWZ0OjIycHh9W2Rpcj1cInJ0bFwiXSAubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRpb24ubmctb3B0aW9uLWNoaWxke3BhZGRpbmctcmlnaHQ6MjJweDtwYWRkaW5nLWxlZnQ6MH0ubmctZHJvcGRvd24tcGFuZWwgLm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIC5uZy1vcHRpb24gLm5nLXRhZy1sYWJlbHtmb250LXNpemU6ODAlO2ZvbnQtd2VpZ2h0OjQwMDtwYWRkaW5nLXJpZ2h0OjVweH1bZGlyPVwicnRsXCJdIC5uZy1kcm9wZG93bi1wYW5lbCAubmctZHJvcGRvd24tcGFuZWwtaXRlbXMgLm5nLW9wdGlvbiAubmctdGFnLWxhYmVse3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDowfVtkaXI9XCJydGxcIl0gLm5nLWRyb3Bkb3duLXBhbmVse2RpcmVjdGlvbjpydGw7dGV4dC1hbGlnbjpyaWdodH1cbiIsIi8vKiAqKioqKioqIHJlc2V0ICYgbm9ybWFsaXplICoqKioqKiogICovL1xyXG5cclxuLy8gYm94LXNpemluZyB0aGUgc2FtZSBmb3IgYWxsIGVsZW1lbnRzXHJcbmh0bWwge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcclxufVxyXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XHJcbiAgYm94LXNpemluZzogaW5oZXJpdDtcclxuICAtd2Via2l0LWJveC1zaXppbmc6IGluaGVyaXQ7XHJcbiAgLW1vei1ib3gtc2l6aW5nOiBpbmhlcml0O1xyXG4gIG1hcmdpbjogMDtcclxuICBwYWRkaW5nOiAwO1xyXG4gIEBpbmNsdWRlIHVuU2VsZWN0O1xyXG59XHJcblxyXG5odG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXHJcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcclxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxyXG5kZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXHJcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXHJcbmIsIHUsIGksIGNlbnRlcixcclxuZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcclxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXHJcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxyXG5hcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcclxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxyXG5tZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcclxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcclxuICAgIGJvcmRlcjogMDtcclxuICAgIGZvbnQtc2l6ZTogMTAwJTtcclxuICAgIGZvbnQ6IGluaGVyaXQ7XHJcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XHJcbn1cclxuYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSxcclxuZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG5ib2R5IHtcclxuICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxufVxyXG5vbCwgdWwge1xyXG4gICAgbGlzdC1zdHlsZTogbm9uZTtcclxufVxyXG5ibG9ja3F1b3RlLCBxIHtcclxuICAgIHF1b3Rlczogbm9uZTtcclxufVxyXG5ibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlcixcclxucTpiZWZvcmUsIHE6YWZ0ZXIge1xyXG4gICAgY29udGVudDogbm9uZTtcclxufVxyXG5cclxuLy90YWJsZVxyXG50YWJsZSB7XHJcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gICAgYm9yZGVyLXNwYWNpbmc6IDA7XHJcbn1cclxudGQsXHJcbnRoIHtcclxuICBwYWRkaW5nOiAwO1xyXG59XHJcblxyXG4vL2Zvcm1zIGVsZW1lbnRcclxuaW5wdXQge1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgICY6LXdlYmtpdC1hdXRvZmlsbCB7XHJcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgMTAwMHB4IHdoaXRlIGluc2V0O1xyXG4gICAgfVxyXG59XHJcblxyXG5idXR0b24sXHJcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcclxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxyXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgb3V0bGluZTogbm9uZTtcclxufVxyXG5idXR0b25bZGlzYWJsZWRdLFxyXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XHJcbiAgY3Vyc29yOiBkZWZhdWx0O1xyXG59XHJcbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcclxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xyXG4gIGJvcmRlcjogMDtcclxuICBwYWRkaW5nOiAwO1xyXG59XHJcbmlucHV0IHtcclxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG59XHJcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xyXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xyXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG59XHJcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXHJcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xyXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcclxufVxyXG5cclxuXHJcbi8vbGlua1xyXG5hIHtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblx0JjphY3RpdmUsXHJcblx0Jjpob3ZlcixcclxuXHQmOmZvY3VzIHtcclxuXHRcdG91dGxpbmU6IDA7XHJcblx0fVxyXG59XHJcblxyXG5pIHsgZm9udC1zdHlsZTogaXRhbGljOyB9XHJcbmIsIHN0cm9uZyB7IGZvbnQtd2VpZ2h0OiA3MDA7ICAgfVxyXG5cclxuLy8gaW1hZ2VzXHJcbmltZyB7XHJcblx0d2lkdGg6IGF1dG87XHJcblx0bWF4LXdpZHRoOiAxMDAlO1xyXG5cdGhlaWdodDogYXV0bztcclxuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG5cdGJvcmRlcjogMDtcclxufVxyXG5cclxuLmhpZGRlbiB7XHJcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcbiIsIi5hcHAtY29udGVudCB7XHJcblxyXG4gIC5wcmVsb2FkZXIge1xyXG5cclxuICAgIC5sb2FkaW5nLWJhciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocHJvZ3Jlc3NCYXJGdWxsQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYnV0dG9uIHtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLCBzYW5zLXNlcmlmO1xyXG4gIGZvbnQtc2l6ZTogMS41cmVtO1xyXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgb3V0bGluZTogbm9uZTtcclxuICBwYWRkaW5nOiAwIDFyZW07XHJcbiAgaGVpZ2h0OiA0LjJyZW07XHJcblxyXG4gICY6ZGlzYWJsZWQ6bm90KC50cmFuc3BhcmVudC1idXR0b24pLCBcclxuICAmLmJsdWUtYnV0dG9uX3Jlc2V0e1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoZGlzYWJsZWRCdXR0b25CYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICBjb2xvcjogdGhlbWVkKGFsdGVybmF0aXZlVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChkaXNhYmxlZEJ1dHRvbkhvdmVyQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJjpmb2N1cyB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoZGlzYWJsZWRCdXR0b25Gb2N1c0NvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5ibHVlLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlQnV0dG9uQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgY29sb3I6IHRoZW1lZChhbHRlcm5hdGl2ZVRleHRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZUJ1dHRvbkhvdmVyQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJjpmb2N1cyB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZUJ1dHRvbkZvY3VzQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLmdyZWVuLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChncmVlbkJ1dHRvbkJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQoYWx0ZXJuYXRpdmVUZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGdyZWVuQnV0dG9uSG92ZXJDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOmZvY3VzIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChncmVlbkJ1dHRvbkZvY3VzQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLnR1cnF1b2lzZS1idXR0b246bm90KDpkaXNhYmxlZCkge1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQodHVycXVvaXNlQnV0dG9uQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgY29sb3I6IHRoZW1lZChhbHRlcm5hdGl2ZVRleHRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQodHVycXVvaXNlQnV0dG9uSG92ZXJDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOmZvY3VzIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZCh0dXJxdW9pc2VCdXR0b25Gb2N1c0NvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi50cmFuc3BhcmVudC1idXR0b24ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICAgIGJvcmRlcjogMC4ycmVtIHNvbGlkIHRoZW1lZCh0cmFuc3BhcmVudEJ1dHRvbkJvcmRlckNvbG9yKTtcclxuICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAuaWNvbiB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1hcmdpbi1yaWdodDogMXJlbTtcclxuICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2NvbXBsZXRlLXRlc3R3YWxsZXQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgICB3aWR0aDogMS43cmVtO1xyXG4gICAgICBoZWlnaHQ6IDEuN3JlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG4uaW5wdXQtYmxvY2sge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcclxuICBtYXJnaW4tYm90dG9tOiAwLjRyZW07XHJcblxyXG4gIC53cmFwLWxhYmVsIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gICAgbWluLWhlaWdodDogMi40cmVtO1xyXG4gIH1cclxuXHJcbiAgbGFiZWwge1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG9wdGlvbmFsVGV4dENvbG9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlucHV0W3R5cGU9J3RleHQnXSwgaW5wdXRbdHlwZT0ncGFzc3dvcmQnXSwgc2VsZWN0IHtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIHBhZGRpbmc6IDAgMXJlbTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiA0LjJyZW07XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChpbnB1dEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLnRleHRhcmVhIHtcclxuICAgIGhlaWdodDogYXV0bztcclxuXHJcbiAgICB0ZXh0YXJlYSB7XHJcbiAgICAgIGZvbnQtZmFtaWx5OiBPcGVuU2Fucywgc2Fucy1zZXJpZjtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBmb250LXNpemU6IDEuNHJlbTtcclxuICAgICAgb3V0bGluZTogbm9uZTtcclxuICAgICAgcGFkZGluZzogMXJlbTtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1pbi13aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBtaW4taGVpZ2h0OiA3LjVyZW07XHJcbiAgICAgIG1heC1oZWlnaHQ6IDcuNXJlbTtcclxuICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgIHJlc2l6ZTogbm9uZTtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChpbnB1dEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmVycm9yLWJsb2NrIHtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjRyZW07XHJcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKHJlZFRleHRDb2xvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC5zdWNjZXNzLWJsb2NrIHtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjRyZW07XHJcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKGdyZWVuVGV4dENvbG9yKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5lcnJvci10ZXh0IHtcclxuICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgIGNvbG9yOiB0aGVtZWQocmVkVGV4dENvbG9yKTtcclxuICB9XHJcbn1cclxuXHJcbmlucHV0W3R5cGU9J3JhZGlvJ10uc3R5bGUtcmFkaW8ge1xyXG5cclxuICAmICsgbGFiZWwge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIEBpbmNsdWRlIHVuU2VsZWN0O1xyXG4gIH1cclxuXHJcbiAgJjpub3QoY2hlY2tlZCkge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgb3BhY2l0eTogMDtcclxuXHJcbiAgICAmICsgbGFiZWwge1xyXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgJiArIGxhYmVsOmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMC43cmVtO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICB3aWR0aDogMS40cmVtO1xyXG4gICAgICBoZWlnaHQ6IDEuNHJlbTtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlcjogMC4xcmVtIHNvbGlkIHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICYgKyBsYWJlbDphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMXJlbTtcclxuICAgICAgbGVmdDogMC4zcmVtO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAwLjhyZW07XHJcbiAgICAgIGhlaWdodDogMC44cmVtO1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmOmNoZWNrZWQge1xyXG5cclxuICAgICYgKyBsYWJlbDphZnRlciB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5pbnB1dFt0eXBlPSdjaGVja2JveCddLnN0eWxlLWNoZWNrYm94IHtcclxuXHJcbiAgJiArIGxhYmVsIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIHBhZGRpbmctbGVmdDogMy42cmVtO1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG9wdGlvbmFsVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBAaW5jbHVkZSB1blNlbGVjdDtcclxuICB9XHJcblxyXG4gICY6bm90KGNoZWNrZWQpIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogMS42cmVtO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG5cclxuICAgICYgKyBsYWJlbCB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAmICsgbGFiZWw6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJyc7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiA1MCU7XHJcbiAgICAgIGxlZnQ6IDEuNnJlbTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgd2lkdGg6IDEuNHJlbTtcclxuICAgICAgaGVpZ2h0OiAxLjRyZW07XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXI6IDAuMXJlbSBzb2xpZCB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICY6Y2hlY2tlZCB7XHJcblxyXG4gICAgJiArIGxhYmVsOmJlZm9yZSB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9jb21wbGV0ZS10ZXN0d2FsbGV0LnN2Zyk7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5zd2l0Y2gge1xyXG5cclxuICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChzd2l0Y2hCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gIH1cclxuXHJcbiAgLmNpcmNsZSB7XHJcblxyXG4gICAgJi5vbiB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmLm9mZiB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4udGFibGUtdG9vbHRpcCB7XHJcbiAgcGFkZGluZzogMXJlbSAycmVtO1xyXG5cclxuICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgIGJhY2tncm91bmQ6IHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKTtcclxuICAgIGJveC1zaGFkb3c6IHRoZW1lZCh0b29sdGlwU2hhZG93KTtcclxuICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgfVxyXG5cclxuICAudG9vbHRpcC1pbm5lciB7XHJcbiAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjhyZW07XHJcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XHJcbiAgfVxyXG5cclxuICAmLm5nLXRvb2x0aXAtdG9wIHtcclxuICAgIG1hcmdpbi10b3A6IC0xcmVtO1xyXG5cclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogLTFyZW07XHJcbiAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC41cmVtKTtcclxuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XHJcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5uZy10b29sdGlwLXRvcC1sZWZ0IHtcclxuICAgIG1hcmdpbi10b3A6IC0xcmVtO1xyXG5cclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogLTFyZW07XHJcbiAgICAgIGxlZnQ6IDAuN3JlbTtcclxuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XHJcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0aGVtZWQodG9vbHRpcEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC10b3AtcmlnaHQge1xyXG4gICAgbWFyZ2luLXRvcDogLTFyZW07XHJcblxyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAtMXJlbTtcclxuICAgICAgcmlnaHQ6IDAuN3JlbTtcclxuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XHJcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0aGVtZWQodG9vbHRpcEJhY2tncm91bmRDb2xvcikgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1ib3R0b20ge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuXHJcbiAgICAmOmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiAtMXJlbTtcclxuICAgICAgbGVmdDogY2FsYyg1MCUgLSAwLjVyZW0pO1xyXG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcclxuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpIHRyYW5zcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLm5nLXRvb2x0aXAtYm90dG9tLWxlZnQge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuXHJcbiAgICAmOmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiAtMXJlbTtcclxuICAgICAgbGVmdDogMC43cmVtO1xyXG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcclxuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpIHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5uZy10b29sdGlwLWJvdHRvbS1yaWdodCB7XHJcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xyXG5cclxuICAgICY6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogXCJcIjtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB0b3A6IC0xcmVtO1xyXG4gICAgICByaWdodDogMC43cmVtO1xyXG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcclxuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpIHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0cmFuc3BhcmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5uZy10b29sdGlwLWxlZnQge1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtO1xyXG5cclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogY2FsYyg1MCUgLSAwLjVyZW0pO1xyXG4gICAgICByaWdodDogLTFyZW07XHJcbiAgICAgIGJvcmRlci13aWR0aDogMC41cmVtO1xyXG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0aGVtZWQodG9vbHRpcEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1yaWdodCB7XHJcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuXHJcbiAgICAmOmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgdG9wOiBjYWxjKDUwJSAtIDAuNXJlbSk7XHJcbiAgICAgIGxlZnQ6IC0xcmVtO1xyXG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcclxuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4udGFibGUtdG9vbHRpcC1kaW1lbnNpb25zIHtcclxuXHJcbiAgLnRvb2x0aXAtaW5uZXIge1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICBtYXgtd2lkdGg6IDIwcmVtO1xyXG4gICAgbWF4LWhlaWdodDogMTByZW07XHJcbiAgfVxyXG59XHJcblxyXG4uYmFsYW5jZS10b29sdGlwIHtcclxuICBwYWRkaW5nOiAxLjNyZW07XHJcblxyXG4gIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgYmFja2dyb3VuZDogdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgYm94LXNoYWRvdzogdGhlbWVkKHRvb2x0aXBTaGFkb3cpO1xyXG4gICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICB9XHJcblxyXG4gIC50b29sdGlwLWlubmVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgZm9udC1zaXplOiAxLjNyZW07XHJcblxyXG4gICAgLmF2YWlsYWJsZSB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDEuN3JlbTtcclxuXHJcbiAgICAgIGIge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubG9ja2VkIHtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMC43cmVtO1xyXG5cclxuICAgICAgYiB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5saW5rIHtcclxuICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5uZy10b29sdGlwLXRvcCB7XHJcbiAgICBtYXJnaW4tdG9wOiAtMXJlbTtcclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1ib3R0b20ge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1sZWZ0IHtcclxuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1yaWdodCB7XHJcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5hY2NvdW50LXRvb2x0aXAge1xyXG5cclxuICAudG9vbHRpcC1pbm5lciB7XHJcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xyXG4gICAgbWF4LXdpZHRoOiAxOHJlbTtcclxuICB9XHJcbn1cclxuXHJcbi5jb21tZW50LXRvb2x0aXAge1xyXG5cclxuICAudG9vbHRpcC1pbm5lciB7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XHJcbiAgICBtYXgtd2lkdGg6IDUwcmVtO1xyXG4gICAgbWF4LWhlaWdodDogMjVyZW07XHJcbiAgfVxyXG59XHJcblxyXG4udXBkYXRlLXRvb2x0aXAge1xyXG4gIHBhZGRpbmc6IDEuNXJlbTtcclxuXHJcbiAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICBiYWNrZ3JvdW5kOiB0aGVtZWQodG9vbHRpcEJhY2tncm91bmRDb2xvcik7XHJcbiAgICBib3gtc2hhZG93OiB0aGVtZWQodG9vbHRpcFNoYWRvdyk7XHJcbiAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gIH1cclxuXHJcbiAgJi5pbXBvcnRhbnQge1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZWQodG9vbHRpcEltcG9ydGFudEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQoYWNjb3VudE1haW5UZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgICYubmctdG9vbHRpcC1sZWZ0LWJvdHRvbSB7XHJcblxyXG4gICAgICAmOmFmdGVyIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRoZW1lZCh0b29sdGlwSW1wb3J0YW50QmFja2dyb3VuZENvbG9yKSB0aGVtZWQodG9vbHRpcEltcG9ydGFudEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJi5uZy10b29sdGlwLXJpZ2h0LWJvdHRvbSB7XHJcblxyXG4gICAgICAmOmJlZm9yZSB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0aGVtZWQodG9vbHRpcEltcG9ydGFudEJhY2tncm91bmRDb2xvcikgdGhlbWVkKHRvb2x0aXBJbXBvcnRhbnRCYWNrZ3JvdW5kQ29sb3IpIHRyYW5zcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJi5jcml0aWNhbCB7XHJcbiAgICBwYWRkaW5nOiAyLjVyZW07XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lZCh0b29sdGlwQ3JpdGljYWxCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICBjb2xvcjogdGhlbWVkKGFjY291bnRNYWluVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAudG9vbHRpcC1pbm5lciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgJi5uZy10b29sdGlwLWxlZnQtYm90dG9tIHtcclxuXHJcbiAgICAgICY6YWZ0ZXIge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBDcml0aWNhbEJhY2tncm91bmRDb2xvcikgdGhlbWVkKHRvb2x0aXBDcml0aWNhbEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJi5uZy10b29sdGlwLXJpZ2h0LWJvdHRvbSB7XHJcblxyXG4gICAgICAmOmJlZm9yZSB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0aGVtZWQodG9vbHRpcENyaXRpY2FsQmFja2dyb3VuZENvbG9yKSB0aGVtZWQodG9vbHRpcENyaXRpY2FsQmFja2dyb3VuZENvbG9yKSB0cmFuc3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC50b29sdGlwLWlubmVyIHtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcclxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuXHJcbiAgICAuc3RhbmRhcmQtdXBkYXRlIHtcclxuICAgICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmltcG9ydGFudC11cGRhdGUge1xyXG4gICAgICBmb250LXNpemU6IDEuNXJlbTtcclxuICAgICAgbGluZS1oZWlnaHQ6IDIuN3JlbTtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQodG9vbHRpcEltcG9ydGFudFRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuY3JpdGljYWwtdXBkYXRlIHtcclxuICAgICAgZm9udC1zaXplOiAxLjVyZW07XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjdyZW07XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICAud3JvbmctdGltZSB7XHJcbiAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xyXG4gICAgICBsaW5lLWhlaWdodDogMi43cmVtO1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZCh0b29sdGlwSW1wb3J0YW50VGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFyZ2luOiAxLjVyZW0gMDtcclxuICAgICAgd2lkdGg6IDVyZW07XHJcbiAgICAgIGhlaWdodDogNXJlbTtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZCh0b29sdGlwQ3JpdGljYWxUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmLm5nLXRvb2x0aXAtbGVmdC1ib3R0b20ge1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW07XHJcblxyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwLjZyZW07XHJcbiAgICAgIHJpZ2h0OiAtMXJlbTtcclxuICAgICAgYm9yZGVyLXdpZHRoOiAwLjVyZW07XHJcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0aGVtZWQodG9vbHRpcEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICYubmctdG9vbHRpcC1yaWdodC1ib3R0b20ge1xyXG4gICAgbWFyZ2luLWxlZnQ6IDEuNXJlbTtcclxuXHJcbiAgICAmOmJlZm9yZSB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwLjZyZW07XHJcbiAgICAgIGxlZnQ6IC0xcmVtO1xyXG4gICAgICBib3JkZXItd2lkdGg6IDAuNXJlbTtcclxuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdGhlbWVkKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IpIHRoZW1lZCh0b29sdGlwQmFja2dyb3VuZENvbG9yKSB0cmFuc3BhcmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm5neC1jb250ZXh0bWVudSB7XHJcblxyXG4gIC5kcm9wZG93bi1tZW51IHtcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIHBhZGRpbmc6IDA7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChjaGFydE9wdGlvbnNCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICBib3gtc2hhZG93OiB0aGVtZWQodG9vbHRpcFNoYWRvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaSB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZvbnQtZmFtaWx5OiBPcGVuU2Fucywgc2Fucy1zZXJpZjtcclxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIGEge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiAwLjVlbSAxZW07XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoY2hhcnRPcHRpb25zSG92ZXJDb2xvcik7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLm5nLXNlbGVjdCB7XHJcblxyXG4gICYuY3VzdG9tLXNlbGVjdCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAmLm5nLXNlbGVjdC1zaW5nbGUge1xyXG4gICAgICAubmctc2VsZWN0LWNvbnRhaW5lciB7XHJcbiAgICAgICAgLm5nLXZhbHVlLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICAubmctdmFsdWUge1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS44cmVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5uZy1zZWxlY3QtY29udGFpbmVyIHtcclxuICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xyXG4gICAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgICBwYWRkaW5nOiAwIDFyZW07XHJcbiAgICAgIGhlaWdodDogNC4ycmVtO1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGlucHV0QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubmctdmFsdWUtY29udGFpbmVyIHtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG5cclxuICAgICAgICAubmctaW5wdXQge1xyXG4gICAgICAgICAgdG9wOiBhdXRvO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5uZy1kcm9wZG93bi1wYW5lbCB7XHJcbiAgICAgIGJvcmRlcjogbm9uZTtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChpbnB1dEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5uZy1kcm9wZG93bi1wYW5lbC1pdGVtcyB7XHJcblxyXG4gICAgICAgIC5uZy1vcHRpb24ge1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07XHJcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoaW5wdXRCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICYubmctb3B0aW9uLW1hcmtlZCB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoc2VsZWN0SG92ZXJDb2xvcik7XHJcbiAgICAgICAgICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICYubmctb3B0aW9uLXNlbGVjdGVkIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChzZWxlY3RTZWxlY3RlZENvbG9yKTtcclxuICAgICAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICAgIHdpZHRoOiAxcmVtO1xyXG4gICAgICAgICAgaGVpZ2h0OiAxcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuICAgICAgICAgIGJvcmRlcjogMC4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTY1NzY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtbW9kYWwtY29udGFpbmVyLCBhcHAtY29uZmlybS1tb2RhbCAge1xyXG5cclxuICAubW9kYWwge1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZWQobW9kYWxCYWNrZ3JvdW5kKTtcclxuICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAuY29udGVudCB7XHJcblxyXG4gICAgICAuaWNvbi5lcnJvciB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHJlZFRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAuaWNvbi5zdWNjZXNzIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoZ3JlZW5UZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmljb24uaW5mbyB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnV0dG9uIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKGFsdGVybmF0aXZlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5jbG9zZS1idXR0b24ge1xyXG5cclxuICAgICAgLmljb24ge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChjbG9zZUJ1dHRvbkNvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC10cmFuc2FjdGlvbi1kZXRhaWxzIHtcclxuXHJcbiAgLnRhYmxlIHtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgYm9yZGVyLXRvcDogMC4ycmVtIHNvbGlkIHRoZW1lZCh0cmFuc3BhcmVudEJ1dHRvbkJvcmRlckNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAucm93IHtcclxuXHJcbiAgICAgIC5jZWxsIHtcclxuXHJcbiAgICAgICAgJi5sYWJlbCB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi52YWx1ZSB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmtleS12YWx1ZSB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtcHJvZ3Jlc3MtY29udGFpbmVyIHtcclxuXHJcbiAgLnByb2dyZXNzLWJhci1jb250YWluZXIge1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcm9ncmVzcy1iYXIge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnByb2dyZXNzLWJhci1mdWxsIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocHJvZ3Jlc3NCYXJGdWxsQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC1vcGVuLXdhbGxldC1tb2RhbCB7XHJcblxyXG4gIC5tb2RhbCB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lZChtb2RhbEJhY2tncm91bmQpO1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYXBwLXNlbmQtbW9kYWwge1xyXG4gIC5tb2RhbCB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lZChtb2RhbEJhY2tncm91bmQpO1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC50aXRsZSB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBib3JkZXItYm90dG9tOiAwLjJyZW0gc29saWQgdGhlbWVkKHRyYW5zcGFyZW50QnV0dG9uQm9yZGVyQ29sb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC5hY3Rpb24tYnV0dG9uIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKGFsdGVybmF0aXZlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufSIsIiR0aGVtZXM6IChcclxuICBkYXJrOiAoXHJcbiAgICBib2R5QmFja2dyb3VuZENvbG9yOiAjMTMxOTIxLFxyXG4gICAgc2lkZWJhckJhY2tncm91bmRDb2xvcjogcmdiYSgyMywgMzEsIDM5LCAxKSxcclxuICAgIHNpZGViYXJCb3JkZXJDb2xvcjogIzFmMjgzMyxcclxuICAgIG9ubGluZUNvbG9yOiAjNWNkYTlkLFxyXG4gICAgb2ZmbGluZUNvbG9yOiAjZmY1MjUyLFxyXG4gICAgY29udGVudEJhY2tncm91bmRDb2xvcjogcmdiYSg0MywgNTQsIDY4LCAwLjUpLFxyXG4gICAgbWFpblRleHRDb2xvcjogI2UwZTBlMCxcclxuICAgIGFsdGVybmF0aXZlVGV4dENvbG9yOiAjMTExOTIxLFxyXG4gICAgb3B0aW9uYWxUZXh0Q29sb3I6ICM1NTY1NzYsXHJcbiAgICBibHVlVGV4dENvbG9yOiAjNGRiMWZmLFxyXG4gICAgZ3JlZW5UZXh0Q29sb3I6ICM1Y2RhOWQsXHJcbiAgICBvcmFuZ2VUZXh0Q29sb3I6ICNmZjZmMDAsXHJcbiAgICByZWRUZXh0Q29sb3I6ICNmZjUyNTIsXHJcbiAgICBibHVlQnV0dG9uQmFja2dyb3VuZENvbG9yOiAjNGRiMWZmLFxyXG4gICAgYmx1ZUJ1dHRvbkhvdmVyQ29sb3I6ICM4MmQ3ZmYsXHJcbiAgICBibHVlQnV0dG9uRm9jdXNDb2xvcjogIzU5YjVmZCxcclxuICAgIGRpc2FibGVkQnV0dG9uQmFja2dyb3VuZENvbG9yOiAjOWNhZGI3LFxyXG4gICAgZGlzYWJsZWRCdXR0b25Ib3ZlckNvbG9yOiAjYjdkMWUwLFxyXG4gICAgZGlzYWJsZWRCdXR0b25Gb2N1c0NvbG9yOiAjYTdiOWMyLFxyXG4gICAgZ3JlZW5CdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICM1Y2RhOWQsXHJcbiAgICBncmVlbkJ1dHRvbkhvdmVyQ29sb3I6ICM4ZGZjYzYsXHJcbiAgICBncmVlbkJ1dHRvbkZvY3VzQ29sb3I6ICM2MmUwYjIsXHJcbiAgICB0dXJxdW9pc2VCdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICM0ZGQwZTEsXHJcbiAgICB0dXJxdW9pc2VCdXR0b25Ib3ZlckNvbG9yOiAjODdmNGY1LFxyXG4gICAgdHVycXVvaXNlQnV0dG9uRm9jdXNDb2xvcjogIzQyZDVlOCxcclxuICAgIHRyYW5zcGFyZW50QnV0dG9uQm9yZGVyQ29sb3I6ICMyYjM2NDQsXHJcbiAgICBpbnB1dEJhY2tncm91bmRDb2xvcjogIzE3MWUyNyxcclxuICAgIHNlbGVjdEhvdmVyQ29sb3I6IHJnYmEoNTgsIDY5LCA4NSwgMC41KSxcclxuICAgIHNlbGVjdFNlbGVjdGVkQ29sb3I6IHJnYmEoNDMsIDU0LCA2OCwgMC41KSxcclxuICAgIHN3aXRjaEJhY2tncm91bmRDb2xvcjogIzAwMDAwMCxcclxuICAgIGFjY291bnRCYWNrZ3JvdW5kQ29sb3I6IHJnYmEoNDMsIDU0LCA2OCwgMC41KSxcclxuICAgIGFjY291bnRIb3ZlckJhY2tncm91bmRDb2xvcjogcmdiYSg1OCwgNjksIDg1LCAwLjUpLFxyXG4gICAgYWNjb3VudE1haW5UZXh0Q29sb3I6ICNlMGUwZTAsXHJcbiAgICBzZWN1cmVkU2VlZDogI2UwZTBlMCxcclxuICAgIHNlZWRJdGVtVGV4dDogI2UwZTBlMCxcclxuICAgIHNlZWRJdGVtQmFja2dyb3VuZENvbG9yOiAjMTgyMDJhLFxyXG4gICAgYWNjb3VudE9wdGlvbmFsVGV4dENvbG9yOiAjNTU2NTc2LFxyXG4gICAgYWNjb3VudEluZGljYXRvclRleHRDb2xvcjogIzExMTkyMSxcclxuICAgIGFjY291bnRTd2l0Y2hCYWNrZ3JvdW5kQ29sb3I6ICMwMDAwMDAsXHJcbiAgICBhY2NvdW50SW5kaWNhdG9yQmFja2dyb3VuZENvbG9yOiAjNGRiMWZmLFxyXG4gICAgdGFiSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3I6IHJnYmEoMjMsIDMxLCAzOSwgMC41KSxcclxuICAgIHRhYkhvdmVyQmFja2dyb3VuZENvbG9yOiByZ2JhKDU4LCA2OSwgODUsIDAuNSksXHJcbiAgICB0YWJsZUJhY2tncm91bmRDb2xvcjogIzE4MjAyYSxcclxuICAgIG1lc3NhZ2VNeUJhY2tncm91bmRDb2xvcjogIzJhMzU0NCxcclxuICAgIG1lc3NhZ2VCdWRkeUJhY2tncm91bmRDb2xvcjogIzE4MjAyYSxcclxuICAgIHByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yOiAjMzQzZjRhLFxyXG4gICAgcHJvZ3Jlc3NCYXJGdWxsQmFja2dyb3VuZENvbG9yOiAjNWNkYTlkLFxyXG4gICAgY2hhcnRPcHRpb25zQmFja2dyb3VuZENvbG9yOiAjMmIzNjQ0LFxyXG4gICAgY2hhcnRPcHRpb25zSG92ZXJDb2xvcjogIzU1NjU3NixcclxuICAgIHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3I6ICM0MjUwNWYsXHJcbiAgICB0b29sdGlwSW1wb3J0YW50VGV4dENvbG9yOiAjZmY2ZjAwLFxyXG4gICAgdG9vbHRpcEltcG9ydGFudEJhY2tncm91bmRDb2xvcjogIzVmMmIxMSxcclxuICAgIHRvb2x0aXBDcml0aWNhbFRleHRDb2xvcjogI2ZmNTI1MixcclxuICAgIHRvb2x0aXBDcml0aWNhbEJhY2tncm91bmRDb2xvcjogIzVmMWQxZCxcclxuICAgIHRvb2x0aXBTaGFkb3c6IDAgMCAxcmVtIHJnYmEoMCwgMCwgMCwgMC41KSxcclxuICAgIG1vZGFsQmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLWRhcmsucG5nKSxcclxuICAgIGNsb3NlQnV0dG9uQ29sb3I6ICM1NTY1NzYsXHJcbiAgICBob3ZlclBhZ2U6ICMzYTQ4NWFcclxuICApLFxyXG4gIGdyYXk6IChcclxuICAgIGJvZHlCYWNrZ3JvdW5kQ29sb3I6ICMxMDE0MTcsXHJcbiAgICBzaWRlYmFyQmFja2dyb3VuZENvbG9yOiByZ2JhKDI4LCAzMCwgMzMsIDEpLFxyXG4gICAgc2lkZWJhckJvcmRlckNvbG9yOiAjMmUzMzM3LFxyXG4gICAgb25saW5lQ29sb3I6ICM0N2NmOGQsXHJcbiAgICBvZmZsaW5lQ29sb3I6ICNmZjUyNTIsXHJcbiAgICBjb250ZW50QmFja2dyb3VuZENvbG9yOiByZ2JhKDM3LCA0MCwgNDMsIDAuNSksXHJcbiAgICBtYWluVGV4dENvbG9yOiAjZTBlMGUwLFxyXG4gICAgYWx0ZXJuYXRpdmVUZXh0Q29sb3I6ICMxYTFhMWEsXHJcbiAgICBvcHRpb25hbFRleHRDb2xvcjogIzU2NWM2MixcclxuICAgIGJsdWVUZXh0Q29sb3I6ICM0MmE1ZjUsXHJcbiAgICBncmVlblRleHRDb2xvcjogIzQ3Y2Y4ZCxcclxuICAgIG9yYW5nZVRleHRDb2xvcjogI2ZmNmYwMCxcclxuICAgIHJlZFRleHRDb2xvcjogI2ZmNTI1MixcclxuICAgIGJsdWVCdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICM0MmE1ZjUsXHJcbiAgICBibHVlQnV0dG9uSG92ZXJDb2xvcjogIzg2ZDZmZixcclxuICAgIGJsdWVCdXR0b25Gb2N1c0NvbG9yOiAjNWZiNmZjLFxyXG4gICAgZGlzYWJsZWRCdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICM3OTg0OGYsXHJcbiAgICBkaXNhYmxlZEJ1dHRvbkhvdmVyQ29sb3I6ICNhMWFlYmIsXHJcbiAgICBkaXNhYmxlZEJ1dHRvbkZvY3VzQ29sb3I6ICM4YTk1OWYsXHJcbiAgICBncmVlbkJ1dHRvbkJhY2tncm91bmRDb2xvcjogIzQ3Y2Y4ZCxcclxuICAgIGdyZWVuQnV0dG9uSG92ZXJDb2xvcjogIzdiZjZjNixcclxuICAgIGdyZWVuQnV0dG9uRm9jdXNDb2xvcjogIzVjZGM5ZSxcclxuICAgIHR1cnF1b2lzZUJ1dHRvbkJhY2tncm91bmRDb2xvcjogIzNlYzVkNyxcclxuICAgIHR1cnF1b2lzZUJ1dHRvbkhvdmVyQ29sb3I6ICM3MmVkZmUsXHJcbiAgICB0dXJxdW9pc2VCdXR0b25Gb2N1c0NvbG9yOiAjNTBkMGUxLFxyXG4gICAgdHJhbnNwYXJlbnRCdXR0b25Cb3JkZXJDb2xvcjogIzJmMzQzOCxcclxuICAgIGlucHV0QmFja2dyb3VuZENvbG9yOiAjMjkyZDMxLFxyXG4gICAgc2VsZWN0SG92ZXJDb2xvcjogcmdiYSg1OCwgNjIsIDY2LCAwLjUpLFxyXG4gICAgc2VsZWN0U2VsZWN0ZWRDb2xvcjogcmdiYSgzNywgNDAsIDQzLCAwLjUpLFxyXG4gICAgc3dpdGNoQmFja2dyb3VuZENvbG9yOiAjMDAwMDAwLFxyXG4gICAgYWNjb3VudEJhY2tncm91bmRDb2xvcjogcmdiYSgzNywgNDAsIDQzLCAwLjUpLFxyXG4gICAgYWNjb3VudEhvdmVyQmFja2dyb3VuZENvbG9yOiByZ2JhKDU4LCA2MiwgNjYsIDAuNSksXHJcbiAgICBhY2NvdW50TWFpblRleHRDb2xvcjogI2UwZTBlMCxcclxuICAgIHNlY3VyZWRTZWVkOiAjZTBlMGUwLFxyXG4gICAgc2VlZEl0ZW1UZXh0OiAjZTBlMGUwLFxyXG4gICAgc2VlZEl0ZW1CYWNrZ3JvdW5kQ29sb3I6ICMyOTJkMzEsXHJcbiAgICBhY2NvdW50T3B0aW9uYWxUZXh0Q29sb3I6ICM1NjVjNjIsXHJcbiAgICBhY2NvdW50SW5kaWNhdG9yVGV4dENvbG9yOiAjMWExYTFhLFxyXG4gICAgYWNjb3VudFN3aXRjaEJhY2tncm91bmRDb2xvcjogIzAwMDAwMCxcclxuICAgIGFjY291bnRJbmRpY2F0b3JCYWNrZ3JvdW5kQ29sb3I6ICM0MmE1ZjUsXHJcbiAgICB0YWJJbmFjdGl2ZUJhY2tncm91bmRDb2xvcjogcmdiYSgyOCwgMzAsIDMzLCAwLjUpLFxyXG4gICAgdGFiSG92ZXJCYWNrZ3JvdW5kQ29sb3I6IHJnYmEoNTgsIDYyLCA2NiwgMC41KSxcclxuICAgIHRhYmxlQmFja2dyb3VuZENvbG9yOiAjMjUyOTJkLFxyXG4gICAgbWVzc2FnZU15QmFja2dyb3VuZENvbG9yOiAjMzAzNjNjLFxyXG4gICAgbWVzc2FnZUJ1ZGR5QmFja2dyb3VuZENvbG9yOiAjMjUyOTJkLFxyXG4gICAgcHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3I6ICMzNjNhM2UsXHJcbiAgICBwcm9ncmVzc0JhckZ1bGxCYWNrZ3JvdW5kQ29sb3I6ICM0N2NmOGQsXHJcbiAgICBjaGFydE9wdGlvbnNCYWNrZ3JvdW5kQ29sb3I6ICMyOTJkMzEsXHJcbiAgICBjaGFydE9wdGlvbnNIb3ZlckNvbG9yOiAjNTE1OTYwLFxyXG4gICAgdG9vbHRpcEJhY2tncm91bmRDb2xvcjogIzNlNDY0YyxcclxuICAgIHRvb2x0aXBJbXBvcnRhbnRUZXh0Q29sb3I6ICNmZjZmMDAsXHJcbiAgICB0b29sdGlwSW1wb3J0YW50QmFja2dyb3VuZENvbG9yOiAjNTUyNDBkLFxyXG4gICAgdG9vbHRpcENyaXRpY2FsVGV4dENvbG9yOiAjZmY1MjUyLFxyXG4gICAgdG9vbHRpcENyaXRpY2FsQmFja2dyb3VuZENvbG9yOiAjNGMxOTE5LFxyXG4gICAgdG9vbHRpcFNoYWRvdzogMCAwIDFyZW0gcmdiYSgwLCAwLCAwLCAwLjUpLFxyXG4gICAgbW9kYWxCYWNrZ3JvdW5kOiB1cmwofnNyYy9hc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtZ3JheS5wbmcpLFxyXG4gICAgY2xvc2VCdXR0b25Db2xvcjogIzUxNTk2MCxcclxuICAgIGhvdmVyUGFnZTogIzM4M2U0M1xyXG4gICksXHJcbiAgd2hpdGU6IChcclxuICAgIGJvZHlCYWNrZ3JvdW5kQ29sb3I6ICNlZWVlZWUsXHJcbiAgICBzaWRlYmFyQmFja2dyb3VuZENvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpLFxyXG4gICAgc2lkZWJhckJvcmRlckNvbG9yOiAjZWJlYmViLFxyXG4gICAgb25saW5lQ29sb3I6ICM0NmMxNzIsXHJcbiAgICBvZmZsaW5lQ29sb3I6ICNmZjUyNTIsXHJcbiAgICBjb250ZW50QmFja2dyb3VuZENvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksXHJcbiAgICBtYWluVGV4dENvbG9yOiAjNDM0NTRiLFxyXG4gICAgYWx0ZXJuYXRpdmVUZXh0Q29sb3I6ICNmZWZlZmUsXHJcbiAgICBvcHRpb25hbFRleHRDb2xvcjogI2EwYTVhYixcclxuICAgIGJsdWVUZXh0Q29sb3I6ICMyYzk1ZjEsXHJcbiAgICBncmVlblRleHRDb2xvcjogIzQ2YzE3MixcclxuICAgIG9yYW5nZVRleHRDb2xvcjogI2ZmNmYwMCxcclxuICAgIHJlZFRleHRDb2xvcjogI2ZmNTI1MixcclxuICAgIGJsdWVCdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICMyYzk1ZjEsXHJcbiAgICBibHVlQnV0dG9uSG92ZXJDb2xvcjogIzVjYjNmZixcclxuICAgIGJsdWVCdXR0b25Gb2N1c0NvbG9yOiAjMzc5ZmZhLFxyXG4gICAgZGlzYWJsZWRCdXR0b25CYWNrZ3JvdW5kQ29sb3I6ICM5MGE0YWUsXHJcbiAgICBkaXNhYmxlZEJ1dHRvbkhvdmVyQ29sb3I6ICNhZWJlYzYsXHJcbiAgICBkaXNhYmxlZEJ1dHRvbkZvY3VzQ29sb3I6ICNhN2I5YzIsXHJcbiAgICBncmVlbkJ1dHRvbkJhY2tncm91bmRDb2xvcjogIzQ2YzE3MixcclxuICAgIGdyZWVuQnV0dG9uSG92ZXJDb2xvcjogIzVhZDU4NixcclxuICAgIGdyZWVuQnV0dG9uRm9jdXNDb2xvcjogIzUzYzc3YyxcclxuICAgIHR1cnF1b2lzZUJ1dHRvbkJhY2tncm91bmRDb2xvcjogIzI2YjZjNyxcclxuICAgIHR1cnF1b2lzZUJ1dHRvbkhvdmVyQ29sb3I6ICM1MmNiZDksXHJcbiAgICB0dXJxdW9pc2VCdXR0b25Gb2N1c0NvbG9yOiAjMzFiZWNmLFxyXG4gICAgdHJhbnNwYXJlbnRCdXR0b25Cb3JkZXJDb2xvcjogI2ViZWJlYixcclxuICAgIGlucHV0QmFja2dyb3VuZENvbG9yOiAjZTZlNmU2LFxyXG4gICAgc2VsZWN0SG92ZXJDb2xvcjogcmdiYSgyNDAsIDI0MCwgMjQwLCAwLjUpLFxyXG4gICAgc2VsZWN0U2VsZWN0ZWRDb2xvcjogcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjUpLFxyXG4gICAgc3dpdGNoQmFja2dyb3VuZENvbG9yOiAjZTBlMGUwLFxyXG4gICAgYWNjb3VudEJhY2tncm91bmRDb2xvcjogcmdiYSgzMCwgMTM2LCAyMjksIDEpLFxyXG4gICAgYWNjb3VudEhvdmVyQmFja2dyb3VuZENvbG9yOiByZ2JhKDI0MCwgMjQwLCAyNDAsIDAuNSksXHJcbiAgICBhY2NvdW50TWFpblRleHRDb2xvcjogI2ZmZmZmZixcclxuICAgIHNlY3VyZWRTZWVkOiAjYTBhNWFiLFxyXG4gICAgc2VlZEl0ZW1UZXh0OiAjNDM0NTRiLFxyXG4gICAgc2VlZEl0ZW1CYWNrZ3JvdW5kQ29sb3I6ICNlNmU2ZTYsXHJcbiAgICBhY2NvdW50T3B0aW9uYWxUZXh0Q29sb3I6ICM5MWJhZjEsXHJcbiAgICBhY2NvdW50SW5kaWNhdG9yVGV4dENvbG9yOiAjNDM0NTRiLFxyXG4gICAgYWNjb3VudFN3aXRjaEJhY2tncm91bmRDb2xvcjogI2ZmZmZmZixcclxuICAgIGFjY291bnRJbmRpY2F0b3JCYWNrZ3JvdW5kQ29sb3I6ICNmZmZmZmYsXHJcbiAgICB0YWJJbmFjdGl2ZUJhY2tncm91bmRDb2xvcjogcmdiYSgyMjQsIDIyNCwgMjI0LCAwLjUpLFxyXG4gICAgdGFiSG92ZXJCYWNrZ3JvdW5kQ29sb3I6ICNmZmZmZmYsXHJcbiAgICB0YWJsZUJhY2tncm91bmRDb2xvcjogI2ZmZmZmZixcclxuICAgIG1lc3NhZ2VNeUJhY2tncm91bmRDb2xvcjogI2ZmZixcclxuICAgIG1lc3NhZ2VCdWRkeUJhY2tncm91bmRDb2xvcjogI2VkZWRlZCxcclxuICAgIHByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yOiAjZGNkY2RjLFxyXG4gICAgcHJvZ3Jlc3NCYXJGdWxsQmFja2dyb3VuZENvbG9yOiAjNDZjMTcyLFxyXG4gICAgY2hhcnRPcHRpb25zQmFja2dyb3VuZENvbG9yOiAjZTBlMGUwLFxyXG4gICAgY2hhcnRPcHRpb25zSG92ZXJDb2xvcjogI2ZmZmZmZixcclxuICAgIHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3I6ICNmZmZmZmYsXHJcbiAgICB0b29sdGlwSW1wb3J0YW50VGV4dENvbG9yOiAjZmZmZmZmLFxyXG4gICAgdG9vbHRpcEltcG9ydGFudEJhY2tncm91bmRDb2xvcjogI2VmNmMwMCxcclxuICAgIHRvb2x0aXBDcml0aWNhbFRleHRDb2xvcjogI2ZmZmZmZixcclxuICAgIHRvb2x0aXBDcml0aWNhbEJhY2tncm91bmRDb2xvcjogI2U1MzkzNSxcclxuICAgIHRvb2x0aXBTaGFkb3c6IDAgMCAxcmVtIHJnYmEoMTIwLCAxMjAsIDEyMCwgMC41KSxcclxuICAgIG1vZGFsQmFja2dyb3VuZDogdXJsKH5zcmMvYXNzZXRzL2ltYWdlcy9iYWNrZ3JvdW5kLXdoaXRlLnBuZyksXHJcbiAgICBjbG9zZUJ1dHRvbkNvbG9yOiAjNDM0NTRiLFxyXG4gICAgaG92ZXJQYWdlOiAjZmZmZmZmXHJcbiAgKVxyXG4pO1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsImFwcC1tYWluLCBhcHAtY3JlYXRlLXdhbGxldCwgYXBwLW9wZW4td2FsbGV0LCBhcHAtcmVzdG9yZS13YWxsZXQsIGFwcC1zZWVkLXBocmFzZSwgYXBwLXdhbGxldC1kZXRhaWxzLCBhcHAtYXNzaWduLWFsaWFzLCBhcHAtZWRpdC1hbGlhcywgYXBwLXRyYW5zZmVyLWFsaWFzLCBhcHAtc2V0dGluZ3MsIGFwcC1sb2dpbiB7XHJcbiAgZmxleDogMSAxIGF1dG87XHJcbiAgcGFkZGluZzogM3JlbTtcclxuICBtaW4td2lkdGg6IDg1cmVtO1xyXG5cclxuICAuY29udGVudCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBwYWRkaW5nOiAzcmVtO1xyXG4gICAgbWluLWhlaWdodDogMTAwJTtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGNvbnRlbnRCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5oZWFkIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB0b3A6IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtbWFpbiB7XHJcblxyXG4gIC5jb250ZW50IHtcclxuXHJcbiAgICAuYWRkLXdhbGxldCB7XHJcblxyXG4gICAgICAuYWRkLXdhbGxldC1oZWxwIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmljb24ge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtc2VlZC1waHJhc2Uge1xyXG5cclxuICAuc2VlZC1waHJhc2UtY29udGVudCB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChpbnB1dEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcilcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC13YWxsZXQtZGV0YWlscyB7XHJcblxyXG4gIC5zZWVkLXBocmFzZSB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChpbnB1dEJhY2tncm91bmRDb2xvcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtc2V0dGluZ3Mge1xyXG5cclxuICAuY29udGVudCB7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblxyXG4gICAgLnRoZW1lLXNlbGVjdGlvbiB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKG9wdGlvbmFsVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5zY2FsZS1zZWxlY3Rpb24ge1xyXG5cclxuICAgICAgLmJ1dHRvbi1ibG9jayB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHRhYkluYWN0aXZlQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYWJlbCB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY3RpdmUge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLmxhYmVsIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC1sb2dpbiB7XHJcbiAgbWluLXdpZHRoOiBpbmhlcml0O1xyXG59XHJcbiIsImFwcC1zaWRlYmFyIHtcclxuXHJcbiAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoc2lkZWJhckJhY2tncm91bmRDb2xvcik7XHJcbiAgfVxyXG5cclxuICAuc2lkZWJhci1hY2NvdW50cyB7XHJcblxyXG4gICAgLnNpZGViYXItYWNjb3VudHMtaGVhZGVyIHtcclxuXHJcbiAgICAgIGgzIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgYnV0dG9uIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLWFjY291bnRzLWxpc3Qge1xyXG5cclxuICAgICAgLnNpZGViYXItYWNjb3VudCB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmljb24ge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2lkZWJhci1hY2NvdW50LXJvdyB7XHJcblxyXG4gICAgICAgICAgLnRleHQge1xyXG5cclxuICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuaWNvbiB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAuaW5kaWNhdG9yIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlQnV0dG9uQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgICAgICBjb2xvcjogdGhlbWVkKGFsdGVybmF0aXZlVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuXHJcbiAgICAgICAgICAgIC5wcm9ncmVzcy1iYXIge1xyXG5cclxuICAgICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChwcm9ncmVzc0JhckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAuZmlsbCB7XHJcblxyXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmLmFjY291bnQtc3luY2hyb25pemF0aW9uIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmFjdGl2ZSB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChhY2NvdW50QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lZChhY2NvdW50TWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLnNpZGViYXItYWNjb3VudC1yb3cge1xyXG5cclxuICAgICAgICAgICAgLnRleHQge1xyXG5cclxuICAgICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQoYWNjb3VudE9wdGlvbmFsVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5pbmRpY2F0b3Ige1xyXG5cclxuICAgICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChhY2NvdW50SW5kaWNhdG9yQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQoYWNjb3VudEluZGljYXRvclRleHRDb2xvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAuc3dpdGNoIHtcclxuXHJcbiAgICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYWNjb3VudFN3aXRjaEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5hY2NvdW50LXN5bmNocm9uaXphdGlvbiB7XHJcblxyXG4gICAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lZChhY2NvdW50T3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjpob3Zlcjpub3QoLmFjdGl2ZSkge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYWNjb3VudEhvdmVyQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOmFmdGVyIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCB0aGVtZWQoc2lkZWJhckJhY2tncm91bmRDb2xvcikgMTAwJSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5zaWRlYmFyLXNldHRpbmdzIHtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMC4ycmVtIHNvbGlkIHRoZW1lZChzaWRlYmFyQm9yZGVyQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC53cmFwLWJ1dHRvbiB7XHJcblxyXG4gICAgICBidXR0b24ge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaWNvbiB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuYWN0aXZlIHtcclxuXHJcbiAgICAgICAgYnV0dG9uIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGFjY291bnRCYWNrZ3JvdW5kQ29sb3IpIWltcG9ydGFudDtcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lZChhY2NvdW50TWFpblRleHRDb2xvcikhaW1wb3J0YW50O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5pY29uIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChhY2NvdW50SW5kaWNhdG9yQmFja2dyb3VuZENvbG9yKSFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIi5zeW5jaHJvbml6YXRpb24tc3RhdHVzIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xyXG4gIGZsZXg6IDAgMCA3cmVtO1xyXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgfVxyXG5cclxuICAuc3RhdHVzLWNvbnRhaW5lciB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cclxuICAgIC5vZmZsaW5lLCAub25saW5lIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XHJcblxyXG4gICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJyc7XHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIHRvcDogMDtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgICAgIGhlaWdodDogMS4ycmVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLm9mZmxpbmU6YmVmb3JlIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChvZmZsaW5lQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLm9ubGluZTpiZWZvcmUge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKG9ubGluZUNvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5zeW5jaW5nLCAubG9hZGluZyB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA1cmVtO1xyXG4gICAgfVxyXG5cclxuICAgIC5wcm9ncmVzcy1iYXItY29udGFpbmVyIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIGhlaWdodDogMC43cmVtO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICAgIC5zeW5jaW5nIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG5cclxuICAgICAgICAucHJvZ3Jlc3MtYmFyIHtcclxuICAgICAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChwcm9ncmVzc0JhckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAuZmlsbCB7XHJcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHByb2dyZXNzQmFyRnVsbEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgJi5kb3dubG9hZGluZyB7XHJcblxyXG4gICAgICAgICAgLnByb2dyZXNzLWJhciB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAuZmlsbCB7XHJcblxyXG4gICAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAucHJvZ3Jlc3MtcGVyY2VudCB7XHJcbiAgICAgICAgICBmbGV4OiAwIDAgYXV0bztcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDAuN3JlbTtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMC43cmVtO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLmxvYWRpbmcge1xyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHByb2dyZXNzQmFyRnVsbEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFuaW1hdGlvbjogbW92ZSA1cyBsaW5lYXIgaW5maW5pdGU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTpcclxuICAgICAgICAgIC13ZWJraXQtZ3JhZGllbnQoXHJcbiAgICAgICAgICAgICAgbGluZWFyLCAwIDAsIDEwMCUgMTAwJSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4xMjUsIHJnYmEoMCwgMCwgMCwgLjE1KSksIGNvbG9yLXN0b3AoLjEyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjI1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC4yNTAsIHJnYmEoMCwgMCwgMCwgLjEwKSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMzc1LCByZ2JhKDAsIDAsIDAsIC4xMCkpLCBjb2xvci1zdG9wKC4zNzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC41MDAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNTAwLCByZ2JhKDAsIDAsIDAsIC4xNSkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjYyNSwgcmdiYSgwLCAwLCAwLCAuMTUpKSwgY29sb3Itc3RvcCguNjI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNzUwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjc1MCwgcmdiYSgwLCAwLCAwLCAuMTApKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC44NzUsIHJnYmEoMCwgMCwgMCwgLjEwKSksIGNvbG9yLXN0b3AoLjg3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIHRvKHRyYW5zcGFyZW50KVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIC13ZWJraXQtZ3JhZGllbnQoXHJcbiAgICAgICAgICAgICAgbGluZWFyLCAwIDEwMCUsIDEwMCUgMCxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC4xMjUsIHJnYmEoMCwgMCwgMCwgLjMwKSksIGNvbG9yLXN0b3AoLjEyNSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjI1MCwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKC4yNTAsIHJnYmEoMCwgMCwgMCwgLjI1KSksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguMzc1LCByZ2JhKDAsIDAsIDAsIC4yNSkpLCBjb2xvci1zdG9wKC4zNzUsIHRyYW5zcGFyZW50KSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC41MDAsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCguNTAwLCByZ2JhKDAsIDAsIDAsIC4zMCkpLFxyXG4gICAgICAgICAgICAgIGNvbG9yLXN0b3AoLjYyNSwgcmdiYSgwLCAwLCAwLCAuMzApKSwgY29sb3Itc3RvcCguNjI1LCB0cmFuc3BhcmVudCksXHJcbiAgICAgICAgICAgICAgY29sb3Itc3RvcCguNzUwLCB0cmFuc3BhcmVudCksIGNvbG9yLXN0b3AoLjc1MCwgcmdiYSgwLCAwLCAwLCAuMjUpKSxcclxuICAgICAgICAgICAgICBjb2xvci1zdG9wKC44NzUsIHJnYmEoMCwgMCwgMCwgLjI1KSksIGNvbG9yLXN0b3AoLjg3NSwgdHJhbnNwYXJlbnQpLFxyXG4gICAgICAgICAgICAgIHRvKHRyYW5zcGFyZW50KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDdyZW0gN3JlbTtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC51cGRhdGUtY29udGFpbmVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICBtYXJnaW4tbGVmdDogMXJlbTtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cclxuICAgIC51cGRhdGUtdGV4dCB7XHJcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgICBmb250LXNpemU6IDEuMnJlbTtcclxuICAgICAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcclxuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICAgICYudGltZSB7XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuaWNvbiB7XHJcbiAgICAgIGZsZXg6IDEgMCBhdXRvO1xyXG4gICAgICBtYXJnaW46IDAuM3JlbSAwIDAgMC42cmVtO1xyXG4gICAgICB3aWR0aDogMS4ycmVtO1xyXG4gICAgICBoZWlnaHQ6IDEuMnJlbTtcclxuXHJcbiAgICAgICYudXBkYXRlIHtcclxuICAgICAgICBtYXNrOiB1cmwoLi9hc3NldHMvaWNvbnMvdXBkYXRlLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgJi50aW1lIHtcclxuICAgICAgICBtYXNrOiB1cmwoLi9hc3NldHMvaWNvbnMvdGltZS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuc3RhbmRhcmQge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pbXBvcnRhbnQge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChvcmFuZ2VUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmNyaXRpY2FsIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQocmVkVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC50aW1lIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQob3JhbmdlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pY29uIHtcclxuXHJcbiAgICAgICYuc3RhbmRhcmQge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuaW1wb3J0YW50IHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQob3JhbmdlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICYuY3JpdGljYWwge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChyZWRUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJi50aW1lIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQob3JhbmdlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIG1vdmUge1xyXG4gIDAlIHtcclxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgLTdyZW07XHJcbiAgfVxyXG4gIDEwMCUge1xyXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSA3cmVtO1xyXG4gIH1cclxufVxyXG4iLCJhcHAtd2FsbGV0IHtcclxuXHJcbiAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gIH1cclxuXHJcbiAgLmhlYWRlciB7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5pY29uIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICY6ZGlzYWJsZWQge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChhY2NvdW50T3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5hbGlhcyB7XHJcblxyXG4gICAgICAuaWNvbiB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmFkZHJlc3Mge1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC5pY29uIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLnRhYnMge1xyXG5cclxuICAgIC50YWJzLWhlYWRlciB7XHJcblxyXG4gICAgICAudGFiIHtcclxuXHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQodGFiSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmljb24ge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaW5kaWNhdG9yIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGFjY291bnRJbmRpY2F0b3JCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVkKGFjY291bnRJbmRpY2F0b3JUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5hY3RpdmUge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoY29udGVudEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmhvdmVyOm5vdCguYWN0aXZlKTpub3QoLmRpc2FibGVkKSB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZCh0YWJIb3ZlckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnRhYnMtY29udGVudCB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoY29udGVudEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAucGFnaW5hdGlvbi13cmFwcGVyIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChjb250ZW50QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnBhZ2luYXRpb24ge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJvcmRlci10b3A6IDAuMnJlbSBzb2xpZCB0aGVtZWQodHJhbnNwYXJlbnRCdXR0b25Cb3JkZXJDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHRyYW5zcGFyZW50QnV0dG9uQm9yZGVyQ29sb3IpO1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQodGFibGVCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoaG92ZXJQYWdlKTtcclxuICAgICAgICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYXBwLXNlbmQge1xyXG5cclxuICAuZm9ybS1zZW5kIHtcclxuXHJcbiAgICAuc2VuZC1zZWxlY3Qge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmljb24ge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuYWRkaXRpb25hbC1kZXRhaWxzIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGJvcmRlcjogMC4ycmVtIHNvbGlkIHRoZW1lZCh0cmFuc3BhcmVudEJ1dHRvbkJvcmRlckNvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYXBwLXJlY2VpdmUge1xyXG5cclxuICAuYnRuLWNvcHktYWRkcmVzcyB7XHJcblxyXG4gICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC1oaXN0b3J5IHtcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuXHJcbiAgICAgICAgJi5sb2NrZWQtdHJhbnNhY3Rpb24ge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVkKG9wdGlvbmFsVGV4dENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bnRoLWNoaWxkKDRuKzEpIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHRhYmxlQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bnRoLWNoaWxkKDRuKzIpIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHRhYmxlQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bnRoLWNoaWxkKDRuKzMpIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOm50aC1jaGlsZCg0bis0KSB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cyB7XHJcblxyXG4gICAgICAgICAgLmNvbmZpcm1hdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAuZmlsbCB7XHJcblxyXG4gICAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHByb2dyZXNzQmFyRnVsbEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubG9jay10cmFuc2FjdGlvbiB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChvcmFuZ2VUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnVubG9jay10cmFuc2FjdGlvbiB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zdGF0dXMuc2VuZCB7XHJcblxyXG4gICAgICAgICAgLnN0YXR1cy10cmFuc2FjdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocmVkVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN0YXR1cy5yZWNlaXZlZCB7XHJcblxyXG4gICAgICAgICAgLnN0YXR1cy10cmFuc2FjdGlvbiB7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoZ3JlZW5UZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtY29udHJhY3RzIHtcclxuXHJcbiAgLndyYXAtdGFibGUge1xyXG5cclxuICAgIC5jb250cmFjdCB7XHJcblxyXG4gICAgICAuaWNvbiB7XHJcblxyXG4gICAgICAgICYubmV3LCAmLmFsZXJ0IHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHJlZFRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLnB1cmNoYXNlLCAmLnNlbGwge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtcHVyY2hhc2Uge1xyXG5cclxuICAuZm9ybS1wdXJjaGFzZSB7XHJcblxyXG4gICAgLnB1cmNoYXNlLXNlbGVjdCB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKG1haW5UZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuaWNvbiB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5wdXJjaGFzZS1zdGF0ZXMge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5hZGRpdGlvbmFsLWRldGFpbHMge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgYm9yZGVyOiAwLjJyZW0gc29saWQgdGhlbWVkKHRyYW5zcGFyZW50QnV0dG9uQm9yZGVyQ29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucHJvZ3Jlc3MtYmFyLWNvbnRhaW5lciB7XHJcblxyXG4gICAgLnByb2dyZXNzLWJhciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQocHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAucHJvZ3Jlc3MtYmFyLWZ1bGwge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChwcm9ncmVzc0JhckZ1bGxCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYXBwLW1lc3NhZ2VzIHtcclxuXHJcbiAgdGFibGUge1xyXG5cclxuICAgIHRib2R5IHtcclxuXHJcbiAgICAgIHRyIHtcclxuXHJcbiAgICAgICAgdGQ6Zmlyc3QtY2hpbGQge1xyXG5cclxuICAgICAgICAgIHNwYW4ge1xyXG4gICAgICAgICAgICBAaW5jbHVkZSB0ZXh0LXRydW5jYXRlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC5pY29uIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChyZWRUZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hcHAtdHlwaW5nLW1lc3NhZ2Uge1xyXG5cclxuICAuaGVhZCB7XHJcblxyXG4gICAgLmludGVybG9jdXRvciB7XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubWVzc2FnZXMtY29udGVudCB7XHJcblxyXG4gICAgLm1lc3NhZ2VzLWxpc3Qge1xyXG5cclxuICAgICAgZGl2IHtcclxuXHJcbiAgICAgICAgJi5kYXRlIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLm15IHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKG1lc3NhZ2VNeUJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJjpiZWZvcmUge1xyXG5cclxuICAgICAgICAgICAgQGluY2x1ZGUgcHNldWRvO1xyXG4gICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgIGxlZnQ6IC0xLjFyZW07XHJcbiAgICAgICAgICAgIGJvcmRlcjogMS4ycmVtIHNvbGlkIHRyYW5zcGFyZW50O1xyXG5cclxuICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdGhlbWVkKG1lc3NhZ2VNeUJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuYnVkZHkge1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQobWVzc2FnZUJ1ZGR5QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmOmFmdGVyIHtcclxuXHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHBzZXVkbztcclxuICAgICAgICAgICAgcmlnaHQ6IC0xLjFyZW07XHJcbiAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgYm9yZGVyOiAxLjJyZW0gc29saWQgdHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB0aGVtZWQobWVzc2FnZUJ1ZGR5QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuYXBwLXN0YWtpbmcge1xyXG5cclxuICAuY2hhcnQtaGVhZGVyIHtcclxuXHJcbiAgICAuZ2VuZXJhbCB7XHJcblxyXG4gICAgICAubGFiZWwge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLm9wdGlvbnMge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnNlbGVjdGVkIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgICBmb250LXNpemU6IDEuNnJlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5jaGFydC1vcHRpb25zIHtcclxuXHJcbiAgICAudGl0bGUge1xyXG5cclxuICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAub3B0aW9ucyB7XHJcblxyXG4gICAgICBidXR0b24ge1xyXG5cclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoY2hhcnRPcHRpb25zQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYuYWN0aXZlIHtcclxuXHJcbiAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGNoYXJ0T3B0aW9uc0hvdmVyQ29sb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmlucHV0LWJsb2NrLWFsaWFzIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcblxyXG4gIC5hbGlhcy1kcm9wZG93biB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDYuNXJlbTtcclxuICAgIG1heC1oZWlnaHQ6IDEwcmVtO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICB3aWR0aDogMTAwJTtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGlucHV0QmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXYge1xyXG4gICAgICBmb250LXNpemU6IDEuNHJlbTtcclxuICAgICAgcGFkZGluZzogMXJlbTtcclxuXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHNlbGVjdEhvdmVyQ29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJhcHAtY29udGFjdHMsIGFwcC1hZGQtY29udGFjdHMsXHJcbmFwcC1jb250YWN0LXNlbmQsIGFwcC1leHBvcnQtaW1wb3J0IHtcclxuICBmbGV4OiAxIDEgYXV0bztcclxuICBwYWRkaW5nOiAzcmVtO1xyXG4gIG1pbi13aWR0aDogODVyZW07XHJcblxyXG4gIC5jb250ZW50IHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHBhZGRpbmc6IDNyZW07XHJcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xyXG5cclxuICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoY29udGVudEJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLmhlYWQge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmFwcC1jb250YWN0cyB7XHJcbiAgXHJcbiAgdGFibGUge1xyXG5cclxuICAgIC5hbGlhcyB7XHJcbiAgXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1dHRvbiB7XHJcbiAgICBcclxuICAgICAgLmljb24ge1xyXG4gIFxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBzcGFuIHtcclxuICAgICAgICBcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGNvbG9yOiB0aGVtZWQobWFpblRleHRDb2xvcilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5mb290ZXIge1xyXG4gICAgXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgIH1cclxuICBcclxuICAgIC5pbXBvcnQtYnRuIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5pY29uIHtcclxuICBcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbn1cclxuXHJcbmFwcC1jb250YWN0LXNlbmQge1xyXG4gIFxyXG4gIC53YWxsZXRzLXNlbGVjdGlvbiB7XHJcblxyXG4gICAgYnV0dG9uIHtcclxuXHJcbiAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgIGNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0iLCIuZm9ybS1kZXRhaWxzIHtcclxuICAgIG1hcmdpbi10b3A6IDEuOHJlbTtcclxuXHJcbiAgICAuaW5wdXQtYmxvY2sge1xyXG5cclxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLndhbGxldC1idXR0b25zIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG5cclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgICBtYXJnaW46IDIuOXJlbSAwO1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNXJlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5mb3JtLXNlZWQge1xyXG5cclxuICAgIGxhYmVsIHtcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG4gICAgfVxyXG5cclxuICAgIC5mb3JtLWNvbnRlbnQge1xyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0aGVtZWQodHJhbnNwYXJlbnRCdXR0b25Cb3JkZXJDb2xvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIHBhZGRpbmc6IDNyZW07XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICB9XHJcblxyXG4gICAgLnRleHQtY29yYWwge1xyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBjb2xvcjogdGhlbWVkKGJsdWVUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLnNlZWQtcGhyYXNlLWZvcm0ge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIG1heC13aWR0aDogMzhyZW07XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcblxyXG4gICAgICAgIC5pbnB1dC1ibG9jayxcclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5lcnJvci1tZXNzYWdlIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMXJlbTtcclxuICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhlbWVkKG9yYW5nZVRleHRDb2xvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWN1cmVkLXNlZWQge1xyXG4gICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQoc2VjdXJlZFNlZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuXHJcbiAgICAgICAgICAgIC5pY29uIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBidXR0b24ge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogM3JlbTtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcclxuXHJcbiAgICAgICAgICAgIC5pY29uIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufVxyXG5cclxuLnNlZWQtcGhyYXNlIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xyXG5cclxuICAgICYtdGl0bGUge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGVtZWQob3B0aW9uYWxUZXh0Q29sb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAucmlnaHQtcGFydCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xyXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cclxuICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEuN3JlbTtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMS43cmVtO1xyXG5cclxuICAgICAgICAgICAgICAgICYuY29weSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XHJcbiAgICAgICAgICAgICAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2NvcHkuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC43NTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJi5jb3BpZWQge1xyXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9jb21wbGV0ZS10ZXN0d2FsbGV0LnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAmLnNlY3VyZWQsXHJcbiAgICAgICAgICAgICAgICAmLnVuc2VjdXJlZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEuMnJlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3BhbiB7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyLjRyZW07XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcclxuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgLmljb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJi1jb250ZW50IHtcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHRoZW1lZCh0cmFuc3BhcmVudEJ1dHRvbkJvcmRlckNvbG9yKTtcclxuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRoZW1lZCh0cmFuc3BhcmVudEJ1dHRvbkJvcmRlckNvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFkZGluZzogMXJlbSAwIDFyZW07XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xyXG5cclxuICAgICAgICAuaXRlbSB7XHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lZChzZWVkSXRlbVRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMnJlbTtcclxuICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzNXB4O1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcclxuXHJcbiAgICAgICAgICAgICYuZGFyayB7XHJcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoc2VlZEl0ZW1CYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICYtZm9vdGVyIHtcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblxyXG4gICAgICAgIC50aXRsZSB7XHJcbiAgICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoZW1lZChzZWVkSXRlbVRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMi40cmVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmljb24ge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XHJcbiAgICB3aWR0aDogMS42cmVtO1xyXG4gICAgaGVpZ2h0OiAxLjZyZW07XHJcblxyXG4gICAgJi5zZWN1cmVkIHtcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGdyZWVuVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL3NlY3VyZWQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgICYuaW5mbyB7XHJcbiAgICAgICAgQGluY2x1ZGUgdGhlbWlmeSgkdGhlbWVzKSB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL2luZm8uc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgICYudW5zZWN1cmVkIHtcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKG9yYW5nZVRleHRDb2xvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy91bnNlY3VyZWQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgICYuc2FmZXR5IHtcclxuICAgICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKGFsdGVybmF0aXZlVGV4dENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFzazogdXJsKH5zcmMvYXNzZXRzL2ljb25zL3NhZmV0eS5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICB9XHJcbn1cclxuXHJcbi53cmFwLWJ1dHRvbnMge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAuc2VlZC1waHJhc2UtYnV0dG9uIHtcclxuICAgICAgICBtYXJnaW46IDIuOHJlbSAwO1xyXG4gICAgICAgIHdpZHRoOiAyNSU7XHJcbiAgICAgICAgbWluLXdpZHRoOiAxLjVyZW07XHJcbiAgICB9XHJcblxyXG4gICAgLmNvcHktYnV0dG9uIHtcclxuICAgICAgICBtYXJnaW46IDIuOHJlbSAxcmVtO1xyXG4gICAgICAgIHdpZHRoOiAyNSU7XHJcbiAgICAgICAgbWluLXdpZHRoOiAxLjVyZW07XHJcbiAgICB9XHJcbn0iLCIuaGVhZCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XHJcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xyXG4gIHBhZGRpbmc6IDAgM3JlbTtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDNyZW07XHJcblxyXG4gIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgY29sb3I6IHRoZW1lZChibHVlVGV4dENvbG9yKTtcclxuICB9XHJcblxyXG4gIC5icmVhZGNydW1icyB7XHJcblxyXG4gICAgPiBzcGFuLCBhIHtcclxuXHJcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XHJcbiAgICAgICAgb3V0bGluZS1zdHlsZTogbm9uZTtcclxuXHJcbiAgICAgICAgJjphZnRlciB7XHJcblxyXG4gICAgICAgICAgQGluY2x1ZGUgcHNldWRvO1xyXG4gICAgICAgICAgdG9wOiAwLjVyZW07XHJcbiAgICAgICAgICByaWdodDogLTEuNXJlbTtcclxuICAgICAgICAgIHdpZHRoOiAwLjlyZW07XHJcbiAgICAgICAgICBoZWlnaHQ6IDAuOXJlbTtcclxuICAgICAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1yaWdodC5zdmcpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICAgICAgICBtYXNrLXNpemU6IGNvdmVyO1xyXG5cclxuICAgICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYmFjay1idG4ge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGNvbG9yOiAjNGRiMWZmO1xyXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjNyZW07XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAwLjdyZW07XHJcbiAgICAgIG1hc2s6IHVybCh+c3JjL2Fzc2V0cy9pY29ucy9iYWNrLnN2Zykgbm8tcmVwZWF0IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDAuOXJlbTtcclxuICAgICAgaGVpZ2h0OiAwLjlyZW07XHJcblxyXG4gICAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0aGVtZWQoYmx1ZVRleHRDb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLnNjcm9sbGVkLWNvbnRlbnQge1xyXG5cclxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgIHdpZHRoOiAxcmVtO1xyXG4gICAgaGVpZ2h0OiAxcmVtO1xyXG4gIH1cclxuXHJcbiAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xyXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgfVxyXG5cclxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU2NTc2O1xyXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuICAgIGJvcmRlcjogMC4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcclxuICB9XHJcblxyXG4gICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6ICM1NTY1NzY7XHJcbiAgfVxyXG59XHJcbiIsInRhYmxlIHtcclxuICBmb250LXNpemU6IDEuM3JlbTtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgdGhlYWQge1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgY29sb3I6IHRoZW1lZChvcHRpb25hbFRleHRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgdHIge1xyXG4gICAgICBoZWlnaHQ6IDRyZW07XHJcblxyXG4gICAgICB0aCB7XHJcbiAgICAgICAgcGFkZGluZzogMXJlbTtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xyXG5cclxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogM3JlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcmVtO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGJvZHkge1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuXHJcbiAgICBAaW5jbHVkZSB0aGVtaWZ5KCR0aGVtZXMpIHtcclxuICAgICAgY29sb3I6IHRoZW1lZChtYWluVGV4dENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICB0ciB7XHJcbiAgICAgIGhlaWdodDogMy41cmVtO1xyXG5cclxuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XHJcblxyXG4gICAgICAgIEBpbmNsdWRlIHRoZW1pZnkoJHRoZW1lcykge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWVkKHRhYmxlQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRkIHtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS43cmVtO1xyXG4gICAgICAgIHBhZGRpbmc6IDAgMXJlbTtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAyMHJlbTtcclxuXHJcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDNyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogM3JlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8gQkFTRVxyXG5AaW1wb3J0ICdhc3NldHMvc2Nzcy9iYXNlL21peGlucyc7XHJcbkBpbXBvcnQgJ2Fzc2V0cy9zY3NzL2Jhc2UvbnVsbCc7XHJcbkBpbXBvcnQgJ2Fzc2V0cy9zY3NzL2Jhc2UvdGhlbWUnO1xyXG5AaW1wb3J0ICdhc3NldHMvc2Nzcy9iYXNlL2Jhc2UnO1xyXG5cclxuLy8gTEFZT1VUXHJcbkBpbXBvcnQgJ2Fzc2V0cy9zY3NzL2xheW91dC9tYWluJztcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbGF5b3V0L3NldHRpbmdzJztcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbGF5b3V0L3NpZGViYXInO1xyXG5AaW1wb3J0ICdhc3NldHMvc2Nzcy9sYXlvdXQvc3RhdHVzJztcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbGF5b3V0L3dhbGxldCc7XHJcbkBpbXBvcnQgJ2Fzc2V0cy9zY3NzL2xheW91dC9jb250YWN0JztcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbGF5b3V0L3NlZWQtcGhyYXNlJztcclxuXHJcbi8vIE1PRFVMRVNcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbW9kdWxlcy9oZWFkJztcclxuQGltcG9ydCAnYXNzZXRzL3Njc3MvbW9kdWxlcy9zY3JvbGwnO1xyXG5AaW1wb3J0ICdhc3NldHMvc2Nzcy9tb2R1bGVzL3RhYmxlJztcclxuXHJcbkBpbXBvcnQgXCJ+QG5nLXNlbGVjdC9uZy1zZWxlY3QvdGhlbWVzL2RlZmF1bHQudGhlbWUuY3NzXCI7XHJcblxyXG5AZm9udC1mYWNlIHtcclxuICBmb250LWZhbWlseTogT3BlblNhbnM7XHJcbiAgc3JjOiB1cmwofnNyYy9hc3NldHMvZm9udHMvT3BlblNhbnMtTGlnaHQudHRmKTtcclxuICBmb250LXdlaWdodDogMzAwO1xyXG59XHJcblxyXG5AZm9udC1mYWNlIHtcclxuICBmb250LWZhbWlseTogT3BlblNhbnM7XHJcbiAgc3JjOiB1cmwofnNyYy9hc3NldHMvZm9udHMvT3BlblNhbnMtUmVndWxhci50dGYpO1xyXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbn1cclxuXHJcbkBmb250LWZhY2Uge1xyXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2FucztcclxuICBzcmM6IHVybCh+c3JjL2Fzc2V0cy9mb250cy9PcGVuU2Fucy1TZW1pQm9sZC50dGYpO1xyXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XHJcbn1cclxuXHJcbkBmb250LWZhY2Uge1xyXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2FucztcclxuICBzcmM6IHVybCh+c3JjL2Fzc2V0cy9mb250cy9PcGVuU2Fucy1Cb2xkLnR0Zik7XHJcbiAgZm9udC13ZWlnaHQ6IDcwMDtcclxufVxyXG5cclxuQGZvbnQtZmFjZSB7XHJcbiAgZm9udC1mYW1pbHk6IE9wZW5TYW5zO1xyXG4gIHNyYzogdXJsKH5zcmMvYXNzZXRzL2ZvbnRzL09wZW5TYW5zLUV4dHJhQm9sZC50dGYpO1xyXG4gIGZvbnQtd2VpZ2h0OiA4MDA7XHJcbn1cclxuXHJcblxyXG5odG1sIHtcclxuICBmb250LWZhbWlseTogT3BlblNhbnMsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxMHB4O1xyXG59XHJcblxyXG5ib2R5IHtcclxuICBmb250LWZhbWlseTogT3BlblNhbnMsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxLjZyZW07XHJcbiAgd2lkdGg6IDEwMHZ3O1xyXG4gIGhlaWdodDogMTAwdmg7XHJcblxyXG4gICYudGhlbWUtZGFyayB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMTMxOTIxIHVybChcImFzc2V0cy9pbWFnZXMvYmFja2dyb3VuZC1kYXJrLnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuICB9XHJcblxyXG4gICYudGhlbWUtZ3JheSB7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMTAxNDE3IHVybChcImFzc2V0cy9pbWFnZXMvYmFja2dyb3VuZC1ncmF5LnBuZ1wiKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcclxuICB9XHJcblxyXG4gICYudGhlbWUtd2hpdGUge1xyXG4gICAgYmFja2dyb3VuZDogI2VlZWVlZSB1cmwoXCJhc3NldHMvaW1hZ2VzL2JhY2tncm91bmQtd2hpdGUucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xyXG4gIH1cclxuXHJcbiAgYXBwLXJvb3Qge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gIH1cclxufVxyXG5cclxuLnVwZGF0ZS10b29sdGlwIHtcclxuXHJcbiAgLnRvb2x0aXAtaW5uZXIge1xyXG5cclxuICAgIC5pY29uIHtcclxuICAgICAgbWFzazogdXJsKGFzc2V0cy9pY29ucy91cGRhdGUtYWxlcnQuc3ZnKSBuby1yZXBlYXQgY2VudGVyO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */", '', '']] - -/***/ }), - -/***/ "./node_modules/style-loader/lib/addStyles.js": -/*!****************************************************!*\ - !*** ./node_modules/style-loader/lib/addStyles.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -var stylesInDom = {}; - -var memoize = function (fn) { - var memo; - - return function () { - if (typeof memo === "undefined") memo = fn.apply(this, arguments); - return memo; - }; -}; - -var isOldIE = memoize(function () { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - return window && document && document.all && !window.atob; -}); - -var getTarget = function (target, parent) { - if (parent){ - return parent.querySelector(target); - } - return document.querySelector(target); -}; - -var getElement = (function (fn) { - var memo = {}; - - return function(target, parent) { - // If passing function in options, then use it for resolve "head" element. - // Useful for Shadow Root style i.e - // { - // insertInto: function () { return document.querySelector("#foo").shadowRoot } - // } - if (typeof target === 'function') { - return target(); - } - if (typeof memo[target] === "undefined") { - var styleTarget = getTarget.call(this, target, parent); - // Special case to return head of iframe instead of iframe itself - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch(e) { - styleTarget = null; - } - } - memo[target] = styleTarget; - } - return memo[target] - }; -})(); - -var singleton = null; -var singletonCounter = 0; -var stylesInsertedAtTop = []; - -var fixUrls = __webpack_require__(/*! ./urls */ "./node_modules/style-loader/lib/urls.js"); - -module.exports = function(list, options) { - if (typeof DEBUG !== "undefined" && DEBUG) { - if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); - } - - options = options || {}; - - options.attrs = typeof options.attrs === "object" ? options.attrs : {}; - - // Force single-tag solution on IE6-9, which has a hard limit on the # of - - diff --git a/src/gui/qt-daemon/html/unlock-transaction.svg b/src/gui/qt-daemon/html/unlock-transaction.svg deleted file mode 100644 index bbbc27ad..00000000 --- a/src/gui/qt-daemon/html/unlock-transaction.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/unsecured.svg b/src/gui/qt-daemon/html/unsecured.svg deleted file mode 100644 index 1b9b18d7..00000000 --- a/src/gui/qt-daemon/html/unsecured.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/update-alert.svg b/src/gui/qt-daemon/html/update-alert.svg deleted file mode 100644 index 22fa01c7..00000000 --- a/src/gui/qt-daemon/html/update-alert.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/gui/qt-daemon/html/update.svg b/src/gui/qt-daemon/html/update.svg deleted file mode 100644 index c612c84e..00000000 --- a/src/gui/qt-daemon/html/update.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/src/gui/qt-daemon/html/vendor.js b/src/gui/qt-daemon/html/vendor.js deleted file mode 100644 index 60938654..00000000 --- a/src/gui/qt-daemon/html/vendor.js +++ /dev/null @@ -1,137619 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendor"],{ - -/***/ "./node_modules/@angular/cdk/esm5/a11y.es5.js": -/*!****************************************************!*\ - !*** ./node_modules/@angular/cdk/esm5/a11y.es5.js ***! - \****************************************************/ -/*! exports provided: ARIA_DESCRIBER_PROVIDER_FACTORY, MESSAGES_CONTAINER_ID, CDK_DESCRIBEDBY_ID_PREFIX, CDK_DESCRIBEDBY_HOST_ATTRIBUTE, AriaDescriber, ARIA_DESCRIBER_PROVIDER, ActiveDescendantKeyManager, FocusKeyManager, ListKeyManager, FocusTrap, FocusTrapFactory, CdkTrapFocus, InteractivityChecker, LIVE_ANNOUNCER_PROVIDER_FACTORY, LiveAnnouncer, CdkAriaLive, LIVE_ANNOUNCER_PROVIDER, LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY, LIVE_ANNOUNCER_ELEMENT_TOKEN, FOCUS_MONITOR_PROVIDER_FACTORY, TOUCH_BUFFER_MS, FocusMonitor, CdkMonitorFocus, FOCUS_MONITOR_PROVIDER, isFakeMousedownFromScreenReader, A11yModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ARIA_DESCRIBER_PROVIDER_FACTORY", function() { return ARIA_DESCRIBER_PROVIDER_FACTORY; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MESSAGES_CONTAINER_ID", function() { return MESSAGES_CONTAINER_ID; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CDK_DESCRIBEDBY_ID_PREFIX", function() { return CDK_DESCRIBEDBY_ID_PREFIX; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CDK_DESCRIBEDBY_HOST_ATTRIBUTE", function() { return CDK_DESCRIBEDBY_HOST_ATTRIBUTE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AriaDescriber", function() { return AriaDescriber; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ARIA_DESCRIBER_PROVIDER", function() { return ARIA_DESCRIBER_PROVIDER; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActiveDescendantKeyManager", function() { return ActiveDescendantKeyManager; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FocusKeyManager", function() { return FocusKeyManager; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ListKeyManager", function() { return ListKeyManager; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FocusTrap", function() { return FocusTrap; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FocusTrapFactory", function() { return FocusTrapFactory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkTrapFocus", function() { return CdkTrapFocus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InteractivityChecker", function() { return InteractivityChecker; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_PROVIDER_FACTORY", function() { return LIVE_ANNOUNCER_PROVIDER_FACTORY; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LiveAnnouncer", function() { return LiveAnnouncer; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkAriaLive", function() { return CdkAriaLive; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_PROVIDER", function() { return LIVE_ANNOUNCER_PROVIDER; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY", function() { return LIVE_ANNOUNCER_ELEMENT_TOKEN_FACTORY; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIVE_ANNOUNCER_ELEMENT_TOKEN", function() { return LIVE_ANNOUNCER_ELEMENT_TOKEN; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FOCUS_MONITOR_PROVIDER_FACTORY", function() { return FOCUS_MONITOR_PROVIDER_FACTORY; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TOUCH_BUFFER_MS", function() { return TOUCH_BUFFER_MS; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FocusMonitor", function() { return FocusMonitor; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CdkMonitorFocus", function() { return CdkMonitorFocus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FOCUS_MONITOR_PROVIDER", function() { return FOCUS_MONITOR_PROVIDER; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFakeMousedownFromScreenReader", function() { return isFakeMousedownFromScreenReader; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A11yModule", function() { return A11yModule; }); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm5/common.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm5/core.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/cdk/keycodes */ "./node_modules/@angular/cdk/esm5/keycodes.es5.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_cdk_platform__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/cdk/platform */ "./node_modules/@angular/cdk/esm5/platform.es5.js"); -/* harmony import */ var _angular_cdk_coercion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/cdk/coercion */ "./node_modules/@angular/cdk/esm5/coercion.es5.js"); -/* harmony import */ var _angular_cdk_observers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/cdk/observers */ "./node_modules/@angular/cdk/esm5/observers.es5.js"); -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - - - - - - - - - - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -/** - * IDs are deliminated by an empty space, as per the spec. - * @type {?} - */ -var ID_DELIMINATOR = ' '; -/** - * Adds the given ID to the specified ARIA attribute on an element. - * Used for attributes such as aria-labelledby, aria-owns, etc. - * @param {?} el - * @param {?} attr - * @param {?} id - * @return {?} - */ -function addAriaReferencedId(el, attr, id) { - /** @type {?} */ - var ids = getAriaReferenceIds(el, attr); - if (ids.some(function (existingId) { return existingId.trim() == id.trim(); })) { - return; - } - ids.push(id.trim()); - el.setAttribute(attr, ids.join(ID_DELIMINATOR)); -} -/** - * Removes the given ID from the specified ARIA attribute on an element. - * Used for attributes such as aria-labelledby, aria-owns, etc. - * @param {?} el - * @param {?} attr - * @param {?} id - * @return {?} - */ -function removeAriaReferencedId(el, attr, id) { - /** @type {?} */ - var ids = getAriaReferenceIds(el, attr); - /** @type {?} */ - var filteredIds = ids.filter(function (val) { return val != id.trim(); }); - el.setAttribute(attr, filteredIds.join(ID_DELIMINATOR)); -} -/** - * Gets the list of IDs referenced by the given ARIA attribute on an element. - * Used for attributes such as aria-labelledby, aria-owns, etc. - * @param {?} el - * @param {?} attr - * @return {?} - */ -function getAriaReferenceIds(el, attr) { - // Get string array of all individual ids (whitespace deliminated) in the attribute value - return (el.getAttribute(attr) || '').match(/\S+/g) || []; -} - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * ID used for the body container where all messages are appended. - * @type {?} - */ -var MESSAGES_CONTAINER_ID = 'cdk-describedby-message-container'; -/** - * ID prefix used for each created message element. - * @type {?} - */ -var CDK_DESCRIBEDBY_ID_PREFIX = 'cdk-describedby-message'; -/** - * Attribute given to each host element that is described by a message element. - * @type {?} - */ -var CDK_DESCRIBEDBY_HOST_ATTRIBUTE = 'cdk-describedby-host'; -/** - * Global incremental identifier for each registered message element. - * @type {?} - */ -var nextId = 0; -/** - * Global map of all registered message elements that have been placed into the document. - * @type {?} - */ -var messageRegistry = new Map(); -/** - * Container for all registered messages. - * @type {?} - */ -var messagesContainer = null; -/** - * Utility that creates visually hidden elements with a message content. Useful for elements that - * want to use aria-describedby to further describe themselves without adding additional visual - * content. - * \@docs-private - */ -var AriaDescriber = /** @class */ (function () { - function AriaDescriber(_document) { - this._document = _document; - } - /** - * Adds to the host element an aria-describedby reference to a hidden element that contains - * the message. If the same message has already been registered, then it will reuse the created - * message element. - */ - /** - * Adds to the host element an aria-describedby reference to a hidden element that contains - * the message. If the same message has already been registered, then it will reuse the created - * message element. - * @param {?} hostElement - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype.describe = /** - * Adds to the host element an aria-describedby reference to a hidden element that contains - * the message. If the same message has already been registered, then it will reuse the created - * message element. - * @param {?} hostElement - * @param {?} message - * @return {?} - */ - function (hostElement, message) { - if (!this._canBeDescribed(hostElement, message)) { - return; - } - if (!messageRegistry.has(message)) { - this._createMessageElement(message); - } - if (!this._isElementDescribedByMessage(hostElement, message)) { - this._addMessageReference(hostElement, message); - } - }; - /** Removes the host element's aria-describedby reference to the message element. */ - /** - * Removes the host element's aria-describedby reference to the message element. - * @param {?} hostElement - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype.removeDescription = /** - * Removes the host element's aria-describedby reference to the message element. - * @param {?} hostElement - * @param {?} message - * @return {?} - */ - function (hostElement, message) { - if (!this._canBeDescribed(hostElement, message)) { - return; - } - if (this._isElementDescribedByMessage(hostElement, message)) { - this._removeMessageReference(hostElement, message); - } - /** @type {?} */ - var registeredMessage = messageRegistry.get(message); - if (registeredMessage && registeredMessage.referenceCount === 0) { - this._deleteMessageElement(message); - } - if (messagesContainer && messagesContainer.childNodes.length === 0) { - this._deleteMessagesContainer(); - } - }; - /** Unregisters all created message elements and removes the message container. */ - /** - * Unregisters all created message elements and removes the message container. - * @return {?} - */ - AriaDescriber.prototype.ngOnDestroy = /** - * Unregisters all created message elements and removes the message container. - * @return {?} - */ - function () { - /** @type {?} */ - var describedElements = this._document.querySelectorAll("[" + CDK_DESCRIBEDBY_HOST_ATTRIBUTE + "]"); - for (var i = 0; i < describedElements.length; i++) { - this._removeCdkDescribedByReferenceIds(describedElements[i]); - describedElements[i].removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE); - } - if (messagesContainer) { - this._deleteMessagesContainer(); - } - messageRegistry.clear(); - }; - /** - * Creates a new element in the visually hidden message container element with the message - * as its content and adds it to the message registry. - */ - /** - * Creates a new element in the visually hidden message container element with the message - * as its content and adds it to the message registry. - * @private - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._createMessageElement = /** - * Creates a new element in the visually hidden message container element with the message - * as its content and adds it to the message registry. - * @private - * @param {?} message - * @return {?} - */ - function (message) { - /** @type {?} */ - var messageElement = this._document.createElement('div'); - messageElement.setAttribute('id', CDK_DESCRIBEDBY_ID_PREFIX + "-" + nextId++); - messageElement.appendChild((/** @type {?} */ (this._document.createTextNode(message)))); - this._createMessagesContainer(); - (/** @type {?} */ (messagesContainer)).appendChild(messageElement); - messageRegistry.set(message, { messageElement: messageElement, referenceCount: 0 }); - }; - /** Deletes the message element from the global messages container. */ - /** - * Deletes the message element from the global messages container. - * @private - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._deleteMessageElement = /** - * Deletes the message element from the global messages container. - * @private - * @param {?} message - * @return {?} - */ - function (message) { - /** @type {?} */ - var registeredMessage = messageRegistry.get(message); - /** @type {?} */ - var messageElement = registeredMessage && registeredMessage.messageElement; - if (messagesContainer && messageElement) { - messagesContainer.removeChild(messageElement); - } - messageRegistry.delete(message); - }; - /** Creates the global container for all aria-describedby messages. */ - /** - * Creates the global container for all aria-describedby messages. - * @private - * @return {?} - */ - AriaDescriber.prototype._createMessagesContainer = /** - * Creates the global container for all aria-describedby messages. - * @private - * @return {?} - */ - function () { - if (!messagesContainer) { - /** @type {?} */ - var preExistingContainer = this._document.getElementById(MESSAGES_CONTAINER_ID); - // When going from the server to the client, we may end up in a situation where there's - // already a container on the page, but we don't have a reference to it. Clear the - // old container so we don't get duplicates. Doing this, instead of emptying the previous - // container, should be slightly faster. - if (preExistingContainer) { - (/** @type {?} */ (preExistingContainer.parentNode)).removeChild(preExistingContainer); - } - messagesContainer = this._document.createElement('div'); - messagesContainer.id = MESSAGES_CONTAINER_ID; - messagesContainer.setAttribute('aria-hidden', 'true'); - messagesContainer.style.display = 'none'; - this._document.body.appendChild(messagesContainer); - } - }; - /** Deletes the global messages container. */ - /** - * Deletes the global messages container. - * @private - * @return {?} - */ - AriaDescriber.prototype._deleteMessagesContainer = /** - * Deletes the global messages container. - * @private - * @return {?} - */ - function () { - if (messagesContainer && messagesContainer.parentNode) { - messagesContainer.parentNode.removeChild(messagesContainer); - messagesContainer = null; - } - }; - /** Removes all cdk-describedby messages that are hosted through the element. */ - /** - * Removes all cdk-describedby messages that are hosted through the element. - * @private - * @param {?} element - * @return {?} - */ - AriaDescriber.prototype._removeCdkDescribedByReferenceIds = /** - * Removes all cdk-describedby messages that are hosted through the element. - * @private - * @param {?} element - * @return {?} - */ - function (element) { - // Remove all aria-describedby reference IDs that are prefixed by CDK_DESCRIBEDBY_ID_PREFIX - /** @type {?} */ - var originalReferenceIds = getAriaReferenceIds(element, 'aria-describedby') - .filter(function (id) { return id.indexOf(CDK_DESCRIBEDBY_ID_PREFIX) != 0; }); - element.setAttribute('aria-describedby', originalReferenceIds.join(' ')); - }; - /** - * Adds a message reference to the element using aria-describedby and increments the registered - * message's reference count. - */ - /** - * Adds a message reference to the element using aria-describedby and increments the registered - * message's reference count. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._addMessageReference = /** - * Adds a message reference to the element using aria-describedby and increments the registered - * message's reference count. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - function (element, message) { - /** @type {?} */ - var registeredMessage = (/** @type {?} */ (messageRegistry.get(message))); - // Add the aria-describedby reference and set the - // describedby_host attribute to mark the element. - addAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id); - element.setAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE, ''); - registeredMessage.referenceCount++; - }; - /** - * Removes a message reference from the element using aria-describedby - * and decrements the registered message's reference count. - */ - /** - * Removes a message reference from the element using aria-describedby - * and decrements the registered message's reference count. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._removeMessageReference = /** - * Removes a message reference from the element using aria-describedby - * and decrements the registered message's reference count. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - function (element, message) { - /** @type {?} */ - var registeredMessage = (/** @type {?} */ (messageRegistry.get(message))); - registeredMessage.referenceCount--; - removeAriaReferencedId(element, 'aria-describedby', registeredMessage.messageElement.id); - element.removeAttribute(CDK_DESCRIBEDBY_HOST_ATTRIBUTE); - }; - /** Returns true if the element has been described by the provided message ID. */ - /** - * Returns true if the element has been described by the provided message ID. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._isElementDescribedByMessage = /** - * Returns true if the element has been described by the provided message ID. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - function (element, message) { - /** @type {?} */ - var referenceIds = getAriaReferenceIds(element, 'aria-describedby'); - /** @type {?} */ - var registeredMessage = messageRegistry.get(message); - /** @type {?} */ - var messageId = registeredMessage && registeredMessage.messageElement.id; - return !!messageId && referenceIds.indexOf(messageId) != -1; - }; - /** Determines whether a message can be described on a particular element. */ - /** - * Determines whether a message can be described on a particular element. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - AriaDescriber.prototype._canBeDescribed = /** - * Determines whether a message can be described on a particular element. - * @private - * @param {?} element - * @param {?} message - * @return {?} - */ - function (element, message) { - return element.nodeType === this._document.ELEMENT_NODE && message != null && - !!("" + message).trim(); - }; - AriaDescriber.decorators = [ - { type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"], args: [{ providedIn: 'root' },] }, - ]; - /** @nocollapse */ - AriaDescriber.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: _angular_core__WEBPACK_IMPORTED_MODULE_1__["Inject"], args: [_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"],] }] } - ]; }; - /** @nocollapse */ AriaDescriber.ngInjectableDef = Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["defineInjectable"])({ factory: function AriaDescriber_Factory() { return new AriaDescriber(Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["inject"])(_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])); }, token: AriaDescriber, providedIn: "root" }); - return AriaDescriber; -}()); -/** - * \@docs-private \@deprecated \@breaking-change 8.0.0 - * @param {?} parentDispatcher - * @param {?} _document - * @return {?} - */ -function ARIA_DESCRIBER_PROVIDER_FACTORY(parentDispatcher, _document) { - return parentDispatcher || new AriaDescriber(_document); -} -/** - * \@docs-private \@deprecated \@breaking-change 8.0.0 - * @type {?} - */ -var ARIA_DESCRIBER_PROVIDER = { - // If there is already an AriaDescriber available, use that. Otherwise, provide a new one. - provide: AriaDescriber, - deps: [ - [new _angular_core__WEBPACK_IMPORTED_MODULE_1__["Optional"](), new _angular_core__WEBPACK_IMPORTED_MODULE_1__["SkipSelf"](), AriaDescriber], - (/** @type {?} */ (_angular_common__WEBPACK_IMPORTED_MODULE_0__["DOCUMENT"])) - ], - useFactory: ARIA_DESCRIBER_PROVIDER_FACTORY -}; - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * This class manages keyboard events for selectable lists. If you pass it a query list - * of items, it will set the active item correctly when arrow events occur. - * @template T - */ -var /** - * This class manages keyboard events for selectable lists. If you pass it a query list - * of items, it will set the active item correctly when arrow events occur. - * @template T - */ -ListKeyManager = /** @class */ (function () { - function ListKeyManager(_items) { - var _this = this; - this._items = _items; - this._activeItemIndex = -1; - this._activeItem = null; - this._wrap = false; - this._letterKeyStream = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"](); - this._typeaheadSubscription = rxjs__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY; - this._vertical = true; - this._allowedModifierKeys = []; - /** - * Predicate function that can be used to check whether an item should be skipped - * by the key manager. By default, disabled items are skipped. - */ - this._skipPredicateFn = function (item) { return item.disabled; }; - // Buffer for the letters that the user has pressed when the typeahead option is turned on. - this._pressedLetters = []; - /** - * Stream that emits any time the TAB key is pressed, so components can react - * when focus is shifted off of the list. - */ - this.tabOut = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"](); - /** - * Stream that emits whenever the active item of the list manager changes. - */ - this.change = new rxjs__WEBPACK_IMPORTED_MODULE_2__["Subject"](); - // We allow for the items to be an array because, in some cases, the consumer may - // not have access to a QueryList of the items they want to manage (e.g. when the - // items aren't being collected via `ViewChildren` or `ContentChildren`). - if (_items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["QueryList"]) { - _items.changes.subscribe(function (newItems) { - if (_this._activeItem) { - /** @type {?} */ - var itemArray = newItems.toArray(); - /** @type {?} */ - var newIndex = itemArray.indexOf(_this._activeItem); - if (newIndex > -1 && newIndex !== _this._activeItemIndex) { - _this._activeItemIndex = newIndex; - } - } - }); - } - } - /** - * Sets the predicate function that determines which items should be skipped by the - * list key manager. - * @param predicate Function that determines whether the given item should be skipped. - */ - /** - * Sets the predicate function that determines which items should be skipped by the - * list key manager. - * @template THIS - * @this {THIS} - * @param {?} predicate Function that determines whether the given item should be skipped. - * @return {THIS} - */ - ListKeyManager.prototype.skipPredicate = /** - * Sets the predicate function that determines which items should be skipped by the - * list key manager. - * @template THIS - * @this {THIS} - * @param {?} predicate Function that determines whether the given item should be skipped. - * @return {THIS} - */ - function (predicate) { - (/** @type {?} */ (this))._skipPredicateFn = predicate; - return (/** @type {?} */ (this)); - }; - /** - * Configures wrapping mode, which determines whether the active item will wrap to - * the other end of list when there are no more items in the given direction. - * @param shouldWrap Whether the list should wrap when reaching the end. - */ - /** - * Configures wrapping mode, which determines whether the active item will wrap to - * the other end of list when there are no more items in the given direction. - * @template THIS - * @this {THIS} - * @param {?=} shouldWrap Whether the list should wrap when reaching the end. - * @return {THIS} - */ - ListKeyManager.prototype.withWrap = /** - * Configures wrapping mode, which determines whether the active item will wrap to - * the other end of list when there are no more items in the given direction. - * @template THIS - * @this {THIS} - * @param {?=} shouldWrap Whether the list should wrap when reaching the end. - * @return {THIS} - */ - function (shouldWrap) { - if (shouldWrap === void 0) { shouldWrap = true; } - (/** @type {?} */ (this))._wrap = shouldWrap; - return (/** @type {?} */ (this)); - }; - /** - * Configures whether the key manager should be able to move the selection vertically. - * @param enabled Whether vertical selection should be enabled. - */ - /** - * Configures whether the key manager should be able to move the selection vertically. - * @template THIS - * @this {THIS} - * @param {?=} enabled Whether vertical selection should be enabled. - * @return {THIS} - */ - ListKeyManager.prototype.withVerticalOrientation = /** - * Configures whether the key manager should be able to move the selection vertically. - * @template THIS - * @this {THIS} - * @param {?=} enabled Whether vertical selection should be enabled. - * @return {THIS} - */ - function (enabled) { - if (enabled === void 0) { enabled = true; } - (/** @type {?} */ (this))._vertical = enabled; - return (/** @type {?} */ (this)); - }; - /** - * Configures the key manager to move the selection horizontally. - * Passing in `null` will disable horizontal movement. - * @param direction Direction in which the selection can be moved. - */ - /** - * Configures the key manager to move the selection horizontally. - * Passing in `null` will disable horizontal movement. - * @template THIS - * @this {THIS} - * @param {?} direction Direction in which the selection can be moved. - * @return {THIS} - */ - ListKeyManager.prototype.withHorizontalOrientation = /** - * Configures the key manager to move the selection horizontally. - * Passing in `null` will disable horizontal movement. - * @template THIS - * @this {THIS} - * @param {?} direction Direction in which the selection can be moved. - * @return {THIS} - */ - function (direction) { - (/** @type {?} */ (this))._horizontal = direction; - return (/** @type {?} */ (this)); - }; - /** - * Modifier keys which are allowed to be held down and whose default actions will be prevented - * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys. - */ - /** - * Modifier keys which are allowed to be held down and whose default actions will be prevented - * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys. - * @template THIS - * @this {THIS} - * @param {?} keys - * @return {THIS} - */ - ListKeyManager.prototype.withAllowedModifierKeys = /** - * Modifier keys which are allowed to be held down and whose default actions will be prevented - * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys. - * @template THIS - * @this {THIS} - * @param {?} keys - * @return {THIS} - */ - function (keys) { - (/** @type {?} */ (this))._allowedModifierKeys = keys; - return (/** @type {?} */ (this)); - }; - /** - * Turns on typeahead mode which allows users to set the active item by typing. - * @param debounceInterval Time to wait after the last keystroke before setting the active item. - */ - /** - * Turns on typeahead mode which allows users to set the active item by typing. - * @template THIS - * @this {THIS} - * @param {?=} debounceInterval Time to wait after the last keystroke before setting the active item. - * @return {THIS} - */ - ListKeyManager.prototype.withTypeAhead = /** - * Turns on typeahead mode which allows users to set the active item by typing. - * @template THIS - * @this {THIS} - * @param {?=} debounceInterval Time to wait after the last keystroke before setting the active item. - * @return {THIS} - */ - function (debounceInterval) { - var _this = this; - if (debounceInterval === void 0) { debounceInterval = 200; } - if ((/** @type {?} */ (this))._items.length && (/** @type {?} */ (this))._items.some(function (item) { return typeof item.getLabel !== 'function'; })) { - throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.'); - } - (/** @type {?} */ (this))._typeaheadSubscription.unsubscribe(); - // Debounce the presses of non-navigational keys, collect the ones that correspond to letters - // and convert those letters back into a string. Afterwards find the first item that starts - // with that string and select it. - (/** @type {?} */ (this))._typeaheadSubscription = (/** @type {?} */ (this))._letterKeyStream.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["tap"])(function (keyCode) { return (/** @type {?} */ (_this))._pressedLetters.push(keyCode); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["debounceTime"])(debounceInterval), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["filter"])(function () { return (/** @type {?} */ (_this))._pressedLetters.length > 0; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_4__["map"])(function () { return (/** @type {?} */ (_this))._pressedLetters.join(''); })).subscribe(function (inputString) { - /** @type {?} */ - var items = (/** @type {?} */ (_this))._getItemsArray(); - // Start at 1 because we want to start searching at the item immediately - // following the current active item. - for (var i = 1; i < items.length + 1; i++) { - /** @type {?} */ - var index = ((/** @type {?} */ (_this))._activeItemIndex + i) % items.length; - /** @type {?} */ - var item = items[index]; - if (!(/** @type {?} */ (_this))._skipPredicateFn(item) && - (/** @type {?} */ (item.getLabel))().toUpperCase().trim().indexOf(inputString) === 0) { - (/** @type {?} */ (_this)).setActiveItem(index); - break; - } - } - (/** @type {?} */ (_this))._pressedLetters = []; - }); - return (/** @type {?} */ (this)); - }; - /** - * @param {?} item - * @return {?} - */ - ListKeyManager.prototype.setActiveItem = /** - * @param {?} item - * @return {?} - */ - function (item) { - /** @type {?} */ - var previousIndex = this._activeItemIndex; - this.updateActiveItem(item); - if (this._activeItemIndex !== previousIndex) { - this.change.next(this._activeItemIndex); - } - }; - /** - * Sets the active item depending on the key event passed in. - * @param event Keyboard event to be used for determining which element should be active. - */ - /** - * Sets the active item depending on the key event passed in. - * @param {?} event Keyboard event to be used for determining which element should be active. - * @return {?} - */ - ListKeyManager.prototype.onKeydown = /** - * Sets the active item depending on the key event passed in. - * @param {?} event Keyboard event to be used for determining which element should be active. - * @return {?} - */ - function (event) { - var _this = this; - /** @type {?} */ - var keyCode = event.keyCode; - /** @type {?} */ - var modifiers = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey']; - /** @type {?} */ - var isModifierAllowed = modifiers.every(function (modifier) { - return !event[modifier] || _this._allowedModifierKeys.indexOf(modifier) > -1; - }); - switch (keyCode) { - case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["TAB"]: - this.tabOut.next(); - return; - case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["DOWN_ARROW"]: - if (this._vertical && isModifierAllowed) { - this.setNextItemActive(); - break; - } - else { - return; - } - case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["UP_ARROW"]: - if (this._vertical && isModifierAllowed) { - this.setPreviousItemActive(); - break; - } - else { - return; - } - case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["RIGHT_ARROW"]: - if (this._horizontal && isModifierAllowed) { - this._horizontal === 'rtl' ? this.setPreviousItemActive() : this.setNextItemActive(); - break; - } - else { - return; - } - case _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["LEFT_ARROW"]: - if (this._horizontal && isModifierAllowed) { - this._horizontal === 'rtl' ? this.setNextItemActive() : this.setPreviousItemActive(); - break; - } - else { - return; - } - default: - if (isModifierAllowed || Object(_angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["hasModifierKey"])(event, 'shiftKey')) { - // Attempt to use the `event.key` which also maps it to the user's keyboard language, - // otherwise fall back to resolving alphanumeric characters via the keyCode. - if (event.key && event.key.length === 1) { - this._letterKeyStream.next(event.key.toLocaleUpperCase()); - } - else if ((keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["A"] && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["Z"]) || (keyCode >= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["ZERO"] && keyCode <= _angular_cdk_keycodes__WEBPACK_IMPORTED_MODULE_3__["NINE"])) { - this._letterKeyStream.next(String.fromCharCode(keyCode)); - } - } - // Note that we return here, in order to avoid preventing - // the default action of non-navigational keys. - return; - } - this._pressedLetters = []; - event.preventDefault(); - }; - Object.defineProperty(ListKeyManager.prototype, "activeItemIndex", { - /** Index of the currently active item. */ - get: /** - * Index of the currently active item. - * @return {?} - */ - function () { - return this._activeItemIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ListKeyManager.prototype, "activeItem", { - /** The active item. */ - get: /** - * The active item. - * @return {?} - */ - function () { - return this._activeItem; - }, - enumerable: true, - configurable: true - }); - /** Sets the active item to the first enabled item in the list. */ - /** - * Sets the active item to the first enabled item in the list. - * @return {?} - */ - ListKeyManager.prototype.setFirstItemActive = /** - * Sets the active item to the first enabled item in the list. - * @return {?} - */ - function () { - this._setActiveItemByIndex(0, 1); - }; - /** Sets the active item to the last enabled item in the list. */ - /** - * Sets the active item to the last enabled item in the list. - * @return {?} - */ - ListKeyManager.prototype.setLastItemActive = /** - * Sets the active item to the last enabled item in the list. - * @return {?} - */ - function () { - this._setActiveItemByIndex(this._items.length - 1, -1); - }; - /** Sets the active item to the next enabled item in the list. */ - /** - * Sets the active item to the next enabled item in the list. - * @return {?} - */ - ListKeyManager.prototype.setNextItemActive = /** - * Sets the active item to the next enabled item in the list. - * @return {?} - */ - function () { - this._activeItemIndex < 0 ? this.setFirstItemActive() : this._setActiveItemByDelta(1); - }; - /** Sets the active item to a previous enabled item in the list. */ - /** - * Sets the active item to a previous enabled item in the list. - * @return {?} - */ - ListKeyManager.prototype.setPreviousItemActive = /** - * Sets the active item to a previous enabled item in the list. - * @return {?} - */ - function () { - this._activeItemIndex < 0 && this._wrap ? this.setLastItemActive() - : this._setActiveItemByDelta(-1); - }; - /** - * @param {?} item - * @return {?} - */ - ListKeyManager.prototype.updateActiveItem = /** - * @param {?} item - * @return {?} - */ - function (item) { - /** @type {?} */ - var itemArray = this._getItemsArray(); - /** @type {?} */ - var index = typeof item === 'number' ? item : itemArray.indexOf(item); - /** @type {?} */ - var activeItem = itemArray[index]; - // Explicitly check for `null` and `undefined` because other falsy values are valid. - this._activeItem = activeItem == null ? null : activeItem; - this._activeItemIndex = index; - }; - /** - * Allows setting of the activeItemIndex without any other effects. - * @param index The new activeItemIndex. - * @deprecated Use `updateActiveItem` instead. - * @breaking-change 8.0.0 - */ - /** - * Allows setting of the activeItemIndex without any other effects. - * @deprecated Use `updateActiveItem` instead. - * \@breaking-change 8.0.0 - * @param {?} index The new activeItemIndex. - * @return {?} - */ - ListKeyManager.prototype.updateActiveItemIndex = /** - * Allows setting of the activeItemIndex without any other effects. - * @deprecated Use `updateActiveItem` instead. - * \@breaking-change 8.0.0 - * @param {?} index The new activeItemIndex. - * @return {?} - */ - function (index) { - this.updateActiveItem(index); - }; - /** - * This method sets the active item, given a list of items and the delta between the - * currently active item and the new active item. It will calculate differently - * depending on whether wrap mode is turned on. - */ - /** - * This method sets the active item, given a list of items and the delta between the - * currently active item and the new active item. It will calculate differently - * depending on whether wrap mode is turned on. - * @private - * @param {?} delta - * @return {?} - */ - ListKeyManager.prototype._setActiveItemByDelta = /** - * This method sets the active item, given a list of items and the delta between the - * currently active item and the new active item. It will calculate differently - * depending on whether wrap mode is turned on. - * @private - * @param {?} delta - * @return {?} - */ - function (delta) { - this._wrap ? this._setActiveInWrapMode(delta) : this._setActiveInDefaultMode(delta); - }; - /** - * Sets the active item properly given "wrap" mode. In other words, it will continue to move - * down the list until it finds an item that is not disabled, and it will wrap if it - * encounters either end of the list. - */ - /** - * Sets the active item properly given "wrap" mode. In other words, it will continue to move - * down the list until it finds an item that is not disabled, and it will wrap if it - * encounters either end of the list. - * @private - * @param {?} delta - * @return {?} - */ - ListKeyManager.prototype._setActiveInWrapMode = /** - * Sets the active item properly given "wrap" mode. In other words, it will continue to move - * down the list until it finds an item that is not disabled, and it will wrap if it - * encounters either end of the list. - * @private - * @param {?} delta - * @return {?} - */ - function (delta) { - /** @type {?} */ - var items = this._getItemsArray(); - for (var i = 1; i <= items.length; i++) { - /** @type {?} */ - var index = (this._activeItemIndex + (delta * i) + items.length) % items.length; - /** @type {?} */ - var item = items[index]; - if (!this._skipPredicateFn(item)) { - this.setActiveItem(index); - return; - } - } - }; - /** - * Sets the active item properly given the default mode. In other words, it will - * continue to move down the list until it finds an item that is not disabled. If - * it encounters either end of the list, it will stop and not wrap. - */ - /** - * Sets the active item properly given the default mode. In other words, it will - * continue to move down the list until it finds an item that is not disabled. If - * it encounters either end of the list, it will stop and not wrap. - * @private - * @param {?} delta - * @return {?} - */ - ListKeyManager.prototype._setActiveInDefaultMode = /** - * Sets the active item properly given the default mode. In other words, it will - * continue to move down the list until it finds an item that is not disabled. If - * it encounters either end of the list, it will stop and not wrap. - * @private - * @param {?} delta - * @return {?} - */ - function (delta) { - this._setActiveItemByIndex(this._activeItemIndex + delta, delta); - }; - /** - * Sets the active item to the first enabled item starting at the index specified. If the - * item is disabled, it will move in the fallbackDelta direction until it either - * finds an enabled item or encounters the end of the list. - */ - /** - * Sets the active item to the first enabled item starting at the index specified. If the - * item is disabled, it will move in the fallbackDelta direction until it either - * finds an enabled item or encounters the end of the list. - * @private - * @param {?} index - * @param {?} fallbackDelta - * @return {?} - */ - ListKeyManager.prototype._setActiveItemByIndex = /** - * Sets the active item to the first enabled item starting at the index specified. If the - * item is disabled, it will move in the fallbackDelta direction until it either - * finds an enabled item or encounters the end of the list. - * @private - * @param {?} index - * @param {?} fallbackDelta - * @return {?} - */ - function (index, fallbackDelta) { - /** @type {?} */ - var items = this._getItemsArray(); - if (!items[index]) { - return; - } - while (this._skipPredicateFn(items[index])) { - index += fallbackDelta; - if (!items[index]) { - return; - } - } - this.setActiveItem(index); - }; - /** Returns the items as an array. */ - /** - * Returns the items as an array. - * @private - * @return {?} - */ - ListKeyManager.prototype._getItemsArray = /** - * Returns the items as an array. - * @private - * @return {?} - */ - function () { - return this._items instanceof _angular_core__WEBPACK_IMPORTED_MODULE_1__["QueryList"] ? this._items.toArray() : this._items; - }; - return ListKeyManager; -}()); - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - */ -var /** - * @template T - */ -ActiveDescendantKeyManager = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_5__["__extends"])(ActiveDescendantKeyManager, _super); - function ActiveDescendantKeyManager() { - return _super !== null && _super.apply(this, arguments) || this; - } - /** - * @param {?} index - * @return {?} - */ - ActiveDescendantKeyManager.prototype.setActiveItem = /** - * @param {?} index - * @return {?} - */ - function (index) { - if (this.activeItem) { - this.activeItem.setInactiveStyles(); - } - _super.prototype.setActiveItem.call(this, index); - if (this.activeItem) { - this.activeItem.setActiveStyles(); - } - }; - return ActiveDescendantKeyManager; -}(ListKeyManager)); - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - */ -var /** - * @template T - */ -FocusKeyManager = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_5__["__extends"])(FocusKeyManager, _super); - function FocusKeyManager() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._origin = 'program'; - return _this; - } - /** - * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls. - * @param origin Focus origin to be used when focusing items. - */ - /** - * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls. - * @template THIS - * @this {THIS} - * @param {?} origin Focus origin to be used when focusing items. - * @return {THIS} - */ - FocusKeyManager.prototype.setFocusOrigin = /** - * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls. - * @template THIS - * @this {THIS} - * @param {?} origin Focus origin to be used when focusing items. - * @return {THIS} - */ - function (origin) { - (/** @type {?} */ (this))._origin = origin; - return (/** @type {?} */ (this)); - }; - /** - * @param {?} item - * @return {?} - */ - FocusKeyManager.prototype.setActiveItem = /** - * @param {?} item - * @return {?} - */ - function (item) { - _super.prototype.setActiveItem.call(this, item); - if (this.activeItem) { - this.activeItem.focus(this._origin); - } - }; - return FocusKeyManager; -}(ListKeyManager)); - -/** - * @fileoverview added by tsickle - * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -// The InteractivityChecker leans heavily on the ally.js accessibility utilities. -// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are -// supported. -/** - * Utility for checking the interactivity of an element, such as whether is is focusable or - * tabbable. - */ -var InteractivityChecker = /** @class */ (function () { - function InteractivityChecker(_platform) { - this._platform = _platform; - } - /** - * Gets whether an element is disabled. - * - * @param element Element to be checked. - * @returns Whether the element is disabled. - */ - /** - * Gets whether an element is disabled. - * - * @param {?} element Element to be checked. - * @return {?} Whether the element is disabled. - */ - InteractivityChecker.prototype.isDisabled = /** - * Gets whether an element is disabled. - * - * @param {?} element Element to be checked. - * @return {?} Whether the element is disabled. - */ - function (element) { - // This does not capture some cases, such as a non-form control with a disabled attribute or - // a form control inside of a disabled form, but should capture the most common cases. - return element.hasAttribute('disabled'); - }; - /** - * Gets whether an element is visible for the purposes of interactivity. - * - * This will capture states like `display: none` and `visibility: hidden`, but not things like - * being clipped by an `overflow: hidden` parent or being outside the viewport. - * - * @returns Whether the element is visible. - */ - /** - * Gets whether an element is visible for the purposes of interactivity. - * - * This will capture states like `display: none` and `visibility: hidden`, but not things like - * being clipped by an `overflow: hidden` parent or being outside the viewport. - * - * @param {?} element - * @return {?} Whether the element is visible. - */ - InteractivityChecker.prototype.isVisible = /** - * Gets whether an element is visible for the purposes of interactivity. - * - * This will capture states like `display: none` and `visibility: hidden`, but not things like - * being clipped by an `overflow: hidden` parent or being outside the viewport. - * - * @param {?} element - * @return {?} Whether the element is visible. - */ - function (element) { - return hasGeometry(element) && getComputedStyle(element).visibility === 'visible'; - }; - /** - * Gets whether an element can be reached via Tab key. - * Assumes that the element has already been checked with isFocusable. - * - * @param element Element to be checked. - * @returns Whether the element is tabbable. - */ - /** - * Gets whether an element can be reached via Tab key. - * Assumes that the element has already been checked with isFocusable. - * - * @param {?} element Element to be checked. - * @return {?} Whether the element is tabbable. - */ - InteractivityChecker.prototype.isTabbable = /** - * Gets whether an element can be reached via Tab key. - * Assumes that the element has already been checked with isFocusable. - * - * @param {?} element Element to be checked. - * @return {?} Whether the element is tabbable. - */ - function (element) { - // Nothing is tabbable on the server 😎 - if (!this._platform.isBrowser) { - return false; - } - /** @type {?} */ - var frameElement = getFrameElement(getWindow(element)); - if (frameElement) { - /** @type {?} */ - var frameType = frameElement && frameElement.nodeName.toLowerCase(); - // Frame elements inherit their tabindex onto all child elements. - if (getTabIndexValue(frameElement) === -1) { - return false; - } - // Webkit and Blink consider anything inside of an element as non-tabbable. - if ((this._platform.BLINK || this._platform.WEBKIT) && frameType === 'object') { - return false; - } - // Webkit and Blink disable tabbing to an element inside of an invisible frame. - if ((this._platform.BLINK || this._platform.WEBKIT) && !this.isVisible(frameElement)) { - return false; - } - } - /** @type {?} */ - var nodeName = element.nodeName.toLowerCase(); - /** @type {?} */ - var tabIndexValue = getTabIndexValue(element); - if (element.hasAttribute('contenteditable')) { - return tabIndexValue !== -1; - } - if (nodeName === 'iframe') { - // The frames may be tabbable depending on content, but it's not possibly to reliably - // investigate the content of the frames. - return false; - } - if (nodeName === 'audio') { - if (!element.hasAttribute('controls')) { - // By default an
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'BREADCRUMBS.ADD_WALLET' | translate }}\\r\\n {{ 'BREADCRUMBS.SAVE_PHRASE' | translate }}\\r\\n
      \\r\\n \\r\\n
      \\r\\n \\r\\n\\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_REQUIRED' | translate }}\\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.NAME_DUPLICATE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      = variablesService.maxWalletNameLength\\\">\\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.MAX_LENGTH' | translate }}\\r\\n
      \\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n {{ 'WALLET_DETAILS.FORM_ERRORS.PASSWORDS_DONT_MATCH' | translate }}\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
      {{ 'WALLET_DETAILS.FORM.SECURED_SEED_WILL_REQUIRE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n {{ 'WALLET_DETAILS.LABEL_SEED_PHRASE' | translate }}\\r\\n

      \\r\\n {{ 'WALLET_DETAILS.SEED_IS_UNSECURED' | translate }}\\r\\n \\r\\n 0\\\">{{ 'WALLET_DETAILS.SEED_IS_SECURED' | translate }}\\r\\n \\r\\n

      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      = 1 && (index + 1) <= 7 || (index + 1) >= 15 && (index + 1) <= 21\\\">\\r\\n {{(index + 1) + '. ' + word}}
      \\r\\n
      \\r\\n
      \\r\\n
      0\\\">\\r\\n {{ 'WALLET_DETAILS.REMEMBER_YOU_WILL_REQUIRE' | translate }}\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      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 AWB>pF diff --git a/src/gui/qt-daemon/html/assets/fonts/OpenSans-Regular.ttf b/src/gui/qt-daemon/html/assets/fonts/OpenSans-Regular.ttf deleted file mode 100644 index 2e31d02424ed50b9e05c19b5d82500699a6edbb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217276 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%0DHhV?N1s&&lC=`j?-^cJA^!2jed0`4 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 }c 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

      dg4umb* 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 diff --git a/src/gui/qt-daemon/html/assets/fonts/OpenSans-SemiBold.ttf b/src/gui/qt-daemon/html/assets/fonts/OpenSans-SemiBold.ttf deleted file mode 100644 index 99db86aa0282e425450c86508d42da77a9f4102b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221164 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 AWB>pF diff --git a/src/gui/qt-daemon/html/OpenSans-Regular.ttf b/src/gui/qt-daemon/html/OpenSans-Regular.ttf deleted file mode 100644 index 2e31d02424ed50b9e05c19b5d82500699a6edbb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217276 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%0DHhV?N1s&&lC=`j?-^cJA^!2jed0`4 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 }c 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

    dg4umb* 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 diff --git a/src/gui/qt-daemon/html/OpenSans-SemiBold.ttf b/src/gui/qt-daemon/html/OpenSans-SemiBold.ttf deleted file mode 100644 index 99db86aa0282e425450c86508d42da77a9f4102b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221164 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