diff --git a/src/embit/bip39.py b/src/embit/bip39.py index 418f8b39..a6a8f85a 100644 --- a/src/embit/bip39.py +++ b/src/embit/bip39.py @@ -11,7 +11,7 @@ def mnemonic_to_bytes(mnemonic: str, ignore_checksum: bool = False, wordlist=WOR # this function is copied from Jimmy Song's HDPrivateKey.from_mnemonic() method words = mnemonic.strip().split() - if len(words) % 3 != 0 or len(words) < 12: + if len(words) % 3 != 0 or not 12 <= len(words) <= 24: raise ValueError("Invalid recovery phrase") binary_seed = bytearray() @@ -97,7 +97,7 @@ def _extract_index(bits, b, n): def mnemonic_from_bytes(entropy, wordlist=WORDLIST): - if len(entropy) % 4 != 0: + if len(entropy) % 4 != 0 or not 16 <= len(entropy) <= 32: raise ValueError("Byte array should be multiple of 4 long (16, 20, ..., 32)") total_bits = len(entropy) * 8 checksum_bits = total_bits // 32 diff --git a/src/embit/bip85.py b/src/embit/bip85.py index 5867abd7..97013e5e 100644 --- a/src/embit/bip85.py +++ b/src/embit/bip85.py @@ -17,7 +17,8 @@ def derive_entropy(root, app_index, path): """ Derive app-specific bip85 entropy using path m/83696968'/app_index'/...path' """ - assert max(path) < HARDENED_INDEX + if max(path) >= HARDENED_INDEX: + raise ValueError("Path elements must be less than 2^31") derivation = [HARDENED_INDEX + 83696968, HARDENED_INDEX + app_index] + [ p + HARDENED_INDEX for p in path ] @@ -27,7 +28,8 @@ def derive_entropy(root, app_index, path): def derive_mnemonic(root, num_words=12, index=0, language=LANGUAGES.ENGLISH): """Derive a new mnemonic with num_words using language (code, wordlist)""" - assert num_words in [12, 18, 24] + if num_words not in [12, 18, 24]: + raise ValueError("Number of words must be 12, 18 or 24") langcode, wordlist = language path = [langcode, num_words, index] entropy = derive_entropy(root, 39, path) @@ -49,7 +51,9 @@ def derive_xprv(root, index=0): def derive_hex(root, num_bytes=32, index=0): """Derive raw entropy from 16 to 64 bytes long""" - assert num_bytes <= 64 - assert num_bytes >= 16 + if num_bytes > 64: + raise ValueError("Number of bytes must not exceed 64") + if num_bytes < 16: + raise ValueError("Number of bytes must be at least 16") entropy = derive_entropy(root, 128169, [num_bytes, index]) return entropy[:num_bytes] diff --git a/src/embit/descriptor/arguments.py b/src/embit/descriptor/arguments.py index 3f92500a..0c8d4d52 100644 --- a/src/embit/descriptor/arguments.py +++ b/src/embit/descriptor/arguments.py @@ -15,7 +15,8 @@ def __init__(self, fingerprint: bytes, derivation: list): def from_string(cls, s: str): arr = s.split("/") mfp = unhexlify(arr[0]) - assert len(mfp) == 4 + if len(mfp) != 4: + raise ArgumentError("Invalid fingerprint length") arr[0] = "m" path = "/".join(arr) derivation = bip32.parse_path(path) @@ -315,7 +316,8 @@ def xonly(self): return self.key.xonly() def taproot_tweak(self, h=b""): - assert self.taproot + if not self.taproot: + raise ArgumentError("Key is not taproot") return self.key.taproot_tweak(h) def serialize(self): diff --git a/src/embit/descriptor/descriptor.py b/src/embit/descriptor/descriptor.py index 8bc25137..48ae9ba6 100644 --- a/src/embit/descriptor/descriptor.py +++ b/src/embit/descriptor/descriptor.py @@ -59,6 +59,9 @@ def script_len(self): @property def num_branches(self): + if self.miniscript is not None: + return max({k.num_branches for k in self.miniscript.keys}) + return max([k.num_branches for k in self.keys]) def branch(self, branch_index=None): @@ -88,7 +91,7 @@ def is_wildcard(self): @property def is_wrapped(self): - return self.sh and self.is_segwit + return bool(self.sh and self.wpkh) or bool(self.sh and self.wsh) @property def is_legacy(self): @@ -97,7 +100,9 @@ def is_legacy(self): @property def is_segwit(self): return ( - (self.wsh and self.miniscript) or (self.wpkh and self.key) or self.taproot + bool(self.wsh and self.miniscript) + or bool(self.wpkh and self.key) + or bool(self.taproot) ) @property @@ -118,18 +123,28 @@ def is_basic_multisig(self) -> bool: def is_sorted(self) -> bool: return bool(self.is_basic_multisig and isinstance(self.miniscript, Sortedmulti)) + @property + def is_miniscript(self) -> bool: + return bool( + self.miniscript and not isinstance(self.miniscript, (Multi, Sortedmulti)) + ) + def scriptpubkey_type(self): if self.is_taproot: return "p2tr" if self.sh: + if self.wpkh: + return "p2sh-p2wpkh" + if self.wsh: + return "p2sh-p2wsh" return "p2sh" + if self.wsh: + return "p2wsh" if self.is_pkh: if self.is_legacy: return "p2pkh" if self.is_segwit: return "p2wpkh" - else: - return "p2wsh" @property def brief_policy(self): @@ -204,7 +219,7 @@ def owns(self, psbt_scope): if psbt_scope.script_pubkey is None: return False # quick check of script_pubkey type - if psbt_scope.script_pubkey.script_type() != self.scriptpubkey_type(): + if psbt_scope.script_pubkey.script_type() not in self.scriptpubkey_type(): return False for pub, der in psbt_scope.bip32_derivations.items(): # check of the fingerprints @@ -214,9 +229,30 @@ def owns(self, psbt_scope): res = k.check_derivation(der) if res: idx, branch_idx = res - sc = self.derive(idx, branch_index=branch_idx).script_pubkey() - # if derivation is found but scriptpubkey doesn't match - fail - return sc == psbt_scope.script_pubkey + + # get the script from the scope, + # it can be either legacy, wrapped segwit or segwit v0 + sc = self.derive(idx, branch_index=branch_idx) + + # If derivation is found but scriptpubkey doesn't match - fail. + # In case of wrapped segwit we need to check redeem script too. + # In case of non-wrapped segwit we can check script_pubkey directly. + if sc.is_wrapped: + redeem_sc = sc.redeem_script() + + # you can check script_type of both + # script_pubkey and redeem_script + # to make sure they match the psbt_scope + # print("%s-%s" % (sc.script_pubkey().script_type(), redeem_sc.script_type())) + return ( + sc.script_pubkey() == psbt_scope.script_pubkey + and redeem_sc.script_type() == psbt_scope.redeem_script.script_type() + ) + else: + # you can check script_type + # to make sure they match the psbt_scope + # print("%s" % sc.script_pubkey().script_type()) + return sc.script_pubkey() == psbt_scope.script_pubkey for pub, (leafs, der) in psbt_scope.taproot_bip32_derivations.items(): # check of the fingerprints for k in self.keys: @@ -292,7 +328,7 @@ def from_string(cls, desc): @classmethod def read_from(cls, s): # starts with sh(wsh()), sh() or wsh() - start = s.read(7) + start = s.read(8) sh = False wsh = False wpkh = False @@ -301,30 +337,30 @@ def read_from(cls, s): taptree = TapTree() if start.startswith(b"tr("): taproot = True - s.seek(-4, 1) + s.seek(-5, 1) elif start.startswith(b"sh(wsh("): sh = True wsh = True + s.seek(-1, 1) elif start.startswith(b"wsh("): sh = False wsh = True - s.seek(-3, 1) - elif start.startswith(b"sh(wpkh"): + s.seek(-4, 1) + elif start.startswith(b"sh(wpkh("): is_miniscript = False sh = True wpkh = True - assert s.read(1) == b"(" elif start.startswith(b"wpkh("): is_miniscript = False wpkh = True - s.seek(-2, 1) + s.seek(-3, 1) elif start.startswith(b"pkh("): is_miniscript = False - s.seek(-3, 1) + s.seek(-4, 1) elif start.startswith(b"sh("): sh = True wsh = False - s.seek(-4, 1) + s.seek(-5, 1) else: raise ValueError("Invalid descriptor (starts with '%s')" % start.decode()) # taproot always has a key, and may have taptree miniscript diff --git a/src/embit/descriptor/miniscript.py b/src/embit/descriptor/miniscript.py index 990e3e56..9783afc1 100644 --- a/src/embit/descriptor/miniscript.py +++ b/src/embit/descriptor/miniscript.py @@ -54,11 +54,25 @@ def type(self): @classmethod def read_from(cls, s, taproot=False): - op, char = read_until(s, b"(") + def wrapped(m_script): + for w in reversed(wrappers): + if w not in WRAPPER_NAMES: + raise MiniscriptError("Unknown wrapper") + WrapperCls = WRAPPERS[WRAPPER_NAMES.index(w)] + m_script = WrapperCls(m_script, taproot=taproot) + return m_script + + op, char = read_until(s, b"(,)") + if char in (b",", b")"): + s.seek(-1, 1) op = op.decode() wrappers = "" if ":" in op: wrappers, op = op.split(":") + # handle boolean literals: 0 or 1 + if op in ("0", "1"): + miniscript = JustOne() if op == "1" else JustZero() + return wrapped(miniscript) if char != b"(": raise MiniscriptError("Missing operator") if op not in OPERATOR_NAMES: @@ -67,12 +81,7 @@ def read_from(cls, s, taproot=False): MiniscriptCls = OPERATORS[OPERATOR_NAMES.index(op)] args = MiniscriptCls.read_arguments(s, taproot=taproot) miniscript = MiniscriptCls(*args, taproot=taproot) - for w in reversed(wrappers): - if w not in WRAPPER_NAMES: - raise MiniscriptError("Unknown wrapper") - WrapperCls = WRAPPERS[WRAPPER_NAMES.index(w)] - miniscript = WrapperCls(miniscript, taproot=taproot) - return miniscript + return wrapped(miniscript) @classmethod def read_arguments(cls, s, taproot=False): @@ -119,6 +128,28 @@ def len_args(self): ########### Known fragments (miniscript operators) ############## +class JustZero(Miniscript): + TYPE = "B" + PROPS = "zud" + + def inner_compile(self): + return Number(0).compile() + + def __str__(self): + return "0" + + +class JustOne(Miniscript): + TYPE = "B" + PROPS = "zu" + + def inner_compile(self): + return Number(1).compile() + + def __str__(self): + return "1" + + class OneArg(Miniscript): NARGS = 1 @@ -870,6 +901,11 @@ def inner_compile(self): def __len__(self): return len(self.arg) + 1 + + def verify(self): + super().verify() + if self.arg.type != "V": + raise MiniscriptError("t: X must be of type V") @property def properties(self): diff --git a/src/embit/ec.py b/src/embit/ec.py index a93fc714..b36d861d 100644 --- a/src/embit/ec.py +++ b/src/embit/ec.py @@ -26,7 +26,8 @@ def read_from(cls, stream): class SchnorrSig(EmbitBase): def __init__(self, sig): - assert len(sig) == 64 + if len(sig) != 64: + raise ECError("Invalid schnorr signature") self._sig = sig def write_to(self, stream) -> int: @@ -93,7 +94,8 @@ def _xonly(self): @classmethod def from_xonly(cls, data: bytes): - assert len(data) == 32 + if len(data) != 32: + raise ECError("Invalid xonly pubkey") return cls.parse(b"\x02" + data) def schnorr_verify(self, sig, msg_hash) -> bool: diff --git a/src/embit/liquid/pset.py b/src/embit/liquid/pset.py index 3a2c8b85..290c59ac 100644 --- a/src/embit/liquid/pset.py +++ b/src/embit/liquid/pset.py @@ -96,9 +96,11 @@ def unblind(self, blinding_key): return # verify gen = secp256k1.generator_generate_blinded(asset, in_abf) - assert gen == secp256k1.generator_parse(self.utxo.asset) + if gen != secp256k1.generator_parse(self.utxo.asset): + raise PSBTError("Invalid asset commitment") cmt = secp256k1.pedersen_commit(vbf, value, gen) - assert cmt == secp256k1.pedersen_commitment_parse(self.utxo.value) + if cmt != secp256k1.pedersen_commitment_parse(self.utxo.value): + raise PSBTError("Invalid value commitment") self.asset = asset self.value = value @@ -506,7 +508,8 @@ def unblind(self, blinding_key): inp.unblind(blinding_key) def txseed(self, seed: bytes): - assert len(seed) == 32 + if len(seed) != 32: + raise PSBTError("Seed should be 32 bytes") # get unique seed for this tx: # we use seed + txid:vout + scriptpubkey as unique data for tagged hash data = b"".join( diff --git a/src/embit/liquid/psetview.py b/src/embit/liquid/psetview.py index dbedbbd2..70dda48e 100644 --- a/src/embit/liquid/psetview.py +++ b/src/embit/liquid/psetview.py @@ -5,7 +5,8 @@ def skip_commitment(stream): c = stream.read(1) - assert len(c) == 1 + if len(c) != 1: + raise PSBTError("Unexpected end of stream") if c == b"\x00": # None return 1 if c == b"\x01": # unconfidential diff --git a/src/embit/liquid/transaction.py b/src/embit/liquid/transaction.py index b64dd028..ca7af0a5 100644 --- a/src/embit/liquid/transaction.py +++ b/src/embit/liquid/transaction.py @@ -40,16 +40,19 @@ class LTransactionError(TransactionError): def read_commitment(stream): c = stream.read(1) - assert len(c) == 1 + if len(c) != 1: + raise TransactionError("Invalid commitment") if c == b"\x00": # None return None if c == b"\x01": # unconfidential r = stream.read(8) - assert len(r) == 8 + if len(r) != 8: + raise TransactionError("Invalid commitment") return int.from_bytes(r, "big") # confidential r = stream.read(32) - assert len(r) == 32 + if len(r) != 32: + raise TransactionError("Invalid commitment") return c + r @@ -71,10 +74,14 @@ def unblind( message_length=64, ) -> tuple: """Unblinds a range proof and returns value, asset, value blinding factor, asset blinding factor, extra data, min and max values""" - assert len(pubkey) in [33, 65] - assert len(blinding_key) == 32 - assert len(value_commitment) == 33 - assert len(asset_commitment) == 33 + if len(pubkey) not in [33, 65]: + raise TransactionError("Invalid pubkey length") + if len(blinding_key) != 32: + raise TransactionError("Invalid blinding key length") + if len(value_commitment) != 33: + raise TransactionError("Invalid value commitment length") + if len(asset_commitment) != 33: + raise TransactionError("Invalid asset commitment length") pub = secp256k1.ec_pubkey_parse(pubkey) secp256k1.ec_pubkey_tweak_mul(pub, blinding_key) sec = secp256k1.ec_pubkey_serialize(pub) @@ -397,9 +404,11 @@ def __init__(self, nonce, entropy, amount_commitment, token_commitment=None): @classmethod def read_from(cls, stream): nonce = stream.read(32) - assert len(nonce) == 32 + if len(nonce) != 32: + raise TransactionError("Invalid nonce") entropy = stream.read(32) - assert len(entropy) == 32 + if len(entropy) != 32: + raise TransactionError("Invalid entropy") amount_commitment = read_commitment(stream) token_commitment = read_commitment(stream) return cls(nonce, entropy, amount_commitment, token_commitment) diff --git a/src/embit/misc.py b/src/embit/misc.py index fc2c8046..97669ade 100644 --- a/src/embit/misc.py +++ b/src/embit/misc.py @@ -35,7 +35,8 @@ def secure_randint(vmin: int, vmax: int) -> int: """ import math - assert vmax > vmin + if vmax <= vmin: + raise ValueError("vmax must be greater than vmin") delta = vmax - vmin nbits = math.ceil(math.log2(delta + 1)) randn = getrandbits(nbits) diff --git a/src/embit/psbt.py b/src/embit/psbt.py index 54497c2e..d20c88bb 100644 --- a/src/embit/psbt.py +++ b/src/embit/psbt.py @@ -142,6 +142,7 @@ def __init__(self, unknown: dict = {}, vin=None, compress=CompressMode.KEEP_ALL) self.taproot_bip32_derivations = OrderedDict() self.taproot_internal_key = None self.taproot_merkle_root = None + self.taproot_key_sig = None self.taproot_sigs = OrderedDict() self.taproot_scripts = OrderedDict() @@ -187,6 +188,7 @@ def update(self, other): self.taproot_bip32_derivations.update(other.taproot_bip32_derivations) self.taproot_internal_key = other.taproot_internal_key self.taproot_merkle_root = other.taproot_merkle_root or self.taproot_merkle_root + self.taproot_key_sig = other.taproot_key_sig or self.taproot_key_sig self.taproot_sigs.update(other.taproot_sigs) self.taproot_scripts.update(other.taproot_scripts) self.final_scriptsig = other.final_scriptsig or self.final_scriptsig @@ -350,7 +352,15 @@ def read_value(self, stream, k): elif k == b"\x10": self.sequence = int.from_bytes(v, "little") - # TODO: 0x13 - tap key signature + # PSBT_IN_TAP_KEY_SIG + elif k[0] == 0x13: + # read the taproot key sig + if len(k) != 1: + raise PSBTError("Invalid taproot key signature key") + if self.taproot_key_sig is not None: + raise PSBTError("Duplicated taproot key signature") + self.taproot_key_sig = v + # PSBT_IN_TAP_SCRIPT_SIG elif k[0] == 0x14: if len(k) != 65: @@ -434,6 +444,11 @@ def write_to(self, stream, skip_separator=False, version=None, **kwargs) -> int: r += ser_string(stream, b"\x10") r += ser_string(stream, self.sequence.to_bytes(4, "little")) + # PSBT_IN_TAP_KEY_SIG + if self.taproot_key_sig is not None: + r += ser_string(stream, b"\x13") + r += ser_string(stream, self.taproot_key_sig) + # PSBT_IN_TAP_SCRIPT_SIG for pub, leaf in self.taproot_sigs: r += ser_string(stream, b"\x14" + pub.xonly() + leaf) @@ -881,11 +896,11 @@ def sign_input_with_tapkey( sighash=sighash, ) sig = pk.schnorr_sign(h) - wit = sig.serialize() + sigdata = sig.serialize() if sighash != SIGHASH.DEFAULT: - wit += bytes([sighash]) - # TODO: maybe better to put into internal key sig field - inp.final_scriptwitness = Witness([wit]) + sigdata += bytes([sighash]) + inp.taproot_key_sig = sigdata + inp.final_scriptwitness = Witness([sigdata]) # no need to sign anything else return 1 counter = 0 @@ -977,22 +992,25 @@ def sign_with(self, root, sighash=SIGHASH.DEFAULT) -> int: continue # get all possible derivations with matching fingerprint - bip32_derivations = set() + bip32_derivations = OrderedDict() # OrderedDict to keep order if fingerprint: # if taproot derivations are present add them for pub in inp.taproot_bip32_derivations: (_leafs, derivation) = inp.taproot_bip32_derivations[pub] if derivation.fingerprint == fingerprint: - bip32_derivations.add((pub, derivation)) + # Add only if not already present + if (pub, derivation) not in bip32_derivations: + bip32_derivations[(pub, derivation)] = True # segwit and legacy derivations for pub in inp.bip32_derivations: derivation = inp.bip32_derivations[pub] if derivation.fingerprint == fingerprint: - bip32_derivations.add((pub, derivation)) + if (pub, derivation) not in bip32_derivations: + bip32_derivations[(pub, derivation)] = True # get derived keys for signing - derived_keypairs = set() # (prv, pub) + derived_keypairs = OrderedDict() # (prv, pub) for pub, derivation in bip32_derivations: der = derivation.derivation # descriptor key has origin derivation that we take into account @@ -1008,7 +1026,9 @@ def sign_with(self, root, sighash=SIGHASH.DEFAULT) -> int: if hdkey.xonly() != pub.xonly(): raise PSBTError("Derivation path doesn't look right") - derived_keypairs.add((hdkey.key, pub)) + # Insert into derived_keypairs if not present + if (hdkey.key, pub) not in derived_keypairs: + derived_keypairs[(hdkey.key, pub)] = True # sign with taproot key if inp.is_taproot: diff --git a/src/embit/psbtview.py b/src/embit/psbtview.py index 8012654d..c66bcb5b 100644 --- a/src/embit/psbtview.py +++ b/src/embit/psbtview.py @@ -14,6 +14,7 @@ Makes sense to run gc.collect() after processing of each scope to free memory. """ # TODO: refactor, a lot of code is duplicated here from transaction.py +from collections import OrderedDict import hashlib from . import compact from . import ec @@ -239,8 +240,10 @@ def view(cls, stream, offset=None, compress=CompressMode.KEEP_ALL): num_outputs = compact.from_bytes(value) elif key == b"\x00": # we found global transaction - assert version != 2 - assert (num_inputs is None) and (num_outputs is None) + if version == 2: + raise PSBTError("Global transaction with version 2 PSBT") + if (num_inputs is not None) or (num_outputs is not None): + raise PSBTError("Invalid global transaction") tx_len = compact.read_from(stream) cur += len(compact.to_bytes(tx_len)) tx_offset = cur @@ -742,22 +745,25 @@ def sign_input( return 0 # get all possible derivations with matching fingerprint - bip32_derivations = set() + bip32_derivations = OrderedDict() if fingerprint: # if taproot derivations are present add them for pub in inp.taproot_bip32_derivations: (_leafs, derivation) = inp.taproot_bip32_derivations[pub] if derivation.fingerprint == fingerprint: - bip32_derivations.add((pub, derivation)) + # Add only if not already present + if (pub, derivation) not in bip32_derivations: + bip32_derivations[(pub, derivation)] = True # segwit and legacy derivations for pub in inp.bip32_derivations: derivation = inp.bip32_derivations[pub] if derivation.fingerprint == fingerprint: - bip32_derivations.add((pub, derivation)) + if (pub, derivation) not in bip32_derivations: + bip32_derivations[(pub, derivation)] = True # get derived keys for signing - derived_keypairs = set() # (prv, pub) + derived_keypairs = OrderedDict() # (prv, pub) for pub, derivation in bip32_derivations: der = derivation.derivation # descriptor key has origin derivation that we take into account @@ -773,7 +779,9 @@ def sign_input( if hdkey.xonly() != pub.xonly(): raise PSBTError("Derivation path doesn't look right") - derived_keypairs.add((hdkey.key, pub)) + # Insert into derived_keypairs if not present + if (hdkey.key, pub) not in derived_keypairs: + derived_keypairs[(hdkey.key, pub)] = True counter = 0 # sign with taproot key diff --git a/src/embit/util/ctypes_secp256k1.py b/src/embit/util/ctypes_secp256k1.py index 232abda1..8068355e 100644 --- a/src/embit/util/ctypes_secp256k1.py +++ b/src/embit/util/ctypes_secp256k1.py @@ -761,16 +761,20 @@ def xonly_pubkey_from_pubkey(pubkey, context=_secp.ctx): @locked def schnorrsig_verify(sig, msg, pubkey, context=_secp.ctx): - assert len(sig) == 64 - assert len(msg) == 32 - assert len(pubkey) == 64 + if len(sig) != 64: + raise ValueError("Signature should be 64 bytes long") + if len(msg) != 32: + raise ValueError("Message should be 32 bytes long") + if len(pubkey) != 64: + raise ValueError("Public key should be 64 bytes long") res = _secp.secp256k1_schnorrsig_verify(context, sig, msg, pubkey) return bool(res) @locked def keypair_create(secret, context=_secp.ctx): - assert len(secret) == 32 + if len(secret) != 32: + raise ValueError("Secret key should be 32 bytes long") keypair = bytes(96) r = _secp.secp256k1_keypair_create(context, keypair, secret) if r == 0: @@ -782,11 +786,13 @@ def keypair_create(secret, context=_secp.ctx): def schnorrsig_sign( msg, keypair, nonce_function=None, extra_data=None, context=_secp.ctx ): - assert len(msg) == 32 + if len(msg) != 32: + raise ValueError("Message should be 32 bytes long") if len(keypair) == 32: keypair = keypair_create(keypair, context=context) with _lock: - assert len(keypair) == 96 + if len(keypair) != 96: + raise ValueError("Keypair should be 96 bytes long") sig = bytes(64) r = _secp.secp256k1_schnorrsig_sign( context, sig, msg, keypair, nonce_function, extra_data @@ -916,7 +922,8 @@ def pedersen_blind_generator_blind_sum( if res == 0: raise ValueError("Failed to get the last blinding factor.") res = (c_char * 32).from_address(address).raw - assert len(res) == 32 + if len(res) != 32: + raise ValueError("Blinding factor should be 32 bytes long") return res diff --git a/src/embit/util/key.py b/src/embit/util/key.py index 13b01d95..f573ec5b 100644 --- a/src/embit/util/key.py +++ b/src/embit/util/key.py @@ -43,7 +43,8 @@ def jacobi_symbol(n, k): For our application k is always prime, so this is the same as the Legendre symbol. """ - assert k > 0 and k & 1, "jacobi symbol is only defined for positive odd k" + if k <= 0 or k % 2 == 0: + raise ValueError("jacobi symbol is only defined for positive odd k") n %= k t = 0 while n != 0: @@ -165,7 +166,8 @@ def add_mixed(self, p1, p2): """ x1, y1, z1 = p1 x2, y2, z2 = p2 - assert z2 == 1 + if z2 != 1: + raise ValueError("p2 must be an affine point") # Adding to the point at infinity is a no-op if z1 == 0: return p2 @@ -299,7 +301,8 @@ def is_valid(self): return self.valid def get_bytes(self): - assert self.valid + if not self.valid: + raise ValueError("Invalid public key") p = SECP256K1.affine(self.p) if p is None: return None @@ -313,7 +316,8 @@ def verify_ecdsa(self, sig, msg, low_s=True): See https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm for the ECDSA verifier algorithm""" - assert self.valid + if not self.valid: + raise ValueError("Invalid public key") # Extract r and s from the DER formatted signature. Return false for # any DER encoding errors. @@ -378,7 +382,8 @@ def __init__(self): def set(self, secret, compressed): """Construct a private key object with given 32-byte secret and compressed flag.""" - assert len(secret) == 32 + if len(secret) != 32: + raise ValueError("Invalid secret key length") secret = int.from_bytes(secret, "big") self.valid = secret > 0 and secret < SECP256K1_ORDER if self.valid: @@ -391,7 +396,8 @@ def generate(self, compressed=True): def get_bytes(self): """Retrieve the 32-byte representation of this key.""" - assert self.valid + if not self.valid: + raise ValueError("Invalid private key") return self.secret.to_bytes(32, "big") @property @@ -404,7 +410,8 @@ def is_compressed(self): def get_pubkey(self): """Compute an ECPubKey object for this secret key.""" - assert self.valid + if not self.valid: + raise ValueError("Invalid private key") ret = ECPubKey() p = SECP256K1.mul([(SECP256K1_G, self.secret)]) ret.p = p @@ -417,7 +424,8 @@ def sign_ecdsa(self, msg, nonce_function=None, extra_data=None, low_s=True): See https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm for the ECDSA signer algorithm.""" - assert self.valid + if not self.valid: + raise ValueError("Invalid private key") z = int.from_bytes(msg, "big") if nonce_function is None: nonce_function = deterministic_k @@ -470,7 +478,8 @@ def compute_xonly_pubkey(key): This also returns whether the resulting public key was negated. """ - assert len(key) == 32 + if len(key) != 32: + raise ValueError("Invalid private key length") x = int.from_bytes(key, "big") if x == 0 or x >= SECP256K1_ORDER: return (None, None) @@ -481,8 +490,10 @@ def compute_xonly_pubkey(key): def tweak_add_privkey(key, tweak): """Tweak a private key (after negating it if needed).""" - assert len(key) == 32 - assert len(tweak) == 32 + if len(key) != 32: + raise ValueError("Invalid private key length") + if len(tweak) != 32: + raise ValueError("Invalid tweak length") x = int.from_bytes(key, "big") if x == 0 or x >= SECP256K1_ORDER: @@ -501,8 +512,10 @@ def tweak_add_privkey(key, tweak): def tweak_add_pubkey(key, tweak): """Tweak a public key and return whether the result had to be negated.""" - assert len(key) == 32 - assert len(tweak) == 32 + if len(key) != 32: + raise ValueError("Invalid public key length") + if len(tweak) != 32: + raise ValueError("Invalid tweak length") x_coord = int.from_bytes(key, "big") if x_coord >= SECP256K1_FIELD_SIZE: @@ -525,9 +538,12 @@ def verify_schnorr(key, sig, msg): - sig is a 64-byte Schnorr signature - msg is a 32-byte message """ - assert len(key) == 32 - assert len(msg) == 32 - assert len(sig) == 64 + if len(key) != 32: + raise ValueError("Invalid public key length") + if len(msg) != 32: + raise ValueError("Invalid message length") + if len(sig) != 64: + raise ValueError("Invalid signature length") x_coord = int.from_bytes(key, "big") if x_coord == 0 or x_coord >= SECP256K1_FIELD_SIZE: @@ -556,10 +572,13 @@ def verify_schnorr(key, sig, msg): def sign_schnorr(key, msg, aux=None, flip_p=False, flip_r=False): """Create a Schnorr signature (see BIP 340).""" - assert len(key) == 32 - assert len(msg) == 32 + if len(key) != 32: + raise ValueError("Invalid private key length") + if len(msg) != 32: + raise ValueError("Invalid message length") if aux is not None: - assert len(aux) == 32 + if len(aux) != 32: + raise ValueError("Invalid aux length") sec = int.from_bytes(key, "big") if sec == 0 or sec >= SECP256K1_ORDER: @@ -579,7 +598,8 @@ def sign_schnorr(key, msg, aux=None, flip_p=False, flip_r=False): ) % SECP256K1_ORDER ) - assert kp != 0 + if kp == 0: + raise ValueError("k is zero") R = SECP256K1.affine(SECP256K1.mul([(SECP256K1_G, kp)])) k = kp if SECP256K1.has_even_y(R) != flip_r else SECP256K1_ORDER - kp e = ( diff --git a/src/embit/util/py_ripemd160.py b/src/embit/util/py_ripemd160.py index d42c4a3c..d995b269 100644 --- a/src/embit/util/py_ripemd160.py +++ b/src/embit/util/py_ripemd160.py @@ -359,7 +359,7 @@ def fi(x, y, z, i): elif i == 4: return x ^ (y | ~z) else: - assert False + raise ValueError("Invalid function index") def rol(x, i): diff --git a/src/embit/util/py_secp256k1.py b/src/embit/util/py_secp256k1.py index 85140863..0f1f8e1d 100644 --- a/src/embit/util/py_secp256k1.py +++ b/src/embit/util/py_secp256k1.py @@ -283,9 +283,12 @@ def xonly_pubkey_from_pubkey(pubkey, context=None): def schnorrsig_verify(sig, msg, pubkey, context=None): - assert len(sig) == 64 - assert len(msg) == 32 - assert len(pubkey) == 64 + if len(sig) != 64: + raise ValueError("Signature should be 64 bytes long") + if len(msg) != 32: + raise ValueError("Message should be 32 bytes long") + if len(pubkey) != 64: + raise ValueError("Public key should be 64 bytes long") sec = ec_pubkey_serialize(pubkey) return _key.verify_schnorr(sec[1:33], sig, msg) @@ -298,10 +301,12 @@ def keypair_create(secret, context=None): def schnorrsig_sign(msg, keypair, nonce_function=None, extra_data=None, context=None): - assert len(msg) == 32 + if len(msg) != 32: + raise ValueError("Message should be 32 bytes long") if len(keypair) == 32: keypair = keypair_create(keypair, context=context) - assert len(keypair) == 96 + if len(keypair) != 96: + raise ValueError("Keypair should be 96 bytes long") return _key.sign_schnorr(keypair[:32], msg, extra_data) diff --git a/tests/tests/test_bip39.py b/tests/tests/test_bip39.py index 685cb4e0..f3b580d2 100644 --- a/tests/tests/test_bip39.py +++ b/tests/tests/test_bip39.py @@ -173,8 +173,24 @@ def test_bip39(self): self.assertEqual(act_xkey.to_base58(), xprv) def test_invalid_length(self): - words = "panel trumpet seek bridge income piano history car flower aim loan accident embark canoe" - self.assertFalse(mnemonic_is_valid(words)) + invalid_length = [ + # not divisible by 3, too short, too long + "panel trumpet seek bridge income piano history car flower aim loan accident embark canoe", + "zoo " * 8 + "zebra", + "zoo " * 26 + "valley", + ] + for words in invalid_length: + self.assertFalse(mnemonic_is_valid(words)) + self.assertRaises(ValueError, mnemonic_to_bytes, words) + + invalid_length = [ + # not divisible by 4, too short, too long + b"\x00" * 19, + b"\x00" * 12, + b"\x00" * 36, + ] + for entropy in invalid_length: + self.assertRaises(ValueError, mnemonic_from_bytes, entropy) def test_invalid_word(self): words = "fljsafk minute glow ride mask ceiling old limb rookie discover cotton biology" diff --git a/tests/tests/test_bip85.py b/tests/tests/test_bip85.py index e5ec9c44..7b6280b9 100644 --- a/tests/tests/test_bip85.py +++ b/tests/tests/test_bip85.py @@ -48,12 +48,44 @@ class Bip85Test(TestCase): + + def test_derive_entropy(self): + for app_index, path, expected in [ + (39, [0, 12, 0], unhexlify("6250b68daf746d12a24d58b4787a714bf1b58d69e4c2a466276fb16fe93dc52b6fac6b756894072241447cad56f6405ee326dbb473d2f5e943543590082927c0")), + (2, [0], unhexlify("7040bb53104f27367f317558e78a994ada7296c6fde36a364e5baf206e502bb1f988080b7dd814e7ae7d6d83edbb6689886a560e165f4a740877cdf3beecacf8")), + (32, [0], unhexlify("52405cd0dd21c5be78314a7c1a3c65ffd8d896536cc7dee3157db5824f0c92e2ead0b33988a616cf6a497f1c169d9e92562604e38305ccd3fc96f2252c177682")), + ]: + result = bip85.derive_entropy(ROOT, app_index, path) + self.assertEqual(result, expected) + + def test_derive_entropy_fail_path_ge_hardened_index(self): + with self.assertRaises(ValueError) as exc: + bip85.derive_entropy(ROOT, 39, [bip32.HARDENED_INDEX + 1]) + self.assertEqual(str(exc.exception), "Path elements must be less than 2^31") + def test_bip39(self): for num_words, index, lang, expected in VECTORS_BIP39: self.assertEqual( bip85.derive_mnemonic(ROOT, num_words, index, language=lang), expected ) + def test_bip39_fail_num_words(self): + cases = [ + (11, 0, bip85.LANGUAGES.ENGLISH), + (13, 0, bip85.LANGUAGES.ENGLISH), + (15, 0, bip85.LANGUAGES.ENGLISH), + (17, 0, bip85.LANGUAGES.ENGLISH), + (19, 0, bip85.LANGUAGES.ENGLISH), + (21, 0, bip85.LANGUAGES.ENGLISH), + (23, 0, bip85.LANGUAGES.ENGLISH), + (25, 0, bip85.LANGUAGES.ENGLISH), + ] + + for num_words, index, lang in cases: + with self.assertRaises(ValueError) as exc: + bip85.derive_mnemonic(ROOT, num_words, index, language=lang) + self.assertEqual(str(exc.exception), "Number of words must be 12, 18 or 24") + def test_wif(self): for idx, expected in VECTORS_WIF: self.assertEqual(bip85.derive_wif(ROOT, idx).wif(), expected) @@ -67,3 +99,15 @@ def test_hex(self): self.assertEqual( bip85.derive_hex(ROOT, num_bytes, idx), unhexlify(expected) ) + + def test_hex_fail_num_bytes_ge_64(self): + for num_bytes in [65, 100, 1000, 10000]: + with self.assertRaises(ValueError) as exc: + bip85.derive_hex(ROOT, num_bytes, 1) + self.assertEqual(str(exc.exception), "Number of bytes must not exceed 64") + + def test_hex_fail_num_bytes_le_16(self): + for num_bytes in [15, 14, 10, 0]: + with self.assertRaises(ValueError) as exc: + bip85.derive_hex(ROOT, num_bytes, 2) + self.assertEqual(str(exc.exception), "Number of bytes must be at least 16") diff --git a/tests/tests/test_descriptor.py b/tests/tests/test_descriptor.py index b3f70827..0da2af1a 100644 --- a/tests/tests/test_descriptor.py +++ b/tests/tests/test_descriptor.py @@ -1,12 +1,13 @@ from unittest import TestCase -from binascii import hexlify +from binascii import hexlify, unhexlify from embit.descriptor import Descriptor, Key from embit.descriptor.arguments import KeyHash, Number from embit.descriptor.miniscript import OPERATORS, WRAPPERS from embit.descriptor.errors import MiniscriptError from embit.descriptor.checksum import add_checksum, DescriptorError +from embit.networks import NETWORKS from embit import ec - +from embit.psbt import PSBT class DescriptorTest(TestCase): def test_desc_checksum(self): @@ -34,6 +35,7 @@ def test_descriptors(self): "c:pk_k(0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352)" "))", "21020e0338c96a8870479f2396c373cc7696ba124e8635d41b0ea581112b67817261ac7364210250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352ac68", + 1, ), # # pkh - 8e5d7457d33a978d1c3c1e440f92a195e00cc7d8 # ("wsh(v:pk_h(03e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130))", None), @@ -41,36 +43,44 @@ def test_descriptors(self): "sh(wsh(and_v(or_c(pk(%s),or_c(pk(%s),v:older(1000))),pk(%s))))" % tuple(keys[-3:]), "2103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ac642103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cecac6402e803b26968682103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ac", + 2, ), ( "sh(or_b(pk(%s),s:pk(%s)))" % tuple(keys[:2]), "2103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f59ac7c2103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ac9b", + 2, ), ( "wsh(or_d(pk(%s),pkh(%s)))" % tuple(keys[-2:]), "2103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cecac736476a9148e5d7457d33a978d1c3c1e440f92a195e00cc7d888ac68", + 2, ), ( "wsh(and_v(v:pk(%s),or_d(pk(%s),older(12960))))" % tuple(keys[:2]), "2103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f59ad2103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ac736402a032b268", + 2, ), ( "wsh(andor(pk(%s),older(1008),pk(%s)))" % tuple(keys[:2]), "2103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f59ac642103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ac6702f003b268", + 2, ), ( "wsh(t:or_c(pk(%s),and_v(v:pk(%s),or_c(pk(%s),v:hash160(e7d285b4817f83f724cd29394da75dfc84fe639e)))))" % tuple(keys[:3]), "2103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f59ac642103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b14130ad2103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cecac6482012088a914e7d285b4817f83f724cd29394da75dfc84fe639e88686851", + 2, ), ( "wsh(andor(pk(%s),or_i(and_v(v:pkh(%s),hash160(e7d285b4817f83f724cd29394da75dfc84fe639e)),older(1008)),pk(%s)))" % tuple(keys[:3]), "2103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f59ac642103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cecac676376a9148e5d7457d33a978d1c3c1e440f92a195e00cc7d888ad82012088a914e7d285b4817f83f724cd29394da75dfc84fe639e876702f003b26868", + 2, ), ( "wsh(multi(2,%s,%s,%s))" % tuple(keys[:3]), "522103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f592103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b141302103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cec53ae", + 2, ), # TODO: invalid miniscript for segwit, but valid for taproot # ("wsh(thresh(3,pk(%s),s:pk(%s),s:pk(%s),sdv:older(12960)))" % tuple(keys[:3]), @@ -88,6 +98,7 @@ def test_descriptors(self): "038c8f919f70062c084376223fd8b4f0c08958e70499df496411dde83a1bb64b0d," "02d0ea7084e344b56625277b074d15a15301b9d96b0b2dd9fc905e01fc3de408e1))", "5a210373b665b6fe153c5872de1344339ee60588491257d2c34567aa026af237143a6c2102916ee61974fc4892afb2d3cad4c13472138b5521411de24a78910afb97b95f22210244efc096ea3b7df99071b1cfa1630144e20d8ccd1540e726034a051aa1802d3b2102d9c51dc3f4088d5ce0b83f188fb14901b98c1c9e8cf771c49b7b441e56272b8a2103094990a34af21ef3ed766c8e0cb1e44f5e0d80412bbe00a2ade82a024ca91d232102722a386ad0f6d7f1261808a3e70fab143303bd2264283486411c3183ea3ed1c321036070b1f2995d8ffda8478ef55affd39795689a3982d54b12180397b1ad1f5f7521026515fa7603c10c44f6d316ae7592b5899d46d87ac1e574ec53de8b59f95efad621038c8f919f70062c084376223fd8b4f0c08958e70499df496411dde83a1bb64b0d2102d0ea7084e344b56625277b074d15a15301b9d96b0b2dd9fc905e01fc3de408e15aae", + 1, ), ( "wsh(andor(" @@ -113,18 +124,38 @@ def test_descriptors(self): "a:pkh(379ed952eb4740386acc59c2d28d9aa62e63968d)," "a:pkh(c30d2795e70b1ee6f8af0b33d9460d60cfcf10b3))))", "5421036070b1f2995d8ffda8478ef55affd39795689a3982d54b12180397b1ad1f5f7521026515fa7603c10c44f6d316ae7592b5899d46d87ac1e574ec53de8b59f95efad621038c8f919f70062c084376223fd8b4f0c08958e70499df496411dde83a1bb64b0d2102d0ea7084e344b56625277b074d15a15301b9d96b0b2dd9fc905e01fc3de408e154ae6476a9141ad3ca2d247b8e8888e41f89ac8bef217d83f33f88ac6b76a914f94f2eadc9c1bc3a8b8c2c6364af2c070fd4120688ac6c936b76a9143c306c2c97e4ba62ac0d7fb3965aba66b28e895988ac6c936b76a914ba7b9e846eb6b16420976c6bead54d9bb2b08d3588ac6c936b76a914379ed952eb4740386acc59c2d28d9aa62e63968d88ac6c936b76a914c30d2795e70b1ee6f8af0b33d9460d60cfcf10b388ac6c93558767562103856d447f1b890cc6e0e0114cd5bac58662c37ce7f458c458b72bd396597edfc72103e080e99896384aa8a07da837b2042a4c0d824eeaa8d51e6c9cff20682be75d4f2102c6d258e728005d4d00e55ac4b87786df507921b3ba3efec244a47f4a2e61b4b02102edfc1d6088f9b6470ed4550d8bf2326ebebc0464a7f78581fa7283fc54edecf02102f3630d1f51b2ebaaf1c7ebae9c24318279d4cff5ad16cb290b6d26edf96dca9c210353ecc8e7b1cc90d405cd6fc9d9f24d44b6b5649abc2773f28a6ca4fa7a4cd62956af029000b268", + 1, ), ( "wsh(sortedmulti(2,%s,%s,%s))" % tuple(keys[:3]), "522103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f592103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cec2103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b1413053ae", + 2, + ), + ( + "wsh(sortedmulti(2,%s,%s,%s))" + % tuple(key.replace("<0;1>", "0") for key in keys[:3]), + "522103801b3a4e3ca0d61d469445621561c47f6c1424d0fd353a44c2c3ebb84ae78f592103b8fa5d5959fa4027ccbf0736a86ccde4242e3051ea363437b4ff0d52598d7cec2103e7d285b4817f83f724cd29394da75dfc84fe639ed147a944e7e6064703b1413053ae", + 1, + ), + ( + "wpkh(%s)" % keys[0], + "0014f8f93df2160de8fd3ca716e2f905c74da3f9839f", + 2, + ), + ( + "sh(wpkh(%s))" % keys[0], + "0014f8f93df2160de8fd3ca716e2f905c74da3f9839f", + 2, + ), + ( + "pkh(%s)" % keys[0], + "76a914f8f93df2160de8fd3ca716e2f905c74da3f9839f88ac", + 2, ), - ("wpkh(%s)" % keys[0], "0014f8f93df2160de8fd3ca716e2f905c74da3f9839f"), - ("sh(wpkh(%s))" % keys[0], "0014f8f93df2160de8fd3ca716e2f905c74da3f9839f"), - ("pkh(%s)" % keys[0], "76a914f8f93df2160de8fd3ca716e2f905c74da3f9839f88ac"), ] - error_cases = [1,2,3,4,5,6,7,8,11] - for i, (d, a) in enumerate(dd): + error_cases = [1, 2, 3, 4, 5, 6, 7, 8, 11] + for i, (d, a, n_branches) in enumerate(dd): if i in error_cases: self.assertRaises(DescriptorError, Descriptor.from_string, d) else: @@ -136,6 +167,7 @@ def test_descriptors(self): schex = hexlify(scc.data).decode() self.assertEqual(schex, a) self.assertEqual(str(sc), d) + assert sc.num_branches == n_branches def test_descriptor_from_string_validation(self): """These tests don't verify taproot scripts""" @@ -145,74 +177,53 @@ def test_descriptor_from_string_validation(self): keys = [ # # LIANA_MINISCRIPT_DESCRIPTOR "wsh(or_d(pk([55f8fc5d/48'/0'/0'/2']xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1>/*),and_v(v:pkh([3e15470d/48'/0'/0'/2']xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<0;1>/*),older(6))))#x09nw3rv", - # # LIANA_TAPROOT_MINISCRIPT_DESCRIPTOR "tr([55f8fc5d/48'/0'/0'/2']xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1>/*,and_v(v:pk([3e15470d/48'/0'/0'/2']xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<4;2>/*),older(6)))#qjluv5ue", - # # LIANA_TAP_EXPANDING_MINISCRIPT_DESCRIPTOR "tr(xpub661MyMwAqRbcFHMDceyRcHhEfeDBXneBmbTnqujM6EumzeNcd8wrs3SHGzkETt7dDwqSCmDJx2rz6uKEddXRcYUWuAu6rkaj4L2QuVxqNUS/<0;1>/*,{and_v(v:multi_a(2,[55f8fc5d/48'/0'/0'/2']xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<2;3>/*,[3e15470d/48'/0'/0'/2']xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<2;3>/*,[d3a80c8b/48'/0'/0'/2']xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/<0;1>/*),older(65535)),multi_a(2,[55f8fc5d/48'/0'/0'/2']xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1>/*,[3e15470d/48'/0'/0'/2']xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<0;1>/*)})#uyj29ygt", - # # UNSORTED_MULTISIG_DESCRIPTOR "wsh(multi(2,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<0;1>/*,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1>/*,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/<0;1>/*))", - # # UNRELATED_TAP_MINISCRIPT_DESCRIPTOR "tr(tpubD6NzVbkrYhZ4Y18xhod7E8V6Sy3YF36bge8HJb4ww1QgTrdkNvCEzcvUmFGQkTJA32gqr3j94iE8vsUzYpv8Pn29JezD9YiYnxgUREhN3QR/<0;1>/*,{and_v(v:multi_a(2,[1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<2;3>/*,[e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<2;3>/*,[b32caab5/48'/1'/0'/2']tpubDEwY4xag4eQabW74PwS8BZb3aYy9mBzBffzBKqS74NjxzaDHodGGqfFLumwQGM5JYExNjs1mG3u8MaeEr94HNmxTaBPHERkoJXEcZ12aPdF/<0;1>/*),older(144)),multi_a(2,[1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<0;1>/*,[e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<0;1>/*)})#u5clzmqy", - # # UNRELATED_MINISCRIPT_DESCRIPTOR "wsh(or_d(multi(2,[1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<0;1>/*,[e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<0;1>/*),and_v(v:thresh(2,pkh([1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<2;3>/*),a:pkh([e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<2;3>/*),a:pkh([b32caab5/48'/1'/0'/2']tpubDEwY4xag4eQabW74PwS8BZb3aYy9mBzBffzBKqS74NjxzaDHodGGqfFLumwQGM5JYExNjs1mG3u8MaeEr94HNmxTaBPHERkoJXEcZ12aPdF/<0;1>/*)),older(144))))#tfk3syfj", - # # UNAMBIGUOUS_MULTISIG_DESCRIPTOR "wsh(sortedmulti(2,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1>/*,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<0;1>/*,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/<0;1>/*))", - # # UNAMBIGUOUS_SINGLESIG_DESCRIPTOR "wpkh([55f8fc5d/84h/0h/0h]xpub6DPMTPxGMqdtzMwpqT1dDQaVdyaEppEm2qYSaJ7ANsuES7HkNzrXJst1Ed8D7NAnijUdgSDUFgph1oj5LKKAD5gyxWNhNP2AuDqaKYqzphA/<0;1>/*)", - # # MULTIPLE BRANCHES UNAMBIGUOUS_SINGLESIG_DESCRIPTOR "wpkh([55f8fc5d/84h/0h/0h]xpub6DPMTPxGMqdtzMwpqT1dDQaVdyaEppEm2qYSaJ7ANsuES7HkNzrXJst1Ed8D7NAnijUdgSDUFgph1oj5LKKAD5gyxWNhNP2AuDqaKYqzphA/<0;1;4;2;0;5>/*)", - # # UR_BYTES_MULTISIG_DESCRIPTOR "wsh(sortedmulti(2,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/0/*,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/0/*,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/0/*))", - # # MULTIPLE BRANCHES UR_BYTES_MULTISIG_DESCRIPTOR "wsh(sortedmulti(2,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/0/2/4/1/0/*,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/0/*,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/0/1/*))", - # # UR_OUTPUT_MULTISIG_DESCRIPTOR "wsh(multi(1,xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1/0/*,xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH/0/0/*))", - # # MULTIPLE BRANCHES UR_OUTPUT_MULTISIG_DESCRIPTOR "wsh(multi(1,xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1/0/2/1/0/2/1/1/*,xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH/0/0/1/1/*))", - # # BLUEWALLET_MULTISIG_DESCRIPTOR "wsh(sortedmulti(2,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv))", - # # SPECTER_SINGLESIG_DESCRIPTOR "wpkh([55f8fc5d/84h/0h/0h]xpub6DPMTPxGMqdtzMwpqT1dDQaVdyaEppEm2qYSaJ7ANsuES7HkNzrXJst1Ed8D7NAnijUdgSDUFgph1oj5LKKAD5gyxWNhNP2AuDqaKYqzphA/0/*)", - # # SPECTER_MULTISIG_DESCRIPTOR "wsh(sortedmulti(2,[55f8fc5d/48h/0h/0h/2h]xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/0/*,[3e15470d/48h/0h/0h/2h]xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/0/*,[d3a80c8b/48h/0h/0h/2h]xpub6FKYY6y3oVi7ihSCszFKRSeZj5SzrfSsUFXhKqjMV4iigrLhxwMX3mrjioNyLTZ5iD3u4wU9S3tyzpJGxhd5geaXoQ68jGz2M6dfh2zJrUv/0/*))", - # # liana miniscript primary tapkey anytime, else 1of2 after 3 confirmations recovery taproot "tr([d63dc4a7/48'/1'/0'/2']tpubDEXCvh2aPYzMz2xfgsh9ZM6dQZxioYfCafUgw16keqschYbED4VeS46Qhr7EoonDHNr9dSsKPEGeRP5WRzDGdY3aazneR7wKmtDVNTf6qic/<0;1>/*,and_v(v:multi_a(1,[c98cbe58/48'/1'/0'/2']tpubDFXZ3rcRyvU6AvNrb4kRQFomJbtCTCyMX9jDJmfN5XfHLEAZq7a8h3CrYDZYtdexk6XWfT5DB8PYgySWA5GSdyWdzWwveQcbrzvVQw3u7bV/<0;1>/*,[9590b69a/48'/1'/0'/2']tpubDEgtrNHQ68KvQPABjV4Ah39MpUH6aniH8gbHKygJSwNwbsQpnzPJMcssdqjwPtNshjAj8nP35iZisEFchFdZtPG4rXi7FW35dsCtQSj93Qv/<0;1>/*),older(3)))#9550ke77", - # # liana miniscript wsh single primary key anytime, else a secondary key after 6 confirmations "wsh(or_d(pk([d63dc4a7/48'/1'/0'/2']tpubDEXCvh2aPYzMz2xfgsh9ZM6dQZxioYfCafUgw16keqschYbED4VeS46Qhr7EoonDHNr9dSsKPEGeRP5WRzDGdY3aazneR7wKmtDVNTf6qic/<0;1>/*),and_v(v:pkh([c98cbe58/48'/1'/0'/2']tpubDFXZ3rcRyvU6AvNrb4kRQFomJbtCTCyMX9jDJmfN5XfHLEAZq7a8h3CrYDZYtdexk6XWfT5DB8PYgySWA5GSdyWdzWwveQcbrzvVQw3u7bV/<0;1>/*),older(6))))#szdmyf2d", - # # liana expanding multisig taproot w/ NUMS tapkey and 2 taproot paths, primary 2of2 anytime else 2of3 after 36 confirmations. - "tr(tpubD6NzVbkrYhZ4X6BRkDMxFyZxfUCQdjpK27dNgqwDqsQ2PUbMmjjPPFxfcTJiGEjeNz2zLbZ1PRmgCAzXn4pE6tEuQPScXyUbuAgdcec6pMN/<0;1>/*,{and_v(v:multi_a(2,[07fd816d/48'/1'/0'/2']tpubDDvFWduSiwhW7hUbL1oMyUfcNgeSyZgHbooe1WjHyRaXYH3uUjm1xdxWXAGbQFn8QGScDg4b4a6WMGNiEAq2uQdmPDhDKPE5Dr8DX24mwd5/<2;3>/*,[da855a1f/48'/1'/0'/2']tpubDEHRt73d4guqR5BLGQud4XMW8vDCGHUj54qDTFtsdFstF6PAYx1oAy3jfKg1PffqLUWuSsXmnetKeTJFKfKLXeJR97yUuqvvojnoBcUDHg5/<2;3>/*,[cdef7cd9/48'/1'/0'/2']tpubDEzdWp7365AFAExeUsHiwRmkZN5it3sSAZsd6GKUXvUiJBytXnZrRKMAt9UgCkWB2mP3K9WujLuTjrRLBn51Y18pMVyg2v18un4ivqWSAk2/<0;1>/*),older(36)),multi_a(2,[07fd816d/48'/1'/0'/2']tpubDDvFWduSiwhW7hUbL1oMyUfcNgeSyZgHbooe1WjHyRaXYH3uUjm1xdxWXAGbQFn8QGScDg4b4a6WMGNiEAq2uQdmPDhDKPE5Dr8DX24mwd5/<0;1>/*,[da855a1f/48'/1'/0'/2']tpubDEHRt73d4guqR5BLGQud4XMW8vDCGHUj54qDTFtsdFstF6PAYx1oAy3jfKg1PffqLUWuSsXmnetKeTJFKfKLXeJR97yUuqvvojnoBcUDHg5/<0;1>/*)})#tvh3u2lu" + "tr(tpubD6NzVbkrYhZ4X6BRkDMxFyZxfUCQdjpK27dNgqwDqsQ2PUbMmjjPPFxfcTJiGEjeNz2zLbZ1PRmgCAzXn4pE6tEuQPScXyUbuAgdcec6pMN/<0;1>/*,{and_v(v:multi_a(2,[07fd816d/48'/1'/0'/2']tpubDDvFWduSiwhW7hUbL1oMyUfcNgeSyZgHbooe1WjHyRaXYH3uUjm1xdxWXAGbQFn8QGScDg4b4a6WMGNiEAq2uQdmPDhDKPE5Dr8DX24mwd5/<2;3>/*,[da855a1f/48'/1'/0'/2']tpubDEHRt73d4guqR5BLGQud4XMW8vDCGHUj54qDTFtsdFstF6PAYx1oAy3jfKg1PffqLUWuSsXmnetKeTJFKfKLXeJR97yUuqvvojnoBcUDHg5/<2;3>/*,[cdef7cd9/48'/1'/0'/2']tpubDEzdWp7365AFAExeUsHiwRmkZN5it3sSAZsd6GKUXvUiJBytXnZrRKMAt9UgCkWB2mP3K9WujLuTjrRLBn51Y18pMVyg2v18un4ivqWSAk2/<0;1>/*),older(36)),multi_a(2,[07fd816d/48'/1'/0'/2']tpubDDvFWduSiwhW7hUbL1oMyUfcNgeSyZgHbooe1WjHyRaXYH3uUjm1xdxWXAGbQFn8QGScDg4b4a6WMGNiEAq2uQdmPDhDKPE5Dr8DX24mwd5/<0;1>/*,[da855a1f/48'/1'/0'/2']tpubDEHRt73d4guqR5BLGQud4XMW8vDCGHUj54qDTFtsdFstF6PAYx1oAy3jfKg1PffqLUWuSsXmnetKeTJFKfKLXeJR97yUuqvvojnoBcUDHg5/<0;1>/*)})#tvh3u2lu", ] for d in keys: Descriptor.from_string(d) - # invalid keys = [ # # LIANA_MINISCRIPT_DESCRIPTOR "wsh(or_d(pk([55f8fc5d/48'/0'/0'/2']xpub6EKmKYGYc1WY6t9d3d9SksR8keSaPZbFa6tqsGiH4xVxx8d2YyxSX7WG6yXEX3CmG54dPCxaapDw1XsjwCmfoqP7tbsAeqMVfKvqSAu4ndy/<0;1;2>/*),and_v(v:pkh([3e15470d/48'/0'/0'/2']xpub6F2P6Pz5KLPgCc6pTBd2xxCunaSYWc8CdkL28W5z15pJrN3aCYY7mCUAkCMtqrgT2wdhAGgRnJxAkCCUpGKoXKxQ57yffEGmPwtYA3DEXwu/<0;1>/*),older(6))))#x09nw3rv", - # # UNRELATED_MINISCRIPT_DESCRIPTOR "wsh(or_d(multi(2,[1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<0;1>/*,[e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<0;1>/*),and_v(v:thresh(2,pkh([1f280825/48'/1'/0'/2']tpubDEx7EkaqE8rG5NsCrijASmBjWiNv6teugndQCs4YN6JDS4hpJ3QtSC4ifPAcE7LQXtjRgB96trmEucoLbsiYYMuvLthymAhssZQpEPPb1pU/<2;3>/*),a:pkh([e1efb2e7/48'/1'/0'/2']tpubDFhm1JYGdsR6Uv7SvXVd6JfjVkYimPDizEwwXRR9EhESpMhx3qL9nVjpfbtPRLzicWhYkMF4mn4AuZ4zYDjNMvuWSqugFBEJnYsMJurmbLM/<2;3>/*),a:pkh([b32caab5/48'/1'/0'/2']tpubDEwY4xag4eQabW74PwS8BZb3aYy9mBzBffzBKqS74NjxzaDHodGGqfFLumwQGM5JYExNjs1mG3u8MaeEr94HNmxTaBPHERkoJXEcZ12aPdF/<0;1;2>/*)),older(144))))#tfk3syfj", - # # liana miniscript wsh single primary key anytime, else a secondary key after 6 confirmations "wsh(or_d(pk([d63dc4a7/48'/1'/0'/2']tpubDEXCvh2aPYzMz2xfgsh9ZM6dQZxioYfCafUgw16keqschYbED4VeS46Qhr7EoonDHNr9dSsKPEGeRP5WRzDGdY3aazneR7wKmtDVNTf6qic/<0;1>/*),and_v(v:pkh([c98cbe58/48'/1'/0'/2']tpubDFXZ3rcRyvU6AvNrb4kRQFomJbtCTCyMX9jDJmfN5XfHLEAZq7a8h3CrYDZYtdexk6XWfT5DB8PYgySWA5GSdyWdzWwveQcbrzvVQw3u7bV/*),older(6))))#szdmyf2d", ] @@ -290,10 +301,21 @@ def test_miniscript_compat(self): "wsh(andor(thresh(1,pk(xpub6BaZSKgpaVvibu2k78QsqeDWXp92xLHZxiu1WoqLB9hKhsBf3miBUDX7PJLgSPvkj66ThVHTqdnbXpeu8crXFmDUd4HeM4s4miQS2xsv3Qb/*)),and_v(v:multi(2,03b506a1dbe57b4bf48c95e0c7d417b87dd3b4349d290d2e7e9ba72c912652d80a,0295e7f5d12a2061f1fd2286cefec592dff656a19f55f4f01305d6aa56630880ce),older(6)),thresh(2,pkh(xpub6AHA9hZDN11k2ijHMeS5QqHx2KP9aMBRhTDqANMnwVtdyw2TDYRmF8PjpvwUFcL1Et8Hj59S3gTSMcUQ5gAqTz3Wd8EsMTmF3DChhqPQBnU/*),a:pkh(xpub6AaffFGfH6WXfm6pwWzmUMuECQnoLeB3agMKaLyEBZ5ZVfwtnS5VJKqXBt8o5ooCWVy2H87GsZshp7DeKE25eWLyd1Ccuh2ZubQUkgpiVux/*))))#76jsyzdg", "wsh(or_d(pk([40259ab7/48'/1'/0'/2']tpubDFcY6nTiMAWBd5d2bS8JZvjcaLjC6GE6XnPAJAPUkVj5wa5Pyb4gumx1ZWvnXQ8tmorCmpAyai69K9hD2mGQUeNkuXfjztsfqnE5FMk1CCh/<0;1>/*),and_v(v:pkh([842a626e/48'/1'/0'/2']tpubDENBboujRvpkS8SgZsrpqG2BCUBoaAc4c57jHFe1NwKAtfVjDZDUadQKYv4pkAEF2afPv6TtQ2BoYFJAPLbuKpL1usiySERZekGo4JmnWhh/<0;1>/*),older(65535))))#deguz53x", "wsh(or_d(pk([40259ab7/48h/1h/0h/2h]tpubDFcY6nTiMAWBd5d2bS8JZvjcaLjC6GE6XnPAJAPUkVj5wa5Pyb4gumx1ZWvnXQ8tmorCmpAyai69K9hD2mGQUeNkuXfjztsfqnE5FMk1CCh/<0;1>/*),and_v(v:pkh([842a626e/48H/1H/0H/2H]tpubDENBboujRvpkS8SgZsrpqG2BCUBoaAc4c57jHFe1NwKAtfVjDZDUadQKYv4pkAEF2afPv6TtQ2BoYFJAPLbuKpL1usiySERZekGo4JmnWhh/<0;1>/*),older(65535))))#deguz53x", + "wsh(and_v(v:0,and_v(v:pk([40259ab7/48h/1h/0h/2h]tpubDFcY6nTiMAWBd5d2bS8JZvjcaLjC6GE6XnPAJAPUkVj5wa5Pyb4gumx1ZWvnXQ8tmorCmpAyai69K9hD2mGQUeNkuXfjztsfqnE5FMk1CCh/<0;1>/*),pk([40259ab7/48h/1h/0h/2h]tpubDFcY6nTiMAWBd5d2bS8JZvjcaLjC6GE6XnPAJAPUkVj5wa5Pyb4gumx1ZWvnXQ8tmorCmpAyai69K9hD2mGQUeNkuXfjztsfqnE5FMk1CCh/<0;1>/*))))", + "wsh(and_v(v:0,and_v(v:0,0)))", ] for desc in generalistic_descs: - Descriptor.from_string(desc) + desc = Descriptor.from_string(desc) + desc.derive(0, 0).address(network=NETWORKS["main"]) + + def test_invalid_miniscript(self): + """Ensure an error is raised when parsing invalid miniscript""" + invalid_descs = [ + "wsh(ttvtvtvtvtvtvtv:after(230775))", + ] + for desc in invalid_descs: + self.assertRaises(MiniscriptError, Descriptor.from_string, desc) def test_len(self): """Checks that len(miniscript) returns correct length""" @@ -310,41 +332,161 @@ def test_len(self): w = wr(o) self.assertEqual(len(w), len(w.compile())) + def test_singlesig(self): + key = ec.PrivateKey(bytes([1] * 32)).to_public() + cases = [ + # descriptor: str, is_legacy, is_wrapped, is_segwit, is_taproot + ("pkh(%s)" % key, "p2pkh", True, False, False, False), + ("sh(wpkh(%s))" % key, "p2sh-p2wpkh", False, True, True, False), + ("wpkh(%s)" % key, "p2wpkh", False, False, True, False), + ("tr(%s)" % key, "p2tr", False, False, True, True), + ] + + n = 0 + for case in cases: + print("Testing descriptor %d: %s" % (n, case[0])) + d = Descriptor.from_string(case[0]) + self.assertEqual(d.scriptpubkey_type(), case[1]) + self.assertEqual(d.is_legacy, case[2]) + self.assertEqual(d.is_wrapped, case[3]) + self.assertEqual(d.is_segwit, case[4]) + n += 1 + def test_multisig(self): keys = tuple([ec.PrivateKey(bytes([i + 1] * 32)).to_public() for i in range(4)]) descriptors = [ - # descriptor: str, is_basic_multisig: bool, is_sorted: bool + # descriptor: str, scriptpubkey_type: str, is_basic_multisig: bool, is_sorted: bool ( "wsh(c:andor(multi(1,%s,%s),pk_k(%s),pk_k(%s)))" % keys, + "p2wsh", False, False, ), ( "wsh(multi(2,%s,%s,%s,%s))" % keys, + "p2wsh", True, False, ), ( "wsh(sortedmulti(2,%s,%s,%s,%s))" % keys, + "p2wsh", True, True, ), + # TODO: these cases need to be more scrutinized, as they are not + # not well implemented in Descriptor.is_basic_multisig + # ( + # "tr(%s,multi_a(2,%s,%s,%s))" % keys, + # "p2tr", + # False, + # False, + # ), + # ( + # "tr(%s,sortedmulti_a(2,%s,%s,%s))" % keys, + # "p2tr", + # True, + # True + # ), ( - "tr(%s,multi_a(2,%s,%s,%s))" % keys, - False, - False, + "sh(sortedmulti(3,%s,%s,%s,%s))" % keys, + "p2sh", + True, + True, ), ( - "tr(%s,sortedmulti_a(2,%s,%s,%s))" % keys, + "sh(wsh(sortedmulti(3,%s,%s,%s,%s)))" % keys, + "p2sh-p2wsh", + True, + True, + ), + ( + "wsh(c:andor(multi(1,%s,%s),pk_k(%s),pk_k(%s)))" % keys, + "p2wsh", False, False, ), ] - for dstr, is_basic, is_sorted in descriptors: - d = Descriptor.from_string(dstr) - self.assertEqual(d.is_basic_multisig, is_basic) - self.assertEqual(d.is_sorted, is_sorted) + n = 0 + for case in descriptors: + print("Testing descriptor %d: %s" % (n, case[0])) + d = Descriptor.from_string(case[0]) + self.assertEqual(d.scriptpubkey_type(), case[1]) + self.assertEqual(d.is_basic_multisig, case[2]) + self.assertEqual(d.is_sorted, case[3]) + n += 1 + + def test_descriptor_owns_psbt(self): + """Test that a PSBT can be created from a descriptor and that it owns the PSBT.""" + cases = [ + # 0 - P2SH 2-of-3, unsigned + ( + "sh(sortedmulti(2,[35b79440/45h/2]tpubDBVoeGak4eaXFSBmNX8E5WQUdDMSHPZ2BM67txff8DN4EYnfDGeKA2y7YniKjTtawKh8ufJskcn2imNmGnNQ6EWrFjU55v3mFgpGZcz9d9T/<0;1>/*,[643db86d/45h/0]tpubDAsYiosEu9vn4H8UXSbSe8iYVdzNV8wgPj2uUV6DbyXdyUcwvJVFDxVXyRNTjfVS8vu2mv6ipZYSvwvNnLiH9ZC2tE4rCRKoXFKHJ5xrU3b/<0;1>/*,[7df6d383/45h/1]tpubDAb622z93Nuv36Pcj77ZyAw7wrp8TE7BhvcaoU2pjTozif9sfkGNZPzMRzT3bq5BUc2C4GcLojG7wHQ7n8FjNTnLtnLp9RuSTQkqH9cfDsk/<0;1>/*))#cvqkqqn0", + "70736274ff01005e0200000001bfcfe1a5c690a378de13b1fd48699c12672ad02490f523a34b336303cecfa0b58602000000fdffffff018b07050000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e130104004f01043587cf02632ffff4000000009cd9fa4e2ab3f737ead066e121197c3bc4356328771eafb5662167a2866976f903b166248c9fca19aed3a5249ec8a2651b0db9cf7bcf4d4aa669a4c2477d674b7e0c643db86d2d000080000000004f01043587cf023c9382c200000001103f93f4b352213388005f4538c07e1a413e1750a96fead5ff63007e4447ac700273492603f16333c52a50297727e3ef6fecae01379123f6eb58f063652ef065260c7df6d3832d000080010000004f01043587cf02b83c899100000002d074a767eebb8a5f6c8da45c914eebaf1da3b5cea009220029b97598f8fda4030200e142bd9524f7aa1ff4741947495ae94881a23d5899780f6a2a295913412c750c35b794402d00008002000000000100fdf876020000000162909f6443e176d3daa4d542f1c70bd8de291693b70596bd7902adce7d72d4ae0000000000fdfffffffdd8021c9e6cfd08000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d9000000000000000001d6a1b616c742e7369676e65746661756365742e636f6d207c20203732365b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b1105000000000022512073d0115d5f98654b9b98c0675ffdac806ea9d1c418af11f891aa4bc952163e5b5b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251207bd51d15156b7badf1d73f100eac9488b162051674d8733ea6c25f73793546195b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512044d0251d9f5d61d6863774f20ebd4e463df4536c8f9f08b8ed8afe85df3180ec5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b1105000000000022512084e3a784fcbc673724695d1f818ad8544a348a23b99848404f950109736ac34b5b1105000000000022512009e7faa00cc5e2d91906529375b8e31e260b0252cb7d3a8bf84c3d3674b8d1255b1105000000000022512080586e9a1c2730250793ec203563f48f81c4460067939cb3b118a859dbe0ef9f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251206a36d1c4ab55f478c5b3c9c6e62763f1f8a203bd13dca2380c0ff302b98136995b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b11050000000000225120af2f495c7e1e132d2b9c8e1bded78017ea1be4764792ab224e40687db17a5f365b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b11050000000000225120be767277f6f3a80ef6272b05ecff90b6299796353be118e6c13d825b1e792e1a5b11050000000000225120a8a9b4698c1f9dea1541fcd6e49327e8075b37c718225a848781b1c3434551525b110500000000002251204878075b002ee24f9575ab88b194970aa6b910af9239d84c494ec1142701f5db5b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b11050000000000225120c3b035c8360c2cbb640517bfec86ac24d850876ed588560f1c62ad5671ef25ae5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251202be4596006614dbf55d839f1b68e11abf0734dc2924fa5fa273d6688d2ce36185b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b110500000000002251208f5435eddb02e61fdbd624d5c412af278d46c79fd9ecd984a9b36d7a23a166685b11050000000000225120bbe18df1129cec49d136658f753a495ee3581abfcb112b4fc77c3754a91381985b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b11050000000000225120bc61f8597c33643955cd7c3ed5bdb86b60770d38c3b60b5ab7f4c9d1497569b05b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b1105000000000022512088cdf11e99869fd100cc53cd5076a6970000df981012780d996eae8045a00e535b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b1105000000000022512071b9e402fcd3cf70fb37cc66718f9e8e8cbcfd71fd8455c20d8edb9b21c9ded75b11050000000000225120bc9cc13e6520eea4cb286bb5603a0ba4b40c526537a791fdf84fd9b5fc7c4d3d5b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b11050000000000225120cb29a912c49226fb24f41ed337cde7c020bcdc2903db24042412c07a2fcdd6fd5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120a9d8804b9b582c89ee3b6001d41563e456bdc853760a3a06357f8653b8cb37255b110500000000002251206704180025cd4a063c91c909a2b8323910eb3547f630cdb4a2320708dccf996c5b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b110500000000002251200364e0c0c15a64253259bb01aac6eb3f9787c069f1691fc8bf1139c1d40bb5655b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120b7a6af27680f2439d9873cd799069f492a0f415bc747192407acd3301e02e7035b11050000000000225120398ff2c560067f63882cd712dc009e5061e674c3c07a495f183de83ce5e2d5c25b11050000000000225120db5382c0b200ab03cf883144af197153c4f788516e0c5c2ac38e926566b8b40b5b1105000000000022512081226a42f34833f81bf317204701ef1e2841dc35f0e692aa4c98624858cc80da5b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b1105000000000022512082352fe199e659db99c9af9c248930f13ef38b41ce03f6f291fad45c89de1a4b5b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b110500000000002251203c498ba796d0f6e47f2eee2b37cf79f8fdb6fb177d46d9bdf99d6353eb83c0a65b110500000000002251206d21f22e6c8129b57534970c37f795eca3e63e175bf4b578c4b4ecd6a54a194a5b11050000000000225120c8ba11b7f9fb099ef74d2e51145ec3693c00348bb01e759e75746af6b0cbe37a5b11050000000000225120a5a491493e96f6f697216c3c37185bdee4f772b9d0db58e4990c02acf465b2575b1105000000000022512092949da2ae47a717ab3640af3eb7130b0a5dcc9200545c89ea34fbe1621be4cd5b1105000000000022512089df0fac6213b5535bf5f6b1e631b40100e49932c3ae86e4e05cfb162ac9c6685b1105000000000022512002455e94507c54ff700dceae2fab6e092a5ee9add0574fe3c55b04273d1bf1545b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120108e84ddeec801bcdb9b158cbfdf133e03940be6c849c4832d5740acec0ccd0c5b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b110500000000002251206dfe1ae52355dda9cf67514c1f9e4831b746a030787d00c3fb6cebc16b69ed275b1105000000000022512092e98362d7d8ab08a9c3be77f99860512df14895f468205ddb7b5099d6c984255b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b11050000000000225120bb2552a8946fc7ee45e41f026801a86886e2e4fd4f8ffdfdcae251b86eb50f0c5b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b11050000000000225120d47eb2606882299d529be95b26fd185e0639f9ccdf19d3df665ae8d69dff57225b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251201f98b33ee307efa0f327016ea818ce5dec77cb9537fe309bb290bd6d2df019485b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b110500000000002251200d461634964cc954e5deba8140c5c7624d6f0cf5df3f3b50027a66d5499ce9235b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b1105000000000022512077724217df9bfff79bd4f0a185548e565f20e8951e685833340550f7c7f1638a5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251203e6274c50fa33510cc0658395ff8b291e751bd5c7920c2be7de232cb7da088895b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b110500000000002251202eed883c03203f81b1c804cb1359cb144327763d96e35a96324ce8791319415b5b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120c0441b69c16f0d8d7c6727a94acf57a27c0682cae64899c0fb4242aef90bc2585b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b1105000000000022512022010e00b2e972cb9505cf4cd77a6f6e659dd33dc7bfaa4cf3f473a08321b2d75b110500000000002251207f129aca2744d80139d417a311a0c79adea078ac349fabffe4c3f16721ee78f65b110500000000001600141fa0458108af9313743233a3ef17c0a68a86febc5b110500000000002251204e9b1ec411c3753091606f7e12a34c6bc72c5d45421e9a3efd6a7a7a025b7bc85b110500000000002251204eb67e936e770ea97a7996711c68fcafca614ec5364fb82e8589011b8dac7cd25b1105000000000022512019caedafe8a96ca0fe52933e9eae87927325b4800a312e8e158ede0f825251975b11050000000000225120e3e6e6fc7d2b52abd428ad84ae1bea916c4bb4b2dc2d15112110595fc0b2d7c25b1105000000000022512041820d659084a05a0abad9d85185f47f36cca35272654aca4fc52bfd020914f45b11050000000000225120e184a3fc315dfa480a02c6761ddc78dce60cab2a83ced5dbeb5acf19b8f1b2e35b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b110500000000002251200d4553f32742b443424f2fe62e583891956b60f936265a010084219027cd25ad5b11050000000000225120c62bc884c6522346c6849887e13b06209edd9717d187321fc0ca2c66f584e0c65b1105000000000022512020811046d09d49d18678120d476712d663140be3bcbfa461b7e3386166092a3d5b11050000000000225120a706ca1cb757f5a5e2a4a4c2df467c65fdfe5a4ead2c628948d6e3b9da5030955b11050000000000160014c27811d15df88a936b5a442e4a74f90d763e853c5b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b11050000000000225120c0855b1dbcc09ba0a44916fa67747c1445a91c9064c707549d0a4fef2d179bc85b110500000000002251201c38bc7f9beb3de3f718aee8b9e8e3b053383fef3a80efd8f9b2040a843173765b110500000000002251207055cc20640e5465f8f2741925427b88750252008375a90c49a758e4ff80fd975b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b1105000000000022512081a37d08c40b6e76fa03a819e2555a54cc41a642ebd2fa202cc0acbc9fa7dad55b11050000000000225120144c98a8b9218d2008de6ce7c583728e680c5e5346033f8e014988e9b00cd3ac5b11050000000000225120cbff91779679ed062dfa47c2590a68550b113366a924958e20c24a6047b28ccc5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120b3ef151558931f401aced4de48a30e8adf12d936e8dc62832bb25774a7fb5a0f5b110500000000002251200bf8680106db4172647c4844d5a67d1e1c9165efdbcfaf941147e35fc0cfde875b11050000000000225120fac047a2ea305258a244ee1ddfc55761dde656fa2f04287d599698c97ef4391a5b11050000000000225120e132d39241182e144f0ccf42c4fd1eff06ed28e17eeeb6a7e535caf9c967ed445b110500000000002251202385c5409fe6f1012776293932ccd00f4efea932f195395f251e224141b7cc545b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b1105000000000022512060e377a06a269c23a963b3d2aee5ed9988af2ebd995017aba29276f2612df3525b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120ae403804d6d8c9845f9fc072bf17f2e1f572cb833fb3fcea77f6420d1326ec525b110500000000002251204e3aba727fa3b188211b76bcd8eeac7802cc1424c90aee5a9106b2a9cbf648015b110500000000002251207181d2624bf04a83af7163cba99659abe5238a73b9e4acd982e9923ba61e53815b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b11050000000000225120c6349675ddd7fa283d46ec7365f01b5b7578fcbaf4be4c860d65da7b396247a85b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120abd4662999cdcf67bda0dc1318dcbed9dddfde8b9a299f2a3105971125793f585b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b110500000000002251206c3c62470bde22cb1156a3d657d7ff8d36f7315d0e05b2c25337ce1d4ec530ef5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b1105000000000022512013198206962812063e4fa2b7f9b1c077da7706ac8a4c5a14de5089196f1a6cc85b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120861ff88e1563889a8f4b8f4bc074dd580bbede0f5d50461ac127d9874d5135075b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b11050000000000225120af3b5d739511e622440eeffb6f4a97f317a307853a2eec4f6d36ff33b0f71e725b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120d7c0b8aa1f0eadeacd56bc9efc404f7613873da15bc3cdccc051fb66121c4de95b1105000000000022512087c2688781d1d36704ad6f53f8009da9ba853fd78f4a556e3c08f49efbb297915b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b11050000000000225120ffaa5c0a960e0516615d95869b9b01602493f2ddd1e42d2b5ff2e06b141451065b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120042a99e765f6e7b809327e0f28450c1214e8ed038de508d2e3a2a2d1bedb56a65b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b110500000000001600147abe046b62b584f920399ab562e18437926b4b635b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120331becf1b6c374c1e15407c8aaf002f32cf15489f572273459b9cb556610631b5b11050000000000225120e6fa40c8bbf40ab4997a9b6e5f65c8834ae4a1b1957b569fe34241fc47453f0e5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b110500000000002251208ef14d0ece8b718be184dc943726ea288745ac2252bfee6a16427dbf065bb51e5b110500000000002251208bc3a7b3c61bbd6eecabc7a82ed30cb05147667ec7bad8df96efd2e0d42ecf1a5b110500000000002251206ad00df3e81584622bc5543a8c11ce75b8f8a9957cee175aeb3ec9adbd1441125b11050000000000225120ec45a06f459623721a8facec3e39002321ba19d8269b29ffaf8db4ea683a463a5b11050000000000225120bc98aa2d52a0ae1a373dea8a8e5f3a1cd45fe76acb3966e820c26bdb113a130f5b11050000000000225120b9f16520fef9d778bcae0344a542c5e097bc35cbbe5b46186769b30cb82aa6e05b11050000000000225120f5cd19028f3fca345009a37269e4c3f8fdab86c4592da3589be2905c5cfb0c8a5b110500000000002251204c473685a5d5e1f878e553190fa5cefdfd98fef558d356f2f6172e64ee9e3da85b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b11050000000000225120161bb61e96900c743409e2f4a4194b2704ebfedacb9db662db471f5a9b1d946c5b11050000000000225120c051bc80e2875e95d8ddf2ee9540152c80e22e228a698d46bf32f9904674e6305b11050000000000225120aa026aff300f20b928670017816fa8abae83f4bcef1c845a41fce351333e63845b11050000000000225120d41b11acab0167cd37661f65f3a8a04fed753540aa341b262b60129af10bf8855b110500000000002251204cb733cc1b3ace5182f7febec742048e2b4efca9db73afe7d5b340c0942c80dc5b11050000000000225120be88895d2fff45d6c6638c6445175a4703b1827c4cbcd64212e69dfb02e569195b1105000000000022512050d4241ebab2cc99e18207b502c6acf4413a5a83ae7914686353c082f14108575b110500000000002251207e0aa32e95b3a6ca0f3bd3afc886e1f30b244b9bd8e6bfa100c9451e8daa0bb65b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512070f307fb93d67e957c7bbf2f8705354e4db6d80292d527a2e1a6683153e9614f5b11050000000000225120dbce799b513c7abdce7b01a5c5c8a6e9249fc664e5d8bc1b8ea59393d9bde7ff5b1105000000000022512076e02e5d3a18c710c133efffe81534f08a18ae8dfb0522876d5e5fc5fd81b2925b11050000000000225120c059b2e381d2e309a2f9debe15dc4dba9bad37085795a594189dd815883cecfa5b1105000000000022512042cb20607559f4c28fd9265a2d77dac78e41622fc5921bed67736406b68207685b11050000000000225120355fba63ae94272d077afa07f4d2d008f83372e617f99a1b64792d126530a52f5b11050000000000225120faf3e897074cb551aae8aa2f9e82419ffb51b6b875208cac4dd47288dd827fab5b1105000000000022512088037a8c409cc93cf98de4f51f702317edca9e0e82a54d0397683244cc352aa25b1105000000000022512077f0390a28063e3a05d75fc81753afc3bdf176f806ebab8f97ea681c9600449a5b110500000000002251200ea8dc8d04920f7bfd72d9453826412563178ad40bdec4ea6ad003d958e70b575b110500000000002251209839f6d805e7a7e6f6cdfeb30a7afff903d69fcb320edf8134edb576a40022e55b110500000000002251206d73b497785da1456e28119e29a59f4ec96d9e07c3ffa5a96a3084c903c3701b5b1105000000000022512055db9d4f3f2c07ff4a782e0701158f92bfd5983f5598d99708bb9b20ca0464695b110500000000002251205a1fe4c3e513a30f9ff453d54e0c3fd25f5919389db2d320fc1ae310a5d79e575b110500000000002251204bbbf3d1e5e107110b7230264f40944e5ce5693df004ecfc8ce6c12c46717a825b1105000000000022512028e8ad07d0e674d1aae80b91e08c1f7ebf04673cf4bc52fb9867940282ce3b015b1105000000000022512096cb3831a4a7da3938db47ee1864c2b2e5ae0cdc2e03769faa6c625fd64147cf5b110500000000002251202a455806d7920d10bc65eeb782b4e4e617af74263392ea134c1400ef4787f1335b11050000000000225120d5ca7f9193a452dc8d6ec9655ae40607d37eb77ee78db5586843dadd07099bd65b110500000000002251209507f1f2bf6095765549bcebd3355b43e6eee5d9b1bb645a86f40a11f68f19a95b11050000000000225120cf84693906a80f9555ba614e4efca28bcd543fdfe0196499da5cc486e30fa16b5b110500000000002251207ff3e6a6875de01e8e46641de27a5ece2b80bc17626de7416e5c8b5d3b66722e5b11050000000000225120a0ec5da1e38bc588d2acdf3d64a7dc33bba6081ed0186aa2c8ebd0bb26df30095b11050000000000225120c67187f2cb41a480872cc478c914f6897e0ecb4071d92d68a3dc6067b91f2f2b5b110500000000002251203ee48c8fedf7565b1d92342b269ba4ed936094b28a65233a8f48b758266133885b110500000000002251205e0f31b607459156e4cda1f8141c12ccd999c41481b69f51fa06e871e6fd79765b11050000000000225120b0f462d5145d77f3ed5501636558ae3e17bfe69964d23fe089bc3380a9bb71ca5b110500000000002251209965033fb63ab59d6e03849ee424659aab08552fcffc57a61a51a26cd4d137155b110500000000001600142a2153cf0e98f8223725495934b36feef81441475b11050000000000225120e03d5a70e5edf43bcf6382f9c6914f60ca9124c9a179e090a85f0c6e46b870155b110500000000002251201da64a82357b4d1e58a3c2c51006752b404fc5bf8fd251b65bdf11941630c4a25b110500000000002251208b934a08970340ece177ee5bab0473169d681daa2ee8149875796a3b4e7d503e5b1105000000000016001436dbeeb8d327ea9e2b63ccdb0a79ac0ee0e5c7565b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000160014f13dbd99fafa689445f841b446e2650698788c2d5b110500000000001600141fb459dfd93e8bfb0a4ffd6318a0efbc758963865b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b11050000000000160014065fe1135002c3d3096ad67f4cd3c735491ef85f5b11050000000000225120c15484b744147fa35876adea9b13a3ccfeb92be6942640eb105625faa4a256d05b11050000000000225120352c161b0f3662c2e9949e2f3fd4b9abed32fbbcd524dd977f395834c9efaf1c5b11050000000000225120070259460b7c10c185db481158723cd227b64b8651a8b9bb680ad16b22c55b555b110500000000002251205ecffd87dc24074cd25b9b2ff7ef02cc34089bc925dafaae13fb6f3b70382f305b11050000000000225120c0ef3f53d3280041b6e4f5e57e935e87496ca56784e60e6e909142bd575e94125b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b1105000000000022512007a7d69038c5355923366e212c44f1e6c51353082f3dd7510abc6c967a1827645b1105000000000022512022a0f25a00a9874da6ab630acd39e6a20c60c0c9d9c2a875fedf5774e2996a0e5b11050000000000225120335d1772900e43d2a855d145c2bd70fefca56ab97ffdd862ef884aa45bab74b55b11050000000000160014a5f2a338f27de2f572d29f718744ad2e662270e45b11050000000000225120a2268e08a1ac771f3f4e36603a80a7d3850f142b0f224061d84e4b8421687b855b110500000000002251209efa313128c9762b4277808845aa06d2e513f0b380d70b02307dfcf8c40e71de5b11050000000000225120e19bc0e493e7134bd0d184039c5e62052c4c9f8ee994c58b117d4d6fa0ccdd6b5b1105000000000022512008369ff0d635675db33598ec2c723eb78453821a64ef58a8c553b4a86027d9845b1105000000000022512064fe8d7f56a76b06a3faaa2f32c5a8753437e2fde8512b872b2bc9294bd3dfd65b11050000000000225120491af0a7c855d7c5ae092f33d0934f8a7cff001e63c8aff41a8af70cd6c6b97e5b11050000000000225120aaf8651158bb5cb245bdc1c91a30db2ef2b06a8052989b32f490699d011961b25b11050000000000225120f49aa6e7630666008b0d0d8e56157fbdc38f119e5961b56e218ce84dd17536a05b1105000000000022512092f9d1293895e6b145f505520081ff9a49bf2162fa633fba6cb63080f66cc3845b11050000000000160014e8009863a29d28c20a159a574b4f6b62da85bebc5b11050000000000225120d80e9370392fa78089bd8c140fe36d1f308879cb89b876c4902c2ffeb3b235815b11050000000000160014e1b581310f8f6ffc6bdc9f93418fdaba4e606d9c5b1105000000000022512037056571e30f81c396bab99a1e045961d7e8897fe9e8eb8327c9d601bbb4ac225b1105000000000022512086683423aa376757e456ebb9ac98790b13189d7a15c4623dab68bc121dd835185b1105000000000022512090e51330724ee394620d2b2b573a86380e048fdd5bff6c5bfb9d7939bcddf7955b11050000000000225120a897512d6e61c829d49ba24e8f81b471ed04e0c9ea774c2db5b1881eb75f85645b1105000000000022512000fb39886e0b5c2649a5cb358b30bb3e2484b0de8f411361b1cd913f54eacdbe5b1105000000000022512035928398fab71972fbacf7984702cdd6fedee34ba6d9406b6e3cd6e91e4a63235b11050000000000225120ff9cc5cbf21a640b8fc2a981576378a7809e0b1b2f58a2954c65eba8ef3a9dcb5b11050000000000225120ad379c7b9f49969ae0814040fe3f50e946163757cba59d2da12afd55708a5e925b11050000000000225120204773cac9e2b5b90271a4a785cff463b0f7b773229a6b0d15632c21d3c85b015b11050000000000225120215288da18990979084a526f9802702e5c26ede837a12c6babfade37fce8b0e65b11050000000000160014bfd23e02e777a9e7693ae58c175736adf5630ffc5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251202f403b0dfe821bf8078db061a93859d03320ceeab6673c00e998d38ef858ab4c5b11050000000000225120fdfcac21f1be8e2367e34018ed961acb982400619fb681cd10f59d49c1843f3e5b11050000000000225120a5e573551dd9b53c5dc2eb8b954201ed3c94bf3624b5d162f0f9d03b3b63c5a05b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b11050000000000225120d66dab8a8db144b46ba9eb0c00de5bc924ee29a8307119eaf2b43658c104223c5b1105000000000022512000adfc7fd23ffe7416767d456aaf6aad8c5dfbe6f02ddfbeb7b37997d2d9fbc95b110500000000002251200671e2e9f9c42974ca947fad7d4aa6d8192ae595a6182b8c87edfc82b7b33b735b1105000000000022512087c77180e161c4da18e02db7d6113c4a368a228f01753c1ff0b4b6d39d6da7585b11050000000000225120f2349b59c56fdad249c3f18db82be21f5959fe0f6a0f2e604608cb0946ce05765b11050000000000225120c8db1bfddb6dc8fac04c3d6b4b18ba13246c8469e1decdd3b10484f4922a00da5b11050000000000225120dee24e60d81a1fc3b0c1c23a6d57041c2a8c1e545b76b4ce4389ed61273c3deb5b110500000000002251203bc3c84a7d4adcc441212591631a32f72f98a4e9fc058d8da08dfa5546c9b0965b1105000000000022512079a4abbe291962c1def383856fe905b397cbb89810a4a139ab6b58596ee499d25b11050000000000225120f9a199a41cf9db84f9c4250786d1cf42dabc66d98c1b2649445e488cdc58d7155b11050000000000225120f05afd9da824826f6eadc94978f496cccff652f3dc215bf8fd9abd0a4211e2f35b1105000000000022512072b05dd374616db7b29898d96b93aef571d8f9ddd01df1dd929b51789fa41bc55b110500000000002251202e92f8a0c121560ed50622fdb93ea8bd0554865997cc62019e3924492ca52c9d5b110500000000002251207ffc0cc42ce892626176fa8af3d8e5586d7d34de221d00eb797e80ca9e74a9ba5b110500000000001600146436130c58ce1823c6d499581968522ab8acfc425b11050000000000225120721aa94f6b2b519939a2fd5c4517c62a4067bce7e3bfb590ab5f8778137cb7295b1105000000000022512079f91622fbad7e719a9b10199d23af28f5d53dba6cff42d3a3d68159e8495cef5b11050000000000225120d1d8fc7ba0758ba1a85847df0520635cbb7abca5045d6924e5637e644fb717485b110500000000002251208dd427011e1b27634ff840db9b29185d44dbb4812ba75ac8dff9c8ddf281e7df5b11050000000000225120085e3eccd41681d351f1404f2cbae149af8f9f3818c4d8ed1dd4bc7a9aae36135b11050000000000225120e5e37fde1b45539d47600401765a6e4cf319610b4e3c46dfff24f85c72c3ba665b11050000000000225120ca4b82a10d612609c413d697cd503e6e3d8edae2acb7d31964d3e3ed402dfa855b110500000000002251207d4f39c3bf91ee43109a71b3431c4f7603238e57def356255ba6109c46e6e9b65b11050000000000225120087b1dd9a2abd6f0d9602d0d76d63aa8470602967bd9f49aa4a5edf42d0be0715b11050000000000225120c8170691b4159d7f2f776d9f41ba3953f242c1fe71c3496bc49f6d4fab2461675b1105000000000022512072cf09000df43c9f8f994cccf30b15a1390ce9508b04550dc42b8d24b1cd5a035b11050000000000225120750183c6ae591d9a2d0149fcae536ea08d845da084eafd97b9130ae3b8dbe9325b1105000000000022512016a7d87088bfdb785ac8db3c6ed88efa298927a13f316dc8d7f25747d06749205b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251208c842cfae143a50986af051e15137e7646567fb608b3184604a75f231e8e32635b11050000000000225120d23954a9b6296fc255fe679606e53cba4179b0d68546ef30f5e8eb5bcbf026fa5b11050000000000225120c9728677cfe0a62912101a992356e331fca602ef57d0f7f70de37a3a2e433fe05b11050000000000160014d4f9843721b7b5d43dc4743ae2bc7849bf0082075b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512096a295d8fd16b510871d27ec4c1fdbc40961432f7b2f07eab8cdd055fa6ba56c5b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b110500000000001600144960136c36f02517dc10dfd1e0b348bedc80fa0f5b1105000000000022512034802e273141c5dc1ddd7b4830734d7b8aea4b079a68bd79c4658e461588a38b5b11050000000000160014fc8cb7c4d82d4b848096fba2fe3e27ba9fb041005b1105000000000022512019bc3c7d34ab15c46cc1c7366e0e616f39a929b9dbb6f4c25091a177e1d23c075b11050000000000160014288ff4fe15569168d9fd81d5975b7922aea2bd3e5b110500000000001600145c7e54597d1d2f01cbc5965a4fd5de5cd263f4105b11050000000000225120a4b2f08d46209c185417a4b44c739a29aa17495a39fc51df4583ea7fabc8ff985b11050000000000225120e936da3ca01edcca997e265d47fc582bedef3f1232ff4931addb57e98ce9b8fc5b11050000000000160014c5d444052b89341a7e93788a7d03d668430098fc5b1105000000000022512085ddc2f171700086dabec8292c4b0163bac19ceda594e463b1691e1c2a6aacc65b11050000000000225120e3eef80cd8c8dce7c2a0dc950d129035b4ea630f20741ab2db737402271ca4865b1105000000000016001485e144aef1b5fe3cf4114dbf2edfd42d20e483345b11050000000000225120d4a2b4bfe6dc154fcf15c18d67743d0a96c916624925df89f59006c9b1a95eb55b11050000000000225120645190c732b28798132e367ffb9d6b37ac8988102af21b6e3dfc6ae578ee774d5b1105000000000016001460a3f0e6accd9ee0893c12ca6c53b8ca0cc9c1f55b11050000000000225120851a933fc524d5b24879ce47b2eb2154c94f6810e58bbb03bc0c05ca30bb8e125b110500000000002251206fcc63e4a892165324756666dad9aefe819618874556783a11a0f331571810495b110500000000001600147af7c65a0f20aa29c16becb56ecf43a33996fe9f5b110500000000002251206e0fecd89f8c4510fad5d22cd693baf44f3d3cb79cf244be4bc1112703cf95f65b1105000000000016001482b40f7739b3bb9e4409d55d42ce402ea16cc4195b11050000000000225120f68e78de8d30f5cc6c3202dfa0ff3e48bf302c20a001bb376cf85addf37c518b5b110500000000002251205880423805e5edc73b1521165c06223ada4a43cac807123302d5626b5eda3ab45b110500000000002251203cdf1d976cfb08d60d5c396a5f45d5213119ce0e06f1291c9479d0e705fd9fe65b110500000000002251207771381e5ad310c000a551051d55689acf2c72c7dca4fb2349caed55416fd4365b110500000000001600140e4c12548d675382c85a54328fab28c1fa082e545b110500000000002251202d9ae09d1bb9568a9536868178db9377f0fb9c853f3c150db17af25facf6f4d25b1105000000000016001488a46a677699a3fc95af917dc238e7ebc08441505b1105000000000016001464311b8ba2e184a5e7d946f97dd54f049d325b6f5b1105000000000022512025608a8830f1788a7bc59995c95ed52ed11dc384b739482cfc8514ffeb83fea65b110500000000001600147512be370d12a028857c135b3fd90eb18c1e96815b110500000000002251207aebbcf5a8a435e94c23083d366d890b9d4005e6f0b3c27c686e058f382d56905b1105000000000016001453258075646ad4cef078fe5f3ca4f2a4678668275b110500000000002251201978daadd029551daa792356560145f162e18141d2f3574c00f61589592cb8d85b1105000000000022512051f95e75678c9d71e59c6839a8aa3ab0d465415029b4154f753b06b541f91e135b110500000000002251201a3d6170ec2d2cfa29c9b542390a7500a3c83b55148c371f75fcf7b37fb0a19f5b11050000000000225120d6311db4f16e8ae7bbdf109592eac1e0f11f48177d2bcf525e05f945b951e5e25b11050000000000160014d5dcf18d2471a2988d34de66e75d0da832dbd9bd5b11050000000000225120c09f78bcecca842798b5fd62d93d8641cfcb23348bdf37b1dbd6429e642240345b11050000000000160014c5da565920bbef01e15f545ad7bf45d4f6e371a35b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b110500000000002251207d7c97af8e3dfbdd2afa67ecaf36f02797f3978312058912f17eb6e1023549d45b1105000000000022512038bc4181b3fcc864ad997e18852db3e8d20db660ba046cb1c944340b420d006e5b11050000000000225120b1f2ccac76ca441554577e7f9356ed6a0322df183cd2f418d8ea6e4d159433985b110500000000002251202df3e1f733dcf2c9cd83a9ee8a1dd8b5c8cd7021a3dda154a4a6fb45eb53157c5b1105000000000022512086a1cb468b495f114a6b7fa73885dcde2eea27b037638bff511f0749ed9808535b110500000000002251200f13e728ddb392e69206d6473accae15fd123de5d7500cf6e78497f94862fa805b110500000000001600140bcfc7e5d1c10a40c1cc12aaafadbbdb8c54b64f5b110500000000002251206b51b9e9ea7a9a93c48d713fd544424a9b6bc19b1c4e526b37b1cccfe77c85365b110500000000002251205606314fa202ba5fff26cee24f9c9d71cce5a6e95e213923f22bc4a92b751fa75b110500000000002251204fe1f4228afa36e93eab044b6502fe8e1f458b3514fc88836ad70b8ae2ddf59e5b110500000000001600145b3730f4d9350cc031ba561bde0e91fa85b948e75b110500000000002251203b18801144bf77a61c527b0da98390135e39d082b134cfaedfb601e7638fe7395b11050000000000225120b7f34b8916724c551506f0533fb5285a73851213ca14aa5038316b10880215a95b11050000000000225120ea52dbd657129bb11dbeb90ba6163b8083050c13d0b3399fe1ac49142fdd5b8f5b11050000000000225120ac5e254cf46109f6b7676c457e2026bfbf5b294a62399d994c46b7fa13d8ab675b110500000000002251203c0ab8f350e47128de128cf1e3897b770294732c70e29e1e95bea54da8fa690c5b11050000000000225120d901280c79015c12b476e62642f26b1a590586d43c645ddf64bd993d25581d965b110500000000001600141be00a9657046a3521388854a00a2e82224355085b11050000000000225120f2107ee0227c8608009728071be7a5417e68c6c09aa1e406baf709906026b4ea5b11050000000000225120face259112754678ac0fe1039f0eea5dd052725637b53ee2cc0d34555efbb6065b110500000000002251206e2c745069ece579e4fc8cb5292c3c0ec0d5b224160cbed709962af8ae1febcf5b110500000000002251200580459fdfe1cfcb25dcbcad57d44df858a91ca16107b2e00115a9fa8c3b1c1d5b11050000000000225120322e0e4a4b4185b564d8362a001740634c3043defe3dcc042f971858bd9906305b110500000000002251204472bc94524182b1efdf947c59b2a5e7ab182eaa4f06c6ce3123e24e2309a6ea5b1105000000000022512027fe8ca5a36406300e1752d34317fc751c349d210885a073a7420670ae7881295b11050000000000225120a5b61f57e4e2c09a09b38ade6758b28daf3e1c3e5b4ec83a4f14a139c78a56655b11050000000000225120ee96ffdb87b8829f184a9d73f7708478937611ada3153e531f21cafb0722c8e75b11050000000000225120f971d607faa230376d8d97a2c6f3913551be7e6513835ba740a13b83e622a5e75b11050000000000225120dbd97da715d85067f036ccdbec9ca153c88e4aba6671eb0c6e6024e86a8c39775b1105000000000022512060437571110e9c4f1195f6d3026ae67930388485df2d122670bb86cd5e832ddd5b11050000000000225120f18481ab2ddba2df70f540d7e21f2603880b63afa4d3bdd6ca2c781281bb549b5b110500000000002251201f7dfabc5d33cb36a13634fddc84007dc6c6c269a272a25c8dbddc41084bf0be5b110500000000002251209604ac612988d292078020fd4798826a36bc37fc113c299275bd1cff6980feb95b110500000000002251208f5ca24316fcd92cbc48d2ded79fbaae15c9ab2d799ce0f5c0302474bfad5a985b11050000000000225120ef8386348f7081068e0f18443cdf4a4d56da2b4944bdeec90e053f11556bf97d5b110500000000001600141b149c76acfd9137d5641288d74c076e8c4d5ca05b11050000000000225120e7f997333ace9c24c95a4bdec69eefd5d52e3bb21285a44b65e264176c9c3a595b11050000000000225120fe04d526ec4c71ff8c86ebf527f1e1ec94a2ab4615491910b7601f9cc930457d5b11050000000000225120fe14c872c08423cf695e0b048c8fafd4dd9ce0ab9155d42c00182b1f581d81aa5b11050000000000225120288e00981ae7e3f624a2a6cad7e2483ffbca5f688f4b9108fd2e4f231f0be2fd5b1105000000000022512002a4905f332799a1eb407e70b5a89a00230cc1d7821bfc23fbd5916eaebadc8a5b11050000000000225120088505f095842e5a2b2b21eeff2e8fabe74317784f249ad161352b609c4766a85b11050000000000225120563cc0a2813c87e7e7f2f598513d8779790730a2dd85d268667ddcbfb00a19475b110500000000002251206cbd5c9c03adf85f577d00b4285390d0e77ba9ba15137a64b04ce89445c3fcf85b11050000000000225120ab374ee3a355e61394e9d6835cb453b1fb4721dc7c1875c2b9def88c3dc694335b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b11050000000000225120a7ed67079aa68717778dd398d51c9710fb64773d3da3c47949746ad5fb2493955b110500000000002251206c84adaf67f7c4f007bd565f8aa2a10f10a064f6a62055a1194011e9ad0ec85c5b110500000000002251209ce2b101984b345d47a4e1d1589cce1d9c35cd5fa3d6d7e5e11278133a828d0f5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b1105000000000022512062fbe78ed9acbd0fc237517efa1a6dfee372e76814a5483d2fe5cd9b1a8d25ac5b11050000000000225120ecb66731b201ad3c9dd8d77125d9a1faf57b39cb707cfa39e4f5b73f868b68705b110500000000002251207712ce714b2e26a22b31d4a1cc772b56fb11e97652d5e3477d721255cd7297af5b1105000000000022512093c0a2afaaefa0f1d639e8981c50359a4bef552d88b57cc72c80c0f92864c0f65b11050000000000225120ffa1550825ebde659ea5ac41ade27b22da58e09fd7767534e0bc4e26a23941d15b110500000000002251200a5c71cd217f3cfaedd9ac3958ed19a574b666de561cbe14df87cd48a44865155b11050000000000225120cc0864de67d98b2d432e5f96c28a99e50ec5fd9cc34ac015bcf12a0cd14b747b5b1105000000000022512088a61ec576947b44f236354f49569cfb493f797ba8e36145c72be9800bbf65c65b110500000000002251201a86f2d0957cb8448b04fb592270aba025d4c6170d500a3cdda4157db359b9df5b110500000000002251208d96f7d2eea14546d7316435087085d592cd5336d60856113879dd3df795e1ac5b11050000000000225120908d2b23ae060197374cc5399be3d11d1f5dc0106dcfcc992023591ea2dea5af5b110500000000002251202900544d5c01a0fe2853355d51796a21552088e10ad1235d6d320807fd8974d25b11050000000000225120e1770f41712a8935f8beb4d8336f2bf692d387ee4e964726e98a0bbc335eaaf25b11050000000000225120f9de0ae92fc3e0fc569e96a68e854b82c57bb9cd2b8f822b9abe8c89920eb37d5b11050000000000225120574ab1c47547ae2d4190181bf14041d98952a85c00a4251f2814fadb3c6ebfb85b1105000000000022512040866535a77730783e23907518fcccc285c4ca4ff1c65feb81dbba2778a078695b1105000000000022512014a3a989b672d8b842012dbbb945f79d4c62b1bba7f9d2b1bf142add8201e4e35b110500000000002251205fd70eed72e64ce8201b4f01e513bf63fdc0f179c3e44bcc2d5188570c1a05425b11050000000000225120a7f28153578cfa541bcd584465ea33290bcecf26e75a02f69a8908800029c5d45b1105000000000022512041b698197fc6c8c13c5ef8c33e08f08d36cd4a485ead7e1129bace9f2316285c5b1105000000000022512095f176a87f3283596ffe06f3951d157bebde60cf1868fef2be695ecde989b5105b110500000000002251208846ffa5338fe9fcc49c6d830820a61900bf44de7b71bf2b6a485998124ee1a65b11050000000000225120e790afe5e2116e31df996402f00f155dab1a2723768571468fb3f67380eb2b6b5b1105000000000022512007f64fdf182f189e0fbca65498654d526129b50416f4286079937f5dd23a93db5b11050000000000225120b7ec228497478e59bf4d9d912046a35a9b70ca9aff901c348417e65edb90c7d85b11050000000000160014ce72d8f2c5f4d588a11fadad82430b8c9096037f5b11050000000000225120f3dff4b2c73c68aedaa9b0f463096062682d856b4de5e0b844c363cd4246a1b25b1105000000000016001415d3b7ab8f62d8cb82dd1c88dbee844e90a064825b1105000000000022512005ae3d3604972ab1b457bd14c4a57746387ef27747460711fc6786c18a68452f5b11050000000000225120f3071a7ba7c189f2adf97e27ac58c1894184b5e877c7cd0e87afb854e972eb435b110500000000002251205a22318b335918506ae7ff437cd4ad2efc74885363ffe50eba1a1182785f52b15b110500000000001600148c29673f6cca7c5c280f5fef708b292a8195978c5b11050000000000225120f23cbd94bac65fd70344e88a2f1923a661abfafc623587e41b446e95a18caa3d5b11050000000000225120d2acfe61c7431e5f62dc32d1a05154a305c929cb895f272b3db3dce40dfa23b95b11050000000000225120e85f74e9797d0241dfc1b12d50780e03147d9500c3b613df3c3651042f21cc9d5b11050000000000225120fef68c94e8390a338e2b52794c95258627d6a61cced5a9449da791b16d710e685b11050000000000225120ec74cf2c627457c8a3669f680f69e2ccbb9fc0c22c1bf7c813416db6254f785f5b110500000000002251206f7a82875a6c78708a11a0f70ff0829e600888834a669f331fef311d5c1efa0e5b110500000000002251205f4b39b1a7a0b39fdd982a63de8f08a8a9f04e21ce518ca5759f903f965453405b110500000000002251205b48234f2b690c48d21b62a52492515831e3cc13779bf679e7187bbefbd21ab85b11050000000000225120f7488cfa5e019d31890a935f5d499b07b679c5877c2181612f633fdc693e4d6a5b110500000000002251205cff4a8ef30409719a77e829d7a098f4e59c88ce12061f78e82938911137a2bf5b110500000000002251207ac696130412633edd4e0cb3f76a5289c15a39571b3beadf96a1143efee001835b1105000000000022512032073e29b8884dbe7f0c231c4b2c3657505a6a8a442ba3c12b7c9841eb11b1e65b1105000000000022512061045ea250b5c62f14b6a6fecdb434e5b36600182c8eae2082186a80453099045b1105000000000022512056ae81d3e21ae6497c00f6f23037388deadc6611ab4cdd47aef892bf84cedf415b11050000000000225120729d37727c5b5e0dcc01fd49cb49cb1c51f4ee43f44bd6853e6cdae2a8c684985b11050000000000225120b87f6c83f4747f129fb3304287d9c944350caa2730246cb91f34197ea6e15be75b110500000000002251201fda052c373a1c8121870078279f409accbb604d9a1a1398c689d632212d92a25b11050000000000225120fc9aa8cd4b95a06f2b0145ecafb9269baeda1c97efb01cbd5df1e00b5c8c57ba5b11050000000000225120733c3ad532e5b9c6e9eedb9f5a4fd39f1ad6903c5c218d936ff0f23bb9fe055d5b11050000000000225120d5115a07b7df6a1f7855b54eef3dfd3779b7b676ce36575a17f23927760f68505b11050000000000225120927b43140f539ad4b4d95f89e243a31181e3243b7da6233537bda7bb220d28495b11050000000000225120c8ab042535208e283350ad1bf2e32b5562b9e124232fe6e8bcc40a5b8652a2625b11050000000000225120e373105e8126f8a2a7c1d56ae5e9a242c808001619fc4ca90e37f675f978b63d5b110500000000002251209a992525fbfd6129d6fca3bd860430af50c209e9f03bf78800b7c08476a419e95b11050000000000225120f57a8774f547c63ef4887a832d8447412cd788eb07bf02955eeb62f5d4c07b785b11050000000000225120175f524e70478b8fd38521f4b6b48545a7a7a8e2bddc30c3749b5a858d6624e25b1105000000000022512004a72f1edb073019290a6429bdb4624f76c2a4c2371cd3d2e0f451356487e9415b110500000000002251208b38f4bb5ec9fc4c05848c4851514a08e0f9b98320ff62949e2b745241f084d15b1105000000000022512089e845a449bc4a9b40414ddff1f740fe725a21d0ab416cda5fb0bc21de6077e05b1105000000000022512072ff400c7bc86fb94adcd49bb13393ba150238bb49db40ee83696b766d9848125b11050000000000225120447c861a764200e22f1921843f011de2a02f12187e690abea2b3b46dc198b5be5b110500000000002251202055a4e1f2f22eae9ea2c487652997b1eefda6cf889a53a0d7a5f2696a3c57165b110500000000001976a914e755e986d49b3151b6dfb6489ef3e6ce22af6cc388ac5b11050000000000225120d574ffcb854b200dccce54e904c054660cb420b3306e2721b2b105b0bcd4150a5b1105000000000022512037fa6057063ebb501b9c4e66e198476ef349606cdc8933548257d13150d867aa5b11050000000000225120e49b38f1078b6e7722fe8c4e3e5573c051ec10597372e3e3182d1b705e91af6d5b110500000000002251201f3854c5b6c76dade32017081d2ed4cb937cb3264804d538d154a60a8fdfac4c5b11050000000000225120a610d6c75e0e92dd0f8b49fab65981f915e9aa97febff6f89b32b51af1e6268a5b11050000000000225120a8e99d852f0fd2dd84d2ac75fcacde80cab9dd2d08847e2e88747b639d7b6f3d5b11050000000000225120dc1ac5a740b06d596e13fc609660efd2bf8cf2de1730e28ddd8575f17e8fac555b11050000000000225120549e7513b462e217283cd31ca3c874bdcaaf5d0d40d0398653f5ba64284f37225b11050000000000225120c632fd38603c137951bcda21fe9c70e27ce24dacad8acd262d69203dabeb99d55b1105000000000022512099373336c78c72914468d3e37ebf9ff5252ba3f939f3aebe45f7765fe5a83d635b11050000000000225120a877b356d928e7192ed65b834bce17af55a4f499cbbf7cecd253b3ab478b4db65b110500000000002251200412f0db349c92440dec5f4296377d487b24e18be70bbce638ecbb599a1ab8fb5b110500000000002251202fecd75afd4c63cc8081438ce660a76a9be89c71203341aecbdf0b2ad8301ab95b11050000000000160014a42eb7307000c89386b9ba13f40ef53e584d43755b1105000000000022512079190e1c9aaa3f5454e9138753dab814559c93193300ba5b56345ad98148e81a5b11050000000000160014513fb8b1c614ba507e8220dece3ed0d7306fa28f5b1105000000000022512005c0159280fe2949b21ba9ba85248a93d8c12d63458af157d3503a07a71d35f85b1105000000000022512020caef4a189bd1b4e4905a9bb05963aa1bda8a9763e6593b6c79a506ab2c30865b1105000000000022512002e6bd5fd3a555687df929e64b44f5aa41add49d14ceab674252f686a690a00e5b110500000000002251208c0b92cff6215c176144a9943da83ad4f26cf496066b17eddcce299405d496a75b110500000000002251208ca669c49fc8aae1f08a0bd9c63ff75031d3d3a25e6642621269f21fc587bd9b5b11050000000000225120bb81d64a0877bc995b9c754a257e730fbf62e71514554a6a8c15b8a8e07978c25b11050000000000225120d9da93d3c334e9dffdd64683b82dec1ca66e30173ecb6a56ebfabe7fb3a7f1af5b110500000000002251204e30c5805971d1373341b4d7e85d1d63cedca5b5f9e9fb4c6c64b21d919325275b11050000000000225120977a1e761f97032e272e39ae9efb634f8ee552b355c70f6028aca40cb7b5cf5c5b1105000000000022512011df2a9f75aebbf1b8246681695256f622897d99f4772db2d7d2b1dc2c34587e5b11050000000000225120925de29b5320214d6d379c5478a2534bea8fa5524493aa0451a82747bb089c765b1105000000000022512005fc6ab08930aea5a850a850f328108e8d4ed19315dbfcb749dc196181aa88d75b11050000000000225120e30ef25d9dd69a0ea3696ba37e5e5dd971379ea00fcd1406e23437e52782ee3c5b11050000000000225120ec11c59e6b4ad32956f561e13ed5964d22c565439aca7f555055b987cd3fac3f5b11050000000000225120bb7301731daf07335792be4e3677b5cd950ae8af96abc32e0a653c1879f72a285b11050000000000160014e8a6faa5154a2c39675b808af6a5ab979b350f1d5b110500000000002251200eba5c567c3a2ed8443effe20c45788b414fb2e74d52c236199fce3b9601164e5b110500000000002251200def95d5570deb64ef00874f558d99b0c159de9969009bc7eeba3f2d8cad12ca5b11050000000000225120dadd4ca6157af0c15a68c7df5fb981aa1ba70ee532fddae4df19e91bdd653d6c5b11050000000000225120b469586d4253cd11d36d04e7e4adae5d3bb9ec2fff16cf682d1415804cf2b37e5b11050000000000225120cfd47393dfb8fa1a11ee935d1576a7fd75cc66b9a426fc83aa1d2535a2e626c35b11050000000000225120738c48c55c9e6214ca1a71a319cd3e2ba922739a8c233cd78cbce38eaaf6d3065b110500000000002251203e34b7673066c26432226ba3c0cfc4e279759a6b3cd168ce3e4596038c39ea0e5b11050000000000225120a168b2ba709a025ab6f42b83264204f8749c8f69d2b10db4fd0cc3cd1dd738135b1105000000000022512077a3eea628e3a1bb6e8b7e8f5bceec11826562081ead312b65be345f2a4f95975b110500000000002251209cdfdecceed73d538a561394403d5f918914cc557de798330350ac21285a30285b11050000000000225120b795f7cee66b0024164784b3ba6a6e568e374ff6f8cad8a528246253718d84b35b11050000000000225120e072df150c08f98930edf12efe6c0851aa76cbcc66355a9d0fe905c09ba43f475b11050000000000225120a837c14584c5156b22a836d3ac40935b315d645fa0416da668b22389cce7eb8c5b110500000000002251205b868f424e9b5dbf4d10f41519f2dcae2b676f386e02ecf17bcf78707a04f7f55b11050000000000225120d50fc14319c7603a274efd82f38ef75504309c810530fb69c9e72a42a1ff6acd5b11050000000000225120032046796c7042cad8b32559243fc2727b6ab2aa2bef7c0cd460c7dc33f7018f5b110500000000002251206cb1379a34032ee7d11ab0669237f692eb399f34be6c341be4a6400cd9d322f15b110500000000002251209761206350ee61b4aa1e142ce1993518274dcc427224659afdda82947fdce8aa5b11050000000000225120f8727339de4773a2fe74a5588ac8c7bfe2dba9db2759ea3ac79fc18a2b4027e05b110500000000002251204a9745d2daf9b52467b99b83e44adc5a880fa5d6f26ec208b516605fcb8c1b4b5b110500000000002251204bf0314da24c553d87c724efce3e6b721367d618bb622e0a3030b966c46f83745b110500000000002251207b11b6a4c4f9ba583c41eab09129b518b964de579c7d7e0db1da9f692fddb3415b110500000000002251201c3934b49275ab945749e391ba23e48929e769213b1b0db77cb7f84fdd6d156c5b11050000000000225120e4b9a7f39f21c9162fa715df62400c297b799a22cae326a2a27809c027529aa45b11050000000000225120662c0835bb79bf94c55c9d870e6bb3b9302e536d75fff7da74cf6cbf86338d655b11050000000000225120a3514102af25ebfaa230c702e6ffac98d526c0ee5d2cbdfadec52ef0ea720c785b110500000000002251208891351ceb7d40c66714652a41830d890399a21e1742522cca6656b484c3d4ab5b1105000000000022512001a8f9f8eff940b1873dd6876a9d949f94683915519b6cf4f2be3075299537535b11050000000000160014a8ca2a6fa2a98101db861feb784214693e915d7a5b1105000000000022512024f9cf9f322cb09ed1dcbfa2eab59cc50bc71339b3f6678c3ab88f36d36ca5c55b11050000000000160014f597096e185cbd254822327a878d52ecc06a19895b11050000000000225120c0c06aca8e49ddb3f1b9221de3c0d2c0ba1673578f40f1596f1ceca6acc96b565b110500000000002251208d9698bcf2db5089e9592f598928ec392eeee1c488b82830b690de25ba60bf315b110500000000002251208f2b97708afa06b363c45b62e7ddee5ee2fb9d2a5a2ade48ce8281029ed329165b11050000000000225120a3be1ab7eb6b534fd10df2cca19aeac7402bdd04a90e01c09f1f212d9f67a4045b1105000000000022512004a57220898b654d1ce3e12e71dad33b5db9b08e79c3fe0d3d9742ac3e2343035b110500000000002251201a65171c858f0c3d9a81df1944794bb9e42c826632a1d6b28c94776371771e3e5b11050000000000225120ed9a9badbc05b76b43870182c3a9c05b959c37bd0fc9a6dc0210aacd129bbf085b11050000000000225120aa06dbb263576f12af3778703095d30234b8d1b273ce051770513a391dcd98425b11050000000000225120fc3900166fdefd23588e134510a63f818da2075ac32d677ddd0f4c706e18383a5b110500000000002251200f76c4aeee464960f53fbb89cad7cc659dab1fd7a554ff8b127b34e7268b262d5b1105000000000022512017dd36d66916491e363adbf80ce210fae89f20bcbfa5fa9d9e1e5392d4fb0e475b110500000000001600144d4bc39b818d27611e9876b323e429af19300a0e5b110500000000001600145764a251efb9227b4b71c34b8fcee06b5f6285485b11050000000000225120508d6a37cf150a1d381c7e28b4b56c4c0ac1f85b1ef72e791e687f908f4546e65b110500000000002251202bb15485d52b322e713bb261e717673db7221f8c8cd77ef0036c3a0af0867f305b11050000000000225120b5d41e1059f49eae2fb5dc6fffa09c753e9513663d77159c16faaa635c07b1aa5b11050000000000225120d3da605aa894bece781e69a030296cd9dd5bd8edff02b7fe46186ff9dffa2c225b11050000000000225120c1bf86c3627e31ef4c9667d2a3e89778b3a546d97a67036e423812579f7c2faf5b1105000000000016001412c910240843728e4507c50c13db5a903209e7805b1105000000000022512039bd3bca2ef12b17b9df2adeefcefb894fc05d7131c1801a5e40499fe066b45e5b110500000000002251208f599012ca641780cd6a05eddfd543490fb725bf3d41992433320de37018b3145b1105000000000022512025718dd1235cf519caabe1654d50ce73b32dae3c5bdc1944dd25c6302e493a735b11050000000000225120004bb55abf033e15d3e6e072b1465968c93bc094481e226efca9ac882dda86f85b11050000000000225120fc77102deb31356c81aefdbb048af745af0244f1dceae86f9c29befe132eb6495b11050000000000225120ab9c934d353206d52536286c7f40f138937e0ff17469e6a18415104a16749fb45b110500000000002251205a3872f01bbd675bf3de9405eb8af1748659151ecfb8d63e60f7bef9bcaec87a5b11050000000000160014bb3660d13f5a28fe8bf44f8e3ac5478c2b72d8a25b1105000000000022512054342acbbd073e0607cc06619a6b92829a5a7b18e73375fa36ef4bd5c4207e5c5b110500000000002251206ad0808a9643b520eba23199d81e84cc2fb3e0ef1ba7f11ef514552c7875e80b5b110500000000002251201fbb6719b880ba932e45530318f41e41c63803d24fafc15f4183377cb773333f5b110500000000002251204f6cc9610c38f7a26acf8933b8b4445e506aef68d279568b5362bb232b9021bf5b11050000000000225120b0bb57132f6af1d1caf3a0a34d2bd5ce0810f5b12597a886bf5a6136f4ea5a415b1105000000000022512053306371b6b9899328be7139fec6b67e556782b3d44ffcbb196c703063f666255b1105000000000022512011a0c84a2820491001bafc2d82af23d5b96943c8b8f4ee5848a50b0ee12f30605b11050000000000225120c377c2142275931dbb8b668cccb17540495a26675c64b2e26306fbe1091dea455b11050000000000225120706b47c601d9daa82a6b066b70c697bbfd818e6ca07378454eb7bfd98097483d5b1105000000000022512007951e074a47f09110cc3abec1247be37f6ca50545205f0b4e9956315a21b4c15b1105000000000022512026161c49dcbab4db0320c6a78aa98791dd2c908544d247cd3cfbf8166191493d5b11050000000000225120dfab4d7230215d12844dbe0b1018dba7b6dfa09b3b0fc93494cdc18860358a755b110500000000002251202f6ffa6a6c38413549bd4358503141ca6300e601e16e9f5fa9429a7ca24b35a15b11050000000000225120b587eeacfb2c2edd0398f72b44191b9f1aaf6425f54bba13096963081cfddf885b110500000000002251206bceb2827309f8146d8c8b4af0046c5d3e824fef6e59cc4841768aba6575127f5b11050000000000225120b4a9b94923ed644f3a0c9721861b11b041d28c08c377eaefd1cfb67c5d889a525b110500000000002251203f20dc895a5ac03b670d7aecf1e5b4a29b25c25a36b40071c27f720a8fa211af5b110500000000002251206b499decb921b380be4ad97f7b3d9d324c07704b451b697e6f99261ad7d1a3025b11050000000000225120d70966f50d81ff174daa70de0f2a619eba2060241c1e1db3e5644635aa3296985b11050000000000225120237024dbe4d3cb64fc180eee63102e406aec37265514e5a80664db54bde69ed95b11050000000000225120d447299670a8c9dcbbb6d071b2155e38c91b38dd80cdaecebf6c3d76e2fcbe1c5b1105000000000016001452bc8ba581687079553b6245773be15093847fdf5b11050000000000225120b86f71d9d8160d95592287f34902146a274628a9a1962cf4728bcd848038a0a05b110500000000002251206375a2802a5e2a70aa1b743b9371fafcfeaeab93a248ff83326a5f37b382ee625b110500000000002251207b2491e515be57c86be43a6ef36a722384d3bc35268314e1ec95fc1fc35697a05b1105000000000022512062fc71a4e1bda19a033d9a6311767bc0d7d901766ef9f26364bda90d7a2f97b05b110500000000001600145217ac275cd34d2ce3ce74ddcf24f62dc2bf2c525b11050000000000225120a3a9a92929b5aca9490600c64a645bd3864d0180cf960a8bd3a9bcf3a860b7a45b11050000000000225120a46ba028aba6a35455010a272589083fa0032820980658808a32391df5d0fe9e5b1105000000000022512025911858f9805c540e6e033e859898dab838bc00ed7f9612e3d574f17905295a5b110500000000002251203e360e5097bf439e2deb3351e6a1425545e04b0293f4071dac5f17a3d22d3c9b5b1105000000000022512014f1543db35a1882ccde496cbc3c6a9959b0d61c466c55e3e4a2df6ff94d911b5b11050000000000160014568b025c9e312af11ce70054c0c0b99752a724e65b110500000000002251204e497dfa66a9ffb58fc65dd88c0e9efc8b4eedbe9fb2d371d68836ba625020d55b1105000000000016001421eb010191ab88667e3b96f6c32cc9a1daa822ee5b11050000000000160014510f762d3c2c1ef4b68786363ba13805f731a4aa5b110500000000001600140506108b185ce86eaac786481410b17630a802105b110500000000001600146602e60a1e167833eaee8a5c90c1aa9360d13ba65b11050000000000160014d9c85e6f4688d8dbc0026243ccd83d456f07a7115b11050000000000160014d70f6f7a922a3cc13dc624de02f4bd168af92bee5b110500000000001600149bf3982677846408cf8e1769108671f6be6e0ef55b1105000000000016001482f7b57c6ff3bd70625e87ce9bb2ec1daf531c975b11050000000000160014fc1e6992add91da961b2bf3ebbb016042cb800285b1105000000000016001474e062e07758c896673972f0c682c12bcd43778e5b11050000000000160014993e74b237e0000349e5e4409f4d7a1164d880e85b110500000000001600146fe9f01b77e521aa5efdd9d56aeeed9bcaad4cfb5b110500000000001600148f2456a3d8cf278c155613788a7d1ea5f63e4abf5b11050000000000160014c1d357bfb3188be65c67f6217f22bb26500794775b110500000000001600143579937f306d454159cfe4a6d81be1fe698d41925b110500000000002251201ff5b29df5802f8b7c293b55ffc5a13a1a43afd962fa54a0ca3582df2bae5c5d5b11050000000000160014f2d96f3d645ce35e206f78a524f27a91bd67142f5b110500000000001600147a8095876272e3c22e258c19d8a9e4caff4173985b1105000000000016001407568be3a7ba94163b9dae2ab39c2670c8bbd3d75b11050000000000225120d013e0d029cbbb966c3a926384c66c31ad24ebedae42a4d1da593ccc4a9169bd5b110500000000002251207f2f3af3049b26e6ffa597784965eb0cd192e3e29c12b4c6e61b6618e551655c5b11050000000000160014ff78872f89b4689423e42fedc68babcd679ab2665b11050000000000225120bfb12c8df627282db0494df47719db67e00443750fc7b93582ddaaa8c1acb9af5b11050000000000225120831d1ffe303209154fcf4897e29e480cf90b43edf9b4d1d3bcd6a70a3b0df4075b1105000000000017a91400e1dfa6bea764107c6018b21aefb0b7b3af0c3b875b110500000000002251204fd21148a2171c9468d4fe20df9b599a555cceaf83ce6ce52d2aeea0f148d08e5b11050000000000225120afc01d83ec74c2a9938526500765434b159b29bd468ae224788f9199f2c1ff345b1105000000000022512053e7f1c719fbc815127208b821130d9f6996eb493f99f37f6cdaddb2531910525b1105000000000022512081acee35b0efbcf088534cbea670a83e765aad17b19e900fb5e1e4a4473ae22e5b11050000000000225120fad8e1685f18626d12b22da33a8d30c4c3cd4d9102867922800a76dc33be04125b110500000000002251208210c58a11a07ef3450937862a52832983826d60121080ee5821c6ddcd125e095b1105000000000022512022ef064e52b767577dc554cad4362d0d76be8ad774b9ea25d3ede298b14afcd05b1105000000000022512053d0e5cd820a193b24ba9d1b0d6dea4840eb9106b61fefcc41669b3a1ef0b9495b11050000000000160014c1aae132e6b78ae9498b042682f7bfb45e7707745b1105000000000022512035b6827ac768803f94b666e485a5ec5445929916c7399260be71eee9d0c0eff25b110500000000002251202da66530814e69a92126d94bbab9fc2e6e7f596064305dc814e9365d4a8606185b11050000000000160014ffe03644088f9d9a394a3170d575590c50fea6b15b110500000000002251208c091982634fa143a8964b456b033dba419216ad8d5125b7482210d11a36693e5b11050000000000225120c605cd729075c0297abb639b3580642d0768b6dbdb50654e87594124ef9b197c5b110500000000002251203bfa7be0fe4c5101f88087f4305239b8555d52fa131c7098601dc23639c80fad5b11050000000000225120d94c5b9fd3951186df755d08284b46507e4eaf3907cee08f0b86a421bd2a7b565b11050000000000225120e83a70970203a85c1011ff20979b8119b90d98d7797142aa48f4b764808afb405b11050000000000225120f9288975a44915b9971afde591e1cada8d89006f3453fbb71ace6d5fd9ea80245b11050000000000225120d4b73a49ef2dfed9623bbf7dc93ba1267d25510d75740c4ce59a7884e5a24e775b11050000000000225120334fbc002b3ccf18a18f4ac36c19c2c1d5f2711d09b3f190c90e06851a0363605b110500000000002251203295f98f751c554d5c52f1a9c483d50961968b4c6b794a60c79ceacb9d1ac3335b1105000000000022512025895201460b898f723eeba83ee6b02a2390ef8dd9ce36c24b80b5a07e1142ff5b11050000000000225120eb4dcb3a38d58dcffefa540c8091c140877e31a08efd0f34eac101198176c8bd5b110500000000002251206bfcac5efee2e675e1e9d9c2f0910a0ec085f1ad61395c47d1697a3434ef62de5b1105000000000022512068560f76b5301b4f117e6cd11a2a9166330e2255c54cab7564512136c7b0472d5b11050000000000225120a2b60aa24c2e71d924fceb0c1b516feb4943942ffd15fdb6892e5bcdcfd8e61f5b11050000000000225120e97e4be0567bac6f718bf447bfb61a1eb0c3480224d8f909e2a955d2946d353c5b11050000000000225120d40dbff6c686fc6e11e3fdee19c0259de7e73c162d388d62e03dcfaefd8a0d4c5b110500000000002251200cb99307c9b322a9f54878c23e9675c06164fb2cae46f5fa9f9b36c73cec8db95b110500000000002251205d02c80ef82c931d156fc3c0f0ddcb611c956e744aca0746d39a009dc91407fb5b11050000000000225120b9ca6cb861c760655e8cb4ec3bdaf8cf9c259cb26efa7c15d97543aba7df9dea5b110500000000002251206d41b1f065c09a1856cd140cb9b0715addbdca5b124c8851a51dffc8758719395b11050000000000225120fc8470f5c54cccfdb30ad57a9a1251f298a3a1aae17d9544545b60e57ae658105b110500000000002251209af56db14b7e502e12a15a51051be0de7b0ca30ee129833464728a35280552915b1105000000000022512007f9685fe68a8dd302f5d3d31d136012d9a9ddde453f40ba8956e5de6b99a45f5b1105000000000022512023da79d215c79710afb5cfb06e4c2baebbb6c9f080b6e633d64587ebee61defe5b11050000000000225120b0dd05d62aafc736a95093827abe8777e45a9a80a989c146b42699fc72edb2a65b110500000000002251201e241ef32fcd4f2327d678cf32f75e82064ba211d9512bbef040cf67114006955b1105000000000022512080f9987e3a1a956d2c67521f8fdf20417f9cb88dda6b510acde05a26ca8f21755b110500000000002251206446ce4ce58f535c66d7af942166b759d15d28fb3f15170c5414fc4859519a445b110500000000002251200dd8eac3023804f16eab9aed90b5f281aaf7d5adcdc902d98a7b1deb2ef4111e5b110500000000002251204d0a5de2dfbc6bd0aa45aa929df69d26f6fc0e70697af4d6ca1ea146ceee092e5b11050000000000225120b999024db05ff5149838af916dca0982a58c7b0512fc3f67d77e9b7e64d6a8815b110500000000002251202fb3a8eaac72de12c0446beb52d6efb0054ad48796e127db5cefca3cd59982615b110500000000002251203b5b5d53c2f0b9be3e3ad0d241d9bc80526a2f0b37535851cbfca7fb30bff6b35b110500000000002251201917e9c49e50e76f5993df7657d0040d1821a80d1a555183a1c882342a0a230e5b11050000000000225120f957a47faee337b7753519702ba13a513f483843b033107dbb1995e5c56c6fb05b11050000000000225120d7aac2e1155d2b6d016fe743b6f641457c5730e8ec9d382e2fa85b119393a7785b11050000000000225120eb5018745bc9ce09babb228ab5bca19c3c543dda63edf973e776793cff068ec65b110500000000002251202f735897d43fc7c547a5373eeecaac4612408dcee941556aa005f93a714bd63e5b110500000000002251205641e15dde541db17e6ed2d5f40a27a46d7ea09e2234b428f2f1749862c19cdb5b110500000000002251204814601e8921e74de2574a76579e26e75a9ab93d12a4dce3ec34339a3bd310c95b11050000000000225120c13125fe1cfefdba6da926f577183e68833e156f98b9eba30e931353f9e733ec5b110500000000002251202904cdb24b4cd7d6bad295abaa4011b508247f442e64281ffd0bd2ba1f7b0b715b1105000000000022512050a3a24d8a6ed4e6eafc0bc05775b313669d35b540cf16299a7513a1e48441055b11050000000000225120f548959d1127d880145bb346bc8ad78ef08bc57aa45d7c246947327ad18659d45b1105000000000022512010d3c939f2aaa575e99b5639359c51a91a622fc58ee1f178ce49737564ed14b95b11050000000000225120ae673856981908cfff4100190bf8c2d3c297b2d9f20a333a432ef37bd21cadd35b1105000000000022512078c410e73213015e1122e283f7ce545f715ff05ae6648271f5a3beecaf4204ce5b11050000000000225120e04ed4c680050b48754f978e8d418410c0c0c9eb7b6dd26d9316fa688c49e0c85b1105000000000022512067dc10de9550cceb055456725f3d05f4b2935257cdc8fb7dc3b795a2950e67e75b11050000000000225120316ee6d5ee35e191183be6a81c83d94e7accf43193ee20e4697c9b91f2d5e60d5b1105000000000022512008951f39b8f1c065912905cf331ddeb224a4ff668a0047b59e0d4358b52d95885b11050000000000225120dfc513ed8e626e278b70d6b492f705cf87debae39f95bf8435d9d0621b73a61a5b1105000000000022512085a8bd7397d52b99db069777cb9b43c7c5c4361d396465d9b481a9cd7851b05e5b110500000000002251201f9082ea7a90c70b56020a40170b3cf88339a6af35ed3407c19c633e20fe282a5b11050000000000225120bc3d6292d5d47aee02e95df8f93403ed7a68952d7c37c5bd3d62f520e0415b4b5b11050000000000225120a54915593414e9ccda294d14de839db426d13be02583f12d40d5d4034f8a07c65b11050000000000225120989baf2f28c4169cd89531991bb4a017940cda2e3103d325bebccc4eabd192ad5b11050000000000225120838ff7abb2dcb080b666b2de3ddd3d99729a6a1e81d06e1fda2f5dcfa159e4265b11050000000000225120ae381e386cb0b740f8467b358ff987b18bb22748144437935bf38b46daf0c2c15b110500000000002251207f7c29bd70e3caba70bf9007eb77130eb1f267e0e8cdcc58c50b36e96d90abc95b11050000000000225120bb171215e0fccc6daacc98e0c1cb1379b23be8216140fc2640199222ef45d4515b110500000000002251207888b9b55fbdd6b2051aa7bd69411df6204ada0ae291b39230666e3f955e662e5b110500000000002251204d9e6b68dbb441c7de0a9a0740687654c3618f80bcf6623d8947099059fb64625b11050000000000225120dc43054831c9773044a9637e2b41c9f6093e84bf8a0d1979308845c9c6dad3495b1105000000000022512035b0e4c380ea02d3ee9b996ecba2b47e5eda868700aa4bba8137ea4f2d743e245b11050000000000225120466ee579cb3d48b8716851b47cd4c4ee24bb86ea4e958900417fbaf95614acc15b110500000000002251206dd7da8112f6e2ab3edbb0e4891ced1b63e511d2adc18c8a2d8d7cf5783edb665b11050000000000160014f70f3421ae5b8b45d678e0566450b67d2a1665305b11050000000000225120961543b586f99fe50d475dc654fe6351aa34f221337b123a493a0763684d3ac7120104000103040100000001046952210285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad9012103471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec62103c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca853ae22060285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad90114643db86d2d000080000000000000000003000000220603c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca8147df6d3832d000080010000000000000003000000220603471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec61435b794402d0000800200000000000000030000000000", + ), + # 1 - P2SH 2-of-3, signed by 1st key + ( + "sh(sortedmulti(2,[35b79440/45h/2]tpubDBVoeGak4eaXFSBmNX8E5WQUdDMSHPZ2BM67txff8DN4EYnfDGeKA2y7YniKjTtawKh8ufJskcn2imNmGnNQ6EWrFjU55v3mFgpGZcz9d9T/<0;1>/*,[643db86d/45h/0]tpubDAsYiosEu9vn4H8UXSbSe8iYVdzNV8wgPj2uUV6DbyXdyUcwvJVFDxVXyRNTjfVS8vu2mv6ipZYSvwvNnLiH9ZC2tE4rCRKoXFKHJ5xrU3b/<0;1>/*,[7df6d383/45h/1]tpubDAb622z93Nuv36Pcj77ZyAw7wrp8TE7BhvcaoU2pjTozif9sfkGNZPzMRzT3bq5BUc2C4GcLojG7wHQ7n8FjNTnLtnLp9RuSTQkqH9cfDsk/<0;1>/*))#cvqkqqn0", + "70736274ff01005e0200000001bfcfe1a5c690a378de13b1fd48699c12672ad02490f523a34b336303cecfa0b58602000000fdffffff018b07050000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e130104004f01043587cf02632ffff4000000009cd9fa4e2ab3f737ead066e121197c3bc4356328771eafb5662167a2866976f903b166248c9fca19aed3a5249ec8a2651b0db9cf7bcf4d4aa669a4c2477d674b7e0c643db86d2d000080000000004f01043587cf023c9382c200000001103f93f4b352213388005f4538c07e1a413e1750a96fead5ff63007e4447ac700273492603f16333c52a50297727e3ef6fecae01379123f6eb58f063652ef065260c7df6d3832d000080010000004f01043587cf02b83c899100000002d074a767eebb8a5f6c8da45c914eebaf1da3b5cea009220029b97598f8fda4030200e142bd9524f7aa1ff4741947495ae94881a23d5899780f6a2a295913412c750c35b794402d00008002000000000100fdf876020000000162909f6443e176d3daa4d542f1c70bd8de291693b70596bd7902adce7d72d4ae0000000000fdfffffffdd8021c9e6cfd08000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d9000000000000000001d6a1b616c742e7369676e65746661756365742e636f6d207c20203732365b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b1105000000000022512073d0115d5f98654b9b98c0675ffdac806ea9d1c418af11f891aa4bc952163e5b5b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251207bd51d15156b7badf1d73f100eac9488b162051674d8733ea6c25f73793546195b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512044d0251d9f5d61d6863774f20ebd4e463df4536c8f9f08b8ed8afe85df3180ec5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b1105000000000022512084e3a784fcbc673724695d1f818ad8544a348a23b99848404f950109736ac34b5b1105000000000022512009e7faa00cc5e2d91906529375b8e31e260b0252cb7d3a8bf84c3d3674b8d1255b1105000000000022512080586e9a1c2730250793ec203563f48f81c4460067939cb3b118a859dbe0ef9f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251206a36d1c4ab55f478c5b3c9c6e62763f1f8a203bd13dca2380c0ff302b98136995b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b11050000000000225120af2f495c7e1e132d2b9c8e1bded78017ea1be4764792ab224e40687db17a5f365b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b11050000000000225120be767277f6f3a80ef6272b05ecff90b6299796353be118e6c13d825b1e792e1a5b11050000000000225120a8a9b4698c1f9dea1541fcd6e49327e8075b37c718225a848781b1c3434551525b110500000000002251204878075b002ee24f9575ab88b194970aa6b910af9239d84c494ec1142701f5db5b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b11050000000000225120c3b035c8360c2cbb640517bfec86ac24d850876ed588560f1c62ad5671ef25ae5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251202be4596006614dbf55d839f1b68e11abf0734dc2924fa5fa273d6688d2ce36185b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b110500000000002251208f5435eddb02e61fdbd624d5c412af278d46c79fd9ecd984a9b36d7a23a166685b11050000000000225120bbe18df1129cec49d136658f753a495ee3581abfcb112b4fc77c3754a91381985b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b11050000000000225120bc61f8597c33643955cd7c3ed5bdb86b60770d38c3b60b5ab7f4c9d1497569b05b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b1105000000000022512088cdf11e99869fd100cc53cd5076a6970000df981012780d996eae8045a00e535b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b1105000000000022512071b9e402fcd3cf70fb37cc66718f9e8e8cbcfd71fd8455c20d8edb9b21c9ded75b11050000000000225120bc9cc13e6520eea4cb286bb5603a0ba4b40c526537a791fdf84fd9b5fc7c4d3d5b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b11050000000000225120cb29a912c49226fb24f41ed337cde7c020bcdc2903db24042412c07a2fcdd6fd5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120a9d8804b9b582c89ee3b6001d41563e456bdc853760a3a06357f8653b8cb37255b110500000000002251206704180025cd4a063c91c909a2b8323910eb3547f630cdb4a2320708dccf996c5b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b110500000000002251200364e0c0c15a64253259bb01aac6eb3f9787c069f1691fc8bf1139c1d40bb5655b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120b7a6af27680f2439d9873cd799069f492a0f415bc747192407acd3301e02e7035b11050000000000225120398ff2c560067f63882cd712dc009e5061e674c3c07a495f183de83ce5e2d5c25b11050000000000225120db5382c0b200ab03cf883144af197153c4f788516e0c5c2ac38e926566b8b40b5b1105000000000022512081226a42f34833f81bf317204701ef1e2841dc35f0e692aa4c98624858cc80da5b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b1105000000000022512082352fe199e659db99c9af9c248930f13ef38b41ce03f6f291fad45c89de1a4b5b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b110500000000002251203c498ba796d0f6e47f2eee2b37cf79f8fdb6fb177d46d9bdf99d6353eb83c0a65b110500000000002251206d21f22e6c8129b57534970c37f795eca3e63e175bf4b578c4b4ecd6a54a194a5b11050000000000225120c8ba11b7f9fb099ef74d2e51145ec3693c00348bb01e759e75746af6b0cbe37a5b11050000000000225120a5a491493e96f6f697216c3c37185bdee4f772b9d0db58e4990c02acf465b2575b1105000000000022512092949da2ae47a717ab3640af3eb7130b0a5dcc9200545c89ea34fbe1621be4cd5b1105000000000022512089df0fac6213b5535bf5f6b1e631b40100e49932c3ae86e4e05cfb162ac9c6685b1105000000000022512002455e94507c54ff700dceae2fab6e092a5ee9add0574fe3c55b04273d1bf1545b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120108e84ddeec801bcdb9b158cbfdf133e03940be6c849c4832d5740acec0ccd0c5b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b110500000000002251206dfe1ae52355dda9cf67514c1f9e4831b746a030787d00c3fb6cebc16b69ed275b1105000000000022512092e98362d7d8ab08a9c3be77f99860512df14895f468205ddb7b5099d6c984255b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b11050000000000225120bb2552a8946fc7ee45e41f026801a86886e2e4fd4f8ffdfdcae251b86eb50f0c5b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b11050000000000225120d47eb2606882299d529be95b26fd185e0639f9ccdf19d3df665ae8d69dff57225b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251201f98b33ee307efa0f327016ea818ce5dec77cb9537fe309bb290bd6d2df019485b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b110500000000002251200d461634964cc954e5deba8140c5c7624d6f0cf5df3f3b50027a66d5499ce9235b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b1105000000000022512077724217df9bfff79bd4f0a185548e565f20e8951e685833340550f7c7f1638a5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251203e6274c50fa33510cc0658395ff8b291e751bd5c7920c2be7de232cb7da088895b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b110500000000002251202eed883c03203f81b1c804cb1359cb144327763d96e35a96324ce8791319415b5b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120c0441b69c16f0d8d7c6727a94acf57a27c0682cae64899c0fb4242aef90bc2585b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b1105000000000022512022010e00b2e972cb9505cf4cd77a6f6e659dd33dc7bfaa4cf3f473a08321b2d75b110500000000002251207f129aca2744d80139d417a311a0c79adea078ac349fabffe4c3f16721ee78f65b110500000000001600141fa0458108af9313743233a3ef17c0a68a86febc5b110500000000002251204e9b1ec411c3753091606f7e12a34c6bc72c5d45421e9a3efd6a7a7a025b7bc85b110500000000002251204eb67e936e770ea97a7996711c68fcafca614ec5364fb82e8589011b8dac7cd25b1105000000000022512019caedafe8a96ca0fe52933e9eae87927325b4800a312e8e158ede0f825251975b11050000000000225120e3e6e6fc7d2b52abd428ad84ae1bea916c4bb4b2dc2d15112110595fc0b2d7c25b1105000000000022512041820d659084a05a0abad9d85185f47f36cca35272654aca4fc52bfd020914f45b11050000000000225120e184a3fc315dfa480a02c6761ddc78dce60cab2a83ced5dbeb5acf19b8f1b2e35b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b110500000000002251200d4553f32742b443424f2fe62e583891956b60f936265a010084219027cd25ad5b11050000000000225120c62bc884c6522346c6849887e13b06209edd9717d187321fc0ca2c66f584e0c65b1105000000000022512020811046d09d49d18678120d476712d663140be3bcbfa461b7e3386166092a3d5b11050000000000225120a706ca1cb757f5a5e2a4a4c2df467c65fdfe5a4ead2c628948d6e3b9da5030955b11050000000000160014c27811d15df88a936b5a442e4a74f90d763e853c5b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b11050000000000225120c0855b1dbcc09ba0a44916fa67747c1445a91c9064c707549d0a4fef2d179bc85b110500000000002251201c38bc7f9beb3de3f718aee8b9e8e3b053383fef3a80efd8f9b2040a843173765b110500000000002251207055cc20640e5465f8f2741925427b88750252008375a90c49a758e4ff80fd975b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b1105000000000022512081a37d08c40b6e76fa03a819e2555a54cc41a642ebd2fa202cc0acbc9fa7dad55b11050000000000225120144c98a8b9218d2008de6ce7c583728e680c5e5346033f8e014988e9b00cd3ac5b11050000000000225120cbff91779679ed062dfa47c2590a68550b113366a924958e20c24a6047b28ccc5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120b3ef151558931f401aced4de48a30e8adf12d936e8dc62832bb25774a7fb5a0f5b110500000000002251200bf8680106db4172647c4844d5a67d1e1c9165efdbcfaf941147e35fc0cfde875b11050000000000225120fac047a2ea305258a244ee1ddfc55761dde656fa2f04287d599698c97ef4391a5b11050000000000225120e132d39241182e144f0ccf42c4fd1eff06ed28e17eeeb6a7e535caf9c967ed445b110500000000002251202385c5409fe6f1012776293932ccd00f4efea932f195395f251e224141b7cc545b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b1105000000000022512060e377a06a269c23a963b3d2aee5ed9988af2ebd995017aba29276f2612df3525b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120ae403804d6d8c9845f9fc072bf17f2e1f572cb833fb3fcea77f6420d1326ec525b110500000000002251204e3aba727fa3b188211b76bcd8eeac7802cc1424c90aee5a9106b2a9cbf648015b110500000000002251207181d2624bf04a83af7163cba99659abe5238a73b9e4acd982e9923ba61e53815b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b11050000000000225120c6349675ddd7fa283d46ec7365f01b5b7578fcbaf4be4c860d65da7b396247a85b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120abd4662999cdcf67bda0dc1318dcbed9dddfde8b9a299f2a3105971125793f585b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b110500000000002251206c3c62470bde22cb1156a3d657d7ff8d36f7315d0e05b2c25337ce1d4ec530ef5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b1105000000000022512013198206962812063e4fa2b7f9b1c077da7706ac8a4c5a14de5089196f1a6cc85b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120861ff88e1563889a8f4b8f4bc074dd580bbede0f5d50461ac127d9874d5135075b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b11050000000000225120af3b5d739511e622440eeffb6f4a97f317a307853a2eec4f6d36ff33b0f71e725b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120d7c0b8aa1f0eadeacd56bc9efc404f7613873da15bc3cdccc051fb66121c4de95b1105000000000022512087c2688781d1d36704ad6f53f8009da9ba853fd78f4a556e3c08f49efbb297915b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b11050000000000225120ffaa5c0a960e0516615d95869b9b01602493f2ddd1e42d2b5ff2e06b141451065b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120042a99e765f6e7b809327e0f28450c1214e8ed038de508d2e3a2a2d1bedb56a65b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b110500000000001600147abe046b62b584f920399ab562e18437926b4b635b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120331becf1b6c374c1e15407c8aaf002f32cf15489f572273459b9cb556610631b5b11050000000000225120e6fa40c8bbf40ab4997a9b6e5f65c8834ae4a1b1957b569fe34241fc47453f0e5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b110500000000002251208ef14d0ece8b718be184dc943726ea288745ac2252bfee6a16427dbf065bb51e5b110500000000002251208bc3a7b3c61bbd6eecabc7a82ed30cb05147667ec7bad8df96efd2e0d42ecf1a5b110500000000002251206ad00df3e81584622bc5543a8c11ce75b8f8a9957cee175aeb3ec9adbd1441125b11050000000000225120ec45a06f459623721a8facec3e39002321ba19d8269b29ffaf8db4ea683a463a5b11050000000000225120bc98aa2d52a0ae1a373dea8a8e5f3a1cd45fe76acb3966e820c26bdb113a130f5b11050000000000225120b9f16520fef9d778bcae0344a542c5e097bc35cbbe5b46186769b30cb82aa6e05b11050000000000225120f5cd19028f3fca345009a37269e4c3f8fdab86c4592da3589be2905c5cfb0c8a5b110500000000002251204c473685a5d5e1f878e553190fa5cefdfd98fef558d356f2f6172e64ee9e3da85b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b11050000000000225120161bb61e96900c743409e2f4a4194b2704ebfedacb9db662db471f5a9b1d946c5b11050000000000225120c051bc80e2875e95d8ddf2ee9540152c80e22e228a698d46bf32f9904674e6305b11050000000000225120aa026aff300f20b928670017816fa8abae83f4bcef1c845a41fce351333e63845b11050000000000225120d41b11acab0167cd37661f65f3a8a04fed753540aa341b262b60129af10bf8855b110500000000002251204cb733cc1b3ace5182f7febec742048e2b4efca9db73afe7d5b340c0942c80dc5b11050000000000225120be88895d2fff45d6c6638c6445175a4703b1827c4cbcd64212e69dfb02e569195b1105000000000022512050d4241ebab2cc99e18207b502c6acf4413a5a83ae7914686353c082f14108575b110500000000002251207e0aa32e95b3a6ca0f3bd3afc886e1f30b244b9bd8e6bfa100c9451e8daa0bb65b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512070f307fb93d67e957c7bbf2f8705354e4db6d80292d527a2e1a6683153e9614f5b11050000000000225120dbce799b513c7abdce7b01a5c5c8a6e9249fc664e5d8bc1b8ea59393d9bde7ff5b1105000000000022512076e02e5d3a18c710c133efffe81534f08a18ae8dfb0522876d5e5fc5fd81b2925b11050000000000225120c059b2e381d2e309a2f9debe15dc4dba9bad37085795a594189dd815883cecfa5b1105000000000022512042cb20607559f4c28fd9265a2d77dac78e41622fc5921bed67736406b68207685b11050000000000225120355fba63ae94272d077afa07f4d2d008f83372e617f99a1b64792d126530a52f5b11050000000000225120faf3e897074cb551aae8aa2f9e82419ffb51b6b875208cac4dd47288dd827fab5b1105000000000022512088037a8c409cc93cf98de4f51f702317edca9e0e82a54d0397683244cc352aa25b1105000000000022512077f0390a28063e3a05d75fc81753afc3bdf176f806ebab8f97ea681c9600449a5b110500000000002251200ea8dc8d04920f7bfd72d9453826412563178ad40bdec4ea6ad003d958e70b575b110500000000002251209839f6d805e7a7e6f6cdfeb30a7afff903d69fcb320edf8134edb576a40022e55b110500000000002251206d73b497785da1456e28119e29a59f4ec96d9e07c3ffa5a96a3084c903c3701b5b1105000000000022512055db9d4f3f2c07ff4a782e0701158f92bfd5983f5598d99708bb9b20ca0464695b110500000000002251205a1fe4c3e513a30f9ff453d54e0c3fd25f5919389db2d320fc1ae310a5d79e575b110500000000002251204bbbf3d1e5e107110b7230264f40944e5ce5693df004ecfc8ce6c12c46717a825b1105000000000022512028e8ad07d0e674d1aae80b91e08c1f7ebf04673cf4bc52fb9867940282ce3b015b1105000000000022512096cb3831a4a7da3938db47ee1864c2b2e5ae0cdc2e03769faa6c625fd64147cf5b110500000000002251202a455806d7920d10bc65eeb782b4e4e617af74263392ea134c1400ef4787f1335b11050000000000225120d5ca7f9193a452dc8d6ec9655ae40607d37eb77ee78db5586843dadd07099bd65b110500000000002251209507f1f2bf6095765549bcebd3355b43e6eee5d9b1bb645a86f40a11f68f19a95b11050000000000225120cf84693906a80f9555ba614e4efca28bcd543fdfe0196499da5cc486e30fa16b5b110500000000002251207ff3e6a6875de01e8e46641de27a5ece2b80bc17626de7416e5c8b5d3b66722e5b11050000000000225120a0ec5da1e38bc588d2acdf3d64a7dc33bba6081ed0186aa2c8ebd0bb26df30095b11050000000000225120c67187f2cb41a480872cc478c914f6897e0ecb4071d92d68a3dc6067b91f2f2b5b110500000000002251203ee48c8fedf7565b1d92342b269ba4ed936094b28a65233a8f48b758266133885b110500000000002251205e0f31b607459156e4cda1f8141c12ccd999c41481b69f51fa06e871e6fd79765b11050000000000225120b0f462d5145d77f3ed5501636558ae3e17bfe69964d23fe089bc3380a9bb71ca5b110500000000002251209965033fb63ab59d6e03849ee424659aab08552fcffc57a61a51a26cd4d137155b110500000000001600142a2153cf0e98f8223725495934b36feef81441475b11050000000000225120e03d5a70e5edf43bcf6382f9c6914f60ca9124c9a179e090a85f0c6e46b870155b110500000000002251201da64a82357b4d1e58a3c2c51006752b404fc5bf8fd251b65bdf11941630c4a25b110500000000002251208b934a08970340ece177ee5bab0473169d681daa2ee8149875796a3b4e7d503e5b1105000000000016001436dbeeb8d327ea9e2b63ccdb0a79ac0ee0e5c7565b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000160014f13dbd99fafa689445f841b446e2650698788c2d5b110500000000001600141fb459dfd93e8bfb0a4ffd6318a0efbc758963865b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b11050000000000160014065fe1135002c3d3096ad67f4cd3c735491ef85f5b11050000000000225120c15484b744147fa35876adea9b13a3ccfeb92be6942640eb105625faa4a256d05b11050000000000225120352c161b0f3662c2e9949e2f3fd4b9abed32fbbcd524dd977f395834c9efaf1c5b11050000000000225120070259460b7c10c185db481158723cd227b64b8651a8b9bb680ad16b22c55b555b110500000000002251205ecffd87dc24074cd25b9b2ff7ef02cc34089bc925dafaae13fb6f3b70382f305b11050000000000225120c0ef3f53d3280041b6e4f5e57e935e87496ca56784e60e6e909142bd575e94125b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b1105000000000022512007a7d69038c5355923366e212c44f1e6c51353082f3dd7510abc6c967a1827645b1105000000000022512022a0f25a00a9874da6ab630acd39e6a20c60c0c9d9c2a875fedf5774e2996a0e5b11050000000000225120335d1772900e43d2a855d145c2bd70fefca56ab97ffdd862ef884aa45bab74b55b11050000000000160014a5f2a338f27de2f572d29f718744ad2e662270e45b11050000000000225120a2268e08a1ac771f3f4e36603a80a7d3850f142b0f224061d84e4b8421687b855b110500000000002251209efa313128c9762b4277808845aa06d2e513f0b380d70b02307dfcf8c40e71de5b11050000000000225120e19bc0e493e7134bd0d184039c5e62052c4c9f8ee994c58b117d4d6fa0ccdd6b5b1105000000000022512008369ff0d635675db33598ec2c723eb78453821a64ef58a8c553b4a86027d9845b1105000000000022512064fe8d7f56a76b06a3faaa2f32c5a8753437e2fde8512b872b2bc9294bd3dfd65b11050000000000225120491af0a7c855d7c5ae092f33d0934f8a7cff001e63c8aff41a8af70cd6c6b97e5b11050000000000225120aaf8651158bb5cb245bdc1c91a30db2ef2b06a8052989b32f490699d011961b25b11050000000000225120f49aa6e7630666008b0d0d8e56157fbdc38f119e5961b56e218ce84dd17536a05b1105000000000022512092f9d1293895e6b145f505520081ff9a49bf2162fa633fba6cb63080f66cc3845b11050000000000160014e8009863a29d28c20a159a574b4f6b62da85bebc5b11050000000000225120d80e9370392fa78089bd8c140fe36d1f308879cb89b876c4902c2ffeb3b235815b11050000000000160014e1b581310f8f6ffc6bdc9f93418fdaba4e606d9c5b1105000000000022512037056571e30f81c396bab99a1e045961d7e8897fe9e8eb8327c9d601bbb4ac225b1105000000000022512086683423aa376757e456ebb9ac98790b13189d7a15c4623dab68bc121dd835185b1105000000000022512090e51330724ee394620d2b2b573a86380e048fdd5bff6c5bfb9d7939bcddf7955b11050000000000225120a897512d6e61c829d49ba24e8f81b471ed04e0c9ea774c2db5b1881eb75f85645b1105000000000022512000fb39886e0b5c2649a5cb358b30bb3e2484b0de8f411361b1cd913f54eacdbe5b1105000000000022512035928398fab71972fbacf7984702cdd6fedee34ba6d9406b6e3cd6e91e4a63235b11050000000000225120ff9cc5cbf21a640b8fc2a981576378a7809e0b1b2f58a2954c65eba8ef3a9dcb5b11050000000000225120ad379c7b9f49969ae0814040fe3f50e946163757cba59d2da12afd55708a5e925b11050000000000225120204773cac9e2b5b90271a4a785cff463b0f7b773229a6b0d15632c21d3c85b015b11050000000000225120215288da18990979084a526f9802702e5c26ede837a12c6babfade37fce8b0e65b11050000000000160014bfd23e02e777a9e7693ae58c175736adf5630ffc5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251202f403b0dfe821bf8078db061a93859d03320ceeab6673c00e998d38ef858ab4c5b11050000000000225120fdfcac21f1be8e2367e34018ed961acb982400619fb681cd10f59d49c1843f3e5b11050000000000225120a5e573551dd9b53c5dc2eb8b954201ed3c94bf3624b5d162f0f9d03b3b63c5a05b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b11050000000000225120d66dab8a8db144b46ba9eb0c00de5bc924ee29a8307119eaf2b43658c104223c5b1105000000000022512000adfc7fd23ffe7416767d456aaf6aad8c5dfbe6f02ddfbeb7b37997d2d9fbc95b110500000000002251200671e2e9f9c42974ca947fad7d4aa6d8192ae595a6182b8c87edfc82b7b33b735b1105000000000022512087c77180e161c4da18e02db7d6113c4a368a228f01753c1ff0b4b6d39d6da7585b11050000000000225120f2349b59c56fdad249c3f18db82be21f5959fe0f6a0f2e604608cb0946ce05765b11050000000000225120c8db1bfddb6dc8fac04c3d6b4b18ba13246c8469e1decdd3b10484f4922a00da5b11050000000000225120dee24e60d81a1fc3b0c1c23a6d57041c2a8c1e545b76b4ce4389ed61273c3deb5b110500000000002251203bc3c84a7d4adcc441212591631a32f72f98a4e9fc058d8da08dfa5546c9b0965b1105000000000022512079a4abbe291962c1def383856fe905b397cbb89810a4a139ab6b58596ee499d25b11050000000000225120f9a199a41cf9db84f9c4250786d1cf42dabc66d98c1b2649445e488cdc58d7155b11050000000000225120f05afd9da824826f6eadc94978f496cccff652f3dc215bf8fd9abd0a4211e2f35b1105000000000022512072b05dd374616db7b29898d96b93aef571d8f9ddd01df1dd929b51789fa41bc55b110500000000002251202e92f8a0c121560ed50622fdb93ea8bd0554865997cc62019e3924492ca52c9d5b110500000000002251207ffc0cc42ce892626176fa8af3d8e5586d7d34de221d00eb797e80ca9e74a9ba5b110500000000001600146436130c58ce1823c6d499581968522ab8acfc425b11050000000000225120721aa94f6b2b519939a2fd5c4517c62a4067bce7e3bfb590ab5f8778137cb7295b1105000000000022512079f91622fbad7e719a9b10199d23af28f5d53dba6cff42d3a3d68159e8495cef5b11050000000000225120d1d8fc7ba0758ba1a85847df0520635cbb7abca5045d6924e5637e644fb717485b110500000000002251208dd427011e1b27634ff840db9b29185d44dbb4812ba75ac8dff9c8ddf281e7df5b11050000000000225120085e3eccd41681d351f1404f2cbae149af8f9f3818c4d8ed1dd4bc7a9aae36135b11050000000000225120e5e37fde1b45539d47600401765a6e4cf319610b4e3c46dfff24f85c72c3ba665b11050000000000225120ca4b82a10d612609c413d697cd503e6e3d8edae2acb7d31964d3e3ed402dfa855b110500000000002251207d4f39c3bf91ee43109a71b3431c4f7603238e57def356255ba6109c46e6e9b65b11050000000000225120087b1dd9a2abd6f0d9602d0d76d63aa8470602967bd9f49aa4a5edf42d0be0715b11050000000000225120c8170691b4159d7f2f776d9f41ba3953f242c1fe71c3496bc49f6d4fab2461675b1105000000000022512072cf09000df43c9f8f994cccf30b15a1390ce9508b04550dc42b8d24b1cd5a035b11050000000000225120750183c6ae591d9a2d0149fcae536ea08d845da084eafd97b9130ae3b8dbe9325b1105000000000022512016a7d87088bfdb785ac8db3c6ed88efa298927a13f316dc8d7f25747d06749205b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251208c842cfae143a50986af051e15137e7646567fb608b3184604a75f231e8e32635b11050000000000225120d23954a9b6296fc255fe679606e53cba4179b0d68546ef30f5e8eb5bcbf026fa5b11050000000000225120c9728677cfe0a62912101a992356e331fca602ef57d0f7f70de37a3a2e433fe05b11050000000000160014d4f9843721b7b5d43dc4743ae2bc7849bf0082075b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512096a295d8fd16b510871d27ec4c1fdbc40961432f7b2f07eab8cdd055fa6ba56c5b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b110500000000001600144960136c36f02517dc10dfd1e0b348bedc80fa0f5b1105000000000022512034802e273141c5dc1ddd7b4830734d7b8aea4b079a68bd79c4658e461588a38b5b11050000000000160014fc8cb7c4d82d4b848096fba2fe3e27ba9fb041005b1105000000000022512019bc3c7d34ab15c46cc1c7366e0e616f39a929b9dbb6f4c25091a177e1d23c075b11050000000000160014288ff4fe15569168d9fd81d5975b7922aea2bd3e5b110500000000001600145c7e54597d1d2f01cbc5965a4fd5de5cd263f4105b11050000000000225120a4b2f08d46209c185417a4b44c739a29aa17495a39fc51df4583ea7fabc8ff985b11050000000000225120e936da3ca01edcca997e265d47fc582bedef3f1232ff4931addb57e98ce9b8fc5b11050000000000160014c5d444052b89341a7e93788a7d03d668430098fc5b1105000000000022512085ddc2f171700086dabec8292c4b0163bac19ceda594e463b1691e1c2a6aacc65b11050000000000225120e3eef80cd8c8dce7c2a0dc950d129035b4ea630f20741ab2db737402271ca4865b1105000000000016001485e144aef1b5fe3cf4114dbf2edfd42d20e483345b11050000000000225120d4a2b4bfe6dc154fcf15c18d67743d0a96c916624925df89f59006c9b1a95eb55b11050000000000225120645190c732b28798132e367ffb9d6b37ac8988102af21b6e3dfc6ae578ee774d5b1105000000000016001460a3f0e6accd9ee0893c12ca6c53b8ca0cc9c1f55b11050000000000225120851a933fc524d5b24879ce47b2eb2154c94f6810e58bbb03bc0c05ca30bb8e125b110500000000002251206fcc63e4a892165324756666dad9aefe819618874556783a11a0f331571810495b110500000000001600147af7c65a0f20aa29c16becb56ecf43a33996fe9f5b110500000000002251206e0fecd89f8c4510fad5d22cd693baf44f3d3cb79cf244be4bc1112703cf95f65b1105000000000016001482b40f7739b3bb9e4409d55d42ce402ea16cc4195b11050000000000225120f68e78de8d30f5cc6c3202dfa0ff3e48bf302c20a001bb376cf85addf37c518b5b110500000000002251205880423805e5edc73b1521165c06223ada4a43cac807123302d5626b5eda3ab45b110500000000002251203cdf1d976cfb08d60d5c396a5f45d5213119ce0e06f1291c9479d0e705fd9fe65b110500000000002251207771381e5ad310c000a551051d55689acf2c72c7dca4fb2349caed55416fd4365b110500000000001600140e4c12548d675382c85a54328fab28c1fa082e545b110500000000002251202d9ae09d1bb9568a9536868178db9377f0fb9c853f3c150db17af25facf6f4d25b1105000000000016001488a46a677699a3fc95af917dc238e7ebc08441505b1105000000000016001464311b8ba2e184a5e7d946f97dd54f049d325b6f5b1105000000000022512025608a8830f1788a7bc59995c95ed52ed11dc384b739482cfc8514ffeb83fea65b110500000000001600147512be370d12a028857c135b3fd90eb18c1e96815b110500000000002251207aebbcf5a8a435e94c23083d366d890b9d4005e6f0b3c27c686e058f382d56905b1105000000000016001453258075646ad4cef078fe5f3ca4f2a4678668275b110500000000002251201978daadd029551daa792356560145f162e18141d2f3574c00f61589592cb8d85b1105000000000022512051f95e75678c9d71e59c6839a8aa3ab0d465415029b4154f753b06b541f91e135b110500000000002251201a3d6170ec2d2cfa29c9b542390a7500a3c83b55148c371f75fcf7b37fb0a19f5b11050000000000225120d6311db4f16e8ae7bbdf109592eac1e0f11f48177d2bcf525e05f945b951e5e25b11050000000000160014d5dcf18d2471a2988d34de66e75d0da832dbd9bd5b11050000000000225120c09f78bcecca842798b5fd62d93d8641cfcb23348bdf37b1dbd6429e642240345b11050000000000160014c5da565920bbef01e15f545ad7bf45d4f6e371a35b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b110500000000002251207d7c97af8e3dfbdd2afa67ecaf36f02797f3978312058912f17eb6e1023549d45b1105000000000022512038bc4181b3fcc864ad997e18852db3e8d20db660ba046cb1c944340b420d006e5b11050000000000225120b1f2ccac76ca441554577e7f9356ed6a0322df183cd2f418d8ea6e4d159433985b110500000000002251202df3e1f733dcf2c9cd83a9ee8a1dd8b5c8cd7021a3dda154a4a6fb45eb53157c5b1105000000000022512086a1cb468b495f114a6b7fa73885dcde2eea27b037638bff511f0749ed9808535b110500000000002251200f13e728ddb392e69206d6473accae15fd123de5d7500cf6e78497f94862fa805b110500000000001600140bcfc7e5d1c10a40c1cc12aaafadbbdb8c54b64f5b110500000000002251206b51b9e9ea7a9a93c48d713fd544424a9b6bc19b1c4e526b37b1cccfe77c85365b110500000000002251205606314fa202ba5fff26cee24f9c9d71cce5a6e95e213923f22bc4a92b751fa75b110500000000002251204fe1f4228afa36e93eab044b6502fe8e1f458b3514fc88836ad70b8ae2ddf59e5b110500000000001600145b3730f4d9350cc031ba561bde0e91fa85b948e75b110500000000002251203b18801144bf77a61c527b0da98390135e39d082b134cfaedfb601e7638fe7395b11050000000000225120b7f34b8916724c551506f0533fb5285a73851213ca14aa5038316b10880215a95b11050000000000225120ea52dbd657129bb11dbeb90ba6163b8083050c13d0b3399fe1ac49142fdd5b8f5b11050000000000225120ac5e254cf46109f6b7676c457e2026bfbf5b294a62399d994c46b7fa13d8ab675b110500000000002251203c0ab8f350e47128de128cf1e3897b770294732c70e29e1e95bea54da8fa690c5b11050000000000225120d901280c79015c12b476e62642f26b1a590586d43c645ddf64bd993d25581d965b110500000000001600141be00a9657046a3521388854a00a2e82224355085b11050000000000225120f2107ee0227c8608009728071be7a5417e68c6c09aa1e406baf709906026b4ea5b11050000000000225120face259112754678ac0fe1039f0eea5dd052725637b53ee2cc0d34555efbb6065b110500000000002251206e2c745069ece579e4fc8cb5292c3c0ec0d5b224160cbed709962af8ae1febcf5b110500000000002251200580459fdfe1cfcb25dcbcad57d44df858a91ca16107b2e00115a9fa8c3b1c1d5b11050000000000225120322e0e4a4b4185b564d8362a001740634c3043defe3dcc042f971858bd9906305b110500000000002251204472bc94524182b1efdf947c59b2a5e7ab182eaa4f06c6ce3123e24e2309a6ea5b1105000000000022512027fe8ca5a36406300e1752d34317fc751c349d210885a073a7420670ae7881295b11050000000000225120a5b61f57e4e2c09a09b38ade6758b28daf3e1c3e5b4ec83a4f14a139c78a56655b11050000000000225120ee96ffdb87b8829f184a9d73f7708478937611ada3153e531f21cafb0722c8e75b11050000000000225120f971d607faa230376d8d97a2c6f3913551be7e6513835ba740a13b83e622a5e75b11050000000000225120dbd97da715d85067f036ccdbec9ca153c88e4aba6671eb0c6e6024e86a8c39775b1105000000000022512060437571110e9c4f1195f6d3026ae67930388485df2d122670bb86cd5e832ddd5b11050000000000225120f18481ab2ddba2df70f540d7e21f2603880b63afa4d3bdd6ca2c781281bb549b5b110500000000002251201f7dfabc5d33cb36a13634fddc84007dc6c6c269a272a25c8dbddc41084bf0be5b110500000000002251209604ac612988d292078020fd4798826a36bc37fc113c299275bd1cff6980feb95b110500000000002251208f5ca24316fcd92cbc48d2ded79fbaae15c9ab2d799ce0f5c0302474bfad5a985b11050000000000225120ef8386348f7081068e0f18443cdf4a4d56da2b4944bdeec90e053f11556bf97d5b110500000000001600141b149c76acfd9137d5641288d74c076e8c4d5ca05b11050000000000225120e7f997333ace9c24c95a4bdec69eefd5d52e3bb21285a44b65e264176c9c3a595b11050000000000225120fe04d526ec4c71ff8c86ebf527f1e1ec94a2ab4615491910b7601f9cc930457d5b11050000000000225120fe14c872c08423cf695e0b048c8fafd4dd9ce0ab9155d42c00182b1f581d81aa5b11050000000000225120288e00981ae7e3f624a2a6cad7e2483ffbca5f688f4b9108fd2e4f231f0be2fd5b1105000000000022512002a4905f332799a1eb407e70b5a89a00230cc1d7821bfc23fbd5916eaebadc8a5b11050000000000225120088505f095842e5a2b2b21eeff2e8fabe74317784f249ad161352b609c4766a85b11050000000000225120563cc0a2813c87e7e7f2f598513d8779790730a2dd85d268667ddcbfb00a19475b110500000000002251206cbd5c9c03adf85f577d00b4285390d0e77ba9ba15137a64b04ce89445c3fcf85b11050000000000225120ab374ee3a355e61394e9d6835cb453b1fb4721dc7c1875c2b9def88c3dc694335b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b11050000000000225120a7ed67079aa68717778dd398d51c9710fb64773d3da3c47949746ad5fb2493955b110500000000002251206c84adaf67f7c4f007bd565f8aa2a10f10a064f6a62055a1194011e9ad0ec85c5b110500000000002251209ce2b101984b345d47a4e1d1589cce1d9c35cd5fa3d6d7e5e11278133a828d0f5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b1105000000000022512062fbe78ed9acbd0fc237517efa1a6dfee372e76814a5483d2fe5cd9b1a8d25ac5b11050000000000225120ecb66731b201ad3c9dd8d77125d9a1faf57b39cb707cfa39e4f5b73f868b68705b110500000000002251207712ce714b2e26a22b31d4a1cc772b56fb11e97652d5e3477d721255cd7297af5b1105000000000022512093c0a2afaaefa0f1d639e8981c50359a4bef552d88b57cc72c80c0f92864c0f65b11050000000000225120ffa1550825ebde659ea5ac41ade27b22da58e09fd7767534e0bc4e26a23941d15b110500000000002251200a5c71cd217f3cfaedd9ac3958ed19a574b666de561cbe14df87cd48a44865155b11050000000000225120cc0864de67d98b2d432e5f96c28a99e50ec5fd9cc34ac015bcf12a0cd14b747b5b1105000000000022512088a61ec576947b44f236354f49569cfb493f797ba8e36145c72be9800bbf65c65b110500000000002251201a86f2d0957cb8448b04fb592270aba025d4c6170d500a3cdda4157db359b9df5b110500000000002251208d96f7d2eea14546d7316435087085d592cd5336d60856113879dd3df795e1ac5b11050000000000225120908d2b23ae060197374cc5399be3d11d1f5dc0106dcfcc992023591ea2dea5af5b110500000000002251202900544d5c01a0fe2853355d51796a21552088e10ad1235d6d320807fd8974d25b11050000000000225120e1770f41712a8935f8beb4d8336f2bf692d387ee4e964726e98a0bbc335eaaf25b11050000000000225120f9de0ae92fc3e0fc569e96a68e854b82c57bb9cd2b8f822b9abe8c89920eb37d5b11050000000000225120574ab1c47547ae2d4190181bf14041d98952a85c00a4251f2814fadb3c6ebfb85b1105000000000022512040866535a77730783e23907518fcccc285c4ca4ff1c65feb81dbba2778a078695b1105000000000022512014a3a989b672d8b842012dbbb945f79d4c62b1bba7f9d2b1bf142add8201e4e35b110500000000002251205fd70eed72e64ce8201b4f01e513bf63fdc0f179c3e44bcc2d5188570c1a05425b11050000000000225120a7f28153578cfa541bcd584465ea33290bcecf26e75a02f69a8908800029c5d45b1105000000000022512041b698197fc6c8c13c5ef8c33e08f08d36cd4a485ead7e1129bace9f2316285c5b1105000000000022512095f176a87f3283596ffe06f3951d157bebde60cf1868fef2be695ecde989b5105b110500000000002251208846ffa5338fe9fcc49c6d830820a61900bf44de7b71bf2b6a485998124ee1a65b11050000000000225120e790afe5e2116e31df996402f00f155dab1a2723768571468fb3f67380eb2b6b5b1105000000000022512007f64fdf182f189e0fbca65498654d526129b50416f4286079937f5dd23a93db5b11050000000000225120b7ec228497478e59bf4d9d912046a35a9b70ca9aff901c348417e65edb90c7d85b11050000000000160014ce72d8f2c5f4d588a11fadad82430b8c9096037f5b11050000000000225120f3dff4b2c73c68aedaa9b0f463096062682d856b4de5e0b844c363cd4246a1b25b1105000000000016001415d3b7ab8f62d8cb82dd1c88dbee844e90a064825b1105000000000022512005ae3d3604972ab1b457bd14c4a57746387ef27747460711fc6786c18a68452f5b11050000000000225120f3071a7ba7c189f2adf97e27ac58c1894184b5e877c7cd0e87afb854e972eb435b110500000000002251205a22318b335918506ae7ff437cd4ad2efc74885363ffe50eba1a1182785f52b15b110500000000001600148c29673f6cca7c5c280f5fef708b292a8195978c5b11050000000000225120f23cbd94bac65fd70344e88a2f1923a661abfafc623587e41b446e95a18caa3d5b11050000000000225120d2acfe61c7431e5f62dc32d1a05154a305c929cb895f272b3db3dce40dfa23b95b11050000000000225120e85f74e9797d0241dfc1b12d50780e03147d9500c3b613df3c3651042f21cc9d5b11050000000000225120fef68c94e8390a338e2b52794c95258627d6a61cced5a9449da791b16d710e685b11050000000000225120ec74cf2c627457c8a3669f680f69e2ccbb9fc0c22c1bf7c813416db6254f785f5b110500000000002251206f7a82875a6c78708a11a0f70ff0829e600888834a669f331fef311d5c1efa0e5b110500000000002251205f4b39b1a7a0b39fdd982a63de8f08a8a9f04e21ce518ca5759f903f965453405b110500000000002251205b48234f2b690c48d21b62a52492515831e3cc13779bf679e7187bbefbd21ab85b11050000000000225120f7488cfa5e019d31890a935f5d499b07b679c5877c2181612f633fdc693e4d6a5b110500000000002251205cff4a8ef30409719a77e829d7a098f4e59c88ce12061f78e82938911137a2bf5b110500000000002251207ac696130412633edd4e0cb3f76a5289c15a39571b3beadf96a1143efee001835b1105000000000022512032073e29b8884dbe7f0c231c4b2c3657505a6a8a442ba3c12b7c9841eb11b1e65b1105000000000022512061045ea250b5c62f14b6a6fecdb434e5b36600182c8eae2082186a80453099045b1105000000000022512056ae81d3e21ae6497c00f6f23037388deadc6611ab4cdd47aef892bf84cedf415b11050000000000225120729d37727c5b5e0dcc01fd49cb49cb1c51f4ee43f44bd6853e6cdae2a8c684985b11050000000000225120b87f6c83f4747f129fb3304287d9c944350caa2730246cb91f34197ea6e15be75b110500000000002251201fda052c373a1c8121870078279f409accbb604d9a1a1398c689d632212d92a25b11050000000000225120fc9aa8cd4b95a06f2b0145ecafb9269baeda1c97efb01cbd5df1e00b5c8c57ba5b11050000000000225120733c3ad532e5b9c6e9eedb9f5a4fd39f1ad6903c5c218d936ff0f23bb9fe055d5b11050000000000225120d5115a07b7df6a1f7855b54eef3dfd3779b7b676ce36575a17f23927760f68505b11050000000000225120927b43140f539ad4b4d95f89e243a31181e3243b7da6233537bda7bb220d28495b11050000000000225120c8ab042535208e283350ad1bf2e32b5562b9e124232fe6e8bcc40a5b8652a2625b11050000000000225120e373105e8126f8a2a7c1d56ae5e9a242c808001619fc4ca90e37f675f978b63d5b110500000000002251209a992525fbfd6129d6fca3bd860430af50c209e9f03bf78800b7c08476a419e95b11050000000000225120f57a8774f547c63ef4887a832d8447412cd788eb07bf02955eeb62f5d4c07b785b11050000000000225120175f524e70478b8fd38521f4b6b48545a7a7a8e2bddc30c3749b5a858d6624e25b1105000000000022512004a72f1edb073019290a6429bdb4624f76c2a4c2371cd3d2e0f451356487e9415b110500000000002251208b38f4bb5ec9fc4c05848c4851514a08e0f9b98320ff62949e2b745241f084d15b1105000000000022512089e845a449bc4a9b40414ddff1f740fe725a21d0ab416cda5fb0bc21de6077e05b1105000000000022512072ff400c7bc86fb94adcd49bb13393ba150238bb49db40ee83696b766d9848125b11050000000000225120447c861a764200e22f1921843f011de2a02f12187e690abea2b3b46dc198b5be5b110500000000002251202055a4e1f2f22eae9ea2c487652997b1eefda6cf889a53a0d7a5f2696a3c57165b110500000000001976a914e755e986d49b3151b6dfb6489ef3e6ce22af6cc388ac5b11050000000000225120d574ffcb854b200dccce54e904c054660cb420b3306e2721b2b105b0bcd4150a5b1105000000000022512037fa6057063ebb501b9c4e66e198476ef349606cdc8933548257d13150d867aa5b11050000000000225120e49b38f1078b6e7722fe8c4e3e5573c051ec10597372e3e3182d1b705e91af6d5b110500000000002251201f3854c5b6c76dade32017081d2ed4cb937cb3264804d538d154a60a8fdfac4c5b11050000000000225120a610d6c75e0e92dd0f8b49fab65981f915e9aa97febff6f89b32b51af1e6268a5b11050000000000225120a8e99d852f0fd2dd84d2ac75fcacde80cab9dd2d08847e2e88747b639d7b6f3d5b11050000000000225120dc1ac5a740b06d596e13fc609660efd2bf8cf2de1730e28ddd8575f17e8fac555b11050000000000225120549e7513b462e217283cd31ca3c874bdcaaf5d0d40d0398653f5ba64284f37225b11050000000000225120c632fd38603c137951bcda21fe9c70e27ce24dacad8acd262d69203dabeb99d55b1105000000000022512099373336c78c72914468d3e37ebf9ff5252ba3f939f3aebe45f7765fe5a83d635b11050000000000225120a877b356d928e7192ed65b834bce17af55a4f499cbbf7cecd253b3ab478b4db65b110500000000002251200412f0db349c92440dec5f4296377d487b24e18be70bbce638ecbb599a1ab8fb5b110500000000002251202fecd75afd4c63cc8081438ce660a76a9be89c71203341aecbdf0b2ad8301ab95b11050000000000160014a42eb7307000c89386b9ba13f40ef53e584d43755b1105000000000022512079190e1c9aaa3f5454e9138753dab814559c93193300ba5b56345ad98148e81a5b11050000000000160014513fb8b1c614ba507e8220dece3ed0d7306fa28f5b1105000000000022512005c0159280fe2949b21ba9ba85248a93d8c12d63458af157d3503a07a71d35f85b1105000000000022512020caef4a189bd1b4e4905a9bb05963aa1bda8a9763e6593b6c79a506ab2c30865b1105000000000022512002e6bd5fd3a555687df929e64b44f5aa41add49d14ceab674252f686a690a00e5b110500000000002251208c0b92cff6215c176144a9943da83ad4f26cf496066b17eddcce299405d496a75b110500000000002251208ca669c49fc8aae1f08a0bd9c63ff75031d3d3a25e6642621269f21fc587bd9b5b11050000000000225120bb81d64a0877bc995b9c754a257e730fbf62e71514554a6a8c15b8a8e07978c25b11050000000000225120d9da93d3c334e9dffdd64683b82dec1ca66e30173ecb6a56ebfabe7fb3a7f1af5b110500000000002251204e30c5805971d1373341b4d7e85d1d63cedca5b5f9e9fb4c6c64b21d919325275b11050000000000225120977a1e761f97032e272e39ae9efb634f8ee552b355c70f6028aca40cb7b5cf5c5b1105000000000022512011df2a9f75aebbf1b8246681695256f622897d99f4772db2d7d2b1dc2c34587e5b11050000000000225120925de29b5320214d6d379c5478a2534bea8fa5524493aa0451a82747bb089c765b1105000000000022512005fc6ab08930aea5a850a850f328108e8d4ed19315dbfcb749dc196181aa88d75b11050000000000225120e30ef25d9dd69a0ea3696ba37e5e5dd971379ea00fcd1406e23437e52782ee3c5b11050000000000225120ec11c59e6b4ad32956f561e13ed5964d22c565439aca7f555055b987cd3fac3f5b11050000000000225120bb7301731daf07335792be4e3677b5cd950ae8af96abc32e0a653c1879f72a285b11050000000000160014e8a6faa5154a2c39675b808af6a5ab979b350f1d5b110500000000002251200eba5c567c3a2ed8443effe20c45788b414fb2e74d52c236199fce3b9601164e5b110500000000002251200def95d5570deb64ef00874f558d99b0c159de9969009bc7eeba3f2d8cad12ca5b11050000000000225120dadd4ca6157af0c15a68c7df5fb981aa1ba70ee532fddae4df19e91bdd653d6c5b11050000000000225120b469586d4253cd11d36d04e7e4adae5d3bb9ec2fff16cf682d1415804cf2b37e5b11050000000000225120cfd47393dfb8fa1a11ee935d1576a7fd75cc66b9a426fc83aa1d2535a2e626c35b11050000000000225120738c48c55c9e6214ca1a71a319cd3e2ba922739a8c233cd78cbce38eaaf6d3065b110500000000002251203e34b7673066c26432226ba3c0cfc4e279759a6b3cd168ce3e4596038c39ea0e5b11050000000000225120a168b2ba709a025ab6f42b83264204f8749c8f69d2b10db4fd0cc3cd1dd738135b1105000000000022512077a3eea628e3a1bb6e8b7e8f5bceec11826562081ead312b65be345f2a4f95975b110500000000002251209cdfdecceed73d538a561394403d5f918914cc557de798330350ac21285a30285b11050000000000225120b795f7cee66b0024164784b3ba6a6e568e374ff6f8cad8a528246253718d84b35b11050000000000225120e072df150c08f98930edf12efe6c0851aa76cbcc66355a9d0fe905c09ba43f475b11050000000000225120a837c14584c5156b22a836d3ac40935b315d645fa0416da668b22389cce7eb8c5b110500000000002251205b868f424e9b5dbf4d10f41519f2dcae2b676f386e02ecf17bcf78707a04f7f55b11050000000000225120d50fc14319c7603a274efd82f38ef75504309c810530fb69c9e72a42a1ff6acd5b11050000000000225120032046796c7042cad8b32559243fc2727b6ab2aa2bef7c0cd460c7dc33f7018f5b110500000000002251206cb1379a34032ee7d11ab0669237f692eb399f34be6c341be4a6400cd9d322f15b110500000000002251209761206350ee61b4aa1e142ce1993518274dcc427224659afdda82947fdce8aa5b11050000000000225120f8727339de4773a2fe74a5588ac8c7bfe2dba9db2759ea3ac79fc18a2b4027e05b110500000000002251204a9745d2daf9b52467b99b83e44adc5a880fa5d6f26ec208b516605fcb8c1b4b5b110500000000002251204bf0314da24c553d87c724efce3e6b721367d618bb622e0a3030b966c46f83745b110500000000002251207b11b6a4c4f9ba583c41eab09129b518b964de579c7d7e0db1da9f692fddb3415b110500000000002251201c3934b49275ab945749e391ba23e48929e769213b1b0db77cb7f84fdd6d156c5b11050000000000225120e4b9a7f39f21c9162fa715df62400c297b799a22cae326a2a27809c027529aa45b11050000000000225120662c0835bb79bf94c55c9d870e6bb3b9302e536d75fff7da74cf6cbf86338d655b11050000000000225120a3514102af25ebfaa230c702e6ffac98d526c0ee5d2cbdfadec52ef0ea720c785b110500000000002251208891351ceb7d40c66714652a41830d890399a21e1742522cca6656b484c3d4ab5b1105000000000022512001a8f9f8eff940b1873dd6876a9d949f94683915519b6cf4f2be3075299537535b11050000000000160014a8ca2a6fa2a98101db861feb784214693e915d7a5b1105000000000022512024f9cf9f322cb09ed1dcbfa2eab59cc50bc71339b3f6678c3ab88f36d36ca5c55b11050000000000160014f597096e185cbd254822327a878d52ecc06a19895b11050000000000225120c0c06aca8e49ddb3f1b9221de3c0d2c0ba1673578f40f1596f1ceca6acc96b565b110500000000002251208d9698bcf2db5089e9592f598928ec392eeee1c488b82830b690de25ba60bf315b110500000000002251208f2b97708afa06b363c45b62e7ddee5ee2fb9d2a5a2ade48ce8281029ed329165b11050000000000225120a3be1ab7eb6b534fd10df2cca19aeac7402bdd04a90e01c09f1f212d9f67a4045b1105000000000022512004a57220898b654d1ce3e12e71dad33b5db9b08e79c3fe0d3d9742ac3e2343035b110500000000002251201a65171c858f0c3d9a81df1944794bb9e42c826632a1d6b28c94776371771e3e5b11050000000000225120ed9a9badbc05b76b43870182c3a9c05b959c37bd0fc9a6dc0210aacd129bbf085b11050000000000225120aa06dbb263576f12af3778703095d30234b8d1b273ce051770513a391dcd98425b11050000000000225120fc3900166fdefd23588e134510a63f818da2075ac32d677ddd0f4c706e18383a5b110500000000002251200f76c4aeee464960f53fbb89cad7cc659dab1fd7a554ff8b127b34e7268b262d5b1105000000000022512017dd36d66916491e363adbf80ce210fae89f20bcbfa5fa9d9e1e5392d4fb0e475b110500000000001600144d4bc39b818d27611e9876b323e429af19300a0e5b110500000000001600145764a251efb9227b4b71c34b8fcee06b5f6285485b11050000000000225120508d6a37cf150a1d381c7e28b4b56c4c0ac1f85b1ef72e791e687f908f4546e65b110500000000002251202bb15485d52b322e713bb261e717673db7221f8c8cd77ef0036c3a0af0867f305b11050000000000225120b5d41e1059f49eae2fb5dc6fffa09c753e9513663d77159c16faaa635c07b1aa5b11050000000000225120d3da605aa894bece781e69a030296cd9dd5bd8edff02b7fe46186ff9dffa2c225b11050000000000225120c1bf86c3627e31ef4c9667d2a3e89778b3a546d97a67036e423812579f7c2faf5b1105000000000016001412c910240843728e4507c50c13db5a903209e7805b1105000000000022512039bd3bca2ef12b17b9df2adeefcefb894fc05d7131c1801a5e40499fe066b45e5b110500000000002251208f599012ca641780cd6a05eddfd543490fb725bf3d41992433320de37018b3145b1105000000000022512025718dd1235cf519caabe1654d50ce73b32dae3c5bdc1944dd25c6302e493a735b11050000000000225120004bb55abf033e15d3e6e072b1465968c93bc094481e226efca9ac882dda86f85b11050000000000225120fc77102deb31356c81aefdbb048af745af0244f1dceae86f9c29befe132eb6495b11050000000000225120ab9c934d353206d52536286c7f40f138937e0ff17469e6a18415104a16749fb45b110500000000002251205a3872f01bbd675bf3de9405eb8af1748659151ecfb8d63e60f7bef9bcaec87a5b11050000000000160014bb3660d13f5a28fe8bf44f8e3ac5478c2b72d8a25b1105000000000022512054342acbbd073e0607cc06619a6b92829a5a7b18e73375fa36ef4bd5c4207e5c5b110500000000002251206ad0808a9643b520eba23199d81e84cc2fb3e0ef1ba7f11ef514552c7875e80b5b110500000000002251201fbb6719b880ba932e45530318f41e41c63803d24fafc15f4183377cb773333f5b110500000000002251204f6cc9610c38f7a26acf8933b8b4445e506aef68d279568b5362bb232b9021bf5b11050000000000225120b0bb57132f6af1d1caf3a0a34d2bd5ce0810f5b12597a886bf5a6136f4ea5a415b1105000000000022512053306371b6b9899328be7139fec6b67e556782b3d44ffcbb196c703063f666255b1105000000000022512011a0c84a2820491001bafc2d82af23d5b96943c8b8f4ee5848a50b0ee12f30605b11050000000000225120c377c2142275931dbb8b668cccb17540495a26675c64b2e26306fbe1091dea455b11050000000000225120706b47c601d9daa82a6b066b70c697bbfd818e6ca07378454eb7bfd98097483d5b1105000000000022512007951e074a47f09110cc3abec1247be37f6ca50545205f0b4e9956315a21b4c15b1105000000000022512026161c49dcbab4db0320c6a78aa98791dd2c908544d247cd3cfbf8166191493d5b11050000000000225120dfab4d7230215d12844dbe0b1018dba7b6dfa09b3b0fc93494cdc18860358a755b110500000000002251202f6ffa6a6c38413549bd4358503141ca6300e601e16e9f5fa9429a7ca24b35a15b11050000000000225120b587eeacfb2c2edd0398f72b44191b9f1aaf6425f54bba13096963081cfddf885b110500000000002251206bceb2827309f8146d8c8b4af0046c5d3e824fef6e59cc4841768aba6575127f5b11050000000000225120b4a9b94923ed644f3a0c9721861b11b041d28c08c377eaefd1cfb67c5d889a525b110500000000002251203f20dc895a5ac03b670d7aecf1e5b4a29b25c25a36b40071c27f720a8fa211af5b110500000000002251206b499decb921b380be4ad97f7b3d9d324c07704b451b697e6f99261ad7d1a3025b11050000000000225120d70966f50d81ff174daa70de0f2a619eba2060241c1e1db3e5644635aa3296985b11050000000000225120237024dbe4d3cb64fc180eee63102e406aec37265514e5a80664db54bde69ed95b11050000000000225120d447299670a8c9dcbbb6d071b2155e38c91b38dd80cdaecebf6c3d76e2fcbe1c5b1105000000000016001452bc8ba581687079553b6245773be15093847fdf5b11050000000000225120b86f71d9d8160d95592287f34902146a274628a9a1962cf4728bcd848038a0a05b110500000000002251206375a2802a5e2a70aa1b743b9371fafcfeaeab93a248ff83326a5f37b382ee625b110500000000002251207b2491e515be57c86be43a6ef36a722384d3bc35268314e1ec95fc1fc35697a05b1105000000000022512062fc71a4e1bda19a033d9a6311767bc0d7d901766ef9f26364bda90d7a2f97b05b110500000000001600145217ac275cd34d2ce3ce74ddcf24f62dc2bf2c525b11050000000000225120a3a9a92929b5aca9490600c64a645bd3864d0180cf960a8bd3a9bcf3a860b7a45b11050000000000225120a46ba028aba6a35455010a272589083fa0032820980658808a32391df5d0fe9e5b1105000000000022512025911858f9805c540e6e033e859898dab838bc00ed7f9612e3d574f17905295a5b110500000000002251203e360e5097bf439e2deb3351e6a1425545e04b0293f4071dac5f17a3d22d3c9b5b1105000000000022512014f1543db35a1882ccde496cbc3c6a9959b0d61c466c55e3e4a2df6ff94d911b5b11050000000000160014568b025c9e312af11ce70054c0c0b99752a724e65b110500000000002251204e497dfa66a9ffb58fc65dd88c0e9efc8b4eedbe9fb2d371d68836ba625020d55b1105000000000016001421eb010191ab88667e3b96f6c32cc9a1daa822ee5b11050000000000160014510f762d3c2c1ef4b68786363ba13805f731a4aa5b110500000000001600140506108b185ce86eaac786481410b17630a802105b110500000000001600146602e60a1e167833eaee8a5c90c1aa9360d13ba65b11050000000000160014d9c85e6f4688d8dbc0026243ccd83d456f07a7115b11050000000000160014d70f6f7a922a3cc13dc624de02f4bd168af92bee5b110500000000001600149bf3982677846408cf8e1769108671f6be6e0ef55b1105000000000016001482f7b57c6ff3bd70625e87ce9bb2ec1daf531c975b11050000000000160014fc1e6992add91da961b2bf3ebbb016042cb800285b1105000000000016001474e062e07758c896673972f0c682c12bcd43778e5b11050000000000160014993e74b237e0000349e5e4409f4d7a1164d880e85b110500000000001600146fe9f01b77e521aa5efdd9d56aeeed9bcaad4cfb5b110500000000001600148f2456a3d8cf278c155613788a7d1ea5f63e4abf5b11050000000000160014c1d357bfb3188be65c67f6217f22bb26500794775b110500000000001600143579937f306d454159cfe4a6d81be1fe698d41925b110500000000002251201ff5b29df5802f8b7c293b55ffc5a13a1a43afd962fa54a0ca3582df2bae5c5d5b11050000000000160014f2d96f3d645ce35e206f78a524f27a91bd67142f5b110500000000001600147a8095876272e3c22e258c19d8a9e4caff4173985b1105000000000016001407568be3a7ba94163b9dae2ab39c2670c8bbd3d75b11050000000000225120d013e0d029cbbb966c3a926384c66c31ad24ebedae42a4d1da593ccc4a9169bd5b110500000000002251207f2f3af3049b26e6ffa597784965eb0cd192e3e29c12b4c6e61b6618e551655c5b11050000000000160014ff78872f89b4689423e42fedc68babcd679ab2665b11050000000000225120bfb12c8df627282db0494df47719db67e00443750fc7b93582ddaaa8c1acb9af5b11050000000000225120831d1ffe303209154fcf4897e29e480cf90b43edf9b4d1d3bcd6a70a3b0df4075b1105000000000017a91400e1dfa6bea764107c6018b21aefb0b7b3af0c3b875b110500000000002251204fd21148a2171c9468d4fe20df9b599a555cceaf83ce6ce52d2aeea0f148d08e5b11050000000000225120afc01d83ec74c2a9938526500765434b159b29bd468ae224788f9199f2c1ff345b1105000000000022512053e7f1c719fbc815127208b821130d9f6996eb493f99f37f6cdaddb2531910525b1105000000000022512081acee35b0efbcf088534cbea670a83e765aad17b19e900fb5e1e4a4473ae22e5b11050000000000225120fad8e1685f18626d12b22da33a8d30c4c3cd4d9102867922800a76dc33be04125b110500000000002251208210c58a11a07ef3450937862a52832983826d60121080ee5821c6ddcd125e095b1105000000000022512022ef064e52b767577dc554cad4362d0d76be8ad774b9ea25d3ede298b14afcd05b1105000000000022512053d0e5cd820a193b24ba9d1b0d6dea4840eb9106b61fefcc41669b3a1ef0b9495b11050000000000160014c1aae132e6b78ae9498b042682f7bfb45e7707745b1105000000000022512035b6827ac768803f94b666e485a5ec5445929916c7399260be71eee9d0c0eff25b110500000000002251202da66530814e69a92126d94bbab9fc2e6e7f596064305dc814e9365d4a8606185b11050000000000160014ffe03644088f9d9a394a3170d575590c50fea6b15b110500000000002251208c091982634fa143a8964b456b033dba419216ad8d5125b7482210d11a36693e5b11050000000000225120c605cd729075c0297abb639b3580642d0768b6dbdb50654e87594124ef9b197c5b110500000000002251203bfa7be0fe4c5101f88087f4305239b8555d52fa131c7098601dc23639c80fad5b11050000000000225120d94c5b9fd3951186df755d08284b46507e4eaf3907cee08f0b86a421bd2a7b565b11050000000000225120e83a70970203a85c1011ff20979b8119b90d98d7797142aa48f4b764808afb405b11050000000000225120f9288975a44915b9971afde591e1cada8d89006f3453fbb71ace6d5fd9ea80245b11050000000000225120d4b73a49ef2dfed9623bbf7dc93ba1267d25510d75740c4ce59a7884e5a24e775b11050000000000225120334fbc002b3ccf18a18f4ac36c19c2c1d5f2711d09b3f190c90e06851a0363605b110500000000002251203295f98f751c554d5c52f1a9c483d50961968b4c6b794a60c79ceacb9d1ac3335b1105000000000022512025895201460b898f723eeba83ee6b02a2390ef8dd9ce36c24b80b5a07e1142ff5b11050000000000225120eb4dcb3a38d58dcffefa540c8091c140877e31a08efd0f34eac101198176c8bd5b110500000000002251206bfcac5efee2e675e1e9d9c2f0910a0ec085f1ad61395c47d1697a3434ef62de5b1105000000000022512068560f76b5301b4f117e6cd11a2a9166330e2255c54cab7564512136c7b0472d5b11050000000000225120a2b60aa24c2e71d924fceb0c1b516feb4943942ffd15fdb6892e5bcdcfd8e61f5b11050000000000225120e97e4be0567bac6f718bf447bfb61a1eb0c3480224d8f909e2a955d2946d353c5b11050000000000225120d40dbff6c686fc6e11e3fdee19c0259de7e73c162d388d62e03dcfaefd8a0d4c5b110500000000002251200cb99307c9b322a9f54878c23e9675c06164fb2cae46f5fa9f9b36c73cec8db95b110500000000002251205d02c80ef82c931d156fc3c0f0ddcb611c956e744aca0746d39a009dc91407fb5b11050000000000225120b9ca6cb861c760655e8cb4ec3bdaf8cf9c259cb26efa7c15d97543aba7df9dea5b110500000000002251206d41b1f065c09a1856cd140cb9b0715addbdca5b124c8851a51dffc8758719395b11050000000000225120fc8470f5c54cccfdb30ad57a9a1251f298a3a1aae17d9544545b60e57ae658105b110500000000002251209af56db14b7e502e12a15a51051be0de7b0ca30ee129833464728a35280552915b1105000000000022512007f9685fe68a8dd302f5d3d31d136012d9a9ddde453f40ba8956e5de6b99a45f5b1105000000000022512023da79d215c79710afb5cfb06e4c2baebbb6c9f080b6e633d64587ebee61defe5b11050000000000225120b0dd05d62aafc736a95093827abe8777e45a9a80a989c146b42699fc72edb2a65b110500000000002251201e241ef32fcd4f2327d678cf32f75e82064ba211d9512bbef040cf67114006955b1105000000000022512080f9987e3a1a956d2c67521f8fdf20417f9cb88dda6b510acde05a26ca8f21755b110500000000002251206446ce4ce58f535c66d7af942166b759d15d28fb3f15170c5414fc4859519a445b110500000000002251200dd8eac3023804f16eab9aed90b5f281aaf7d5adcdc902d98a7b1deb2ef4111e5b110500000000002251204d0a5de2dfbc6bd0aa45aa929df69d26f6fc0e70697af4d6ca1ea146ceee092e5b11050000000000225120b999024db05ff5149838af916dca0982a58c7b0512fc3f67d77e9b7e64d6a8815b110500000000002251202fb3a8eaac72de12c0446beb52d6efb0054ad48796e127db5cefca3cd59982615b110500000000002251203b5b5d53c2f0b9be3e3ad0d241d9bc80526a2f0b37535851cbfca7fb30bff6b35b110500000000002251201917e9c49e50e76f5993df7657d0040d1821a80d1a555183a1c882342a0a230e5b11050000000000225120f957a47faee337b7753519702ba13a513f483843b033107dbb1995e5c56c6fb05b11050000000000225120d7aac2e1155d2b6d016fe743b6f641457c5730e8ec9d382e2fa85b119393a7785b11050000000000225120eb5018745bc9ce09babb228ab5bca19c3c543dda63edf973e776793cff068ec65b110500000000002251202f735897d43fc7c547a5373eeecaac4612408dcee941556aa005f93a714bd63e5b110500000000002251205641e15dde541db17e6ed2d5f40a27a46d7ea09e2234b428f2f1749862c19cdb5b110500000000002251204814601e8921e74de2574a76579e26e75a9ab93d12a4dce3ec34339a3bd310c95b11050000000000225120c13125fe1cfefdba6da926f577183e68833e156f98b9eba30e931353f9e733ec5b110500000000002251202904cdb24b4cd7d6bad295abaa4011b508247f442e64281ffd0bd2ba1f7b0b715b1105000000000022512050a3a24d8a6ed4e6eafc0bc05775b313669d35b540cf16299a7513a1e48441055b11050000000000225120f548959d1127d880145bb346bc8ad78ef08bc57aa45d7c246947327ad18659d45b1105000000000022512010d3c939f2aaa575e99b5639359c51a91a622fc58ee1f178ce49737564ed14b95b11050000000000225120ae673856981908cfff4100190bf8c2d3c297b2d9f20a333a432ef37bd21cadd35b1105000000000022512078c410e73213015e1122e283f7ce545f715ff05ae6648271f5a3beecaf4204ce5b11050000000000225120e04ed4c680050b48754f978e8d418410c0c0c9eb7b6dd26d9316fa688c49e0c85b1105000000000022512067dc10de9550cceb055456725f3d05f4b2935257cdc8fb7dc3b795a2950e67e75b11050000000000225120316ee6d5ee35e191183be6a81c83d94e7accf43193ee20e4697c9b91f2d5e60d5b1105000000000022512008951f39b8f1c065912905cf331ddeb224a4ff668a0047b59e0d4358b52d95885b11050000000000225120dfc513ed8e626e278b70d6b492f705cf87debae39f95bf8435d9d0621b73a61a5b1105000000000022512085a8bd7397d52b99db069777cb9b43c7c5c4361d396465d9b481a9cd7851b05e5b110500000000002251201f9082ea7a90c70b56020a40170b3cf88339a6af35ed3407c19c633e20fe282a5b11050000000000225120bc3d6292d5d47aee02e95df8f93403ed7a68952d7c37c5bd3d62f520e0415b4b5b11050000000000225120a54915593414e9ccda294d14de839db426d13be02583f12d40d5d4034f8a07c65b11050000000000225120989baf2f28c4169cd89531991bb4a017940cda2e3103d325bebccc4eabd192ad5b11050000000000225120838ff7abb2dcb080b666b2de3ddd3d99729a6a1e81d06e1fda2f5dcfa159e4265b11050000000000225120ae381e386cb0b740f8467b358ff987b18bb22748144437935bf38b46daf0c2c15b110500000000002251207f7c29bd70e3caba70bf9007eb77130eb1f267e0e8cdcc58c50b36e96d90abc95b11050000000000225120bb171215e0fccc6daacc98e0c1cb1379b23be8216140fc2640199222ef45d4515b110500000000002251207888b9b55fbdd6b2051aa7bd69411df6204ada0ae291b39230666e3f955e662e5b110500000000002251204d9e6b68dbb441c7de0a9a0740687654c3618f80bcf6623d8947099059fb64625b11050000000000225120dc43054831c9773044a9637e2b41c9f6093e84bf8a0d1979308845c9c6dad3495b1105000000000022512035b0e4c380ea02d3ee9b996ecba2b47e5eda868700aa4bba8137ea4f2d743e245b11050000000000225120466ee579cb3d48b8716851b47cd4c4ee24bb86ea4e958900417fbaf95614acc15b110500000000002251206dd7da8112f6e2ab3edbb0e4891ced1b63e511d2adc18c8a2d8d7cf5783edb665b11050000000000160014f70f3421ae5b8b45d678e0566450b67d2a1665305b11050000000000225120961543b586f99fe50d475dc654fe6351aa34f221337b123a493a0763684d3ac71201040022020285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad9014730440220232ce895aeb6f7e57c0c00ac6d39a97ceeb13ff2fbd1daaf6917f5e64f24421302202aee969c21ea4fe7e113358f1372443056777578fc151548ff93f0dd1e0c2740010103040100000001046952210285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad9012103471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec62103c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca853ae22060285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad90114643db86d2d000080000000000000000003000000220603c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca8147df6d3832d000080010000000000000003000000220603471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec61435b794402d0000800200000000000000030000000000", + ), + # 2 - P2SH 2-of-3, 1st and 2nd signed + ( + "sh(sortedmulti(2,[35b79440/45h/2]tpubDBVoeGak4eaXFSBmNX8E5WQUdDMSHPZ2BM67txff8DN4EYnfDGeKA2y7YniKjTtawKh8ufJskcn2imNmGnNQ6EWrFjU55v3mFgpGZcz9d9T/<0;1>/*,[643db86d/45h/0]tpubDAsYiosEu9vn4H8UXSbSe8iYVdzNV8wgPj2uUV6DbyXdyUcwvJVFDxVXyRNTjfVS8vu2mv6ipZYSvwvNnLiH9ZC2tE4rCRKoXFKHJ5xrU3b/<0;1>/*,[7df6d383/45h/1]tpubDAb622z93Nuv36Pcj77ZyAw7wrp8TE7BhvcaoU2pjTozif9sfkGNZPzMRzT3bq5BUc2C4GcLojG7wHQ7n8FjNTnLtnLp9RuSTQkqH9cfDsk/<0;1>/*))#cvqkqqn0", + "70736274ff01005e0200000001bfcfe1a5c690a378de13b1fd48699c12672ad02490f523a34b336303cecfa0b58602000000fdffffff018b07050000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e130104004f01043587cf02632ffff4000000009cd9fa4e2ab3f737ead066e121197c3bc4356328771eafb5662167a2866976f903b166248c9fca19aed3a5249ec8a2651b0db9cf7bcf4d4aa669a4c2477d674b7e0c643db86d2d000080000000004f01043587cf023c9382c200000001103f93f4b352213388005f4538c07e1a413e1750a96fead5ff63007e4447ac700273492603f16333c52a50297727e3ef6fecae01379123f6eb58f063652ef065260c7df6d3832d000080010000004f01043587cf02b83c899100000002d074a767eebb8a5f6c8da45c914eebaf1da3b5cea009220029b97598f8fda4030200e142bd9524f7aa1ff4741947495ae94881a23d5899780f6a2a295913412c750c35b794402d00008002000000000100fdf876020000000162909f6443e176d3daa4d542f1c70bd8de291693b70596bd7902adce7d72d4ae0000000000fdfffffffdd8021c9e6cfd08000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d9000000000000000001d6a1b616c742e7369676e65746661756365742e636f6d207c20203732365b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b1105000000000022512073d0115d5f98654b9b98c0675ffdac806ea9d1c418af11f891aa4bc952163e5b5b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251207bd51d15156b7badf1d73f100eac9488b162051674d8733ea6c25f73793546195b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512044d0251d9f5d61d6863774f20ebd4e463df4536c8f9f08b8ed8afe85df3180ec5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b1105000000000022512084e3a784fcbc673724695d1f818ad8544a348a23b99848404f950109736ac34b5b1105000000000022512009e7faa00cc5e2d91906529375b8e31e260b0252cb7d3a8bf84c3d3674b8d1255b1105000000000022512080586e9a1c2730250793ec203563f48f81c4460067939cb3b118a859dbe0ef9f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251206a36d1c4ab55f478c5b3c9c6e62763f1f8a203bd13dca2380c0ff302b98136995b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b11050000000000225120af2f495c7e1e132d2b9c8e1bded78017ea1be4764792ab224e40687db17a5f365b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b11050000000000225120be767277f6f3a80ef6272b05ecff90b6299796353be118e6c13d825b1e792e1a5b11050000000000225120a8a9b4698c1f9dea1541fcd6e49327e8075b37c718225a848781b1c3434551525b110500000000002251204878075b002ee24f9575ab88b194970aa6b910af9239d84c494ec1142701f5db5b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b11050000000000225120c3b035c8360c2cbb640517bfec86ac24d850876ed588560f1c62ad5671ef25ae5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251202be4596006614dbf55d839f1b68e11abf0734dc2924fa5fa273d6688d2ce36185b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b110500000000002251208f5435eddb02e61fdbd624d5c412af278d46c79fd9ecd984a9b36d7a23a166685b11050000000000225120bbe18df1129cec49d136658f753a495ee3581abfcb112b4fc77c3754a91381985b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b11050000000000225120bc61f8597c33643955cd7c3ed5bdb86b60770d38c3b60b5ab7f4c9d1497569b05b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b1105000000000022512088cdf11e99869fd100cc53cd5076a6970000df981012780d996eae8045a00e535b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b1105000000000022512071b9e402fcd3cf70fb37cc66718f9e8e8cbcfd71fd8455c20d8edb9b21c9ded75b11050000000000225120bc9cc13e6520eea4cb286bb5603a0ba4b40c526537a791fdf84fd9b5fc7c4d3d5b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b11050000000000225120cb29a912c49226fb24f41ed337cde7c020bcdc2903db24042412c07a2fcdd6fd5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120a9d8804b9b582c89ee3b6001d41563e456bdc853760a3a06357f8653b8cb37255b110500000000002251206704180025cd4a063c91c909a2b8323910eb3547f630cdb4a2320708dccf996c5b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b110500000000002251200364e0c0c15a64253259bb01aac6eb3f9787c069f1691fc8bf1139c1d40bb5655b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120b7a6af27680f2439d9873cd799069f492a0f415bc747192407acd3301e02e7035b11050000000000225120398ff2c560067f63882cd712dc009e5061e674c3c07a495f183de83ce5e2d5c25b11050000000000225120db5382c0b200ab03cf883144af197153c4f788516e0c5c2ac38e926566b8b40b5b1105000000000022512081226a42f34833f81bf317204701ef1e2841dc35f0e692aa4c98624858cc80da5b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b1105000000000022512082352fe199e659db99c9af9c248930f13ef38b41ce03f6f291fad45c89de1a4b5b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b110500000000002251203c498ba796d0f6e47f2eee2b37cf79f8fdb6fb177d46d9bdf99d6353eb83c0a65b110500000000002251206d21f22e6c8129b57534970c37f795eca3e63e175bf4b578c4b4ecd6a54a194a5b11050000000000225120c8ba11b7f9fb099ef74d2e51145ec3693c00348bb01e759e75746af6b0cbe37a5b11050000000000225120a5a491493e96f6f697216c3c37185bdee4f772b9d0db58e4990c02acf465b2575b1105000000000022512092949da2ae47a717ab3640af3eb7130b0a5dcc9200545c89ea34fbe1621be4cd5b1105000000000022512089df0fac6213b5535bf5f6b1e631b40100e49932c3ae86e4e05cfb162ac9c6685b1105000000000022512002455e94507c54ff700dceae2fab6e092a5ee9add0574fe3c55b04273d1bf1545b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120108e84ddeec801bcdb9b158cbfdf133e03940be6c849c4832d5740acec0ccd0c5b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b110500000000002251206dfe1ae52355dda9cf67514c1f9e4831b746a030787d00c3fb6cebc16b69ed275b1105000000000022512092e98362d7d8ab08a9c3be77f99860512df14895f468205ddb7b5099d6c984255b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b11050000000000225120bb2552a8946fc7ee45e41f026801a86886e2e4fd4f8ffdfdcae251b86eb50f0c5b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b11050000000000225120d47eb2606882299d529be95b26fd185e0639f9ccdf19d3df665ae8d69dff57225b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251201f98b33ee307efa0f327016ea818ce5dec77cb9537fe309bb290bd6d2df019485b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b110500000000002251200d461634964cc954e5deba8140c5c7624d6f0cf5df3f3b50027a66d5499ce9235b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b1105000000000022512077724217df9bfff79bd4f0a185548e565f20e8951e685833340550f7c7f1638a5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251203e6274c50fa33510cc0658395ff8b291e751bd5c7920c2be7de232cb7da088895b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b110500000000002251202eed883c03203f81b1c804cb1359cb144327763d96e35a96324ce8791319415b5b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120c0441b69c16f0d8d7c6727a94acf57a27c0682cae64899c0fb4242aef90bc2585b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b1105000000000022512022010e00b2e972cb9505cf4cd77a6f6e659dd33dc7bfaa4cf3f473a08321b2d75b110500000000002251207f129aca2744d80139d417a311a0c79adea078ac349fabffe4c3f16721ee78f65b110500000000001600141fa0458108af9313743233a3ef17c0a68a86febc5b110500000000002251204e9b1ec411c3753091606f7e12a34c6bc72c5d45421e9a3efd6a7a7a025b7bc85b110500000000002251204eb67e936e770ea97a7996711c68fcafca614ec5364fb82e8589011b8dac7cd25b1105000000000022512019caedafe8a96ca0fe52933e9eae87927325b4800a312e8e158ede0f825251975b11050000000000225120e3e6e6fc7d2b52abd428ad84ae1bea916c4bb4b2dc2d15112110595fc0b2d7c25b1105000000000022512041820d659084a05a0abad9d85185f47f36cca35272654aca4fc52bfd020914f45b11050000000000225120e184a3fc315dfa480a02c6761ddc78dce60cab2a83ced5dbeb5acf19b8f1b2e35b110500000000002251207627d433c2c72e4b8f3af0348bcf6cd74c0b76b256c36f751d5edd8b2f3095805b110500000000002251200d4553f32742b443424f2fe62e583891956b60f936265a010084219027cd25ad5b11050000000000225120c62bc884c6522346c6849887e13b06209edd9717d187321fc0ca2c66f584e0c65b1105000000000022512020811046d09d49d18678120d476712d663140be3bcbfa461b7e3386166092a3d5b11050000000000225120a706ca1cb757f5a5e2a4a4c2df467c65fdfe5a4ead2c628948d6e3b9da5030955b11050000000000160014c27811d15df88a936b5a442e4a74f90d763e853c5b1105000000000022512023ec11de94921608ff57a3e564cf18690c44080192129f27fd1a91ec4e050fe45b11050000000000225120c0855b1dbcc09ba0a44916fa67747c1445a91c9064c707549d0a4fef2d179bc85b110500000000002251201c38bc7f9beb3de3f718aee8b9e8e3b053383fef3a80efd8f9b2040a843173765b110500000000002251207055cc20640e5465f8f2741925427b88750252008375a90c49a758e4ff80fd975b11050000000000225120d474e1351adc319f62eceb70f2773bef11b5d0b120bbc11f74d2a052da8e72815b1105000000000022512081a37d08c40b6e76fa03a819e2555a54cc41a642ebd2fa202cc0acbc9fa7dad55b11050000000000225120144c98a8b9218d2008de6ce7c583728e680c5e5346033f8e014988e9b00cd3ac5b11050000000000225120cbff91779679ed062dfa47c2590a68550b113366a924958e20c24a6047b28ccc5b11050000000000225120225e152bc295bea0289ae6997ff2b0568ef3c484c82c27dc62c75c1d9f1950705b11050000000000225120f1c73bedfa70952a597f12d9f141fbc0f0a06606d0d50d86dab07ac939307d345b11050000000000225120b3ef151558931f401aced4de48a30e8adf12d936e8dc62832bb25774a7fb5a0f5b110500000000002251200bf8680106db4172647c4844d5a67d1e1c9165efdbcfaf941147e35fc0cfde875b11050000000000225120fac047a2ea305258a244ee1ddfc55761dde656fa2f04287d599698c97ef4391a5b11050000000000225120e132d39241182e144f0ccf42c4fd1eff06ed28e17eeeb6a7e535caf9c967ed445b110500000000002251202385c5409fe6f1012776293932ccd00f4efea932f195395f251e224141b7cc545b110500000000002251201550e69469907bef732dfd36dc16da3414daa91f21d6dba5ca8cfe00a01922b45b110500000000002251207528f774e34d8aa2882417ac6ae0893055008f675310fd8beccc65e5a1de9b585b11050000000000225120b12e524e82378eb9ecf94128c1b361e103d39219cae444538e620c1a2832f7c05b1105000000000022512060e377a06a269c23a963b3d2aee5ed9988af2ebd995017aba29276f2612df3525b11050000000000225120e925c9408a7b527cfaed950b7376f685c15116ab1bdadd31809e8e10766d75895b110500000000002251205a33e8998723f7f0b376eb23480ef8fbe68bb50a52c9f0cb6589072a4ff967c15b110500000000002251200fa524157d683b4e76f6e611ed1c38a0a54dbf2a02474364694e8f0fa5b6c6dd5b11050000000000225120673c63110a3086cec6e6af6ea62510de9bdf60e748bf022e6cb9afafc6f7f3bd5b11050000000000225120cc8dfe708d48213fcb603ef8dd5a098fa397deba0bbbda0d022d06717ab8ec715b110500000000002251201ead67864a29bedfa37d4880f8b98e202da752076b841cfcf196585adc5bd86b5b1105000000000022512044fd49afec361ee9ce1d4b0120f6be273e4c44a5a4956d1240bb20ee15deb7e25b110500000000002251205e0a59284c75300c8259318ba90c715eebe0b498016eba81398e321a9c0b4e2c5b110500000000002251206541ea8e85699efd0f56310a307b80bb79adc881d993eac77e9aed2236a5034b5b110500000000002251200d19911452556752d079bfdfe8a1be21fe387127493b9c76a3307438791ee33e5b110500000000002251207cd78f3383e07e2462005293b7dbe57a2c7a8ed0f14b2f9f0783382a82df05ea5b11050000000000225120ae403804d6d8c9845f9fc072bf17f2e1f572cb833fb3fcea77f6420d1326ec525b110500000000002251204e3aba727fa3b188211b76bcd8eeac7802cc1424c90aee5a9106b2a9cbf648015b110500000000002251207181d2624bf04a83af7163cba99659abe5238a73b9e4acd982e9923ba61e53815b110500000000002251202c1272e8d969fb357f7a61924d09f7f0a3c5f5ebcae71d6dd3b3b1c42e2904e25b11050000000000225120cc0b2cae9b7105bde2263a7b53209b07219b9fb40e870235f2aaeae9de288d4a5b11050000000000225120a6d34258b83ac3cef1374f751e94e54682d5917ffedcaf5876faf4304afa5ff55b11050000000000225120c6349675ddd7fa283d46ec7365f01b5b7578fcbaf4be4c860d65da7b396247a85b11050000000000225120b4cc8685fafba76c6179316e40a970efc090d6adc3f266b3c5aeada0d8eacb4f5b110500000000002251208ea82b40a1b12131bf2066d4b7cbb0127ba0c16596cedab4301dadd07b8164285b110500000000002251200e0110269a75e05972376ea9515f20191ade64c6e7ca38237b0db401b231da425b1105000000000022512072cd66bef835d156eb1ef4fc387380c168552956ece4242eed545319b9fc64345b11050000000000225120abd4662999cdcf67bda0dc1318dcbed9dddfde8b9a299f2a3105971125793f585b110500000000002251203b63db4dafad2726a864eb29db627b5e5f52884eccc8536ba9042040f58539735b110500000000002251200a3d96340594edd5157493c94f9ed3c3b138c8a3cc3f08439a88add7286c49f25b1105000000000022512099f736be80e1d175685432b77a1febaa9aeda451928cb13695eead78ae5c652c5b110500000000002251206f6cc45b2d6d8d8092689988b2e9b3a00591e8ff0a39c4ce1dfa538771e822d95b110500000000002251206c3c62470bde22cb1156a3d657d7ff8d36f7315d0e05b2c25337ce1d4ec530ef5b11050000000000225120a771e58b93052435b009c961a27eb359595e65c62f7d6f00ac7dde8dc6be9c3d5b1105000000000022512024815ac6dc6c03b94a07569896a31ce21a4dc291bccf31f021791ca1ddd616b05b110500000000002251204e2ea52267d288a079aec13fe20a29e7de156717cc3e0e313ea8d5e58a2efbbd5b1105000000000022512013198206962812063e4fa2b7f9b1c077da7706ac8a4c5a14de5089196f1a6cc85b1105000000000022512063775a0bedb9e15f22d60c4e93152fb8d386f2343658ecbcc3eee9943994da5f5b11050000000000225120d1639db39f9ab460a6bdc2ae34feb89bad97d52c2df668b0363f9a0f29868e875b11050000000000225120917262b0c19ca166bf35a1e820f1d7b419d178abff9cb2728b307b0c3c1da0265b11050000000000225120afb7ad9ed1e8cd23de46533b56bec42ec39262fda2536e5442b8389b6970b8b15b11050000000000225120861ff88e1563889a8f4b8f4bc074dd580bbede0f5d50461ac127d9874d5135075b110500000000002251205f5be818f5f5c95c7f4827e960958629f04742140f6cd31fd030133c00b18bdd5b110500000000002251209a1619f9737639caee6abcc1c1d80aabbdd8d04f03d8647608e8214b13c5fecf5b11050000000000225120af3b5d739511e622440eeffb6f4a97f317a307853a2eec4f6d36ff33b0f71e725b11050000000000225120a5a4c97a9c38adb994bdd52260b0430c0d1493c3b466c42c0a923316323659a65b11050000000000225120d7c0b8aa1f0eadeacd56bc9efc404f7613873da15bc3cdccc051fb66121c4de95b1105000000000022512087c2688781d1d36704ad6f53f8009da9ba853fd78f4a556e3c08f49efbb297915b11050000000000225120d104bcdbd8eea2c54488679afd4c98a4f8100a6e98ca88abde1543282e1466e95b11050000000000225120ffaa5c0a960e0516615d95869b9b01602493f2ddd1e42d2b5ff2e06b141451065b1105000000000022512036a9fd54671de9a1451cd114451fd85b748832f7eec80eec086c19eaf12d29675b11050000000000225120ae5de137d72897d09dd2ccac5e28924f70166a052b8e69485bae563e1e4ce18e5b1105000000000022512092d92ff5867502c7e29a0c2506e3dc225014f1a3c8cebe607168100252f321f05b110500000000002251202f92102df5c57d425da3e73cb350967ad771547fb8c95b089a75d0f07e82c0eb5b11050000000000225120447ff375902bd984b2f330a58404184f7d9069099c7341f65e6c7b48e9ebebe85b1105000000000022512053eee0f77127953fabfb82abc415eb317f3849487801d46e92f2ef13186e81bb5b1105000000000022512013ffe29301e4b1d1efa8c4dbb4128d32c6baf5936c9a594bdffdaf92f8bc8c265b11050000000000225120a6a15fda92afed2c88e2779d320e13cffc2806da96c3050f0fa6a5b1010b333e5b11050000000000225120042a99e765f6e7b809327e0f28450c1214e8ed038de508d2e3a2a2d1bedb56a65b11050000000000225120c1baf3c8c93f4132445a57708131400def531a25592750f7f946ebea414093e65b110500000000001600147abe046b62b584f920399ab562e18437926b4b635b110500000000002251208f40b67de4090732b2b508fb6c62aed81eff1509890b151e2f7e5d147aca51155b110500000000002251206664148e2280bdfec0265931900d5f91907c281a13c05f0189c4ef8725c25d745b11050000000000225120331becf1b6c374c1e15407c8aaf002f32cf15489f572273459b9cb556610631b5b11050000000000225120e6fa40c8bbf40ab4997a9b6e5f65c8834ae4a1b1957b569fe34241fc47453f0e5b110500000000002251201bcb2e489b46190796ec7bb3e624bd9be78e197841c335b0c76a81d371816b895b110500000000002251201e90d90a7b3bcbbe310bd1cd248051ca7ed223db75bc912d5dde7535745f01e95b110500000000002251208ef14d0ece8b718be184dc943726ea288745ac2252bfee6a16427dbf065bb51e5b110500000000002251208bc3a7b3c61bbd6eecabc7a82ed30cb05147667ec7bad8df96efd2e0d42ecf1a5b110500000000002251206ad00df3e81584622bc5543a8c11ce75b8f8a9957cee175aeb3ec9adbd1441125b11050000000000225120ec45a06f459623721a8facec3e39002321ba19d8269b29ffaf8db4ea683a463a5b11050000000000225120bc98aa2d52a0ae1a373dea8a8e5f3a1cd45fe76acb3966e820c26bdb113a130f5b11050000000000225120b9f16520fef9d778bcae0344a542c5e097bc35cbbe5b46186769b30cb82aa6e05b11050000000000225120f5cd19028f3fca345009a37269e4c3f8fdab86c4592da3589be2905c5cfb0c8a5b110500000000002251204c473685a5d5e1f878e553190fa5cefdfd98fef558d356f2f6172e64ee9e3da85b11050000000000160014ff3903fd5727de9b6ce0e88fa9b0ef78056922c55b11050000000000225120161bb61e96900c743409e2f4a4194b2704ebfedacb9db662db471f5a9b1d946c5b11050000000000225120c051bc80e2875e95d8ddf2ee9540152c80e22e228a698d46bf32f9904674e6305b11050000000000225120aa026aff300f20b928670017816fa8abae83f4bcef1c845a41fce351333e63845b11050000000000225120d41b11acab0167cd37661f65f3a8a04fed753540aa341b262b60129af10bf8855b110500000000002251204cb733cc1b3ace5182f7febec742048e2b4efca9db73afe7d5b340c0942c80dc5b11050000000000225120be88895d2fff45d6c6638c6445175a4703b1827c4cbcd64212e69dfb02e569195b1105000000000022512050d4241ebab2cc99e18207b502c6acf4413a5a83ae7914686353c082f14108575b110500000000002251207e0aa32e95b3a6ca0f3bd3afc886e1f30b244b9bd8e6bfa100c9451e8daa0bb65b11050000000000225120d8707a507485a8dc0bd947b859ecad5eeff0d77080d77a70ee8f6fafa7030bff5b1105000000000022512070f307fb93d67e957c7bbf2f8705354e4db6d80292d527a2e1a6683153e9614f5b11050000000000225120dbce799b513c7abdce7b01a5c5c8a6e9249fc664e5d8bc1b8ea59393d9bde7ff5b1105000000000022512076e02e5d3a18c710c133efffe81534f08a18ae8dfb0522876d5e5fc5fd81b2925b11050000000000225120c059b2e381d2e309a2f9debe15dc4dba9bad37085795a594189dd815883cecfa5b1105000000000022512042cb20607559f4c28fd9265a2d77dac78e41622fc5921bed67736406b68207685b11050000000000225120355fba63ae94272d077afa07f4d2d008f83372e617f99a1b64792d126530a52f5b11050000000000225120faf3e897074cb551aae8aa2f9e82419ffb51b6b875208cac4dd47288dd827fab5b1105000000000022512088037a8c409cc93cf98de4f51f702317edca9e0e82a54d0397683244cc352aa25b1105000000000022512077f0390a28063e3a05d75fc81753afc3bdf176f806ebab8f97ea681c9600449a5b110500000000002251200ea8dc8d04920f7bfd72d9453826412563178ad40bdec4ea6ad003d958e70b575b110500000000002251209839f6d805e7a7e6f6cdfeb30a7afff903d69fcb320edf8134edb576a40022e55b110500000000002251206d73b497785da1456e28119e29a59f4ec96d9e07c3ffa5a96a3084c903c3701b5b1105000000000022512055db9d4f3f2c07ff4a782e0701158f92bfd5983f5598d99708bb9b20ca0464695b110500000000002251205a1fe4c3e513a30f9ff453d54e0c3fd25f5919389db2d320fc1ae310a5d79e575b110500000000002251204bbbf3d1e5e107110b7230264f40944e5ce5693df004ecfc8ce6c12c46717a825b1105000000000022512028e8ad07d0e674d1aae80b91e08c1f7ebf04673cf4bc52fb9867940282ce3b015b1105000000000022512096cb3831a4a7da3938db47ee1864c2b2e5ae0cdc2e03769faa6c625fd64147cf5b110500000000002251202a455806d7920d10bc65eeb782b4e4e617af74263392ea134c1400ef4787f1335b11050000000000225120d5ca7f9193a452dc8d6ec9655ae40607d37eb77ee78db5586843dadd07099bd65b110500000000002251209507f1f2bf6095765549bcebd3355b43e6eee5d9b1bb645a86f40a11f68f19a95b11050000000000225120cf84693906a80f9555ba614e4efca28bcd543fdfe0196499da5cc486e30fa16b5b110500000000002251207ff3e6a6875de01e8e46641de27a5ece2b80bc17626de7416e5c8b5d3b66722e5b11050000000000225120a0ec5da1e38bc588d2acdf3d64a7dc33bba6081ed0186aa2c8ebd0bb26df30095b11050000000000225120c67187f2cb41a480872cc478c914f6897e0ecb4071d92d68a3dc6067b91f2f2b5b110500000000002251203ee48c8fedf7565b1d92342b269ba4ed936094b28a65233a8f48b758266133885b110500000000002251205e0f31b607459156e4cda1f8141c12ccd999c41481b69f51fa06e871e6fd79765b11050000000000225120b0f462d5145d77f3ed5501636558ae3e17bfe69964d23fe089bc3380a9bb71ca5b110500000000002251209965033fb63ab59d6e03849ee424659aab08552fcffc57a61a51a26cd4d137155b110500000000001600142a2153cf0e98f8223725495934b36feef81441475b11050000000000225120e03d5a70e5edf43bcf6382f9c6914f60ca9124c9a179e090a85f0c6e46b870155b110500000000002251201da64a82357b4d1e58a3c2c51006752b404fc5bf8fd251b65bdf11941630c4a25b110500000000002251208b934a08970340ece177ee5bab0473169d681daa2ee8149875796a3b4e7d503e5b1105000000000016001436dbeeb8d327ea9e2b63ccdb0a79ac0ee0e5c7565b11050000000000225120f0f014d4f8ea1814e13749564c998f04c78da96eb5dd06849586a835289984995b11050000000000160014f13dbd99fafa689445f841b446e2650698788c2d5b110500000000001600141fb459dfd93e8bfb0a4ffd6318a0efbc758963865b110500000000002251208706e39f83f239f42f9f85f91146c19bfa5bcca932c0de527e98d37cd5a986f15b11050000000000160014065fe1135002c3d3096ad67f4cd3c735491ef85f5b11050000000000225120c15484b744147fa35876adea9b13a3ccfeb92be6942640eb105625faa4a256d05b11050000000000225120352c161b0f3662c2e9949e2f3fd4b9abed32fbbcd524dd977f395834c9efaf1c5b11050000000000225120070259460b7c10c185db481158723cd227b64b8651a8b9bb680ad16b22c55b555b110500000000002251205ecffd87dc24074cd25b9b2ff7ef02cc34089bc925dafaae13fb6f3b70382f305b11050000000000225120c0ef3f53d3280041b6e4f5e57e935e87496ca56784e60e6e909142bd575e94125b110500000000002251206ec49f872934012eaad2b9e8aed37884bd37e48aa01a9f6bb6f267771f3d0cf85b1105000000000022512007a7d69038c5355923366e212c44f1e6c51353082f3dd7510abc6c967a1827645b1105000000000022512022a0f25a00a9874da6ab630acd39e6a20c60c0c9d9c2a875fedf5774e2996a0e5b11050000000000225120335d1772900e43d2a855d145c2bd70fefca56ab97ffdd862ef884aa45bab74b55b11050000000000160014a5f2a338f27de2f572d29f718744ad2e662270e45b11050000000000225120a2268e08a1ac771f3f4e36603a80a7d3850f142b0f224061d84e4b8421687b855b110500000000002251209efa313128c9762b4277808845aa06d2e513f0b380d70b02307dfcf8c40e71de5b11050000000000225120e19bc0e493e7134bd0d184039c5e62052c4c9f8ee994c58b117d4d6fa0ccdd6b5b1105000000000022512008369ff0d635675db33598ec2c723eb78453821a64ef58a8c553b4a86027d9845b1105000000000022512064fe8d7f56a76b06a3faaa2f32c5a8753437e2fde8512b872b2bc9294bd3dfd65b11050000000000225120491af0a7c855d7c5ae092f33d0934f8a7cff001e63c8aff41a8af70cd6c6b97e5b11050000000000225120aaf8651158bb5cb245bdc1c91a30db2ef2b06a8052989b32f490699d011961b25b11050000000000225120f49aa6e7630666008b0d0d8e56157fbdc38f119e5961b56e218ce84dd17536a05b1105000000000022512092f9d1293895e6b145f505520081ff9a49bf2162fa633fba6cb63080f66cc3845b11050000000000160014e8009863a29d28c20a159a574b4f6b62da85bebc5b11050000000000225120d80e9370392fa78089bd8c140fe36d1f308879cb89b876c4902c2ffeb3b235815b11050000000000160014e1b581310f8f6ffc6bdc9f93418fdaba4e606d9c5b1105000000000022512037056571e30f81c396bab99a1e045961d7e8897fe9e8eb8327c9d601bbb4ac225b1105000000000022512086683423aa376757e456ebb9ac98790b13189d7a15c4623dab68bc121dd835185b1105000000000022512090e51330724ee394620d2b2b573a86380e048fdd5bff6c5bfb9d7939bcddf7955b11050000000000225120a897512d6e61c829d49ba24e8f81b471ed04e0c9ea774c2db5b1881eb75f85645b1105000000000022512000fb39886e0b5c2649a5cb358b30bb3e2484b0de8f411361b1cd913f54eacdbe5b1105000000000022512035928398fab71972fbacf7984702cdd6fedee34ba6d9406b6e3cd6e91e4a63235b11050000000000225120ff9cc5cbf21a640b8fc2a981576378a7809e0b1b2f58a2954c65eba8ef3a9dcb5b11050000000000225120ad379c7b9f49969ae0814040fe3f50e946163757cba59d2da12afd55708a5e925b11050000000000225120204773cac9e2b5b90271a4a785cff463b0f7b773229a6b0d15632c21d3c85b015b11050000000000225120215288da18990979084a526f9802702e5c26ede837a12c6babfade37fce8b0e65b11050000000000160014bfd23e02e777a9e7693ae58c175736adf5630ffc5b11050000000000225120452d42ca686945d10ee7f04aa2b69863b2aa36c83b8b21f2a48c62c6532862fd5b110500000000002251202f403b0dfe821bf8078db061a93859d03320ceeab6673c00e998d38ef858ab4c5b11050000000000225120fdfcac21f1be8e2367e34018ed961acb982400619fb681cd10f59d49c1843f3e5b11050000000000225120a5e573551dd9b53c5dc2eb8b954201ed3c94bf3624b5d162f0f9d03b3b63c5a05b11050000000000225120746779c627fb3af07bb0a8bdf005507d098100a6b7af58f2685b88cc808077715b11050000000000225120d66dab8a8db144b46ba9eb0c00de5bc924ee29a8307119eaf2b43658c104223c5b1105000000000022512000adfc7fd23ffe7416767d456aaf6aad8c5dfbe6f02ddfbeb7b37997d2d9fbc95b110500000000002251200671e2e9f9c42974ca947fad7d4aa6d8192ae595a6182b8c87edfc82b7b33b735b1105000000000022512087c77180e161c4da18e02db7d6113c4a368a228f01753c1ff0b4b6d39d6da7585b11050000000000225120f2349b59c56fdad249c3f18db82be21f5959fe0f6a0f2e604608cb0946ce05765b11050000000000225120c8db1bfddb6dc8fac04c3d6b4b18ba13246c8469e1decdd3b10484f4922a00da5b11050000000000225120dee24e60d81a1fc3b0c1c23a6d57041c2a8c1e545b76b4ce4389ed61273c3deb5b110500000000002251203bc3c84a7d4adcc441212591631a32f72f98a4e9fc058d8da08dfa5546c9b0965b1105000000000022512079a4abbe291962c1def383856fe905b397cbb89810a4a139ab6b58596ee499d25b11050000000000225120f9a199a41cf9db84f9c4250786d1cf42dabc66d98c1b2649445e488cdc58d7155b11050000000000225120f05afd9da824826f6eadc94978f496cccff652f3dc215bf8fd9abd0a4211e2f35b1105000000000022512072b05dd374616db7b29898d96b93aef571d8f9ddd01df1dd929b51789fa41bc55b110500000000002251202e92f8a0c121560ed50622fdb93ea8bd0554865997cc62019e3924492ca52c9d5b110500000000002251207ffc0cc42ce892626176fa8af3d8e5586d7d34de221d00eb797e80ca9e74a9ba5b110500000000001600146436130c58ce1823c6d499581968522ab8acfc425b11050000000000225120721aa94f6b2b519939a2fd5c4517c62a4067bce7e3bfb590ab5f8778137cb7295b1105000000000022512079f91622fbad7e719a9b10199d23af28f5d53dba6cff42d3a3d68159e8495cef5b11050000000000225120d1d8fc7ba0758ba1a85847df0520635cbb7abca5045d6924e5637e644fb717485b110500000000002251208dd427011e1b27634ff840db9b29185d44dbb4812ba75ac8dff9c8ddf281e7df5b11050000000000225120085e3eccd41681d351f1404f2cbae149af8f9f3818c4d8ed1dd4bc7a9aae36135b11050000000000225120e5e37fde1b45539d47600401765a6e4cf319610b4e3c46dfff24f85c72c3ba665b11050000000000225120ca4b82a10d612609c413d697cd503e6e3d8edae2acb7d31964d3e3ed402dfa855b110500000000002251207d4f39c3bf91ee43109a71b3431c4f7603238e57def356255ba6109c46e6e9b65b11050000000000225120087b1dd9a2abd6f0d9602d0d76d63aa8470602967bd9f49aa4a5edf42d0be0715b11050000000000225120c8170691b4159d7f2f776d9f41ba3953f242c1fe71c3496bc49f6d4fab2461675b1105000000000022512072cf09000df43c9f8f994cccf30b15a1390ce9508b04550dc42b8d24b1cd5a035b11050000000000225120750183c6ae591d9a2d0149fcae536ea08d845da084eafd97b9130ae3b8dbe9325b1105000000000022512016a7d87088bfdb785ac8db3c6ed88efa298927a13f316dc8d7f25747d06749205b11050000000000225120cb0827ca47d04425933a15556e4c4cfbc2e64529a438dd4c86d46af426faffe25b11050000000000225120cbea3fe95a675a3e8471b0b52d0cd008f319253f49f09070545ac18b940a9ae65b110500000000002251208c842cfae143a50986af051e15137e7646567fb608b3184604a75f231e8e32635b11050000000000225120d23954a9b6296fc255fe679606e53cba4179b0d68546ef30f5e8eb5bcbf026fa5b11050000000000225120c9728677cfe0a62912101a992356e331fca602ef57d0f7f70de37a3a2e433fe05b11050000000000160014d4f9843721b7b5d43dc4743ae2bc7849bf0082075b110500000000002251202a8156b92ac2e85963c5cf3697f5e7c470df4c056bd5fb3d7d9294cfb2a743625b1105000000000022512096a295d8fd16b510871d27ec4c1fdbc40961432f7b2f07eab8cdd055fa6ba56c5b11050000000000225120ec37f14983b379ef9e330cd202c81353f17ae686ad95bddfb5cc3549261d81085b110500000000001600144960136c36f02517dc10dfd1e0b348bedc80fa0f5b1105000000000022512034802e273141c5dc1ddd7b4830734d7b8aea4b079a68bd79c4658e461588a38b5b11050000000000160014fc8cb7c4d82d4b848096fba2fe3e27ba9fb041005b1105000000000022512019bc3c7d34ab15c46cc1c7366e0e616f39a929b9dbb6f4c25091a177e1d23c075b11050000000000160014288ff4fe15569168d9fd81d5975b7922aea2bd3e5b110500000000001600145c7e54597d1d2f01cbc5965a4fd5de5cd263f4105b11050000000000225120a4b2f08d46209c185417a4b44c739a29aa17495a39fc51df4583ea7fabc8ff985b11050000000000225120e936da3ca01edcca997e265d47fc582bedef3f1232ff4931addb57e98ce9b8fc5b11050000000000160014c5d444052b89341a7e93788a7d03d668430098fc5b1105000000000022512085ddc2f171700086dabec8292c4b0163bac19ceda594e463b1691e1c2a6aacc65b11050000000000225120e3eef80cd8c8dce7c2a0dc950d129035b4ea630f20741ab2db737402271ca4865b1105000000000016001485e144aef1b5fe3cf4114dbf2edfd42d20e483345b11050000000000225120d4a2b4bfe6dc154fcf15c18d67743d0a96c916624925df89f59006c9b1a95eb55b11050000000000225120645190c732b28798132e367ffb9d6b37ac8988102af21b6e3dfc6ae578ee774d5b1105000000000016001460a3f0e6accd9ee0893c12ca6c53b8ca0cc9c1f55b11050000000000225120851a933fc524d5b24879ce47b2eb2154c94f6810e58bbb03bc0c05ca30bb8e125b110500000000002251206fcc63e4a892165324756666dad9aefe819618874556783a11a0f331571810495b110500000000001600147af7c65a0f20aa29c16becb56ecf43a33996fe9f5b110500000000002251206e0fecd89f8c4510fad5d22cd693baf44f3d3cb79cf244be4bc1112703cf95f65b1105000000000016001482b40f7739b3bb9e4409d55d42ce402ea16cc4195b11050000000000225120f68e78de8d30f5cc6c3202dfa0ff3e48bf302c20a001bb376cf85addf37c518b5b110500000000002251205880423805e5edc73b1521165c06223ada4a43cac807123302d5626b5eda3ab45b110500000000002251203cdf1d976cfb08d60d5c396a5f45d5213119ce0e06f1291c9479d0e705fd9fe65b110500000000002251207771381e5ad310c000a551051d55689acf2c72c7dca4fb2349caed55416fd4365b110500000000001600140e4c12548d675382c85a54328fab28c1fa082e545b110500000000002251202d9ae09d1bb9568a9536868178db9377f0fb9c853f3c150db17af25facf6f4d25b1105000000000016001488a46a677699a3fc95af917dc238e7ebc08441505b1105000000000016001464311b8ba2e184a5e7d946f97dd54f049d325b6f5b1105000000000022512025608a8830f1788a7bc59995c95ed52ed11dc384b739482cfc8514ffeb83fea65b110500000000001600147512be370d12a028857c135b3fd90eb18c1e96815b110500000000002251207aebbcf5a8a435e94c23083d366d890b9d4005e6f0b3c27c686e058f382d56905b1105000000000016001453258075646ad4cef078fe5f3ca4f2a4678668275b110500000000002251201978daadd029551daa792356560145f162e18141d2f3574c00f61589592cb8d85b1105000000000022512051f95e75678c9d71e59c6839a8aa3ab0d465415029b4154f753b06b541f91e135b110500000000002251201a3d6170ec2d2cfa29c9b542390a7500a3c83b55148c371f75fcf7b37fb0a19f5b11050000000000225120d6311db4f16e8ae7bbdf109592eac1e0f11f48177d2bcf525e05f945b951e5e25b11050000000000160014d5dcf18d2471a2988d34de66e75d0da832dbd9bd5b11050000000000225120c09f78bcecca842798b5fd62d93d8641cfcb23348bdf37b1dbd6429e642240345b11050000000000160014c5da565920bbef01e15f545ad7bf45d4f6e371a35b11050000000000225120b1b82c719225dc25e1ac73d303e6ccaa2b8d1ad682efd923757dd3bb02ad0ddf5b110500000000002251207d7c97af8e3dfbdd2afa67ecaf36f02797f3978312058912f17eb6e1023549d45b1105000000000022512038bc4181b3fcc864ad997e18852db3e8d20db660ba046cb1c944340b420d006e5b11050000000000225120b1f2ccac76ca441554577e7f9356ed6a0322df183cd2f418d8ea6e4d159433985b110500000000002251202df3e1f733dcf2c9cd83a9ee8a1dd8b5c8cd7021a3dda154a4a6fb45eb53157c5b1105000000000022512086a1cb468b495f114a6b7fa73885dcde2eea27b037638bff511f0749ed9808535b110500000000002251200f13e728ddb392e69206d6473accae15fd123de5d7500cf6e78497f94862fa805b110500000000001600140bcfc7e5d1c10a40c1cc12aaafadbbdb8c54b64f5b110500000000002251206b51b9e9ea7a9a93c48d713fd544424a9b6bc19b1c4e526b37b1cccfe77c85365b110500000000002251205606314fa202ba5fff26cee24f9c9d71cce5a6e95e213923f22bc4a92b751fa75b110500000000002251204fe1f4228afa36e93eab044b6502fe8e1f458b3514fc88836ad70b8ae2ddf59e5b110500000000001600145b3730f4d9350cc031ba561bde0e91fa85b948e75b110500000000002251203b18801144bf77a61c527b0da98390135e39d082b134cfaedfb601e7638fe7395b11050000000000225120b7f34b8916724c551506f0533fb5285a73851213ca14aa5038316b10880215a95b11050000000000225120ea52dbd657129bb11dbeb90ba6163b8083050c13d0b3399fe1ac49142fdd5b8f5b11050000000000225120ac5e254cf46109f6b7676c457e2026bfbf5b294a62399d994c46b7fa13d8ab675b110500000000002251203c0ab8f350e47128de128cf1e3897b770294732c70e29e1e95bea54da8fa690c5b11050000000000225120d901280c79015c12b476e62642f26b1a590586d43c645ddf64bd993d25581d965b110500000000001600141be00a9657046a3521388854a00a2e82224355085b11050000000000225120f2107ee0227c8608009728071be7a5417e68c6c09aa1e406baf709906026b4ea5b11050000000000225120face259112754678ac0fe1039f0eea5dd052725637b53ee2cc0d34555efbb6065b110500000000002251206e2c745069ece579e4fc8cb5292c3c0ec0d5b224160cbed709962af8ae1febcf5b110500000000002251200580459fdfe1cfcb25dcbcad57d44df858a91ca16107b2e00115a9fa8c3b1c1d5b11050000000000225120322e0e4a4b4185b564d8362a001740634c3043defe3dcc042f971858bd9906305b110500000000002251204472bc94524182b1efdf947c59b2a5e7ab182eaa4f06c6ce3123e24e2309a6ea5b1105000000000022512027fe8ca5a36406300e1752d34317fc751c349d210885a073a7420670ae7881295b11050000000000225120a5b61f57e4e2c09a09b38ade6758b28daf3e1c3e5b4ec83a4f14a139c78a56655b11050000000000225120ee96ffdb87b8829f184a9d73f7708478937611ada3153e531f21cafb0722c8e75b11050000000000225120f971d607faa230376d8d97a2c6f3913551be7e6513835ba740a13b83e622a5e75b11050000000000225120dbd97da715d85067f036ccdbec9ca153c88e4aba6671eb0c6e6024e86a8c39775b1105000000000022512060437571110e9c4f1195f6d3026ae67930388485df2d122670bb86cd5e832ddd5b11050000000000225120f18481ab2ddba2df70f540d7e21f2603880b63afa4d3bdd6ca2c781281bb549b5b110500000000002251201f7dfabc5d33cb36a13634fddc84007dc6c6c269a272a25c8dbddc41084bf0be5b110500000000002251209604ac612988d292078020fd4798826a36bc37fc113c299275bd1cff6980feb95b110500000000002251208f5ca24316fcd92cbc48d2ded79fbaae15c9ab2d799ce0f5c0302474bfad5a985b11050000000000225120ef8386348f7081068e0f18443cdf4a4d56da2b4944bdeec90e053f11556bf97d5b110500000000001600141b149c76acfd9137d5641288d74c076e8c4d5ca05b11050000000000225120e7f997333ace9c24c95a4bdec69eefd5d52e3bb21285a44b65e264176c9c3a595b11050000000000225120fe04d526ec4c71ff8c86ebf527f1e1ec94a2ab4615491910b7601f9cc930457d5b11050000000000225120fe14c872c08423cf695e0b048c8fafd4dd9ce0ab9155d42c00182b1f581d81aa5b11050000000000225120288e00981ae7e3f624a2a6cad7e2483ffbca5f688f4b9108fd2e4f231f0be2fd5b1105000000000022512002a4905f332799a1eb407e70b5a89a00230cc1d7821bfc23fbd5916eaebadc8a5b11050000000000225120088505f095842e5a2b2b21eeff2e8fabe74317784f249ad161352b609c4766a85b11050000000000225120563cc0a2813c87e7e7f2f598513d8779790730a2dd85d268667ddcbfb00a19475b110500000000002251206cbd5c9c03adf85f577d00b4285390d0e77ba9ba15137a64b04ce89445c3fcf85b11050000000000225120ab374ee3a355e61394e9d6835cb453b1fb4721dc7c1875c2b9def88c3dc694335b11050000000000225120276490b13d148844793f10e6267728702ac558730721ed2eac96aba7a347e1685b11050000000000225120a7ed67079aa68717778dd398d51c9710fb64773d3da3c47949746ad5fb2493955b110500000000002251206c84adaf67f7c4f007bd565f8aa2a10f10a064f6a62055a1194011e9ad0ec85c5b110500000000002251209ce2b101984b345d47a4e1d1589cce1d9c35cd5fa3d6d7e5e11278133a828d0f5b11050000000000225120a486831ce7be400c15028eda6fa684ad55091def90d45e844da56867c9c86ed95b1105000000000022512062fbe78ed9acbd0fc237517efa1a6dfee372e76814a5483d2fe5cd9b1a8d25ac5b11050000000000225120ecb66731b201ad3c9dd8d77125d9a1faf57b39cb707cfa39e4f5b73f868b68705b110500000000002251207712ce714b2e26a22b31d4a1cc772b56fb11e97652d5e3477d721255cd7297af5b1105000000000022512093c0a2afaaefa0f1d639e8981c50359a4bef552d88b57cc72c80c0f92864c0f65b11050000000000225120ffa1550825ebde659ea5ac41ade27b22da58e09fd7767534e0bc4e26a23941d15b110500000000002251200a5c71cd217f3cfaedd9ac3958ed19a574b666de561cbe14df87cd48a44865155b11050000000000225120cc0864de67d98b2d432e5f96c28a99e50ec5fd9cc34ac015bcf12a0cd14b747b5b1105000000000022512088a61ec576947b44f236354f49569cfb493f797ba8e36145c72be9800bbf65c65b110500000000002251201a86f2d0957cb8448b04fb592270aba025d4c6170d500a3cdda4157db359b9df5b110500000000002251208d96f7d2eea14546d7316435087085d592cd5336d60856113879dd3df795e1ac5b11050000000000225120908d2b23ae060197374cc5399be3d11d1f5dc0106dcfcc992023591ea2dea5af5b110500000000002251202900544d5c01a0fe2853355d51796a21552088e10ad1235d6d320807fd8974d25b11050000000000225120e1770f41712a8935f8beb4d8336f2bf692d387ee4e964726e98a0bbc335eaaf25b11050000000000225120f9de0ae92fc3e0fc569e96a68e854b82c57bb9cd2b8f822b9abe8c89920eb37d5b11050000000000225120574ab1c47547ae2d4190181bf14041d98952a85c00a4251f2814fadb3c6ebfb85b1105000000000022512040866535a77730783e23907518fcccc285c4ca4ff1c65feb81dbba2778a078695b1105000000000022512014a3a989b672d8b842012dbbb945f79d4c62b1bba7f9d2b1bf142add8201e4e35b110500000000002251205fd70eed72e64ce8201b4f01e513bf63fdc0f179c3e44bcc2d5188570c1a05425b11050000000000225120a7f28153578cfa541bcd584465ea33290bcecf26e75a02f69a8908800029c5d45b1105000000000022512041b698197fc6c8c13c5ef8c33e08f08d36cd4a485ead7e1129bace9f2316285c5b1105000000000022512095f176a87f3283596ffe06f3951d157bebde60cf1868fef2be695ecde989b5105b110500000000002251208846ffa5338fe9fcc49c6d830820a61900bf44de7b71bf2b6a485998124ee1a65b11050000000000225120e790afe5e2116e31df996402f00f155dab1a2723768571468fb3f67380eb2b6b5b1105000000000022512007f64fdf182f189e0fbca65498654d526129b50416f4286079937f5dd23a93db5b11050000000000225120b7ec228497478e59bf4d9d912046a35a9b70ca9aff901c348417e65edb90c7d85b11050000000000160014ce72d8f2c5f4d588a11fadad82430b8c9096037f5b11050000000000225120f3dff4b2c73c68aedaa9b0f463096062682d856b4de5e0b844c363cd4246a1b25b1105000000000016001415d3b7ab8f62d8cb82dd1c88dbee844e90a064825b1105000000000022512005ae3d3604972ab1b457bd14c4a57746387ef27747460711fc6786c18a68452f5b11050000000000225120f3071a7ba7c189f2adf97e27ac58c1894184b5e877c7cd0e87afb854e972eb435b110500000000002251205a22318b335918506ae7ff437cd4ad2efc74885363ffe50eba1a1182785f52b15b110500000000001600148c29673f6cca7c5c280f5fef708b292a8195978c5b11050000000000225120f23cbd94bac65fd70344e88a2f1923a661abfafc623587e41b446e95a18caa3d5b11050000000000225120d2acfe61c7431e5f62dc32d1a05154a305c929cb895f272b3db3dce40dfa23b95b11050000000000225120e85f74e9797d0241dfc1b12d50780e03147d9500c3b613df3c3651042f21cc9d5b11050000000000225120fef68c94e8390a338e2b52794c95258627d6a61cced5a9449da791b16d710e685b11050000000000225120ec74cf2c627457c8a3669f680f69e2ccbb9fc0c22c1bf7c813416db6254f785f5b110500000000002251206f7a82875a6c78708a11a0f70ff0829e600888834a669f331fef311d5c1efa0e5b110500000000002251205f4b39b1a7a0b39fdd982a63de8f08a8a9f04e21ce518ca5759f903f965453405b110500000000002251205b48234f2b690c48d21b62a52492515831e3cc13779bf679e7187bbefbd21ab85b11050000000000225120f7488cfa5e019d31890a935f5d499b07b679c5877c2181612f633fdc693e4d6a5b110500000000002251205cff4a8ef30409719a77e829d7a098f4e59c88ce12061f78e82938911137a2bf5b110500000000002251207ac696130412633edd4e0cb3f76a5289c15a39571b3beadf96a1143efee001835b1105000000000022512032073e29b8884dbe7f0c231c4b2c3657505a6a8a442ba3c12b7c9841eb11b1e65b1105000000000022512061045ea250b5c62f14b6a6fecdb434e5b36600182c8eae2082186a80453099045b1105000000000022512056ae81d3e21ae6497c00f6f23037388deadc6611ab4cdd47aef892bf84cedf415b11050000000000225120729d37727c5b5e0dcc01fd49cb49cb1c51f4ee43f44bd6853e6cdae2a8c684985b11050000000000225120b87f6c83f4747f129fb3304287d9c944350caa2730246cb91f34197ea6e15be75b110500000000002251201fda052c373a1c8121870078279f409accbb604d9a1a1398c689d632212d92a25b11050000000000225120fc9aa8cd4b95a06f2b0145ecafb9269baeda1c97efb01cbd5df1e00b5c8c57ba5b11050000000000225120733c3ad532e5b9c6e9eedb9f5a4fd39f1ad6903c5c218d936ff0f23bb9fe055d5b11050000000000225120d5115a07b7df6a1f7855b54eef3dfd3779b7b676ce36575a17f23927760f68505b11050000000000225120927b43140f539ad4b4d95f89e243a31181e3243b7da6233537bda7bb220d28495b11050000000000225120c8ab042535208e283350ad1bf2e32b5562b9e124232fe6e8bcc40a5b8652a2625b11050000000000225120e373105e8126f8a2a7c1d56ae5e9a242c808001619fc4ca90e37f675f978b63d5b110500000000002251209a992525fbfd6129d6fca3bd860430af50c209e9f03bf78800b7c08476a419e95b11050000000000225120f57a8774f547c63ef4887a832d8447412cd788eb07bf02955eeb62f5d4c07b785b11050000000000225120175f524e70478b8fd38521f4b6b48545a7a7a8e2bddc30c3749b5a858d6624e25b1105000000000022512004a72f1edb073019290a6429bdb4624f76c2a4c2371cd3d2e0f451356487e9415b110500000000002251208b38f4bb5ec9fc4c05848c4851514a08e0f9b98320ff62949e2b745241f084d15b1105000000000022512089e845a449bc4a9b40414ddff1f740fe725a21d0ab416cda5fb0bc21de6077e05b1105000000000022512072ff400c7bc86fb94adcd49bb13393ba150238bb49db40ee83696b766d9848125b11050000000000225120447c861a764200e22f1921843f011de2a02f12187e690abea2b3b46dc198b5be5b110500000000002251202055a4e1f2f22eae9ea2c487652997b1eefda6cf889a53a0d7a5f2696a3c57165b110500000000001976a914e755e986d49b3151b6dfb6489ef3e6ce22af6cc388ac5b11050000000000225120d574ffcb854b200dccce54e904c054660cb420b3306e2721b2b105b0bcd4150a5b1105000000000022512037fa6057063ebb501b9c4e66e198476ef349606cdc8933548257d13150d867aa5b11050000000000225120e49b38f1078b6e7722fe8c4e3e5573c051ec10597372e3e3182d1b705e91af6d5b110500000000002251201f3854c5b6c76dade32017081d2ed4cb937cb3264804d538d154a60a8fdfac4c5b11050000000000225120a610d6c75e0e92dd0f8b49fab65981f915e9aa97febff6f89b32b51af1e6268a5b11050000000000225120a8e99d852f0fd2dd84d2ac75fcacde80cab9dd2d08847e2e88747b639d7b6f3d5b11050000000000225120dc1ac5a740b06d596e13fc609660efd2bf8cf2de1730e28ddd8575f17e8fac555b11050000000000225120549e7513b462e217283cd31ca3c874bdcaaf5d0d40d0398653f5ba64284f37225b11050000000000225120c632fd38603c137951bcda21fe9c70e27ce24dacad8acd262d69203dabeb99d55b1105000000000022512099373336c78c72914468d3e37ebf9ff5252ba3f939f3aebe45f7765fe5a83d635b11050000000000225120a877b356d928e7192ed65b834bce17af55a4f499cbbf7cecd253b3ab478b4db65b110500000000002251200412f0db349c92440dec5f4296377d487b24e18be70bbce638ecbb599a1ab8fb5b110500000000002251202fecd75afd4c63cc8081438ce660a76a9be89c71203341aecbdf0b2ad8301ab95b11050000000000160014a42eb7307000c89386b9ba13f40ef53e584d43755b1105000000000022512079190e1c9aaa3f5454e9138753dab814559c93193300ba5b56345ad98148e81a5b11050000000000160014513fb8b1c614ba507e8220dece3ed0d7306fa28f5b1105000000000022512005c0159280fe2949b21ba9ba85248a93d8c12d63458af157d3503a07a71d35f85b1105000000000022512020caef4a189bd1b4e4905a9bb05963aa1bda8a9763e6593b6c79a506ab2c30865b1105000000000022512002e6bd5fd3a555687df929e64b44f5aa41add49d14ceab674252f686a690a00e5b110500000000002251208c0b92cff6215c176144a9943da83ad4f26cf496066b17eddcce299405d496a75b110500000000002251208ca669c49fc8aae1f08a0bd9c63ff75031d3d3a25e6642621269f21fc587bd9b5b11050000000000225120bb81d64a0877bc995b9c754a257e730fbf62e71514554a6a8c15b8a8e07978c25b11050000000000225120d9da93d3c334e9dffdd64683b82dec1ca66e30173ecb6a56ebfabe7fb3a7f1af5b110500000000002251204e30c5805971d1373341b4d7e85d1d63cedca5b5f9e9fb4c6c64b21d919325275b11050000000000225120977a1e761f97032e272e39ae9efb634f8ee552b355c70f6028aca40cb7b5cf5c5b1105000000000022512011df2a9f75aebbf1b8246681695256f622897d99f4772db2d7d2b1dc2c34587e5b11050000000000225120925de29b5320214d6d379c5478a2534bea8fa5524493aa0451a82747bb089c765b1105000000000022512005fc6ab08930aea5a850a850f328108e8d4ed19315dbfcb749dc196181aa88d75b11050000000000225120e30ef25d9dd69a0ea3696ba37e5e5dd971379ea00fcd1406e23437e52782ee3c5b11050000000000225120ec11c59e6b4ad32956f561e13ed5964d22c565439aca7f555055b987cd3fac3f5b11050000000000225120bb7301731daf07335792be4e3677b5cd950ae8af96abc32e0a653c1879f72a285b11050000000000160014e8a6faa5154a2c39675b808af6a5ab979b350f1d5b110500000000002251200eba5c567c3a2ed8443effe20c45788b414fb2e74d52c236199fce3b9601164e5b110500000000002251200def95d5570deb64ef00874f558d99b0c159de9969009bc7eeba3f2d8cad12ca5b11050000000000225120dadd4ca6157af0c15a68c7df5fb981aa1ba70ee532fddae4df19e91bdd653d6c5b11050000000000225120b469586d4253cd11d36d04e7e4adae5d3bb9ec2fff16cf682d1415804cf2b37e5b11050000000000225120cfd47393dfb8fa1a11ee935d1576a7fd75cc66b9a426fc83aa1d2535a2e626c35b11050000000000225120738c48c55c9e6214ca1a71a319cd3e2ba922739a8c233cd78cbce38eaaf6d3065b110500000000002251203e34b7673066c26432226ba3c0cfc4e279759a6b3cd168ce3e4596038c39ea0e5b11050000000000225120a168b2ba709a025ab6f42b83264204f8749c8f69d2b10db4fd0cc3cd1dd738135b1105000000000022512077a3eea628e3a1bb6e8b7e8f5bceec11826562081ead312b65be345f2a4f95975b110500000000002251209cdfdecceed73d538a561394403d5f918914cc557de798330350ac21285a30285b11050000000000225120b795f7cee66b0024164784b3ba6a6e568e374ff6f8cad8a528246253718d84b35b11050000000000225120e072df150c08f98930edf12efe6c0851aa76cbcc66355a9d0fe905c09ba43f475b11050000000000225120a837c14584c5156b22a836d3ac40935b315d645fa0416da668b22389cce7eb8c5b110500000000002251205b868f424e9b5dbf4d10f41519f2dcae2b676f386e02ecf17bcf78707a04f7f55b11050000000000225120d50fc14319c7603a274efd82f38ef75504309c810530fb69c9e72a42a1ff6acd5b11050000000000225120032046796c7042cad8b32559243fc2727b6ab2aa2bef7c0cd460c7dc33f7018f5b110500000000002251206cb1379a34032ee7d11ab0669237f692eb399f34be6c341be4a6400cd9d322f15b110500000000002251209761206350ee61b4aa1e142ce1993518274dcc427224659afdda82947fdce8aa5b11050000000000225120f8727339de4773a2fe74a5588ac8c7bfe2dba9db2759ea3ac79fc18a2b4027e05b110500000000002251204a9745d2daf9b52467b99b83e44adc5a880fa5d6f26ec208b516605fcb8c1b4b5b110500000000002251204bf0314da24c553d87c724efce3e6b721367d618bb622e0a3030b966c46f83745b110500000000002251207b11b6a4c4f9ba583c41eab09129b518b964de579c7d7e0db1da9f692fddb3415b110500000000002251201c3934b49275ab945749e391ba23e48929e769213b1b0db77cb7f84fdd6d156c5b11050000000000225120e4b9a7f39f21c9162fa715df62400c297b799a22cae326a2a27809c027529aa45b11050000000000225120662c0835bb79bf94c55c9d870e6bb3b9302e536d75fff7da74cf6cbf86338d655b11050000000000225120a3514102af25ebfaa230c702e6ffac98d526c0ee5d2cbdfadec52ef0ea720c785b110500000000002251208891351ceb7d40c66714652a41830d890399a21e1742522cca6656b484c3d4ab5b1105000000000022512001a8f9f8eff940b1873dd6876a9d949f94683915519b6cf4f2be3075299537535b11050000000000160014a8ca2a6fa2a98101db861feb784214693e915d7a5b1105000000000022512024f9cf9f322cb09ed1dcbfa2eab59cc50bc71339b3f6678c3ab88f36d36ca5c55b11050000000000160014f597096e185cbd254822327a878d52ecc06a19895b11050000000000225120c0c06aca8e49ddb3f1b9221de3c0d2c0ba1673578f40f1596f1ceca6acc96b565b110500000000002251208d9698bcf2db5089e9592f598928ec392eeee1c488b82830b690de25ba60bf315b110500000000002251208f2b97708afa06b363c45b62e7ddee5ee2fb9d2a5a2ade48ce8281029ed329165b11050000000000225120a3be1ab7eb6b534fd10df2cca19aeac7402bdd04a90e01c09f1f212d9f67a4045b1105000000000022512004a57220898b654d1ce3e12e71dad33b5db9b08e79c3fe0d3d9742ac3e2343035b110500000000002251201a65171c858f0c3d9a81df1944794bb9e42c826632a1d6b28c94776371771e3e5b11050000000000225120ed9a9badbc05b76b43870182c3a9c05b959c37bd0fc9a6dc0210aacd129bbf085b11050000000000225120aa06dbb263576f12af3778703095d30234b8d1b273ce051770513a391dcd98425b11050000000000225120fc3900166fdefd23588e134510a63f818da2075ac32d677ddd0f4c706e18383a5b110500000000002251200f76c4aeee464960f53fbb89cad7cc659dab1fd7a554ff8b127b34e7268b262d5b1105000000000022512017dd36d66916491e363adbf80ce210fae89f20bcbfa5fa9d9e1e5392d4fb0e475b110500000000001600144d4bc39b818d27611e9876b323e429af19300a0e5b110500000000001600145764a251efb9227b4b71c34b8fcee06b5f6285485b11050000000000225120508d6a37cf150a1d381c7e28b4b56c4c0ac1f85b1ef72e791e687f908f4546e65b110500000000002251202bb15485d52b322e713bb261e717673db7221f8c8cd77ef0036c3a0af0867f305b11050000000000225120b5d41e1059f49eae2fb5dc6fffa09c753e9513663d77159c16faaa635c07b1aa5b11050000000000225120d3da605aa894bece781e69a030296cd9dd5bd8edff02b7fe46186ff9dffa2c225b11050000000000225120c1bf86c3627e31ef4c9667d2a3e89778b3a546d97a67036e423812579f7c2faf5b1105000000000016001412c910240843728e4507c50c13db5a903209e7805b1105000000000022512039bd3bca2ef12b17b9df2adeefcefb894fc05d7131c1801a5e40499fe066b45e5b110500000000002251208f599012ca641780cd6a05eddfd543490fb725bf3d41992433320de37018b3145b1105000000000022512025718dd1235cf519caabe1654d50ce73b32dae3c5bdc1944dd25c6302e493a735b11050000000000225120004bb55abf033e15d3e6e072b1465968c93bc094481e226efca9ac882dda86f85b11050000000000225120fc77102deb31356c81aefdbb048af745af0244f1dceae86f9c29befe132eb6495b11050000000000225120ab9c934d353206d52536286c7f40f138937e0ff17469e6a18415104a16749fb45b110500000000002251205a3872f01bbd675bf3de9405eb8af1748659151ecfb8d63e60f7bef9bcaec87a5b11050000000000160014bb3660d13f5a28fe8bf44f8e3ac5478c2b72d8a25b1105000000000022512054342acbbd073e0607cc06619a6b92829a5a7b18e73375fa36ef4bd5c4207e5c5b110500000000002251206ad0808a9643b520eba23199d81e84cc2fb3e0ef1ba7f11ef514552c7875e80b5b110500000000002251201fbb6719b880ba932e45530318f41e41c63803d24fafc15f4183377cb773333f5b110500000000002251204f6cc9610c38f7a26acf8933b8b4445e506aef68d279568b5362bb232b9021bf5b11050000000000225120b0bb57132f6af1d1caf3a0a34d2bd5ce0810f5b12597a886bf5a6136f4ea5a415b1105000000000022512053306371b6b9899328be7139fec6b67e556782b3d44ffcbb196c703063f666255b1105000000000022512011a0c84a2820491001bafc2d82af23d5b96943c8b8f4ee5848a50b0ee12f30605b11050000000000225120c377c2142275931dbb8b668cccb17540495a26675c64b2e26306fbe1091dea455b11050000000000225120706b47c601d9daa82a6b066b70c697bbfd818e6ca07378454eb7bfd98097483d5b1105000000000022512007951e074a47f09110cc3abec1247be37f6ca50545205f0b4e9956315a21b4c15b1105000000000022512026161c49dcbab4db0320c6a78aa98791dd2c908544d247cd3cfbf8166191493d5b11050000000000225120dfab4d7230215d12844dbe0b1018dba7b6dfa09b3b0fc93494cdc18860358a755b110500000000002251202f6ffa6a6c38413549bd4358503141ca6300e601e16e9f5fa9429a7ca24b35a15b11050000000000225120b587eeacfb2c2edd0398f72b44191b9f1aaf6425f54bba13096963081cfddf885b110500000000002251206bceb2827309f8146d8c8b4af0046c5d3e824fef6e59cc4841768aba6575127f5b11050000000000225120b4a9b94923ed644f3a0c9721861b11b041d28c08c377eaefd1cfb67c5d889a525b110500000000002251203f20dc895a5ac03b670d7aecf1e5b4a29b25c25a36b40071c27f720a8fa211af5b110500000000002251206b499decb921b380be4ad97f7b3d9d324c07704b451b697e6f99261ad7d1a3025b11050000000000225120d70966f50d81ff174daa70de0f2a619eba2060241c1e1db3e5644635aa3296985b11050000000000225120237024dbe4d3cb64fc180eee63102e406aec37265514e5a80664db54bde69ed95b11050000000000225120d447299670a8c9dcbbb6d071b2155e38c91b38dd80cdaecebf6c3d76e2fcbe1c5b1105000000000016001452bc8ba581687079553b6245773be15093847fdf5b11050000000000225120b86f71d9d8160d95592287f34902146a274628a9a1962cf4728bcd848038a0a05b110500000000002251206375a2802a5e2a70aa1b743b9371fafcfeaeab93a248ff83326a5f37b382ee625b110500000000002251207b2491e515be57c86be43a6ef36a722384d3bc35268314e1ec95fc1fc35697a05b1105000000000022512062fc71a4e1bda19a033d9a6311767bc0d7d901766ef9f26364bda90d7a2f97b05b110500000000001600145217ac275cd34d2ce3ce74ddcf24f62dc2bf2c525b11050000000000225120a3a9a92929b5aca9490600c64a645bd3864d0180cf960a8bd3a9bcf3a860b7a45b11050000000000225120a46ba028aba6a35455010a272589083fa0032820980658808a32391df5d0fe9e5b1105000000000022512025911858f9805c540e6e033e859898dab838bc00ed7f9612e3d574f17905295a5b110500000000002251203e360e5097bf439e2deb3351e6a1425545e04b0293f4071dac5f17a3d22d3c9b5b1105000000000022512014f1543db35a1882ccde496cbc3c6a9959b0d61c466c55e3e4a2df6ff94d911b5b11050000000000160014568b025c9e312af11ce70054c0c0b99752a724e65b110500000000002251204e497dfa66a9ffb58fc65dd88c0e9efc8b4eedbe9fb2d371d68836ba625020d55b1105000000000016001421eb010191ab88667e3b96f6c32cc9a1daa822ee5b11050000000000160014510f762d3c2c1ef4b68786363ba13805f731a4aa5b110500000000001600140506108b185ce86eaac786481410b17630a802105b110500000000001600146602e60a1e167833eaee8a5c90c1aa9360d13ba65b11050000000000160014d9c85e6f4688d8dbc0026243ccd83d456f07a7115b11050000000000160014d70f6f7a922a3cc13dc624de02f4bd168af92bee5b110500000000001600149bf3982677846408cf8e1769108671f6be6e0ef55b1105000000000016001482f7b57c6ff3bd70625e87ce9bb2ec1daf531c975b11050000000000160014fc1e6992add91da961b2bf3ebbb016042cb800285b1105000000000016001474e062e07758c896673972f0c682c12bcd43778e5b11050000000000160014993e74b237e0000349e5e4409f4d7a1164d880e85b110500000000001600146fe9f01b77e521aa5efdd9d56aeeed9bcaad4cfb5b110500000000001600148f2456a3d8cf278c155613788a7d1ea5f63e4abf5b11050000000000160014c1d357bfb3188be65c67f6217f22bb26500794775b110500000000001600143579937f306d454159cfe4a6d81be1fe698d41925b110500000000002251201ff5b29df5802f8b7c293b55ffc5a13a1a43afd962fa54a0ca3582df2bae5c5d5b11050000000000160014f2d96f3d645ce35e206f78a524f27a91bd67142f5b110500000000001600147a8095876272e3c22e258c19d8a9e4caff4173985b1105000000000016001407568be3a7ba94163b9dae2ab39c2670c8bbd3d75b11050000000000225120d013e0d029cbbb966c3a926384c66c31ad24ebedae42a4d1da593ccc4a9169bd5b110500000000002251207f2f3af3049b26e6ffa597784965eb0cd192e3e29c12b4c6e61b6618e551655c5b11050000000000160014ff78872f89b4689423e42fedc68babcd679ab2665b11050000000000225120bfb12c8df627282db0494df47719db67e00443750fc7b93582ddaaa8c1acb9af5b11050000000000225120831d1ffe303209154fcf4897e29e480cf90b43edf9b4d1d3bcd6a70a3b0df4075b1105000000000017a91400e1dfa6bea764107c6018b21aefb0b7b3af0c3b875b110500000000002251204fd21148a2171c9468d4fe20df9b599a555cceaf83ce6ce52d2aeea0f148d08e5b11050000000000225120afc01d83ec74c2a9938526500765434b159b29bd468ae224788f9199f2c1ff345b1105000000000022512053e7f1c719fbc815127208b821130d9f6996eb493f99f37f6cdaddb2531910525b1105000000000022512081acee35b0efbcf088534cbea670a83e765aad17b19e900fb5e1e4a4473ae22e5b11050000000000225120fad8e1685f18626d12b22da33a8d30c4c3cd4d9102867922800a76dc33be04125b110500000000002251208210c58a11a07ef3450937862a52832983826d60121080ee5821c6ddcd125e095b1105000000000022512022ef064e52b767577dc554cad4362d0d76be8ad774b9ea25d3ede298b14afcd05b1105000000000022512053d0e5cd820a193b24ba9d1b0d6dea4840eb9106b61fefcc41669b3a1ef0b9495b11050000000000160014c1aae132e6b78ae9498b042682f7bfb45e7707745b1105000000000022512035b6827ac768803f94b666e485a5ec5445929916c7399260be71eee9d0c0eff25b110500000000002251202da66530814e69a92126d94bbab9fc2e6e7f596064305dc814e9365d4a8606185b11050000000000160014ffe03644088f9d9a394a3170d575590c50fea6b15b110500000000002251208c091982634fa143a8964b456b033dba419216ad8d5125b7482210d11a36693e5b11050000000000225120c605cd729075c0297abb639b3580642d0768b6dbdb50654e87594124ef9b197c5b110500000000002251203bfa7be0fe4c5101f88087f4305239b8555d52fa131c7098601dc23639c80fad5b11050000000000225120d94c5b9fd3951186df755d08284b46507e4eaf3907cee08f0b86a421bd2a7b565b11050000000000225120e83a70970203a85c1011ff20979b8119b90d98d7797142aa48f4b764808afb405b11050000000000225120f9288975a44915b9971afde591e1cada8d89006f3453fbb71ace6d5fd9ea80245b11050000000000225120d4b73a49ef2dfed9623bbf7dc93ba1267d25510d75740c4ce59a7884e5a24e775b11050000000000225120334fbc002b3ccf18a18f4ac36c19c2c1d5f2711d09b3f190c90e06851a0363605b110500000000002251203295f98f751c554d5c52f1a9c483d50961968b4c6b794a60c79ceacb9d1ac3335b1105000000000022512025895201460b898f723eeba83ee6b02a2390ef8dd9ce36c24b80b5a07e1142ff5b11050000000000225120eb4dcb3a38d58dcffefa540c8091c140877e31a08efd0f34eac101198176c8bd5b110500000000002251206bfcac5efee2e675e1e9d9c2f0910a0ec085f1ad61395c47d1697a3434ef62de5b1105000000000022512068560f76b5301b4f117e6cd11a2a9166330e2255c54cab7564512136c7b0472d5b11050000000000225120a2b60aa24c2e71d924fceb0c1b516feb4943942ffd15fdb6892e5bcdcfd8e61f5b11050000000000225120e97e4be0567bac6f718bf447bfb61a1eb0c3480224d8f909e2a955d2946d353c5b11050000000000225120d40dbff6c686fc6e11e3fdee19c0259de7e73c162d388d62e03dcfaefd8a0d4c5b110500000000002251200cb99307c9b322a9f54878c23e9675c06164fb2cae46f5fa9f9b36c73cec8db95b110500000000002251205d02c80ef82c931d156fc3c0f0ddcb611c956e744aca0746d39a009dc91407fb5b11050000000000225120b9ca6cb861c760655e8cb4ec3bdaf8cf9c259cb26efa7c15d97543aba7df9dea5b110500000000002251206d41b1f065c09a1856cd140cb9b0715addbdca5b124c8851a51dffc8758719395b11050000000000225120fc8470f5c54cccfdb30ad57a9a1251f298a3a1aae17d9544545b60e57ae658105b110500000000002251209af56db14b7e502e12a15a51051be0de7b0ca30ee129833464728a35280552915b1105000000000022512007f9685fe68a8dd302f5d3d31d136012d9a9ddde453f40ba8956e5de6b99a45f5b1105000000000022512023da79d215c79710afb5cfb06e4c2baebbb6c9f080b6e633d64587ebee61defe5b11050000000000225120b0dd05d62aafc736a95093827abe8777e45a9a80a989c146b42699fc72edb2a65b110500000000002251201e241ef32fcd4f2327d678cf32f75e82064ba211d9512bbef040cf67114006955b1105000000000022512080f9987e3a1a956d2c67521f8fdf20417f9cb88dda6b510acde05a26ca8f21755b110500000000002251206446ce4ce58f535c66d7af942166b759d15d28fb3f15170c5414fc4859519a445b110500000000002251200dd8eac3023804f16eab9aed90b5f281aaf7d5adcdc902d98a7b1deb2ef4111e5b110500000000002251204d0a5de2dfbc6bd0aa45aa929df69d26f6fc0e70697af4d6ca1ea146ceee092e5b11050000000000225120b999024db05ff5149838af916dca0982a58c7b0512fc3f67d77e9b7e64d6a8815b110500000000002251202fb3a8eaac72de12c0446beb52d6efb0054ad48796e127db5cefca3cd59982615b110500000000002251203b5b5d53c2f0b9be3e3ad0d241d9bc80526a2f0b37535851cbfca7fb30bff6b35b110500000000002251201917e9c49e50e76f5993df7657d0040d1821a80d1a555183a1c882342a0a230e5b11050000000000225120f957a47faee337b7753519702ba13a513f483843b033107dbb1995e5c56c6fb05b11050000000000225120d7aac2e1155d2b6d016fe743b6f641457c5730e8ec9d382e2fa85b119393a7785b11050000000000225120eb5018745bc9ce09babb228ab5bca19c3c543dda63edf973e776793cff068ec65b110500000000002251202f735897d43fc7c547a5373eeecaac4612408dcee941556aa005f93a714bd63e5b110500000000002251205641e15dde541db17e6ed2d5f40a27a46d7ea09e2234b428f2f1749862c19cdb5b110500000000002251204814601e8921e74de2574a76579e26e75a9ab93d12a4dce3ec34339a3bd310c95b11050000000000225120c13125fe1cfefdba6da926f577183e68833e156f98b9eba30e931353f9e733ec5b110500000000002251202904cdb24b4cd7d6bad295abaa4011b508247f442e64281ffd0bd2ba1f7b0b715b1105000000000022512050a3a24d8a6ed4e6eafc0bc05775b313669d35b540cf16299a7513a1e48441055b11050000000000225120f548959d1127d880145bb346bc8ad78ef08bc57aa45d7c246947327ad18659d45b1105000000000022512010d3c939f2aaa575e99b5639359c51a91a622fc58ee1f178ce49737564ed14b95b11050000000000225120ae673856981908cfff4100190bf8c2d3c297b2d9f20a333a432ef37bd21cadd35b1105000000000022512078c410e73213015e1122e283f7ce545f715ff05ae6648271f5a3beecaf4204ce5b11050000000000225120e04ed4c680050b48754f978e8d418410c0c0c9eb7b6dd26d9316fa688c49e0c85b1105000000000022512067dc10de9550cceb055456725f3d05f4b2935257cdc8fb7dc3b795a2950e67e75b11050000000000225120316ee6d5ee35e191183be6a81c83d94e7accf43193ee20e4697c9b91f2d5e60d5b1105000000000022512008951f39b8f1c065912905cf331ddeb224a4ff668a0047b59e0d4358b52d95885b11050000000000225120dfc513ed8e626e278b70d6b492f705cf87debae39f95bf8435d9d0621b73a61a5b1105000000000022512085a8bd7397d52b99db069777cb9b43c7c5c4361d396465d9b481a9cd7851b05e5b110500000000002251201f9082ea7a90c70b56020a40170b3cf88339a6af35ed3407c19c633e20fe282a5b11050000000000225120bc3d6292d5d47aee02e95df8f93403ed7a68952d7c37c5bd3d62f520e0415b4b5b11050000000000225120a54915593414e9ccda294d14de839db426d13be02583f12d40d5d4034f8a07c65b11050000000000225120989baf2f28c4169cd89531991bb4a017940cda2e3103d325bebccc4eabd192ad5b11050000000000225120838ff7abb2dcb080b666b2de3ddd3d99729a6a1e81d06e1fda2f5dcfa159e4265b11050000000000225120ae381e386cb0b740f8467b358ff987b18bb22748144437935bf38b46daf0c2c15b110500000000002251207f7c29bd70e3caba70bf9007eb77130eb1f267e0e8cdcc58c50b36e96d90abc95b11050000000000225120bb171215e0fccc6daacc98e0c1cb1379b23be8216140fc2640199222ef45d4515b110500000000002251207888b9b55fbdd6b2051aa7bd69411df6204ada0ae291b39230666e3f955e662e5b110500000000002251204d9e6b68dbb441c7de0a9a0740687654c3618f80bcf6623d8947099059fb64625b11050000000000225120dc43054831c9773044a9637e2b41c9f6093e84bf8a0d1979308845c9c6dad3495b1105000000000022512035b0e4c380ea02d3ee9b996ecba2b47e5eda868700aa4bba8137ea4f2d743e245b11050000000000225120466ee579cb3d48b8716851b47cd4c4ee24bb86ea4e958900417fbaf95614acc15b110500000000002251206dd7da8112f6e2ab3edbb0e4891ced1b63e511d2adc18c8a2d8d7cf5783edb665b11050000000000160014f70f3421ae5b8b45d678e0566450b67d2a1665305b11050000000000225120961543b586f99fe50d475dc654fe6351aa34f221337b123a493a0763684d3ac71201040022020285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad9014730440220232ce895aeb6f7e57c0c00ac6d39a97ceeb13ff2fbd1daaf6917f5e64f24421302202aee969c21ea4fe7e113358f1372443056777578fc151548ff93f0dd1e0c274001220203c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca847304402202334aedadceb32b17509c627525c10f1ba74fd373aca0d74b401f417caf9b8a90220633f6217b287d4b51ad3624ad5da972087251d8113d75fd421cfd5ba1f521687010103040100000001046952210285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad9012103471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec62103c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca853ae22060285da90bdec453819aae03e6becdd458df3f4e56e0675b5a11c4b8cb3a5fad90114643db86d2d000080000000000000000003000000220603c902dedf0bec7ddd865209f65306a846e527e309c474be4851f43691902d4ca8147df6d3832d000080010000000000000003000000220603471d52247f848b0f9ee79a3865ab1073e647fc39fa147ae1a5b8e915094e2ec61435b794402d0000800200000000000000030000000000", + ), + # 3 - P2SH-P2PKH - unsigned + ( + "sh(wpkh([643db86d/49h/1h/0h]tpubDCAXFesyAVLeX67myqNfZozVAXgHdyxwTXhAeqdx5HCyq3HMQCbCvCFjVR7EcMdmwo6E4qLn2ivt9u4gXXK4WD1guERDX3dmYWAyQbdUsfv/<0;1>/*))#ktnzemyu", + "70736274ff01005e0200000001a839accb2b5e01cdb8173685cf958501d3bc4bc6156b17b9072f2d2661071b7f8807000000fdffffff01d50d050000000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d90360104004f01043587cf03130e64f880000000cf7ca18b9d28857cd3ce48c4852254c11a5302ca30b7a07d90fd023b8e278ec0020128f0d6e83400750ad413568d89ab5a1b84d676bc6f4e8aab6db73b1098300a10643db86d310000800100008000000080000101205b1105000000000017a91405bbb629c1f33f822f6311536e22851575f912ae870103040100000001041600143ae07831350d4be165fddd95e6fee891e130f517220603012cbcba10cf01e77c0da9c1d23c5359df88004a673ca06539b1c1b34e49d74618643db86d31000080010000800000008000000000020000000000" + ), + # 4 - P2SH-P2PKH - signed + ( + "sh(wpkh([643db86d/49h/1h/0h]tpubDCAXFesyAVLeX67myqNfZozVAXgHdyxwTXhAeqdx5HCyq3HMQCbCvCFjVR7EcMdmwo6E4qLn2ivt9u4gXXK4WD1guERDX3dmYWAyQbdUsfv/<0;1>/*))#ktnzemyu", + "70736274ff01005e0200000001a839accb2b5e01cdb8173685cf958501d3bc4bc6156b17b9072f2d2661071b7f8807000000fdffffff01d50d050000000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d90360104004f01043587cf03130e64f880000000cf7ca18b9d28857cd3ce48c4852254c11a5302ca30b7a07d90fd023b8e278ec0020128f0d6e83400750ad413568d89ab5a1b84d676bc6f4e8aab6db73b1098300a10643db86d310000800100008000000080000101205b1105000000000017a91405bbb629c1f33f822f6311536e22851575f912ae87220203012cbcba10cf01e77c0da9c1d23c5359df88004a673ca06539b1c1b34e49d74647304402205cf868fa420d9ece673c81dbee451e0a5b3f43432deb51b1752a042a6be9193d02201e533323142ea77810650fcbc55dcec36a6bc6908aee92385a7a370c439d39eb010103040100000001041600143ae07831350d4be165fddd95e6fee891e130f517220603012cbcba10cf01e77c0da9c1d23c5359df88004a673ca06539b1c1b34e49d74618643db86d31000080010000800000008000000000020000000000" + ), + # 5 - P2SH-P2WSH 2-of-3, unsigned + ( + "sh(wsh(sortedmulti(2,[643db86d/48h/1h/0h/1h]tpubDFgABNJrzAFWmr2Av1qCxPuNPhAYuhEXZppP6fswZheSzt3UDcs6u5Ui1K4PMoZXnYavT45TsGpiYxeEFybGdBr6xq79QauaecvS8tFSLBf/<0;1>/*,[7df6d383/48h/1h/0h/1h]tpubDEYdfmSxYUMbnQybV2cmBmecdyczsfKZFcoYgRg82h6vsKwHRB19C5cHbP6kPJYAAtRYDkbzwBsbaojccLXyitgvmVbv4YWTHskR3DaTgLb/<0;1>/*,[35b79440/48h/1h/0h/1h]tpubDFVCVyYhScXQBVkNu8ouxXGUMfuRx4fCi6zqfBxbzG26yirEr8uFugQHxzSciPA1qzdBa1otRPCe3vngq3zNnTDZT5KpmAiSWUae1HLYJCV/<0;1>/*)))#kz5a85us", + "70736274ff0100520200000001a11c8c2cf013392ee293c03a72267a6d2557219bcb3fea5f637838d63a113ad40100000000fdffffff010f82010000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac9450104004f01043587cf04f0ba775480000001dcfa0e0f09226a47cb5a9dcb9f8e6fd77eab2d3422aab27c17baf175f49c52ba03c7e781a4fdf133a47e6e3ce8bce7b3638505a4ab2d6318758259df9b6eefed2114643db86d300000800100008000000080010000804f01043587cf045705feca8000000101b4381f9dd9930362021d76dee43d8e6848c87fbe7e725c9964c44b74aceea7036c948847e0f047eb2f20d7e54a433b5fd9076ea8467d96cd088bad47a67df182147df6d383300000800100008000000080010000804f01043587cf04d704fb0d80000001d5b17aefdba7b9c5185160827a75b4b46647531965db2ceb7a523adce80d5e5e026c253f08cda976785d2a213a842d3d41d9213be1df4ef42ed399ebf0eb1d85cf1435b7944030000080010000800000008001000080000100ed02000000027d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff0ee4d8a309babd19d24d6a8278ef40802208465733f0543fed98fcfcf4692f2a04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff02ba74010000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387dffd0300010120768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387010304010000000104220020907e7e6bf58bf3539ecd3c044a38925de88cc9dc1d1f8c5115e792caed514e04010569522103422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b21037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d2103b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a4853ae220603b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a481c643db86d3000008001000080000000800100008001000000010000002206037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d1c7df6d383300000800100008000000080010000800100000001000000220603422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b1c35b794403000008001000080000000800100008001000000010000000000" + ), + # 6 - P2SH-P2WSH 2-of-3, 1st signed + ( + "sh(wsh(sortedmulti(2,[643db86d/48h/1h/0h/1h]tpubDFgABNJrzAFWmr2Av1qCxPuNPhAYuhEXZppP6fswZheSzt3UDcs6u5Ui1K4PMoZXnYavT45TsGpiYxeEFybGdBr6xq79QauaecvS8tFSLBf/<0;1>/*,[7df6d383/48h/1h/0h/1h]tpubDEYdfmSxYUMbnQybV2cmBmecdyczsfKZFcoYgRg82h6vsKwHRB19C5cHbP6kPJYAAtRYDkbzwBsbaojccLXyitgvmVbv4YWTHskR3DaTgLb/<0;1>/*,[35b79440/48h/1h/0h/1h]tpubDFVCVyYhScXQBVkNu8ouxXGUMfuRx4fCi6zqfBxbzG26yirEr8uFugQHxzSciPA1qzdBa1otRPCe3vngq3zNnTDZT5KpmAiSWUae1HLYJCV/<0;1>/*)))#kz5a85us", + "70736274ff0100520200000001a11c8c2cf013392ee293c03a72267a6d2557219bcb3fea5f637838d63a113ad40100000000fdffffff010f82010000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac9450104004f01043587cf04f0ba775480000001dcfa0e0f09226a47cb5a9dcb9f8e6fd77eab2d3422aab27c17baf175f49c52ba03c7e781a4fdf133a47e6e3ce8bce7b3638505a4ab2d6318758259df9b6eefed2114643db86d300000800100008000000080010000804f01043587cf045705feca8000000101b4381f9dd9930362021d76dee43d8e6848c87fbe7e725c9964c44b74aceea7036c948847e0f047eb2f20d7e54a433b5fd9076ea8467d96cd088bad47a67df182147df6d383300000800100008000000080010000804f01043587cf04d704fb0d80000001d5b17aefdba7b9c5185160827a75b4b46647531965db2ceb7a523adce80d5e5e026c253f08cda976785d2a213a842d3d41d9213be1df4ef42ed399ebf0eb1d85cf1435b7944030000080010000800000008001000080000100ed02000000027d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff0ee4d8a309babd19d24d6a8278ef40802208465733f0543fed98fcfcf4692f2a04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff02ba74010000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387dffd0300010120768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387220203b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a48473044022019ace8f13f2e1daea6721c8c8e4e43033df97a8b798af4f01998e27ef4939f8e022079c2cee83f6c78f2c1bd9e2cea1fa817dc1f4e4727a004a3b13b87a62375403e01010304010000000104220020907e7e6bf58bf3539ecd3c044a38925de88cc9dc1d1f8c5115e792caed514e04010569522103422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b21037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d2103b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a4853ae220603b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a481c643db86d3000008001000080000000800100008001000000010000002206037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d1c7df6d383300000800100008000000080010000800100000001000000220603422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b1c35b794403000008001000080000000800100008001000000010000000000" + ), + # 7 - P2SH-P2WSH 2-of-3, 1st and 2nd signed + ( + "sh(wsh(sortedmulti(2,[643db86d/48h/1h/0h/1h]tpubDFgABNJrzAFWmr2Av1qCxPuNPhAYuhEXZppP6fswZheSzt3UDcs6u5Ui1K4PMoZXnYavT45TsGpiYxeEFybGdBr6xq79QauaecvS8tFSLBf/<0;1>/*,[7df6d383/48h/1h/0h/1h]tpubDEYdfmSxYUMbnQybV2cmBmecdyczsfKZFcoYgRg82h6vsKwHRB19C5cHbP6kPJYAAtRYDkbzwBsbaojccLXyitgvmVbv4YWTHskR3DaTgLb/<0;1>/*,[35b79440/48h/1h/0h/1h]tpubDFVCVyYhScXQBVkNu8ouxXGUMfuRx4fCi6zqfBxbzG26yirEr8uFugQHxzSciPA1qzdBa1otRPCe3vngq3zNnTDZT5KpmAiSWUae1HLYJCV/<0;1>/*)))#kz5a85us", + "70736274ff0100520200000001a11c8c2cf013392ee293c03a72267a6d2557219bcb3fea5f637838d63a113ad40100000000fdffffff010f82010000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac9450104004f01043587cf04f0ba775480000001dcfa0e0f09226a47cb5a9dcb9f8e6fd77eab2d3422aab27c17baf175f49c52ba03c7e781a4fdf133a47e6e3ce8bce7b3638505a4ab2d6318758259df9b6eefed2114643db86d300000800100008000000080010000804f01043587cf045705feca8000000101b4381f9dd9930362021d76dee43d8e6848c87fbe7e725c9964c44b74aceea7036c948847e0f047eb2f20d7e54a433b5fd9076ea8467d96cd088bad47a67df182147df6d383300000800100008000000080010000804f01043587cf04d704fb0d80000001d5b17aefdba7b9c5185160827a75b4b46647531965db2ceb7a523adce80d5e5e026c253f08cda976785d2a213a842d3d41d9213be1df4ef42ed399ebf0eb1d85cf1435b7944030000080010000800000008001000080000100ed02000000027d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff0ee4d8a309babd19d24d6a8278ef40802208465733f0543fed98fcfcf4692f2a04000000232200201b469eabbe3859734615c80f78320edf1146d9313704eb5d0bc4f283dd05060efdffffff02ba74010000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387dffd0300010120768601000000000017a914280a38da5519fa3817b39fe80cb1a9341b663c0387220203b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a48473044022019ace8f13f2e1daea6721c8c8e4e43033df97a8b798af4f01998e27ef4939f8e022079c2cee83f6c78f2c1bd9e2cea1fa817dc1f4e4727a004a3b13b87a62375403e012202037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d47304402202efc01d402064edc3011ce8897d08e7beebaa579a9bfa0a73c5e560265a3cac30220778f655249241a2c4f5f28f6b032f49079178fb7731372477c837b71bf30c3f701010304010000000104220020907e7e6bf58bf3539ecd3c044a38925de88cc9dc1d1f8c5115e792caed514e04010569522103422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b21037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d2103b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a4853ae220603b12d232165288ab94913b238671be7ade90e0cd839db9f917deaccd075a11a481c643db86d3000008001000080000000800100008001000000010000002206037f179f8db3a3dcc6c8de618c9c9ed56edceea2a0b50a43fbefde1fa010c5117d1c7df6d383300000800100008000000080010000800100000001000000220603422be4da851a2f1957c957500d6288efc01c9ad5d5364523d8158d66bdc87e5b1c35b794403000008001000080000000800100008001000000010000000000" + ), + # 8 - P2WSH 2-of-3, unsigned + ( + "wsh(sortedmulti(2,[35b79440/48h/1h/0h/2h]tpubDFVCVyYhScXQCN5fJFjoXBHcpB3V47vA6cv5vuhk8iWVQLSQtdaiNV3Wbqz5jTrp37S4itVYjKLzPaXNA29k2qonaNN1uU9V8XErLCsBbZR/<0;1>/*,[643db86d/48h/1h/0h/2h]tpubDFgABNJrzAFWoZ5vP2ZH6UAk2ftKvNU56aoRPRoPrqiqtuaBrYmW3afCCG1gH1JT7m5ZhDA3Cx77D52k5tAen6X9QPuR3DMud2ZSK7H7csD/<0;1>/*,[7df6d383/48h/1h/0h/2h]tpubDEYdfmSxYUMbqDh4wN4WUXUduiGGmcTt9ShLHSHgMKCGbrXtc7tx4aBB1oS9pXJzFLfHmzQxC8mCxKPsnHumrunRs4k3ZmmNLNnmkr68oRZ/<0;1>/*))#zdtzatgg", + "70736274ff01005302000000017d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea0700000000fdffffff01755d02000000000017a9147b738e9ff525810a2ace409c80daa044bdb052b187590104004f01043587cf04f0ba77548000000288883e2c926bd0fff9908d5e86cffd03064a799fcc5c409ff43c4aa3f2433d3c03f3378aa92d9ca1ee0bcf072879a6479a2c50711407dfc3856923959b424949bc14643db86d300000800100008000000080020000804f01043587cf045705feca800000021b7c7438033e6a5020f7d7df4e0928f26c301773a5da0481375e2986198db43b03d7f8f4e359c52b9eca6e4d28bd0ae951b4b175ea6ff7b86353cbd8ebdadd9357147df6d383300000800100008000000080020000804f01043587cf04d704fb0d800000022cdb4c665dc8cb0b987465b40a269a8a624c82584d10a0027391fceb15020199038af5bc808bab8e169ea6ab6bdd819862cdc3c63f886427e546219aa3d2273e861435b7944030000080010000800000008002000080000100fd570102000000016858cc9ab4cf4238c2797e7368a9e9ff08c389deeb4918615e2c178d68a526e5a307000000fdffffff082069000000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e9083000000000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d900d4600000000000017a914e61bce8049c560a60590ed7574ee41cad20d6a1987da4d0000000000001976a914447fde1e37d97255b5821d2dee816e8f18f6bac988acae5500000000000017a914a4cc6edc13237f734fb3852c7b2c7a1b26c68f4087795d0000000000001976a9143e86ad893c4e77121edbadc39aca0c83f5a694dd88acef74000000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac90761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c8efd030001012b0761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c01030401000000010569522102f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc2103ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe2103efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe53ae220602f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc1c643db86d300000800100008000000080020000800100000000000000220603efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe1c7df6d383300000800100008000000080020000800100000000000000220603ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe1c35b794403000008001000080000000800200008001000000000000000000" + ), + # 9 - P2WSH 2-of-3, 1st signed + ( + "wsh(sortedmulti(2,[35b79440/48h/1h/0h/2h]tpubDFVCVyYhScXQCN5fJFjoXBHcpB3V47vA6cv5vuhk8iWVQLSQtdaiNV3Wbqz5jTrp37S4itVYjKLzPaXNA29k2qonaNN1uU9V8XErLCsBbZR/<0;1>/*,[643db86d/48h/1h/0h/2h]tpubDFgABNJrzAFWoZ5vP2ZH6UAk2ftKvNU56aoRPRoPrqiqtuaBrYmW3afCCG1gH1JT7m5ZhDA3Cx77D52k5tAen6X9QPuR3DMud2ZSK7H7csD/<0;1>/*,[7df6d383/48h/1h/0h/2h]tpubDEYdfmSxYUMbqDh4wN4WUXUduiGGmcTt9ShLHSHgMKCGbrXtc7tx4aBB1oS9pXJzFLfHmzQxC8mCxKPsnHumrunRs4k3ZmmNLNnmkr68oRZ/<0;1>/*))#zdtzatgg", + "70736274ff01005302000000017d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea0700000000fdffffff01755d02000000000017a9147b738e9ff525810a2ace409c80daa044bdb052b187590104004f01043587cf04f0ba77548000000288883e2c926bd0fff9908d5e86cffd03064a799fcc5c409ff43c4aa3f2433d3c03f3378aa92d9ca1ee0bcf072879a6479a2c50711407dfc3856923959b424949bc14643db86d300000800100008000000080020000804f01043587cf045705feca800000021b7c7438033e6a5020f7d7df4e0928f26c301773a5da0481375e2986198db43b03d7f8f4e359c52b9eca6e4d28bd0ae951b4b175ea6ff7b86353cbd8ebdadd9357147df6d383300000800100008000000080020000804f01043587cf04d704fb0d800000022cdb4c665dc8cb0b987465b40a269a8a624c82584d10a0027391fceb15020199038af5bc808bab8e169ea6ab6bdd819862cdc3c63f886427e546219aa3d2273e861435b7944030000080010000800000008002000080000100fd570102000000016858cc9ab4cf4238c2797e7368a9e9ff08c389deeb4918615e2c178d68a526e5a307000000fdffffff082069000000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e9083000000000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d900d4600000000000017a914e61bce8049c560a60590ed7574ee41cad20d6a1987da4d0000000000001976a914447fde1e37d97255b5821d2dee816e8f18f6bac988acae5500000000000017a914a4cc6edc13237f734fb3852c7b2c7a1b26c68f4087795d0000000000001976a9143e86ad893c4e77121edbadc39aca0c83f5a694dd88acef74000000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac90761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c8efd030001012b0761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c220202f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc47304402206b465c065488c15db2bdba7609522fee36b187ea4f39c9ff8365420a86a73a7a02200afc5f9acd2ce986db2697e7ded236c6731559636a527d8c7370ec4157aafaae0101030401000000010569522102f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc2103ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe2103efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe53ae220602f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc1c643db86d300000800100008000000080020000800100000000000000220603efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe1c7df6d383300000800100008000000080020000800100000000000000220603ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe1c35b794403000008001000080000000800200008001000000000000000000" + ), + # 10 - P2WSH 2-of-3, 1st and 2nd signed + ( + "wsh(sortedmulti(2,[35b79440/48h/1h/0h/2h]tpubDFVCVyYhScXQCN5fJFjoXBHcpB3V47vA6cv5vuhk8iWVQLSQtdaiNV3Wbqz5jTrp37S4itVYjKLzPaXNA29k2qonaNN1uU9V8XErLCsBbZR/<0;1>/*,[643db86d/48h/1h/0h/2h]tpubDFgABNJrzAFWoZ5vP2ZH6UAk2ftKvNU56aoRPRoPrqiqtuaBrYmW3afCCG1gH1JT7m5ZhDA3Cx77D52k5tAen6X9QPuR3DMud2ZSK7H7csD/<0;1>/*,[7df6d383/48h/1h/0h/2h]tpubDEYdfmSxYUMbqDh4wN4WUXUduiGGmcTt9ShLHSHgMKCGbrXtc7tx4aBB1oS9pXJzFLfHmzQxC8mCxKPsnHumrunRs4k3ZmmNLNnmkr68oRZ/<0;1>/*))#zdtzatgg", + "70736274ff01005302000000017d89abd654365a1d23924ffa66420a82e2b561cb01469f7ee7f1e55e3dd0acea0700000000fdffffff01755d02000000000017a9147b738e9ff525810a2ace409c80daa044bdb052b187590104004f01043587cf04f0ba77548000000288883e2c926bd0fff9908d5e86cffd03064a799fcc5c409ff43c4aa3f2433d3c03f3378aa92d9ca1ee0bcf072879a6479a2c50711407dfc3856923959b424949bc14643db86d300000800100008000000080020000804f01043587cf045705feca800000021b7c7438033e6a5020f7d7df4e0928f26c301773a5da0481375e2986198db43b03d7f8f4e359c52b9eca6e4d28bd0ae951b4b175ea6ff7b86353cbd8ebdadd9357147df6d383300000800100008000000080020000804f01043587cf04d704fb0d800000022cdb4c665dc8cb0b987465b40a269a8a624c82584d10a0027391fceb15020199038af5bc808bab8e169ea6ab6bdd819862cdc3c63f886427e546219aa3d2273e861435b7944030000080010000800000008002000080000100fd570102000000016858cc9ab4cf4238c2797e7368a9e9ff08c389deeb4918615e2c178d68a526e5a307000000fdffffff082069000000000000220020da4db89d8165cfbd066884bc5bb08cb0c4ad876c1e04c974186be6f40622af8e9083000000000000225120aac35fe91f20d48816b3c83011d117efa35acd2414d36c1e02b0f29fc3106d900d4600000000000017a914e61bce8049c560a60590ed7574ee41cad20d6a1987da4d0000000000001976a914447fde1e37d97255b5821d2dee816e8f18f6bac988acae5500000000000017a914a4cc6edc13237f734fb3852c7b2c7a1b26c68f4087795d0000000000001976a9143e86ad893c4e77121edbadc39aca0c83f5a694dd88acef74000000000000160014447fde1e37d97255b5821d2dee816e8f18f6bac90761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c8efd030001012b0761020000000000220020e9c29441c64429107fc85eb9d46ac44b764dd7b7409e3948900c5a40f721311c220202f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc47304402206b465c065488c15db2bdba7609522fee36b187ea4f39c9ff8365420a86a73a7a02200afc5f9acd2ce986db2697e7ded236c6731559636a527d8c7370ec4157aafaae01220203efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe47304402204c992000fda54727cbf0ae9d93e3706167bcd2e2d7f6b9ddff0e57bcdd10064a022062436b82a7c64d8353b9e8e39b7ab510e56188638e671a6988d6ccb7f272626a0101030401000000010569522102f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc2103ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe2103efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe53ae220602f9952969bb1223943638a9a1ca81a7836ac8defb4b2b87a2bd585f139a1f1cfc1c643db86d300000800100008000000080020000800100000000000000220603efa009afeffed14d0187566a48e2edad717eba577199614ed70494ec3798b0fe1c7df6d383300000800100008000000080020000800100000000000000220603ea06b11d43d8206bc9d03523ce2c1e418b2b4d7842dacb4a84b6c1cfdfce50fe1c35b794403000008001000080000000800200008001000000000000000000" + ) + + ] + + n = 0 + for case in cases: + print(f"Running case {n}: {case[0]}") + desc = Descriptor.from_string(case[0]) + psbt_bytes = unhexlify(case[1]) + psbt = PSBT.parse(psbt_bytes) + for inp in psbt.inputs: + self.assertTrue(desc.owns(inp)) + n += 1 # test that: # + str(d) == d