fuzz coverage

Coverage Report

Created: 2025-09-17 22:41

/Users/eugenesiegel/btc/bitcoin/src/util/strencodings.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-present The Bitcoin Core developers
3
// Distributed under the MIT software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6
/**
7
 * Utilities for converting data from/to strings.
8
 */
9
#ifndef BITCOIN_UTIL_STRENCODINGS_H
10
#define BITCOIN_UTIL_STRENCODINGS_H
11
12
#include <crypto/hex_base.h> // IWYU pragma: export
13
#include <span.h>
14
#include <util/string.h>
15
16
#include <array>
17
#include <bit>
18
#include <charconv>
19
#include <cstddef>
20
#include <cstdint>
21
#include <limits>
22
#include <optional>
23
#include <string>      // IWYU pragma: export
24
#include <string_view> // IWYU pragma: export
25
#include <system_error>
26
#include <type_traits>
27
#include <vector>
28
29
/** Used by SanitizeString() */
30
enum SafeChars
31
{
32
    SAFE_CHARS_DEFAULT, //!< The full set of allowed chars
33
    SAFE_CHARS_UA_COMMENT, //!< BIP-0014 subset
34
    SAFE_CHARS_FILENAME, //!< Chars allowed in filenames
35
    SAFE_CHARS_URI, //!< Chars allowed in URIs (RFC 3986)
36
};
37
38
/**
39
 * Used by ParseByteUnits()
40
 * Lowercase base 1000
41
 * Uppercase base 1024
42
*/
43
enum class ByteUnit : uint64_t {
44
    NOOP = 1ULL,
45
    k = 1000ULL,
46
    K = 1024ULL,
47
    m = 1'000'000ULL,
48
    M = 1ULL << 20,
49
    g = 1'000'000'000ULL,
50
    G = 1ULL << 30,
51
    t = 1'000'000'000'000ULL,
52
    T = 1ULL << 40,
53
};
54
55
/**
56
* Remove unsafe chars. Safe chars chosen to allow simple messages/URLs/email
57
* addresses, but avoid anything even possibly remotely dangerous like & or >
58
* @param[in] str    The string to sanitize
59
* @param[in] rule   The set of safe chars to choose (default: least restrictive)
60
* @return           A new string without unsafe chars
61
*/
62
std::string SanitizeString(std::string_view str, int rule = SAFE_CHARS_DEFAULT);
63
/** Parse the hex string into bytes (uint8_t or std::byte). Ignores whitespace. Returns nullopt on invalid input. */
64
template <typename Byte = std::byte>
65
std::optional<std::vector<Byte>> TryParseHex(std::string_view str);
66
/** Like TryParseHex, but returns an empty vector on invalid input. */
67
template <typename Byte = uint8_t>
68
std::vector<Byte> ParseHex(std::string_view hex_str)
69
0
{
70
0
    return TryParseHex<Byte>(hex_str).value_or(std::vector<Byte>{});
71
0
}
Unexecuted instantiation: _Z8ParseHexIhENSt3__16vectorIT_NS0_9allocatorIS2_EEEENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Unexecuted instantiation: _Z8ParseHexISt4byteENSt3__16vectorIT_NS1_9allocatorIS3_EEEENS1_17basic_string_viewIcNS1_11char_traitsIcEEEE
72
/* Returns true if each character in str is a hex character, and has an even
73
 * number of hex digits.*/
74
bool IsHex(std::string_view str);
75
std::optional<std::vector<unsigned char>> DecodeBase64(std::string_view str);
76
std::string EncodeBase64(std::span<const unsigned char> input);
77
0
inline std::string EncodeBase64(std::span<const std::byte> input) { return EncodeBase64(MakeUCharSpan(input)); }
78
0
inline std::string EncodeBase64(std::string_view str) { return EncodeBase64(MakeUCharSpan(str)); }
79
std::optional<std::vector<unsigned char>> DecodeBase32(std::string_view str);
80
81
/**
82
 * Base32 encode.
83
 * If `pad` is true, then the output will be padded with '=' so that its length
84
 * is a multiple of 8.
85
 */
86
std::string EncodeBase32(std::span<const unsigned char> input, bool pad = true);
87
88
/**
89
 * Base32 encode.
90
 * If `pad` is true, then the output will be padded with '=' so that its length
91
 * is a multiple of 8.
92
 */
93
std::string EncodeBase32(std::string_view str, bool pad = true);
94
95
/**
96
 * Splits socket address string into host string and port value.
97
 * Validates port value.
98
 *
99
 * @param[in] in        The socket address string to split.
100
 * @param[out] portOut  Port-portion of the input, if found and parsable.
101
 * @param[out] hostOut  Host-portion of the input, if found.
102
 * @return              true if port-portion is absent or within its allowed range, otherwise false
103
 */
104
bool SplitHostPort(std::string_view in, uint16_t& portOut, std::string& hostOut);
105
106
// LocaleIndependentAtoi is provided for backwards compatibility reasons.
107
//
108
// New code should use ToIntegral.
109
//
110
// The goal of LocaleIndependentAtoi is to replicate the defined behaviour of
111
// std::atoi as it behaves under the "C" locale, and remove some undefined
112
// behavior. If the parsed value is bigger than the integer type's maximum
113
// value, or smaller than the integer type's minimum value, std::atoi has
114
// undefined behavior, while this function returns the maximum or minimum
115
// values, respectively.
116
template <typename T>
117
T LocaleIndependentAtoi(std::string_view str)
118
77.7k
{
119
77.7k
    static_assert(std::is_integral_v<T>);
120
77.7k
    T result;
121
    // Emulate atoi(...) handling of white space and leading +/-.
122
77.7k
    std::string_view s = util::TrimStringView(str);
123
77.7k
    if (!s.empty() && s[0] == '+') {
124
0
        if (s.length() >= 2 && s[1] == '-') {
125
0
            return 0;
126
0
        }
127
0
        s = s.substr(1);
128
0
    }
129
77.7k
    auto [_, error_condition] = std::from_chars(s.data(), s.data() + s.size(), result);
130
77.7k
    if (error_condition == std::errc::result_out_of_range) {
131
0
        if (s.length() >= 1 && s[0] == '-') {
132
            // Saturate underflow, per strtoll's behavior.
133
0
            return std::numeric_limits<T>::min();
134
0
        } else {
135
            // Saturate overflow, per strtoll's behavior.
136
0
            return std::numeric_limits<T>::max();
137
0
        }
138
77.7k
    } else if (error_condition != std::errc{}) {
139
0
        return 0;
140
0
    }
141
77.7k
    return result;
142
77.7k
}
_Z21LocaleIndependentAtoiIiET_NSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE
Line
Count
Source
118
38.8k
{
119
38.8k
    static_assert(std::is_integral_v<T>);
120
38.8k
    T result;
121
    // Emulate atoi(...) handling of white space and leading +/-.
122
38.8k
    std::string_view s = util::TrimStringView(str);
123
38.8k
    if (!s.empty() && s[0] == '+') {
124
0
        if (s.length() >= 2 && s[1] == '-') {
125
0
            return 0;
126
0
        }
127
0
        s = s.substr(1);
128
0
    }
129
38.8k
    auto [_, error_condition] = std::from_chars(s.data(), s.data() + s.size(), result);
130
38.8k
    if (error_condition == std::errc::result_out_of_range) {
131
0
        if (s.length() >= 1 && s[0] == '-') {
132
            // Saturate underflow, per strtoll's behavior.
133
0
            return std::numeric_limits<T>::min();
134
0
        } else {
135
            // Saturate overflow, per strtoll's behavior.
136
0
            return std::numeric_limits<T>::max();
137
0
        }
138
38.8k
    } else if (error_condition != std::errc{}) {
139
0
        return 0;
140
0
    }
141
38.8k
    return result;
142
38.8k
}
_Z21LocaleIndependentAtoiIxET_NSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE
Line
Count
Source
118
38.8k
{
119
38.8k
    static_assert(std::is_integral_v<T>);
120
38.8k
    T result;
121
    // Emulate atoi(...) handling of white space and leading +/-.
122
38.8k
    std::string_view s = util::TrimStringView(str);
123
38.8k
    if (!s.empty() && s[0] == '+') {
124
0
        if (s.length() >= 2 && s[1] == '-') {
125
0
            return 0;
126
0
        }
127
0
        s = s.substr(1);
128
0
    }
129
38.8k
    auto [_, error_condition] = std::from_chars(s.data(), s.data() + s.size(), result);
130
38.8k
    if (error_condition == std::errc::result_out_of_range) {
131
0
        if (s.length() >= 1 && s[0] == '-') {
132
            // Saturate underflow, per strtoll's behavior.
133
0
            return std::numeric_limits<T>::min();
134
0
        } else {
135
            // Saturate overflow, per strtoll's behavior.
136
0
            return std::numeric_limits<T>::max();
137
0
        }
138
38.8k
    } else if (error_condition != std::errc{}) {
139
0
        return 0;
140
0
    }
141
38.8k
    return result;
142
38.8k
}
143
144
/**
145
 * Tests if the given character is a decimal digit.
146
 * @param[in] c     character to test
147
 * @return          true if the argument is a decimal digit; otherwise false.
148
 */
149
constexpr bool IsDigit(char c)
150
1.78M
{
151
1.78M
    return c >= '0' && 
c <= '9'1.63M
;
152
1.78M
}
153
154
/**
155
 * Tests if the given character is a whitespace character. The whitespace characters
156
 * are: space, form-feed ('\f'), newline ('\n'), carriage return ('\r'), horizontal
157
 * tab ('\t'), and vertical tab ('\v').
158
 *
159
 * This function is locale independent. Under the C locale this function gives the
160
 * same result as std::isspace.
161
 *
162
 * @param[in] c     character to test
163
 * @return          true if the argument is a whitespace character; otherwise false
164
 */
165
0
constexpr inline bool IsSpace(char c) noexcept {
166
0
    return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v';
167
0
}
168
169
/**
170
 * Convert string to integral type T. Leading whitespace, a leading +, or any
171
 * trailing character fail the parsing. The required format expressed as regex
172
 * is `-?[0-9]+`. The minus sign is only permitted for signed integer types.
173
 *
174
 * @returns std::nullopt if the entire string could not be parsed, or if the
175
 *   parsed value is not in the range representable by the type T.
176
 */
177
template <typename T>
178
std::optional<T> ToIntegral(std::string_view str)
179
12
{
180
12
    static_assert(std::is_integral_v<T>);
181
12
    T result;
182
12
    const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result);
183
12
    if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) {
184
0
        return std::nullopt;
185
0
    }
186
12
    return result;
187
12
}
Unexecuted instantiation: _Z10ToIntegralIxENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Unexecuted instantiation: _Z10ToIntegralIaENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
_Z10ToIntegralIhENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Line
Count
Source
179
10
{
180
10
    static_assert(std::is_integral_v<T>);
181
10
    T result;
182
10
    const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result);
183
10
    if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) {
184
0
        return std::nullopt;
185
0
    }
186
10
    return result;
187
10
}
Unexecuted instantiation: _Z10ToIntegralIsENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
_Z10ToIntegralItENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Line
Count
Source
179
2
{
180
2
    static_assert(std::is_integral_v<T>);
181
2
    T result;
182
2
    const auto [first_nonmatching, error_condition] = std::from_chars(str.data(), str.data() + str.size(), result);
183
2
    if (first_nonmatching != str.data() + str.size() || error_condition != std::errc{}) {
184
0
        return std::nullopt;
185
0
    }
186
2
    return result;
187
2
}
Unexecuted instantiation: _Z10ToIntegralIiENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Unexecuted instantiation: _Z10ToIntegralIjENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Unexecuted instantiation: _Z10ToIntegralIyENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
Unexecuted instantiation: _Z10ToIntegralImENSt3__18optionalIT_EENS0_17basic_string_viewIcNS0_11char_traitsIcEEEE
188
189
/**
190
 * Format a paragraph of text to a fixed width, adding spaces for
191
 * indentation to any added line.
192
 */
193
std::string FormatParagraph(std::string_view in, size_t width = 79, size_t indent = 0);
194
195
/**
196
 * Timing-attack-resistant comparison.
197
 * Takes time proportional to length
198
 * of first argument.
199
 */
200
template <typename T>
201
bool TimingResistantEqual(const T& a, const T& b)
202
0
{
203
0
    if (b.size() == 0) return a.size() == 0;
204
0
    size_t accumulator = a.size() ^ b.size();
205
0
    for (size_t i = 0; i < a.size(); i++)
206
0
        accumulator |= size_t(a[i] ^ b[i%b.size()]);
207
0
    return accumulator == 0;
208
0
}
Unexecuted instantiation: _Z20TimingResistantEqualINSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEEbRKT_S9_
Unexecuted instantiation: _Z20TimingResistantEqualINSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEEbRKT_S7_
209
210
/** Parse number as fixed point according to JSON number syntax.
211
 * @returns true on success, false on error.
212
 * @note The result must be in the range (-10^18,10^18), otherwise an overflow error will trigger.
213
 */
214
[[nodiscard]] bool ParseFixedPoint(std::string_view, int decimals, int64_t *amount_out);
215
216
namespace {
217
/** Helper class for the default infn argument to ConvertBits (just returns the input). */
218
struct IntIdentity
219
{
220
38.6k
    [[maybe_unused]] int operator()(int x) const { return x; }
Unexecuted instantiation: addition_overflow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: addrman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: asmap.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: asmap_direct.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: autofile.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: banman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: base_encode_decode.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bech32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bip324.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bitdeque.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bitset.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: block.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: block_header.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: block_index.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockfilter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bloom_filter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: buffered_file.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: chain.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: checkqueue.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: cluster_linearize.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: cmpctblock.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coins_view.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coinscache_sim.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: connman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_aes256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_aes256cbc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_chacha20.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_chacha20poly1305.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_common.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_diff_fuzz_chacha20.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_hkdf_hmac_sha256_l32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypto_poly1305.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: cuckoocache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: decode_tx.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: descriptor_parse.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: deserialize.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: eval_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: feefrac.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: fee_rate.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: feeratediagram.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: fees.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: flatfile.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: float.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: golomb_rice.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: headerssync.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: hex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: http_request.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: i2p.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: integer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: key.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: key_io.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: kitchen_sink.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: load_external_block_file.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: locale.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: merkle.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: merkleblock.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: message.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: miniscript.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: minisketch.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mini_miner.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: muhash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: multiplication_overflow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: net.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: net_permissions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: netaddress.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: netbase_dns_lookup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: node_eviction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: p2p_handshake.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: p2p_headers_presync.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: p2p_transport_serialization.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: pcp.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: package_eval.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: parse_hd_keypath.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: parse_numbers.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: parse_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: parse_univalue.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: partially_downloaded_block.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: policy_estimator.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: policy_estimator_io.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: poolresource.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: pow.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: prevector.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: primitives_transaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: process_message.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: process_messages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: protocol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: psbt.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: random.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rbf.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rolling_bloom_filter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rpc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_assets_test_minimizer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_descriptor_cache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_flags.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_format.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_interpreter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_ops.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_sigcache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: script_sign.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: scriptnum_ops.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: secp256k1_ec_seckey_import_export_der.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: secp256k1_ecdsa_signature_parse_der_lax.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: signature_checker.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: signet.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: socks5.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: span.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: string.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: strprintf.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: system.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: timeoffsets.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: torcontrol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: transaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txdownloadman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: tx_in.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: tx_out.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: tx_pool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txgraph.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txorphan.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txrequest.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: utxo_snapshot.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: utxo_total_supply.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: validation_load_mempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: vecdeque.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: versionbits.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coincontrol.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coinselection.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: crypter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: scriptpubkeyman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: spend.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: wallet_bdb_parser.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: check_globals.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: descriptor.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: fuzz.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: addresstype.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: base58.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: chainparams.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coins.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bloom.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: config.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: messages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: netif.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: signmessage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: compressor.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: core_read.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: core_write.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: deploymentinfo.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: external_signer.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: common.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: musig.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: net_types.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: netbase.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: outputtype.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rawtransaction_util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: request.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: sign.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: signingprovider.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: solver.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: batchpriority.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bip32.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: bytevectorhash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: exception.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: fs_helpers.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: hasher.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: moneystr.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: sock.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
strencodings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Line
Count
Source
220
38.6k
    [[maybe_unused]] int operator()(int x) const { return x; }
Unexecuted instantiation: thread.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: time.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: logging.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: streams.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: db.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: dump.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: external_signer_scriptpubkeyman.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: feebumper.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: interfaces.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: load.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: migrate.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: receive.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: addresses.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: backup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: encrypt.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: transactions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: wallet.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: sqlite.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: walletdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: walletutil.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mining.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: setup_common.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: transaction_utils.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txmempool.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: validation.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: addrdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockencodings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: tx_verify.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: dbwrapper.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: httprpc.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: httpserver.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: base.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockfilterindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coinstatsindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txindex.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: init.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: checks.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coinstats.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: context.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: disconnected_transactions.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mapport.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: net_processing.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: netgroup.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: abort.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockmanager_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockstorage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: caches.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: chainstate.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: chainstatemanager_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coin.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: coins_view_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: database_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: eviction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: kernel_notifications.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mempool_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mempool_persist.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: mempool_persist_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: miner.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: peerman_args.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txdownloadman_impl.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txorphanage.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txreconciliation.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: noui.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: ephemeral_policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: packages.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: settings.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: truc_policy.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rest.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: blockchain.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: node.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: output_script.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: rawtransaction.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: server.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: server_util.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txoutproof.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: sigcache.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: txdb.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: validationinterface.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: arith_uint256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: tx_check.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: hash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: pubkey.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: interpreter.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: uint256.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
Unexecuted instantiation: siphash.cpp:_ZNK12_GLOBAL__N_111IntIdentityclEi
221
};
222
223
} // namespace
224
225
/** Convert from one power-of-2 number base to another. */
226
template<int frombits, int tobits, bool pad, typename O, typename It, typename I = IntIdentity>
227
1.29k
bool ConvertBits(O outfn, It it, It end, I infn = {}) {
228
1.29k
    size_t acc = 0;
229
1.29k
    size_t bits = 0;
230
1.29k
    constexpr size_t maxv = (1 << tobits) - 1;
231
1.29k
    constexpr size_t max_acc = (1 << (frombits + tobits - 1)) - 1;
232
39.9k
    while (it != end) {
233
38.6k
        int v = infn(*it);
234
38.6k
        if (v < 0) 
return false0
;
235
38.6k
        acc = ((acc << frombits) | v) & max_acc;
236
38.6k
        bits += frombits;
237
100k
        while (bits >= tobits) {
238
61.6k
            bits -= tobits;
239
61.6k
            outfn((acc >> bits) & maxv);
240
61.6k
        }
241
38.6k
        ++it;
242
38.6k
    }
243
1.29k
    if (pad) {
244
1.29k
        if (bits) 
outfn((acc << (tobits - bits)) & maxv)858
;
245
1.29k
    } else 
if (0
bits >= frombits0
||
((acc << (tobits - bits)) & maxv)0
) {
246
0
        return false;
247
0
    }
248
1.29k
    return true;
249
1.29k
}
Unexecuted instantiation: bech32.cpp:_Z11ConvertBitsILi8ELi5ELb1EZ28bech32_roundtrip_fuzz_targetNSt3__14spanIKhLm18446744073709551615EEEE3$_0NS0_11__wrap_iterIPhEEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_
Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK19WitnessV0ScriptHashEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_
Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK16WitnessV0KeyHashEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_
Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK16WitnessV1TaprootEUlhE_PKhNS0_11IntIdentityEEbT2_T3_SA_T4_
Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi8ELi5ELb1EZNK12_GLOBAL__N_118DestinationEncoderclERK14WitnessUnknownEUlhE_NSt3__111__wrap_iterIPKhEENS0_11IntIdentityEEbT2_T3_SD_T4_
Unexecuted instantiation: key_io.cpp:_Z11ConvertBitsILi5ELi8ELb0EZN12_GLOBAL__N_117DecodeDestinationERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERK12CChainParamsRS7_PNS1_6vectorIiNS5_IiEEEEE3$_0NS1_11__wrap_iterIPKhEENS0_11IntIdentityEEbT2_T3_SP_T4_
Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi8ELi6ELb1EZ12EncodeBase64NSt3__14spanIKhLm18446744073709551615EEEE3$_0NS0_11__wrap_iterIPS2_EEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_
Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi6ELi8ELb0EZ12DecodeBase64NSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEE3$_0PKcZ12DecodeBase64S4_E3$_1EbT2_T3_SA_T4_
strencodings.cpp:_Z11ConvertBitsILi8ELi5ELb1EZ12EncodeBase32NSt3__14spanIKhLm18446744073709551615EEEbE3$_0NS0_11__wrap_iterIPS2_EEN12_GLOBAL__N_111IntIdentityEEbT2_T3_SB_T4_
Line
Count
Source
227
1.29k
bool ConvertBits(O outfn, It it, It end, I infn = {}) {
228
1.29k
    size_t acc = 0;
229
1.29k
    size_t bits = 0;
230
1.29k
    constexpr size_t maxv = (1 << tobits) - 1;
231
1.29k
    constexpr size_t max_acc = (1 << (frombits + tobits - 1)) - 1;
232
39.9k
    while (it != end) {
233
38.6k
        int v = infn(*it);
234
38.6k
        if (v < 0) 
return false0
;
235
38.6k
        acc = ((acc << frombits) | v) & max_acc;
236
38.6k
        bits += frombits;
237
100k
        while (bits >= tobits) {
238
61.6k
            bits -= tobits;
239
61.6k
            outfn((acc >> bits) & maxv);
240
61.6k
        }
241
38.6k
        ++it;
242
38.6k
    }
243
1.29k
    if (pad) {
244
1.29k
        if (bits) 
outfn((acc << (tobits - bits)) & maxv)858
;
245
1.29k
    } else 
if (0
bits >= frombits0
||
((acc << (tobits - bits)) & maxv)0
) {
246
0
        return false;
247
0
    }
248
1.29k
    return true;
249
1.29k
}
Unexecuted instantiation: strencodings.cpp:_Z11ConvertBitsILi5ELi8ELb0EZ12DecodeBase32NSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEE3$_0PKcZ12DecodeBase32S4_E3$_1EbT2_T3_SA_T4_
250
251
/**
252
 * Converts the given character to its lowercase equivalent.
253
 * This function is locale independent. It only converts uppercase
254
 * characters in the standard 7-bit ASCII range.
255
 * This is a feature, not a limitation.
256
 *
257
 * @param[in] c     the character to convert to lowercase.
258
 * @return          the lowercase equivalent of c; or the argument
259
 *                  if no conversion is possible.
260
 */
261
constexpr char ToLower(char c)
262
0
{
263
0
    return (c >= 'A' && c <= 'Z' ? (c - 'A') + 'a' : c);
264
0
}
265
266
/**
267
 * Returns the lowercase equivalent of the given string.
268
 * This function is locale independent. It only converts uppercase
269
 * characters in the standard 7-bit ASCII range.
270
 * This is a feature, not a limitation.
271
 *
272
 * @param[in] str   the string to convert to lowercase.
273
 * @returns         lowercased equivalent of str
274
 */
275
std::string ToLower(std::string_view str);
276
277
/**
278
 * Converts the given character to its uppercase equivalent.
279
 * This function is locale independent. It only converts lowercase
280
 * characters in the standard 7-bit ASCII range.
281
 * This is a feature, not a limitation.
282
 *
283
 * @param[in] c     the character to convert to uppercase.
284
 * @return          the uppercase equivalent of c; or the argument
285
 *                  if no conversion is possible.
286
 */
287
constexpr char ToUpper(char c)
288
0
{
289
0
    return (c >= 'a' && c <= 'z' ? (c - 'a') + 'A' : c);
290
0
}
291
292
/**
293
 * Returns the uppercase equivalent of the given string.
294
 * This function is locale independent. It only converts lowercase
295
 * characters in the standard 7-bit ASCII range.
296
 * This is a feature, not a limitation.
297
 *
298
 * @param[in] str   the string to convert to uppercase.
299
 * @returns         UPPERCASED EQUIVALENT OF str
300
 */
301
std::string ToUpper(std::string_view str);
302
303
/**
304
 * Capitalizes the first character of the given string.
305
 * This function is locale independent. It only converts lowercase
306
 * characters in the standard 7-bit ASCII range.
307
 * This is a feature, not a limitation.
308
 *
309
 * @param[in] str   the string to capitalize.
310
 * @returns         string with the first letter capitalized.
311
 */
312
std::string Capitalize(std::string str);
313
314
/**
315
 * Parse a string with suffix unit [k|K|m|M|g|G|t|T].
316
 * Must be a whole integer, fractions not allowed (0.5t), no whitespace or +-
317
 * Lowercase units are 1000 base. Uppercase units are 1024 base.
318
 * Examples: 2m,27M,19g,41T
319
 *
320
 * @param[in] str                  the string to convert into bytes
321
 * @param[in] default_multiplier   if no unit is found in str use this unit
322
 * @returns                        optional uint64_t bytes from str or nullopt
323
 *                                 if ToIntegral is false, str is empty, trailing whitespace or overflow
324
 */
325
std::optional<uint64_t> ParseByteUnits(std::string_view str, ByteUnit default_multiplier);
326
327
namespace util {
328
/** consteval version of HexDigit() without the lookup table. */
329
consteval uint8_t ConstevalHexDigit(const char c)
330
{
331
    if (c >= '0' && c <= '9') return c - '0';
332
    if (c >= 'a' && c <= 'f') return c - 'a' + 0xa;
333
334
    throw "Only lowercase hex digits are allowed, for consistency";
335
}
336
337
namespace detail {
338
template <size_t N>
339
struct Hex {
340
    std::array<std::byte, N / 2> bytes{};
341
    consteval Hex(const char (&hex_str)[N])
342
        // 2 hex digits required per byte + implicit null terminator
343
        requires(N % 2 == 1)
344
    {
345
        if (hex_str[N - 1]) throw "null terminator required";
346
        for (std::size_t i = 0; i < bytes.size(); ++i) {
347
            bytes[i] = static_cast<std::byte>(
348
                (ConstevalHexDigit(hex_str[2 * i]) << 4) |
349
                 ConstevalHexDigit(hex_str[2 * i + 1]));
350
        }
351
    }
352
};
353
} // namespace detail
354
355
/**
356
 * ""_hex is a compile-time user-defined literal returning a
357
 * `std::array<std::byte>`, equivalent to ParseHex(). Variants provided:
358
 *
359
 * - ""_hex_v: Returns `std::vector<std::byte>`, useful for heap allocation or
360
 *   variable-length serialization.
361
 *
362
 * - ""_hex_u8: Returns `std::array<uint8_t>`, for cases where `std::byte` is
363
 *   incompatible.
364
 *
365
 * - ""_hex_v_u8: Returns `std::vector<uint8_t>`, combining heap allocation with
366
 *   `uint8_t`.
367
 *
368
 * @warning It could be necessary to use vector instead of array variants when
369
 *   serializing, or vice versa, because vectors are assumed to be variable-
370
 *   length and serialized with a size prefix, while arrays are considered fixed
371
 *   length and serialized with no prefix.
372
 *
373
 * @warning It may be preferable to use vector variants to save stack space when
374
 *   declaring local variables if hex strings are large. Alternatively variables
375
 *   could be declared constexpr to avoid using stack space.
376
 *
377
 * @warning Avoid `uint8_t` variants when not necessary, as the codebase
378
 *   migrates to use `std::byte` instead of `unsigned char` and `uint8_t`.
379
 *
380
 * @note One reason ""_hex uses `std::array` instead of `std::vector` like
381
 *   ParseHex() does is because heap-based containers cannot cross the compile-
382
 *   time/runtime barrier.
383
 */
384
inline namespace hex_literals {
385
386
template <util::detail::Hex str>
387
233k
constexpr auto operator""_hex() { return str.bytes; }
_ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm131EEEtlNSt3__15arrayISt4byteLm65EEEtlA65_S7_LS7_4ELS7_103ELS7_138ELS7_253ELS7_176ELS7_254ELS7_85ELS7_72ELS7_39ELS7_25ELS7_103ELS7_241ELS7_166ELS7_113ELS7_48ELS7_183ELS7_16ELS7_92ELS7_214ELS7_168ELS7_40ELS7_224ELS7_57ELS7_9ELS7_166ELS7_121ELS7_98ELS7_224ELS7_234ELS7_31ELS7_97ELS7_222ELS7_182ELS7_73ELS7_246ELS7_188ELS7_63ELS7_76ELS7_239ELS7_56ELS7_196ELS7_243ELS7_85ELS7_4ELS7_229ELS7_30ELS7_193ELS7_18ELS7_222ELS7_92ELS7_56ELS7_77ELS7_247ELS7_186ELS7_11ELS7_141ELS7_87ELS7_138ELS7_76ELS7_112ELS7_43ELS7_107ELS7_241ELS7_29ELS7_95EEEEEEEDav
Line
Count
Source
387
194k
constexpr auto operator""_hex() { return str.bytes; }
_ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm67EEEEEEEDav
Line
Count
Source
387
38.8k
constexpr auto operator""_hex() { return str.bytes; }
Unexecuted instantiation: _ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm6109EEEtlNSt3__15arrayISt4byteLm3054EEEtlA3054_S7_LS7_1ELS7_0ELS7_0ELS7_0ELS7_144ELS7_240ELS7_169ELS7_241ELS7_16ELS7_112ELS7_47ELS7_128ELS7_130ELS7_25ELS7_235ELS7_234ELS7_17ELS7_115ELS7_5ELS7_96ELS7_66ELS7_167ELS7_20ELS7_186ELS7_213ELS7_27ELS7_145ELS7_108ELS7_182ELS7_128ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_82ELS7_117ELS7_40ELS7_149ELS7_88ELS7_245ELS7_28ELS7_153ELS7_102ELS7_105ELS7_148ELS7_4ELS7_174ELS7_34ELS7_148ELS7_115ELS7_12ELS7_60ELS7_159ELS7_155ELS7_218ELS7_83ELS7_82ELS7_60ELS7_229ELS7_14ELS7_155ELS7_149ELS7_229ELS7_88ELS7_218ELS7_47ELS7_219ELS7_38ELS7_27ELS7_77ELS7_76ELS7_134ELS7_4ELS7_27ELS7_26ELS7_177ELS7_191ELS7_147ELS7_9ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_255ELS7_7ELS7_4ELS7_76ELS7_134ELS7_4ELS7_27ELS7_1ELS7_70ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_242ELS7_5ELS7_42ELS7_1ELS7_0ELS7_0ELS7_0ELS7_67ELS7_65ELS7_4ELS7_225ELS7_143ELS7_122ELS7_251ELS7_228ELS7_114ELS7_21ELS7_128ELS7_232ELS7_30ELS7_132ELS7_20ELS7_252ELS7_140ELS7_36ELS7_215ELS7_207ELS7_172ELS7_242ELS7_84ELS7_187ELS7_92ELS7_123ELS7_148ELS7_148ELS7_80ELS7_195ELS7_233ELS7_151ELS7_194ELS7_220ELS7_18ELS7_66ELS7_72ELS7_122ELS7_129ELS7_105ELS7_80ELS7_123ELS7_99ELS7_30ELS7_179ELS7_119ELS7_31ELS7_43ELS7_66ELS7_84ELS7_131ELS7_251ELS7_19ELS7_16ELS7_44ELS7_78ELS7_181ELS7_216ELS7_88ELS7_238ELS7_242ELS7_96ELS7_254ELS7_112ELS7_251ELS7_250ELS7_224ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_150ELS7_96ELS7_140ELS7_203ELS7_175ELS7_161ELS7_106ELS7_186ELS7_218ELS7_144ELS7_39ELS7_128ELS7_218ELS7_77ELS7_195ELS7_93ELS7_175ELS7_215ELS7_175ELS7_5ELS7_250ELS7_13ELS7_160ELS7_140ELS7_248ELS7_51ELS7_87ELS7_95ELS7_140ELS7_249ELS7_232ELS7_54ELS7_0ELS7_0ELS7_0ELS7_0ELS7_74ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_218ELS7_178ELS7_72ELS7_137ELS7_33ELS7_60ELS7_175ELS7_67ELS7_174ELS7_106ELS7_220ELS7_65ELS7_207ELS7_28ELS7_147ELS7_150ELS7_192ELS7_130ELS7_64ELS7_193ELS7_153ELS7_245ELS7_34ELS7_90ELS7_207ELS7_69ELS7_65ELS7_99ELS7_48ELS7_253ELS7_125ELS7_189ELS7_2ELS7_33ELS7_0ELS7_254ELS7_55ELS7_144ELS7_14ELS7_6ELS7_68ELS7_191ELS7_87ELS7_68ELS7_147ELS7_160ELS7_127ELS7_197ELS7_237ELS7_186ELS7_6ELS7_219ELS7_192ELS7_124ELS7_49ELS7_27ELS7_148ELS7_117ELS7_32ELS7_194ELS7_213ELS7_20ELS7_188ELS7_87ELS7_37ELS7_220ELS7_180ELS7_1ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_242ELS7_5ELS7_42ELS7_1ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_241ELS7_93ELS7_25ELS7_33ELS7_245ELS7_46ELS7_64ELS7_7ELS7_177ELS7_70ELS7_223ELS7_166ELS7_15ELS7_54ELS7_158ELS7_210ELS7_252ELS7_57ELS7_60ELS7_226ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_251ELS7_118ELS7_108ELS7_18ELS7_136ELS7_69ELS7_140ELS7_43ELS7_175ELS7_207ELS7_236ELS7_129ELS7_228ELS7_139ELS7_36ELS7_217ELS7_142ELS7_199ELS7_6ELS7_222ELS7_107ELS7_138ELS7_247ELS7_196ELS7_227ELS7_194ELS7_148ELS7_25ELS7_191ELS7_172ELS7_181ELS7_109ELS7_0ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_242ELS7_104ELS7_186ELS7_22ELS7_92ELS7_224ELS7_173ELS7_46ELS7_109ELS7_147ELS7_240ELS7_137ELS7_207ELS7_205ELS7_55ELS7_133ELS7_222ELS7_92ELS7_150ELS7_59ELS7_181ELS7_234ELS7_107ELS7_140ELS7_27ELS7_35ELS7_241ELS7_206ELS7_62ELS7_81ELS7_123ELS7_159ELS7_2ELS7_33ELS7_0ELS7_218ELS7_124ELS7_15ELS7_33ELS7_173ELS7_198ELS7_196ELS7_1ELS7_136ELS7_127ELS7_43ELS7_253ELS7_25ELS7_34ELS7_241ELS7_29ELS7_118ELS7_21ELS7_156ELS7_188ELS7_89ELS7_127ELS7_189ELS7_117ELS7_106ELS7_35ELS7_220ELS7_187ELS7_0ELS7_244ELS7_215ELS7_41ELS7_1ELS7_65ELS7_4ELS7_43ELS7_78ELS7_134ELS7_37ELS7_169ELS7_97ELS7_39ELS7_130ELS7_105ELS7_21ELS7_165ELS7_177ELS7_9ELS7_133ELS7_38ELS7_54ELS7_173ELS7_13ELS7_167ELS7_83ELS7_201ELS7_225ELS7_213ELS7_96ELS7_106ELS7_80ELS7_72ELS7_12ELS7_208ELS7_196ELS7_15ELS7_31ELS7_139ELS7_141ELS7_137ELS7_130ELS7_53ELS7_229ELS7_113ELS7_254ELS7_147ELS7_87ELS7_217ELS7_236ELS7_132ELS7_43ELS7_196ELS7_187ELS7_161ELS7_130ELS7_125ELS7_170ELS7_244ELS7_222ELS7_6ELS7_215ELS7_24ELS7_68ELS7_208ELS7_5ELS7_119ELS7_7ELS7_150ELS7_106ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_128ELS7_150ELS7_152ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_105ELS7_99ELS7_144ELS7_117ELS7_49ELS7_219ELS7_114ELS7_208ELS7_237ELS7_26ELS7_12ELS7_251ELS7_71ELS7_28ELS7_203ELS7_99ELS7_146ELS7_52ELS7_70ELS7_243ELS7_136ELS7_172ELS7_128ELS7_214ELS7_227ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_240ELS7_104ELS7_139ELS7_161ELS7_192ELS7_209ELS7_206ELS7_24ELS7_44ELS7_122ELS7_246ELS7_116ELS7_30ELS7_2ELS7_101ELS7_140ELS7_125ELS7_77ELS7_252ELS7_211ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_2ELS7_196ELS7_2ELS7_151ELS7_247ELS7_48ELS7_221ELS7_123ELS7_90ELS7_153ELS7_86ELS7_126ELS7_184ELS7_210ELS7_123ELS7_120ELS7_117ELS7_143ELS7_96ELS7_117ELS7_7ELS7_197ELS7_34ELS7_146ELS7_208ELS7_45ELS7_64ELS7_49ELS7_137ELS7_91ELS7_82ELS7_242ELS7_255ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_247ELS7_237ELS7_253ELS7_75ELS7_10ELS7_172ELS7_64ELS7_78ELS7_91ELS7_171ELS7_79ELS7_211ELS7_136ELS7_158ELS7_12ELS7_108ELS7_65ELS7_170ELS7_141ELS7_14ELS7_111ELS7_161ELS7_34ELS7_49ELS7_111ELS7_104ELS7_237ELS7_221ELS7_10ELS7_101ELS7_1ELS7_57ELS7_2ELS7_32ELS7_91ELS7_9ELS7_204ELS7_139ELS7_45ELS7_86ELS7_225ELS7_205ELS7_31ELS7_127ELS7_47ELS7_175ELS7_214ELS7_10ELS7_18ELS7_158ELS7_217ELS7_69ELS7_4ELS7_196ELS7_172ELS7_123ELS7_220ELS7_103ELS7_181ELS7_111ELS7_230ELS7_117ELS7_18ELS7_101ELS7_139ELS7_62ELS7_1ELS7_65ELS7_4ELS7_115ELS7_32ELS7_18ELS7_203ELS7_150ELS7_42ELS7_250ELS7_144ELS7_211ELS7_27ELS7_37ELS7_216ELS7_251ELS7_14ELS7_50ELS7_201ELS7_78ELS7_81ELS7_58ELS7_183ELS7_161ELS7_120ELS7_5ELS7_193ELS7_76ELS7_164ELS7_195ELS7_66ELS7_62ELS7_24ELS7_180ELS7_251ELS7_93ELS7_14ELS7_103ELS7_104ELS7_65ELS7_115ELS7_60ELS7_184ELS7_58ELS7_186ELS7_249ELS7_117ELS7_132ELS7_92ELS7_159ELS7_111ELS7_42ELS7_128ELS7_151ELS7_183ELS7_208ELS7_79ELS7_73ELS7_8ELS7_177ELS7_131ELS7_104ELS7_214ELS7_252ELS7_45ELS7_104ELS7_236ELS7_255ELS7_255ELS7_255ELS7_255ELS7_202ELS7_80ELS7_101ELS7_255ELS7_150ELS7_23ELS7_203ELS7_203ELS7_164ELS7_94ELS7_178ELS7_55ELS7_38ELS7_223ELS7_100ELS7_152ELS7_169ELS7_185ELS7_202ELS7_254ELS7_212ELS7_245ELS7_76ELS7_186ELS7_185ELS7_210ELS7_39ELS7_176ELS7_3ELS7_93ELS7_222ELS7_251ELS7_0ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_104ELS7_1ELS7_3ELS7_98ELS7_161ELS7_60ELS7_127ELS7_153ELS7_25ELS7_250ELS7_131ELS7_43ELS7_45ELS7_238ELS7_78ELS7_120ELS7_143ELS7_97ELS7_246ELS7_245ELS7_211ELS7_68ELS7_167ELS7_194ELS7_160ELS7_218ELS7_106ELS7_231ELS7_64ELS7_96ELS7_86ELS7_88ELS7_2ELS7_32ELS7_6ELS7_209ELS7_175ELS7_82ELS7_91ELS7_154ELS7_20ELS7_163ELS7_92ELS7_0ELS7_59ELS7_120ELS7_183ELS7_43ELS7_213ELS7_151ELS7_56ELS7_205ELS7_103ELS7_111ELS7_132ELS7_93ELS7_31ELS7_243ELS7_252ELS7_37ELS7_4ELS7_158ELS7_1ELS7_0ELS7_54ELS7_20ELS7_1ELS7_65ELS7_4ELS7_115ELS7_32ELS7_18ELS7_203ELS7_150ELS7_42ELS7_250ELS7_144ELS7_211ELS7_27ELS7_37ELS7_216ELS7_251ELS7_14ELS7_50ELS7_201ELS7_78ELS7_81ELS7_58ELS7_183ELS7_161ELS7_120ELS7_5ELS7_193ELS7_76ELS7_164ELS7_195ELS7_66ELS7_62ELS7_24ELS7_180ELS7_251ELS7_93ELS7_14ELS7_103ELS7_104ELS7_65ELS7_115ELS7_60ELS7_184ELS7_58ELS7_186ELS7_249ELS7_117ELS7_132ELS7_92ELS7_159ELS7_111ELS7_42ELS7_128ELS7_151ELS7_183ELS7_208ELS7_79ELS7_73ELS7_8ELS7_177ELS7_131ELS7_104ELS7_214ELS7_252ELS7_45ELS7_104ELS7_236ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_0ELS7_30ELS7_196ELS7_17ELS7_2ELS7_0ELS7_0ELS7_0ELS7_67ELS7_65ELS7_4ELS7_105ELS7_171ELS7_65ELS7_129ELS7_236ELS7_235ELS7_40ELS7_152ELS7_91ELS7_155ELS7_78ELS7_137ELS7_92ELS7_19ELS7_250ELS7_94ELS7_104ELS7_216ELS7_87ELS7_97ELS7_183ELS7_238ELS7_227ELS7_17ELS7_219ELS7_90ELS7_221ELS7_239ELS7_118ELS7_250ELS7_134ELS7_33ELS7_134ELS7_81ELS7_52ELS7_162ELS7_33ELS7_189ELS7_1ELS7_242ELS7_142ELS7_201ELS7_153ELS7_158ELS7_227ELS7_224ELS7_33ELS7_230ELS7_7ELS7_102ELS7_233ELS7_209ELS7_243ELS7_69ELS7_140ELS7_17ELS7_95ELS7_178ELS7_134ELS7_80ELS7_96ELS7_95ELS7_17ELS7_201ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_205ELS7_175ELS7_47ELS7_117ELS7_142ELS7_145ELS7_197ELS7_20ELS7_101ELS7_94ELS7_45ELS7_197ELS7_6ELS7_51ELS7_209ELS7_228ELS7_200ELS7_73ELS7_137ELS7_248ELS7_170ELS7_144ELS7_160ELS7_219ELS7_200ELS7_131ELS7_240ELS7_210ELS7_62ELS7_213ELS7_194ELS7_250ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_32ELS7_122ELS7_181ELS7_27ELS7_230ELS7_241ELS7_42ELS7_25ELS7_98ELS7_186ELS7_10ELS7_170ELS7_242ELS7_74ELS7_32ELS7_224ELS7_182ELS7_155ELS7_39ELS7_169ELS7_79ELS7_172ELS7_90ELS7_223ELS7_69ELS7_170ELS7_125ELS7_45ELS7_24ELS7_255ELS7_217ELS7_35ELS7_97ELS7_2ELS7_33ELS7_0ELS7_134ELS7_174ELS7_114ELS7_139ELS7_55ELS7_14ELS7_83ELS7_41ELS7_238ELS7_173ELS7_154ELS7_204ELS7_216ELS7_128ELS7_208ELS7_203ELS7_7ELS7_10ELS7_234ELS7_12ELS7_150ELS7_37ELS7_95ELS7_174ELS7_108ELS7_79ELS7_29ELS7_220ELS7_206ELS7_31ELS7_213ELS7_110ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172ELS7_0ELS7_45ELS7_49ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_27ELS7_239ELS7_186ELS7_12ELS7_220ELS7_26ELS7_213ELS7_101ELS7_41ELS7_55ELS7_24ELS7_100ELS7_217ELS7_246ELS7_203ELS7_4ELS7_47ELS7_170ELS7_6ELS7_181ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_180ELS7_164ELS7_118ELS7_3ELS7_231ELS7_27ELS7_97ELS7_188ELS7_51ELS7_38ELS7_239ELS7_217ELS7_1ELS7_17ELS7_191ELS7_2ELS7_210ELS7_245ELS7_73ELS7_176ELS7_103ELS7_244ELS7_196ELS7_168ELS7_250ELS7_24ELS7_59ELS7_87ELS7_160ELS7_248ELS7_0ELS7_203ELS7_1ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_23ELS7_124ELS7_55ELS7_249ELS7_165ELS7_5ELS7_195ELS7_241ELS7_161ELS7_240ELS7_206ELS7_45ELS7_167ELS7_119ELS7_195ELS7_57ELS7_189ELS7_131ELS7_57ELS7_255ELS7_160ELS7_44ELS7_124ELS7_180ELS7_31ELS7_10ELS7_88ELS7_4ELS7_244ELS7_115ELS7_201ELS7_35ELS7_2ELS7_32ELS7_88ELS7_91ELS7_37ELS7_162ELS7_238ELS7_128ELS7_235ELS7_89ELS7_41ELS7_46ELS7_82ELS7_185ELS7_135ELS7_218ELS7_217ELS7_42ELS7_203ELS7_12ELS7_100ELS7_236ELS7_237ELS7_146ELS7_237ELS7_158ELS7_225ELS7_5ELS7_173ELS7_21ELS7_60ELS7_219ELS7_18ELS7_208ELS7_1ELS7_65ELS7_4ELS7_67ELS7_189ELS7_68ELS7_246ELS7_131ELS7_70ELS7_126ELS7_84ELS7_157ELS7_174ELS7_125ELS7_32ELS7_209ELS7_215ELS7_156ELS7_189ELS7_182ELS7_223ELS7_152ELS7_92ELS7_110ELS7_156ELS7_2ELS7_156ELS7_141ELS7_12ELS7_108ELS7_180ELS7_108ELS7_193ELS7_164ELS7_211ELS7_207ELS7_121ELS7_35ELS7_197ELS7_2ELS7_27ELS7_39ELS7_247ELS7_160ELS7_181ELS7_98ELS7_173ELS7_161ELS7_19ELS7_188ELS7_133ELS7_213ELS7_253ELS7_165ELS7_161ELS7_180ELS7_30ELS7_135ELS7_254ELS7_110ELS7_136ELS7_2ELS7_129ELS7_124ELS7_246ELS7_153ELS7_150ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_128ELS7_101ELS7_20ELS7_6ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_85ELS7_5ELS7_97ELS7_72ELS7_89ELS7_100ELS7_58ELS7_183ELS7_181ELS7_71ELS7_205ELS7_127ELS7_31ELS7_94ELS7_126ELS7_42ELS7_18ELS7_50ELS7_45ELS7_55ELS7_136ELS7_172ELS7_0ELS7_170ELS7_2ELS7_113ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_234ELS7_71ELS7_32ELS7_167ELS7_165ELS7_47ELS7_193ELS7_102ELS7_197ELS7_95ELS7_242ELS7_41ELS7_142ELS7_7ELS7_186ELS7_247ELS7_10ELS7_230ELS7_126ELS7_27ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_5ELS7_134ELS7_198ELS7_44ELS7_214ELS7_2ELS7_210ELS7_25ELS7_187ELS7_96ELS7_237ELS7_177ELS7_74ELS7_62ELS7_32ELS7_77ELS7_224ELS7_112ELS7_81ELS7_118ELS7_249ELS7_2ELS7_47ELS7_228ELS7_154ELS7_83ELS7_128ELS7_84ELS7_251ELS7_20ELS7_171ELS7_180ELS7_158ELS7_1ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_242ELS7_188ELS7_42ELS7_186ELS7_37ELS7_52ELS7_190ELS7_203ELS7_223ELS7_6ELS7_46ELS7_185ELS7_147ELS7_133ELS7_58ELS7_66ELS7_187ELS7_188ELS7_40ELS7_32ELS7_131ELS7_208ELS7_218ELS7_249ELS7_180ELS7_181ELS7_133ELS7_189ELS7_64ELS7_26ELS7_168ELS7_201ELS7_2ELS7_33ELS7_0ELS7_177ELS7_215ELS7_253ELS7_126ELS7_224ELS7_185ELS7_86ELS7_0ELS7_219ELS7_133ELS7_53ELS7_187ELS7_243ELS7_49ELS7_177ELS7_158ELS7_237ELS7_141ELS7_150ELS7_31ELS7_122ELS7_142ELS7_84ELS7_21ELS7_156ELS7_83ELS7_103ELS7_93ELS7_95ELS7_105ELS7_223ELS7_140ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_3ELS7_173ELS7_14ELS7_88ELS7_204ELS7_218ELS7_195ELS7_223ELS7_157ELS7_194ELS7_138ELS7_33ELS7_139ELS7_207ELS7_111ELS7_25ELS7_151ELS7_176ELS7_169ELS7_51ELS7_6ELS7_250ELS7_170ELS7_75ELS7_58ELS7_40ELS7_174ELS7_131ELS7_68ELS7_123ELS7_33ELS7_121ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_190ELS7_18ELS7_178ELS7_147ELS7_113ELS7_121ELS7_218ELS7_136ELS7_89ELS7_158ELS7_39ELS7_187ELS7_49ELS7_195ELS7_82ELS7_80ELS7_151ELS7_160ELS7_124ELS7_219ELS7_82ELS7_66ELS7_45ELS7_22ELS7_91ELS7_60ELS7_162ELS7_242ELS7_2ELS7_15ELS7_252ELS7_247ELS7_2ELS7_32ELS7_9ELS7_113ELS7_181ELS7_31ELS7_133ELS7_58ELS7_83ELS7_214ELS7_68ELS7_235ELS7_174ELS7_158ELS7_200ELS7_243ELS7_81ELS7_46ELS7_68ELS7_43ELS7_27ELS7_203ELS7_108ELS7_49ELS7_90ELS7_91ELS7_73ELS7_29ELS7_17ELS7_157ELS7_16ELS7_98ELS7_76ELS7_131ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_42ELS7_207ELS7_202ELS7_182ELS7_41ELS7_187ELS7_200ELS7_104ELS7_87ELS7_146ELS7_96ELS7_55ELS7_98ELS7_201ELS7_33ELS7_88ELS7_0ELS7_48ELS7_186ELS7_20ELS7_74ELS7_245ELS7_83ELS7_210ELS7_113ELS7_113ELS7_106ELS7_149ELS7_8ELS7_158ELS7_16ELS7_123ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_250ELS7_87ELS7_154ELS7_132ELS7_10ELS7_194ELS7_88ELS7_135ELS7_19ELS7_101ELS7_221ELS7_72ELS7_205ELS7_117ELS7_82ELS7_249ELS7_108ELS7_142ELS7_234ELS7_105ELS7_189ELS7_0ELS7_216ELS7_79ELS7_5ELS7_178ELS7_131ELS7_160ELS7_218ELS7_179ELS7_17ELS7_225ELS7_2ELS7_32ELS7_126ELS7_60ELS7_14ELS7_233ELS7_35ELS7_72ELS7_20ELS7_207ELS7_187ELS7_27ELS7_101ELS7_155ELS7_131ELS7_103ELS7_22ELS7_24ELS7_244ELS7_90ELS7_188ELS7_19ELS7_38ELS7_185ELS7_237ELS7_204ELS7_119ELS7_213ELS7_82ELS7_164ELS7_242ELS7_168ELS7_5ELS7_192ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_220ELS7_220ELS7_96ELS7_35ELS7_187ELS7_201ELS7_148ELS7_74ELS7_101ELS7_141ELS7_220ELS7_88ELS7_142ELS7_97ELS7_234ELS7_203ELS7_115ELS7_125ELS7_223ELS7_10ELS7_60ELS7_210ELS7_79ELS7_17ELS7_59ELS7_90ELS7_134ELS7_52ELS7_197ELS7_23ELS7_252ELS7_210ELS7_0ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_33ELS7_0ELS7_141ELS7_109ELS7_247ELS7_49ELS7_223ELS7_93ELS7_50ELS7_38ELS7_121ELS7_84ELS7_189ELS7_125ELS7_45ELS7_218ELS7_35ELS7_2ELS7_183ELS7_76ELS7_108ELS7_42ELS7_106ELS7_165ELS7_192ELS7_202ELS7_100ELS7_236ELS7_186ELS7_188ELS7_26ELS7_240ELS7_60ELS7_117ELS7_2ELS7_32ELS7_16ELS7_229ELS7_92ELS7_87ELS7_29ELS7_101ELS7_218ELS7_119ELS7_1ELS7_174ELS7_45ELS7_161ELS7_149ELS7_108ELS7_68ELS7_45ELS7_248ELS7_27ELS7_191ELS7_7ELS7_108ELS7_219ELS7_172ELS7_37ELS7_19ELS7_63ELS7_153ELS7_217ELS7_138ELS7_158ELS7_211ELS7_76ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_225ELS7_85ELS7_87ELS7_205ELS7_92ELS7_226ELS7_88ELS7_244ELS7_121ELS7_223ELS7_214ELS7_220ELS7_101ELS7_20ELS7_237ELS7_246ELS7_215ELS7_237ELS7_91ELS7_33ELS7_252ELS7_250ELS7_74ELS7_3ELS7_143ELS7_214ELS7_159ELS7_6ELS7_184ELS7_58ELS7_199ELS7_110ELS7_1ELS7_0ELS7_0ELS7_0ELS7_139ELS7_72ELS7_48ELS7_69ELS7_2ELS7_32ELS7_35ELS7_179ELS7_224ELS7_171ELS7_7ELS7_30ELS7_177ELS7_29ELS7_226ELS7_235ELS7_28ELS7_195ELS7_166ELS7_114ELS7_97ELS7_184ELS7_102ELS7_248ELS7_107ELS7_246ELS7_134ELS7_125ELS7_69ELS7_88ELS7_22ELS7_95ELS7_124ELS7_140ELS7_138ELS7_202ELS7_45ELS7_134ELS7_2ELS7_33ELS7_0ELS7_220ELS7_110ELS7_31ELS7_83ELS7_169ELS7_29ELS7_227ELS7_239ELS7_232ELS7_246ELS7_53ELS7_18ELS7_133ELS7_8ELS7_17ELS7_242ELS7_98ELS7_132ELS7_182ELS7_47ELS7_133ELS7_12ELS7_112ELS7_202ELS7_115ELS7_237ELS7_93ELS7_232ELS7_119ELS7_31ELS7_180ELS7_81ELS7_1ELS7_65ELS7_4ELS7_70ELS7_46ELS7_118ELS7_253ELS7_64ELS7_103ELS7_179ELS7_160ELS7_170ELS7_66ELS7_7ELS7_0ELS7_130ELS7_220ELS7_176ELS7_191ELS7_47ELS7_56ELS7_139ELS7_100ELS7_149ELS7_207ELS7_51ELS7_215ELS7_137ELS7_144ELS7_79ELS7_7ELS7_208ELS7_245ELS7_92ELS7_64ELS7_251ELS7_212ELS7_184ELS7_41ELS7_99ELS7_198ELS7_155ELS7_61ELS7_195ELS7_24ELS7_149ELS7_208ELS7_199ELS7_114ELS7_200ELS7_18ELS7_177ELS7_213ELS7_251ELS7_202ELS7_222ELS7_21ELS7_49ELS7_46ELS7_241ELS7_192ELS7_232ELS7_235ELS7_187ELS7_18ELS7_220ELS7_212ELS7_255ELS7_255ELS7_255ELS7_255ELS7_1ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_102ELS7_215ELS7_87ELS7_113ELS7_99ELS7_201ELS7_50ELS7_180ELS7_249ELS7_105ELS7_12ELS7_166ELS7_168ELS7_11ELS7_110ELS7_78ELS7_176ELS7_1ELS7_240ELS7_162ELS7_250ELS7_144ELS7_35ELS7_223ELS7_85ELS7_149ELS7_96ELS7_42ELS7_174ELS7_150ELS7_237ELS7_141ELS7_0ELS7_0ELS7_0ELS7_0ELS7_138ELS7_71ELS7_48ELS7_68ELS7_2ELS7_32ELS7_38ELS7_43ELS7_66ELS7_84ELS7_99ELS7_2ELS7_223ELS7_182ELS7_84ELS7_162ELS7_41ELS7_206ELS7_252ELS7_134ELS7_67ELS7_43ELS7_137ELS7_98ELS7_143ELS7_242ELS7_89ELS7_220ELS7_135ELS7_237ELS7_209ELS7_21ELS7_69ELS7_53ELS7_177ELS7_106ELS7_103ELS7_225ELS7_2ELS7_32ELS7_123ELS7_70ELS7_52ELS7_192ELS7_32ELS7_169ELS7_124ELS7_62ELS7_123ELS7_189ELS7_13ELS7_77ELS7_25ELS7_218ELS7_106ELS7_162ELS7_38ELS7_154ELS7_217ELS7_221ELS7_237ELS7_64ELS7_38ELS7_232ELS7_150ELS7_178ELS7_19ELS7_215ELS7_60ELS7_164ELS7_182ELS7_63ELS7_1ELS7_65ELS7_4ELS7_151ELS7_155ELS7_130ELS7_208ELS7_34ELS7_38ELS7_179ELS7_164ELS7_89ELS7_117ELS7_35ELS7_132ELS7_87ELS7_84ELS7_212ELS7_79ELS7_19ELS7_99ELS7_158ELS7_59ELS7_242ELS7_223ELS7_94ELS7_130ELS7_198ELS7_170ELS7_178ELS7_189ELS7_199ELS7_150ELS7_135ELS7_54ELS7_139ELS7_1ELS7_177ELS7_171ELS7_139ELS7_25ELS7_135ELS7_90ELS7_227ELS7_201ELS7_13ELS7_102ELS7_26ELS7_61ELS7_10ELS7_51ELS7_22ELS7_29ELS7_171ELS7_41ELS7_147ELS7_78ELS7_222ELS7_179ELS7_106ELS7_160ELS7_25ELS7_118ELS7_190ELS7_59ELS7_175ELS7_138ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_72ELS7_84ELS7_230ELS7_149ELS7_160ELS7_42ELS7_240ELS7_174ELS7_172ELS7_184ELS7_35ELS7_204ELS7_188ELS7_39ELS7_33ELS7_52ELS7_86ELS7_30ELS7_10ELS7_22ELS7_136ELS7_172ELS7_64ELS7_66ELS7_15ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_171ELS7_238ELS7_147ELS7_55ELS7_109ELS7_107ELS7_55ELS7_181ELS7_194ELS7_148ELS7_6ELS7_85ELS7_166ELS7_252ELS7_175ELS7_28ELS7_142ELS7_116ELS7_35ELS7_121ELS7_136ELS7_172ELS7_0ELS7_0ELS7_0ELS7_0ELS7_1ELS7_0ELS7_0ELS7_0ELS7_1ELS7_78ELS7_63ELS7_142ELS7_242ELS7_233ELS7_19ELS7_73ELS7_169ELS7_5ELS7_156ELS7_180ELS7_240ELS7_30ELS7_84ELS7_171ELS7_37ELS7_151ELS7_193ELS7_56ELS7_113ELS7_97ELS7_211ELS7_218ELS7_137ELS7_145ELS7_159ELS7_126ELS7_166ELS7_172ELS7_219ELS7_179ELS7_113ELS7_1ELS7_0ELS7_0ELS7_0ELS7_140ELS7_73ELS7_48ELS7_70ELS7_2ELS7_33ELS7_0ELS7_129ELS7_243ELS7_24ELS7_52ELS7_113ELS7_165ELS7_202ELS7_34ELS7_48ELS7_124ELS7_8ELS7_0ELS7_34ELS7_111ELS7_62ELS7_249ELS7_195ELS7_83ELS7_6ELS7_158ELS7_7ELS7_115ELS7_172ELS7_118ELS7_187ELS7_88ELS7_6ELS7_84ELS7_213ELS7_106ELS7_165ELS7_35ELS7_2ELS7_33ELS7_0ELS7_212ELS7_197ELS7_100ELS7_101ELS7_189ELS7_192ELS7_105ELS7_6ELS7_8ELS7_70ELS7_244ELS7_251ELS7_242ELS7_246ELS7_178ELS7_5ELS7_32ELS7_178ELS7_168ELS7_11ELS7_8ELS7_177ELS7_104ELS7_179ELS7_30ELS7_102ELS7_221ELS7_185ELS7_198ELS7_148ELS7_226ELS7_64ELS7_1ELS7_65ELS7_4ELS7_151ELS7_108ELS7_121ELS7_132ELS7_142ELS7_24ELS7_37ELS7_22ELS7_18ELS7_248ELS7_148ELS7_8ELS7_117ELS7_178ELS7_176ELS7_141ELS7_6ELS7_230ELS7_220ELS7_115ELS7_185ELS7_132ELS7_14ELS7_136ELS7_96ELS7_192ELS7_102ELS7_183ELS7_232ELS7_116ELS7_50ELS7_196ELS7_119ELS7_233ELS7_165ELS7_154ELS7_69ELS7_62ELS7_113ELS7_230ELS7_215ELS7_109ELS7_95ELS7_227ELS7_64ELS7_88ELS7_184ELS7_0ELS7_160ELS7_152ELS7_252ELS7_23ELS7_64ELS7_206ELS7_48ELS7_18ELS7_232ELS7_252ELS7_138ELS7_0ELS7_201ELS7_106ELS7_249ELS7_102ELS7_255ELS7_255ELS7_255ELS7_255ELS7_2ELS7_192ELS7_225ELS7_228ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_65ELS7_52ELS7_231ELS7_90ELS7_111ELS7_203ELS7_96ELS7_66ELS7_3ELS7_74ELS7_171ELS7_94ELS7_24ELS7_87ELS7_12ELS7_241ELS7_248ELS7_68ELS7_245ELS7_71ELS7_136ELS7_172ELS7_64ELS7_75ELS7_76ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_25ELS7_118ELS7_169ELS7_20ELS7_43ELS7_107ELS7_167ELS7_201ELS7_215ELS7_150ELS7_183ELS7_94ELS7_239ELS7_121ELS7_66ELS7_252ELS7_146ELS7_136ELS7_237ELS7_211ELS7_124ELS7_50ELS7_245ELS7_195ELS7_136ELS7_172EEEEEEEDav
Unexecuted instantiation: _ZN4util12hex_literalsli4_hexITnNS_6detail3HexEXtlNS3_ILm337EEEtlNSt3__15arrayISt4byteLm168EEEtlA168_S7_LS7_96ELS7_1ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_254ELS7_255ELS7_255ELS7_127ELS7_1ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_0ELS7_0ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_255ELS7_255ELS7_255ELS7_127ELS7_0ELS7_47ELS7_85ELS7_82ELS7_71ELS7_69ELS7_78ELS7_84ELS7_58ELS7_32ELS7_65ELS7_108ELS7_101ELS7_114ELS7_116ELS7_32ELS7_107ELS7_101ELS7_121ELS7_32ELS7_99ELS7_111ELS7_109ELS7_112ELS7_114ELS7_111ELS7_109ELS7_105ELS7_115ELS7_101ELS7_100ELS7_44ELS7_32ELS7_117ELS7_112ELS7_103ELS7_114ELS7_97ELS7_100ELS7_101ELS7_32ELS7_114ELS7_101ELS7_113ELS7_117ELS7_105ELS7_114ELS7_101ELS7_100ELS7_0ELS7_70ELS7_48ELS7_68ELS7_2ELS7_32ELS7_101ELS7_63ELS7_235ELS7_214ELS7_65ELS7_15ELS7_71ELS7_15ELS7_107ELS7_174ELS7_17ELS7_202ELS7_209ELS7_156ELS7_72ELS7_65ELS7_59ELS7_236ELS7_177ELS7_172ELS7_44ELS7_23ELS7_249ELS7_8ELS7_253ELS7_15ELS7_213ELS7_59ELS7_220ELS7_58ELS7_189ELS7_82ELS7_2ELS7_32ELS7_109ELS7_14ELS7_156ELS7_150ELS7_254ELS7_136ELS7_212ELS7_160ELS7_240ELS7_30ELS7_217ELS7_222ELS7_218ELS7_226ELS7_182ELS7_249ELS7_224ELS7_13ELS7_169ELS7_76ELS7_173ELS7_15ELS7_236ELS7_170ELS7_230ELS7_110ELS7_207ELS7_104ELS7_155ELS7_247ELS7_27ELS7_80EEEEEEEDav
388
389
template <util::detail::Hex str>
390
0
constexpr auto operator""_hex_u8() { return std::bit_cast<std::array<uint8_t, str.bytes.size()>>(str.bytes); }
Unexecuted instantiation: _ZN4util12hex_literalsli7_hex_u8ITnNS_6detail3HexEXtlNS3_ILm65EEEtlNSt3__15arrayISt4byteLm32EEEtlA32_S7_LS7_134ELS7_128ELS7_135ELS7_202ELS7_2ELS7_166ELS7_249ELS7_116ELS7_196ELS7_89ELS7_137ELS7_36ELS7_195ELS7_107ELS7_87ELS7_118ELS7_45ELS7_50ELS7_203ELS7_69ELS7_113ELS7_113ELS7_103ELS7_227ELS7_0ELS7_98ELS7_44ELS7_113ELS7_103ELS7_227ELS7_137ELS7_101EEEEEEEDav
Unexecuted instantiation: _ZN4util12hex_literalsli7_hex_u8ITnNS_6detail3HexEXtlNS3_ILm65EEEtlNSt3__15arrayISt4byteLm32EEEtlA32_S7_LS7_80ELS7_146ELS7_155ELS7_116ELS7_193ELS7_160ELS7_73ELS7_84ELS7_183ELS7_139ELS7_75ELS7_96ELS7_53ELS7_233ELS7_122ELS7_94ELS7_7ELS7_138ELS7_90ELS7_15ELS7_40ELS7_236ELS7_150ELS7_213ELS7_71ELS7_191ELS7_238ELS7_154ELS7_206ELS7_128ELS7_58ELS7_192EEEEEEEDav
391
392
template <util::detail::Hex str>
393
constexpr auto operator""_hex_v() { return std::vector<std::byte>{str.bytes.begin(), str.bytes.end()}; }
394
395
template <util::detail::Hex str>
396
38.8k
inline auto operator""_hex_v_u8() { return std::vector<uint8_t>{UCharCast(str.bytes.data()), UCharCast(str.bytes.data() + str.bytes.size())}; }
397
398
} // inline namespace hex_literals
399
} // namespace util
400
401
#endif // BITCOIN_UTIL_STRENCODINGS_H