From d1e2a12df857ef4684c5cfe59a9e29f6d871a4a1 Mon Sep 17 00:00:00 2001 From: Otto Allmendinger Date: Tue, 28 Apr 2026 11:38:30 +0200 Subject: [PATCH 1/2] test(abstract-utxo): move BIP-322 Proof tests Issue: BTC-2650 --- modules/abstract-utxo/test/unit/bip322.ts | 62 +++++++++++++++++++ .../test/unit/explainTransaction.ts | 61 ------------------ 2 files changed, 62 insertions(+), 61 deletions(-) diff --git a/modules/abstract-utxo/test/unit/bip322.ts b/modules/abstract-utxo/test/unit/bip322.ts index 819ac02877..e5d1960188 100644 --- a/modules/abstract-utxo/test/unit/bip322.ts +++ b/modules/abstract-utxo/test/unit/bip322.ts @@ -4,6 +4,9 @@ import * as utxolib from '@bitgo/utxo-lib'; import { bip322 as coreBip322 } from '@bitgo/utxo-core'; import { bip322 as wasmBip322, fixedScriptWallet, BIP32, type Triple } from '@bitgo/wasm-utxo'; +import { bip322Fixtures } from './fixtures/bip322/fixtures'; +import { getUtxoCoin } from './util'; + import { BIP322MessageBroadcastable, BIP322MessageInfo, @@ -403,6 +406,65 @@ describe('BIP322', function () { }); }); + describe('BIP322 Proof', function () { + const coin = getUtxoCoin('btc'); + const pubs = bip322Fixtures.valid.rootWalletKeys.triple.map((b) => b.neutered().toBase58()) as Triple; + + it('should successfully run with a user nonce', async function () { + const psbtHex = bip322Fixtures.valid.userNonce; + const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); + assert.strictEqual(result.outputAmount, '0'); + assert.strictEqual(result.changeAmount, '0'); + assert.strictEqual(result.outputs.length, 1); + assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); + assert.strictEqual(result.fee, '0'); + assert.ok('signatures' in result); + assert.strictEqual(result.signatures, 0); + assert.ok(result.messages); + result.messages?.forEach((obj) => { + assert.ok(obj.address); + assert.ok(obj.message); + assert.strictEqual(obj.message, bip322Fixtures.valid.message); + }); + }); + + it('should successfully run with a user signature', async function () { + const psbtHex = bip322Fixtures.valid.userSignature; + const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); + assert.strictEqual(result.outputAmount, '0'); + assert.strictEqual(result.changeAmount, '0'); + assert.strictEqual(result.outputs.length, 1); + assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); + assert.strictEqual(result.fee, '0'); + assert.ok('signatures' in result); + assert.strictEqual(result.signatures, 1); + assert.ok(result.messages); + result.messages?.forEach((obj) => { + assert.ok(obj.address); + assert.ok(obj.message); + assert.strictEqual(obj.message, bip322Fixtures.valid.message); + }); + }); + + it('should successfully run with a hsm signature', async function () { + const psbtHex = bip322Fixtures.valid.hsmSignature; + const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); + assert.strictEqual(result.outputAmount, '0'); + assert.strictEqual(result.changeAmount, '0'); + assert.strictEqual(result.outputs.length, 1); + assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); + assert.strictEqual(result.fee, '0'); + assert.ok('signatures' in result); + assert.strictEqual(result.signatures, 2); + assert.ok(result.messages); + result.messages?.forEach((obj) => { + assert.ok(obj.address); + assert.ok(obj.message); + assert.strictEqual(obj.message, bip322Fixtures.valid.message); + }); + }); + }); + describe('utxolib verification stack - wasm-utxo respects input.sighashType', function () { // This test verifies that wasm-utxo correctly respects the input.sighashType field // when creating musig2 partial signatures. diff --git a/modules/abstract-utxo/test/unit/explainTransaction.ts b/modules/abstract-utxo/test/unit/explainTransaction.ts index bcf1c0486a..aaf41d097c 100644 --- a/modules/abstract-utxo/test/unit/explainTransaction.ts +++ b/modules/abstract-utxo/test/unit/explainTransaction.ts @@ -1,9 +1,6 @@ -import assert from 'assert'; - import { common, Triple, Wallet } from '@bitgo/sdk-core'; import nock = require('nock'); -import { bip322Fixtures } from './fixtures/bip322/fixtures'; import { psbtTxHex } from './fixtures/psbtHexProof'; import { defaultBitGo, getUtxoCoin } from './util'; @@ -44,62 +41,4 @@ describe('Explain Transaction', function () { }); }); - describe('BIP322 Proof', function () { - const coin = getUtxoCoin('btc'); - const pubs = bip322Fixtures.valid.rootWalletKeys.triple.map((b) => b.neutered().toBase58()) as Triple; - - it('should successfully run with a user nonce', async function () { - const psbtHex = bip322Fixtures.valid.userNonce; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); - assert.strictEqual(result.outputAmount, '0'); - assert.strictEqual(result.changeAmount, '0'); - assert.strictEqual(result.outputs.length, 1); - assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); - assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 0); - assert.ok(result.messages); - result.messages?.forEach((obj) => { - assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); - }); - }); - - it('should successfully run with a user signature', async function () { - const psbtHex = bip322Fixtures.valid.userSignature; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); - assert.strictEqual(result.outputAmount, '0'); - assert.strictEqual(result.changeAmount, '0'); - assert.strictEqual(result.outputs.length, 1); - assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); - assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 1); - assert.ok(result.messages); - result.messages?.forEach((obj) => { - assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); - }); - }); - - it('should successfully run with a hsm signature', async function () { - const psbtHex = bip322Fixtures.valid.hsmSignature; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); - assert.strictEqual(result.outputAmount, '0'); - assert.strictEqual(result.changeAmount, '0'); - assert.strictEqual(result.outputs.length, 1); - assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); - assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 2); - assert.ok(result.messages); - result.messages?.forEach((obj) => { - assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); - }); - }); - }); }); From b6b61662372e701a2858744d258472c06b6169f4 Mon Sep 17 00:00:00 2001 From: Otto Allmendinger Date: Tue, 28 Apr 2026 10:54:05 +0200 Subject: [PATCH 2/2] fix(abstract-utxo): enhance BIP-322 with signature verification Extend explainPsbtWasm to count valid signatures per input: - Add scriptId to ExplainedInput (from parseTransactionWithWalletKeys) - Add signedBy map showing validation status for each key - Extract BIP-322 messages with bip322.getBip322Message() - Count signatures via bip322.verifyBip322PsbtInput() Replace BIP-322 test fixtures with dynamic PSBT generation using wasm-utxo. Remove fixtures/bip322/fixtures.ts and inline PSBT construction directly in tests. Call explainPsbtWasm with BitGoPsbt instances instead of serializing via coin.explainTransaction. Remove utxolib dependency from BIP-322 tests. Use @bitgo/wasm-utxo directly for key generation, address creation, and signature verification. Rewrite p2trMusig2 sighashType test as pure wasm-utxo round-trip. Add cross-library compatibility test verifying utxolib-created BIP-322 PSBTs can be signed by wasm-utxo and validated by utxolib. Issue: BTC-2650 Co-authored-by: llm-git --- .../fixedScript/explainPsbtWasm.ts | 55 +++++- .../fixedScript/explainTransaction.ts | 2 +- modules/abstract-utxo/test/unit/bip322.ts | 167 ++++++++++-------- .../test/unit/explainTransaction.ts | 1 - .../test/unit/fixtures/bip322/fixtures.ts | 22 --- .../transaction/fixedScript/explainPsbt.ts | 12 +- 6 files changed, 151 insertions(+), 108 deletions(-) delete mode 100644 modules/abstract-utxo/test/unit/fixtures/bip322/fixtures.ts diff --git a/modules/abstract-utxo/src/transaction/fixedScript/explainPsbtWasm.ts b/modules/abstract-utxo/src/transaction/fixedScript/explainPsbtWasm.ts index e2eec34bce..813dc5013f 100644 --- a/modules/abstract-utxo/src/transaction/fixedScript/explainPsbtWasm.ts +++ b/modules/abstract-utxo/src/transaction/fixedScript/explainPsbtWasm.ts @@ -1,7 +1,8 @@ -import { fixedScriptWallet } from '@bitgo/wasm-utxo'; +import { fixedScriptWallet, bip322 } from '@bitgo/wasm-utxo'; import { Triple } from '@bitgo/sdk-core'; import type { FixedScriptWalletOutput, Output, BitGoPsbt } from '../types'; +import type { Bip322Message } from '../../abstractUtxoCoin'; import type { TransactionExplanationWasm } from './explainTransaction'; @@ -49,6 +50,8 @@ interface ExplainPsbtWasmParams { export interface ExplainedInput { address: string; value: TAmount; + scriptId: fixedScriptWallet.ScriptId | null; + signedBy: { [key: string]: boolean }; } export interface TransactionExplanationBigInt { @@ -64,9 +67,28 @@ export interface TransactionExplanationBigInt { fee: bigint; } +function getSignedByForInput( + psbt: BitGoPsbt, + inputIndex: number, + walletXpubs: fixedScriptWallet.RootWalletKeys, + replayProtectionPublicKeys: Buffer[], + scriptId: fixedScriptWallet.ScriptId | null +): { [key: string]: boolean } { + if (scriptId !== null) { + return { + user: psbt.verifySignature(inputIndex, walletXpubs.userKey()), + backup: psbt.verifySignature(inputIndex, walletXpubs.backupKey()), + bitgo: psbt.verifySignature(inputIndex, walletXpubs.bitgoKey()), + }; + } + return Object.fromEntries( + replayProtectionPublicKeys.map((key, j) => [`replayProtection${j}`, psbt.verifySignature(inputIndex, key)]) + ); +} + export function explainPsbtWasmBigInt( psbt: BitGoPsbt, - walletXpubs: Triple | fixedScriptWallet.RootWalletKeys, + walletXpubs: fixedScriptWallet.RootWalletKeys, params: ExplainPsbtWasmParams ): TransactionExplanationBigInt { const parsed = psbt.parseTransactionWithWalletKeys(walletXpubs, { replayProtection: params.replayProtection }); @@ -92,7 +114,12 @@ export function explainPsbtWasmBigInt( } }); - const inputs = parsed.inputs.map((input) => ({ address: input.address, value: input.value })); + const inputs = parsed.inputs.map((input, i) => ({ + address: input.address, + value: input.value, + scriptId: input.scriptId, + signedBy: getSignedByForInput(psbt, i, walletXpubs, params.replayProtection.publicKeys, input.scriptId), + })); const inputAmount = inputs.reduce((sum, input) => sum + input.value, 0n); const outputAmount = outputs.reduce((sum, output) => sum + output.amount, 0n); const changeAmount = changeOutputs.reduce((sum, output) => sum + output.amount, 0n); @@ -120,15 +147,32 @@ function stringifyChangeOutput(output: FixedScriptWalletOutput): FixedSc return { ...output, amount: output.amount.toString() }; } +function extractBip322Messages(psbt: BitGoPsbt, inputs: ExplainedInput[]): { messages: Bip322Message[] | undefined } { + const messages: Bip322Message[] = inputs.flatMap((input, i) => { + const message = bip322.getBip322Message(psbt, i); + return message ? [{ message, address: input.address }] : []; + }); + + if (messages.length === 0) { + return { messages: undefined }; + } + + return { messages }; +} + export function explainPsbtWasm( psbt: BitGoPsbt, walletXpubs: Triple | fixedScriptWallet.RootWalletKeys, params: ExplainPsbtWasmParams ): TransactionExplanationWasm { - const result = explainPsbtWasmBigInt(psbt, walletXpubs, params); + const result = explainPsbtWasmBigInt(psbt, fixedScriptWallet.RootWalletKeys.from(walletXpubs), params); + const inputs = result.inputs.map((i) => ({ address: i.address, value: i.value.toString(), signedBy: i.signedBy })); + + const { messages } = extractBip322Messages(psbt, result.inputs); + return { id: result.id, - inputs: result.inputs.map((i) => ({ address: i.address, value: i.value.toString() })), + inputs, inputAmount: result.inputAmount.toString(), outputAmount: result.outputAmount.toString(), changeAmount: result.changeAmount.toString(), @@ -137,6 +181,7 @@ export function explainPsbtWasm( changeOutputs: result.changeOutputs.map(stringifyChangeOutput), customChangeOutputs: result.customChangeOutputs.map(stringifyChangeOutput), fee: result.fee.toString(), + messages, }; } diff --git a/modules/abstract-utxo/src/transaction/fixedScript/explainTransaction.ts b/modules/abstract-utxo/src/transaction/fixedScript/explainTransaction.ts index 1698989e16..0165816e7d 100644 --- a/modules/abstract-utxo/src/transaction/fixedScript/explainTransaction.ts +++ b/modules/abstract-utxo/src/transaction/fixedScript/explainTransaction.ts @@ -52,7 +52,7 @@ interface TransactionExplanationWithSignatures & { - inputs: Array<{ address: string; value: string }>; + inputs: Array<{ address: string; value: string; signedBy: { [key: string]: boolean } }>; inputAmount: string; }; diff --git a/modules/abstract-utxo/test/unit/bip322.ts b/modules/abstract-utxo/test/unit/bip322.ts index e5d1960188..6c70d02747 100644 --- a/modules/abstract-utxo/test/unit/bip322.ts +++ b/modules/abstract-utxo/test/unit/bip322.ts @@ -3,10 +3,9 @@ import assert from 'assert'; import * as utxolib from '@bitgo/utxo-lib'; import { bip322 as coreBip322 } from '@bitgo/utxo-core'; import { bip322 as wasmBip322, fixedScriptWallet, BIP32, type Triple } from '@bitgo/wasm-utxo'; +import { getKeyTriple } from '@bitgo/wasm-utxo/testutils'; -import { bip322Fixtures } from './fixtures/bip322/fixtures'; -import { getUtxoCoin } from './util'; - +import { explainPsbtWasm } from '../../src/transaction/fixedScript'; import { BIP322MessageBroadcastable, BIP322MessageInfo, @@ -20,7 +19,7 @@ function createTestWalletKeys(seed: string): { xpubs: Triple; xprivs: Triple; } { - const keys = utxolib.testutil.getKeyTriple(seed); + const keys = getKeyTriple(seed); return { xpubs: keys.map((k) => k.neutered().toBase58()) as Triple, xprivs: keys.map((k) => k.toBase58()) as Triple, @@ -28,12 +27,14 @@ function createTestWalletKeys(seed: string): { } function getDerivedPubkeys(seed: string, chain: number, index: number): Triple { - const keys = utxolib.testutil.getKeyTriple(seed); - return keys.map((k) => k.derivePath(`m/0/0/${chain}/${index}`).publicKey.toString('hex')) as Triple; + const keys = getKeyTriple(seed); + return keys.map((k) => + Buffer.from(k.derivePath(`m/0/0/${chain}/${index}`).publicKey).toString('hex') + ) as Triple; } function getAddress(walletKeys: fixedScriptWallet.RootWalletKeys, chain: number, index: number): string { - return fixedScriptWallet.address(walletKeys, chain, index, utxolib.networks.bitcoin); + return fixedScriptWallet.address(walletKeys, chain, index, 'btc'); } describe('BIP322', function () { @@ -379,8 +380,8 @@ describe('BIP322', function () { scriptId: { chain, index }, rootWalletKeys: walletKeys, }); - psbt.sign(0, BIP32.fromBase58(xprivs[0])); - psbt.sign(0, BIP32.fromBase58(xprivs[2])); + psbt.sign(BIP32.fromBase58(xprivs[0])); + psbt.sign(BIP32.fromBase58(xprivs[2])); const pubkeys = getDerivedPubkeys(seed, chain, index); const address = getAddress(walletKeys, chain, index); @@ -407,76 +408,99 @@ describe('BIP322', function () { }); describe('BIP322 Proof', function () { - const coin = getUtxoCoin('btc'); - const pubs = bip322Fixtures.valid.rootWalletKeys.triple.map((b) => b.neutered().toBase58()) as Triple; + const message = 'I can believe it is not butter'; + const chain = 10; + const index = 0; + const { xpubs, xprivs } = createTestWalletKeys('bip322-proof'); + const walletKeys = fixedScriptWallet.RootWalletKeys.from(xpubs); - it('should successfully run with a user nonce', async function () { - const psbtHex = bip322Fixtures.valid.userNonce; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); + function createUnsignedPsbt(): fixedScriptWallet.BitGoPsbt { + const psbt = fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 }); + wasmBip322.addBip322Input(psbt, { message, scriptId: { chain, index }, rootWalletKeys: walletKeys }); + return psbt; + } + + function assertCommon(result: ReturnType, expectedSignerCount: number): void { assert.strictEqual(result.outputAmount, '0'); assert.strictEqual(result.changeAmount, '0'); assert.strictEqual(result.outputs.length, 1); assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 0); + for (const input of result.inputs) { + const signerCount = Object.values(input.signedBy).filter(Boolean).length; + assert.strictEqual(signerCount, expectedSignerCount); + } assert.ok(result.messages); - result.messages?.forEach((obj) => { + for (const obj of result.messages ?? []) { assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); - }); + assert.strictEqual(obj.message, message); + } + } + + it('should successfully run with a user nonce', function () { + const psbt = createUnsignedPsbt(); + assertCommon(explainPsbtWasm(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 0); }); - it('should successfully run with a user signature', async function () { - const psbtHex = bip322Fixtures.valid.userSignature; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); - assert.strictEqual(result.outputAmount, '0'); - assert.strictEqual(result.changeAmount, '0'); - assert.strictEqual(result.outputs.length, 1); - assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); - assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 1); - assert.ok(result.messages); - result.messages?.forEach((obj) => { - assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); - }); + it('should successfully run with a user signature', function () { + const psbt = createUnsignedPsbt(); + psbt.sign(BIP32.fromBase58(xprivs[0])); + assertCommon(explainPsbtWasm(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 1); }); - it('should successfully run with a hsm signature', async function () { - const psbtHex = bip322Fixtures.valid.hsmSignature; - const result = await coin.explainTransaction({ txHex: psbtHex, pubs }); - assert.strictEqual(result.outputAmount, '0'); - assert.strictEqual(result.changeAmount, '0'); - assert.strictEqual(result.outputs.length, 1); - assert.strictEqual(result.outputs[0].address, 'scriptPubKey:6a'); - assert.strictEqual(result.fee, '0'); - assert.ok('signatures' in result); - assert.strictEqual(result.signatures, 2); - assert.ok(result.messages); - result.messages?.forEach((obj) => { - assert.ok(obj.address); - assert.ok(obj.message); - assert.strictEqual(obj.message, bip322Fixtures.valid.message); + it('should successfully run with a hsm signature', function () { + const psbt = createUnsignedPsbt(); + psbt.sign(BIP32.fromBase58(xprivs[0])); + psbt.sign(BIP32.fromBase58(xprivs[2])); + assertCommon(explainPsbtWasm(psbt, walletKeys, { replayProtection: { publicKeys: [] } }), 2); + }); + }); + + describe('p2trMusig2 BIP322 signing', function () { + it('should produce verifiable musig2 signatures', function () { + const seed = 'p2trMusig2_sighash_test'; + const { xpubs, xprivs } = createTestWalletKeys(seed); + const walletKeys = fixedScriptWallet.RootWalletKeys.from(xpubs); + + const chain = 40; // p2trMusig2 external + const index = 0; + const messageText = 'BIP322 sighash test'; + + const psbt = fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 }); + wasmBip322.addBip322Input(psbt, { + message: messageText, + scriptId: { chain, index }, + rootWalletKeys: walletKeys, + signPath: { signer: 'user', cosigner: 'bitgo' }, }); + + const userKey = BIP32.fromBase58(xprivs[0]); + const bitgoKey = BIP32.fromBase58(xprivs[2]); + psbt.generateMusig2Nonces(userKey); + psbt.generateMusig2Nonces(bitgoKey); + psbt.sign(userKey); + psbt.sign(bitgoKey); + + const signers = wasmBip322.verifyBip322PsbtInput(psbt, 0, { + message: messageText, + scriptId: { chain, index }, + rootWalletKeys: walletKeys, + }); + assert.ok(signers.includes('user')); + assert.ok(signers.includes('bitgo')); }); }); - describe('utxolib verification stack - wasm-utxo respects input.sighashType', function () { - // This test verifies that wasm-utxo correctly respects the input.sighashType field - // when creating musig2 partial signatures. - // - // Previously (before fix), wasm-utxo would always create signatures with SIGHASH_DEFAULT (0) - // regardless of the input.sighashType field, causing validation to fail. + describe('utxolib interoperability - wasm-utxo can verify utxolib-generated BIP322 proofs', function () { + // This test verifies cross-library compatibility: + // 1. utxo-core (utxolib) creates a BIP322 PSBT + // 2. wasm-utxo signs it with musig2 + // 3. utxo-core validates the wasm-utxo signatures // - // Now (after fix), wasm-utxo reads input.sighashType and creates signatures with the - // correct sighash type, allowing validation to succeed. + // This ensures that wasm-utxo and utxolib generate compatible BIP322 proofs. - it('should validate signatures when wasm-utxo respects input.sighashType', function () { - const seed = 'p2trMusig2_sighash_test'; + it('should sign utxolib-created BIP322 PSBT and validate with utxolib', function () { + const seed = 'p2trMusig2_utxolib_compat_test'; const { xprivs } = createTestWalletKeys(seed); // Create utxolib RootWalletKeys for utxo-core PSBT construction @@ -485,28 +509,26 @@ describe('BIP322', function () { // p2trMusig2 external chain code const chain = utxolib.bitgo.getExternalChainCode('p2trMusig2'); const index = 0; - const messageText = 'BIP322 sighash test'; + const messageText = 'BIP322 utxolib interop test'; // Create BIP322 PSBT using utxo-core const psbt = coreBip322.createBaseToSignPsbt(utxolibRootWalletKeys, utxolib.networks.bitcoin); - coreBip322.addBip322InputWithChainAndIndex(psbt, messageText, utxolibRootWalletKeys, { chain, index }); - - // Note: utxo-core sets sighashType: Transaction.SIGHASH_ALL (1) for BIP322 inputs - const SIGHASH_ALL = 1; - assert.strictEqual(psbt.data.inputs[0].sighashType, SIGHASH_ALL); + coreBip322.addBip322InputWithChainAndIndex(psbt, messageText, utxolibRootWalletKeys, { + chain, + index, + }); - // Convert to wasm-utxo PSBT for cosigning + // Convert to wasm-utxo PSBT for signing const wasmPsbt = fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), 'btc'); // Generate musig2 nonces and sign with wasm-utxo - // wasm-utxo now respects input.sighashType and creates signatures with SIGHASH_ALL const userKey = BIP32.fromBase58(xprivs[0]); const bitgoKey = BIP32.fromBase58(xprivs[2]); wasmPsbt.generateMusig2Nonces(userKey); wasmPsbt.generateMusig2Nonces(bitgoKey); - wasmPsbt.sign(0, userKey); - wasmPsbt.sign(0, bitgoKey); + wasmPsbt.sign(userKey); + wasmPsbt.sign(bitgoKey); // Convert back to utxolib PSBT for validation const signedPsbt = utxolib.bitgo.createPsbtFromBuffer( @@ -514,8 +536,7 @@ describe('BIP322', function () { utxolib.networks.bitcoin ); - // Validation should succeed because wasm-utxo now creates signatures - // with the correct sighash type (SIGHASH_ALL) matching input.sighashType + // Validation should succeed - wasm-utxo signatures are compatible with utxolib const validationResult = utxolib.bitgo.getSignatureValidationArrayPsbt(signedPsbt, utxolibRootWalletKeys); // Verify that both user (index 0) and bitgo (index 2) signatures are valid diff --git a/modules/abstract-utxo/test/unit/explainTransaction.ts b/modules/abstract-utxo/test/unit/explainTransaction.ts index aaf41d097c..b4c9bc6e74 100644 --- a/modules/abstract-utxo/test/unit/explainTransaction.ts +++ b/modules/abstract-utxo/test/unit/explainTransaction.ts @@ -40,5 +40,4 @@ describe('Explain Transaction', function () { await coin.explainTransaction(psbtTxHex, wallet); }); }); - }); diff --git a/modules/abstract-utxo/test/unit/fixtures/bip322/fixtures.ts b/modules/abstract-utxo/test/unit/fixtures/bip322/fixtures.ts deleted file mode 100644 index 3a8464eae7..0000000000 --- a/modules/abstract-utxo/test/unit/fixtures/bip322/fixtures.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as utxolib from '@bitgo/utxo-lib'; - -export const bip322Fixtures = { - valid: { - rootWalletKeys: utxolib.testutil.getDefaultWalletKeys(), - message: 'I can believe it is not butter', - unsigned: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38701042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2870104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba01056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c294215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d4215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509408fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc08fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - userNonce: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38701042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2870104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba01056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c294215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d4215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509449fc05424954474f020233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354420214145dfddd77b53e56128ec0b4a4f05ce87d15901d9faf96d1adac8424275bf602be4ea2b65970c459da9a1d518a62c30b0b91bf49da7cffd15ef6d50f3d14f7eb08fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc49fc05424954474f0202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d42039cf40d4e38434812b1504189ec66a861a47f7e2930c209c9f51dc3b7db5edd98029e8aa6d757c6ad481402c2f2130c430a84e117e9c30e216651595a47ff10d21f08fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - hsmNonce: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38701042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2870104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba01056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c294215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d4215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509449fc05424954474f020233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354420214145dfddd77b53e56128ec0b4a4f05ce87d15901d9faf96d1adac8424275bf602be4ea2b65970c459da9a1d518a62c30b0b91bf49da7cffd15ef6d50f3d14f7eb49fc05424954474f0203eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03544202fb658ed2694609fa7a331c7234d22582c6065cb07a8e42ea006b2f0871ba2831038609d4767745bee45c2d9e7a649bef7eb9edf117c775c22a11085471006f9d5208fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc49fc05424954474f0202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d42039cf40d4e38434812b1504189ec66a861a47f7e2930c209c9f51dc3b7db5edd98029e8aa6d757c6ad481402c2f2130c430a84e117e9c30e216651595a47ff10d21f49fc05424954474f0202f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d420203713b23f25f1db1be5fda7cebc1ef158c2162b884b29e02ffeff12a57044a3c03581c5f2a00d83cf087aeb5685c6c4f9a05ac84ee0ce53e0427591ed23fce47d008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - userSignature: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87220202cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209473044022013e1c5878f22f12eb699a5eb11f150999f5b169abaf587eb1b14cf0ce7a4f1cc02205fc547f631d8eb384695853f6d981bc1132eeccf5db5243f367166bbd9f2d60201010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587220203a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e4473044022030c6314abb04849ef1fd552a6dc7691bbb21540c2bd7aa5a3f23385649db2ae402203dcedb41fff80b2115d736d29e65fa329ce2d175741f1df65b8d4be30f444dea01010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab387220202d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d64730440220126fd17b31a4cb2402592bd2f1bcda4d3b90ce8a49012755e2006800a9e0a42302202e1aeecbb936a4ca0afd576754b525824bb15e8254ed07ce6cb7174ef0ab5b790101042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2872202034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb3473044022007a80b56b6d628a7be48b825bf964269de3101598e1b83dce67996ad14af21a902205eab963b093c0a871d8e6d63cf9c008fa7a70c6cc3cb5f78f951399eab283406010104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba22020383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8447304402202847ad6c0dafc791fe269d346e95c8ccba12efa90be9bc121af181b31500f26502201c0193ae7152d4a810a30cab134e5dff4bea538174de2fab1c903a00a543a5e30101056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be220202f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f647304402206c472129bab262d8e15c4d8eae6bae8ffaafad49e0857de0defc705c454ac7c202201d1f95264be08d72bd2dc313e61a7394ea4b4d9e4b01f78684059f6d0068240f01010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c294114c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c842a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb79140b2b2467a458d385aa4afb982c624ea7239720f204c54abaf66f34d1feca154092bb8b060ee3564be1bf4abd33c508c5474e0182a6abb22ef9fad35c929182e3a4215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d4114e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f4b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d744002ecc2125852f5856584d56181d4ef896208b20d95046fea05944b78c5d4978dd8f7013b30cfcb9837aeb8bbe314a6bd74b4ef9c9460fff6a9f04a41342ce4a14215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509449fc05424954474f020233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354420214145dfddd77b53e56128ec0b4a4f05ce87d15901d9faf96d1adac8424275bf602be4ea2b65970c459da9a1d518a62c30b0b91bf49da7cffd15ef6d50f3d14f7eb49fc05424954474f0203eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03544202fb658ed2694609fa7a331c7234d22582c6065cb07a8e42ea006b2f0871ba2831038609d4767745bee45c2d9e7a649bef7eb9edf117c775c22a11085471006f9d5249fc05424954474f030233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354207a75fe800b86ce6ac43f4b343d6de5cfc641730be25baa876b6e6cb293b717a408fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc49fc05424954474f0202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d42039cf40d4e38434812b1504189ec66a861a47f7e2930c209c9f51dc3b7db5edd98029e8aa6d757c6ad481402c2f2130c430a84e117e9c30e216651595a47ff10d21f49fc05424954474f0202f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d420203713b23f25f1db1be5fda7cebc1ef158c2162b884b29e02ffeff12a57044a3c03581c5f2a00d83cf087aeb5685c6c4f9a05ac84ee0ce53e0427591ed23fce47d049fc05424954474f0302f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d200b2163bf3e86e87f599519f425f037d459c776f754cad1e1c908a6731a35dd8208fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - hsmSignature: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87220202cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209473044022013e1c5878f22f12eb699a5eb11f150999f5b169abaf587eb1b14cf0ce7a4f1cc02205fc547f631d8eb384695853f6d981bc1132eeccf5db5243f367166bbd9f2d6020122020344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1483045022100e128c3734a4ef18097e4d2e9806b3d4a101ebc6fb77c7d5935c57383a695bea3022020773bcc1367d2db4445e3ae7b9218f254a33994df73ac6097ffc8590c566bfc01010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587220203761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e47304402203731cee532f9b68c1852df3cfd6b316ee9f3dc09037d69deca233f2e117019d90220339420b35cbbc40a52a2fe440035d1eae1e13146d6650ee48fbaca39fff731df01220203a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e4473044022030c6314abb04849ef1fd552a6dc7691bbb21540c2bd7aa5a3f23385649db2ae402203dcedb41fff80b2115d736d29e65fa329ce2d175741f1df65b8d4be30f444dea01010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab3872202022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d647304402202a7ac15cb66799a86f91306abb1c4cf61b6d4582abc5f80ee6a51ef17967b070022056ed845749df7c4923c5b50c8c4b701a4962da0d95dfb0be6df737bfe83ae3d401220202d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d64730440220126fd17b31a4cb2402592bd2f1bcda4d3b90ce8a49012755e2006800a9e0a42302202e1aeecbb936a4ca0afd576754b525824bb15e8254ed07ce6cb7174ef0ab5b790101042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2872202031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c7473044022074a13727a3e5736aba2005a006ea1af0e83595de1eb43b6d07468e7909ba9a24022006d94d75266d390e4134dc7bbe544fd76005e2852a88ed9db57c3c02a52f94c8012202034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb3473044022007a80b56b6d628a7be48b825bf964269de3101598e1b83dce67996ad14af21a902205eab963b093c0a871d8e6d63cf9c008fa7a70c6cc3cb5f78f951399eab283406010104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba220203623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a61483045022100866ab759aa3e17fc4b9128bc7bcb871c153a83ad62fe600cc631bb16eeb27f9d0220470d8f3a0a908e55b8c424d384d1ab50d7f77023860ed6fe68a0e3f3db0e7a4d0122020383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8447304402202847ad6c0dafc791fe269d346e95c8ccba12efa90be9bc121af181b31500f26502201c0193ae7152d4a810a30cab134e5dff4bea538174de2fab1c903a00a543a5e30101056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be220202d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b473044022074a44626578abb12b29db5aa2a57dddbf1548c8b295e382f74711b7cc45b309c0220725bde51555e81c54dc73be0c4928fec6a1e100f30aae7b7ce99ff67a06b0d7d01220202f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f647304402206c472129bab262d8e15c4d8eae6bae8ffaafad49e0857de0defc705c454ac7c202201d1f95264be08d72bd2dc313e61a7394ea4b4d9e4b01f78684059f6d0068240f01010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c2941142a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e1742a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb79140f419ebe7ba0487a4c179c4f010cc92b893149ed12ccf504d106f95394639a707b8c9e51c3b38c5465861c1b178377ad46c8f220442863957fb7bc248c5dd33e24114c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c842a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb79140b2b2467a458d385aa4afb982c624ea7239720f204c54abaf66f34d1feca154092bb8b060ee3564be1bf4abd33c508c5474e0182a6abb22ef9fad35c929182e3a4215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d41149b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce3154b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d7440e831e3e0219552cfdd87c6f9af3854c6447a09265854d0c4d3c160ac0557498aeab1160c6f7d62422db67af3776f06ebd76c2d35e514125f5ddedc435ba277d84114e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f4b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d744002ecc2125852f5856584d56181d4ef896208b20d95046fea05944b78c5d4978dd8f7013b30cfcb9837aeb8bbe314a6bd74b4ef9c9460fff6a9f04a41342ce4a14215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509449fc05424954474f020233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354420214145dfddd77b53e56128ec0b4a4f05ce87d15901d9faf96d1adac8424275bf602be4ea2b65970c459da9a1d518a62c30b0b91bf49da7cffd15ef6d50f3d14f7eb49fc05424954474f0203eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03544202fb658ed2694609fa7a331c7234d22582c6065cb07a8e42ea006b2f0871ba2831038609d4767745bee45c2d9e7a649bef7eb9edf117c775c22a11085471006f9d5249fc05424954474f030233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354207a75fe800b86ce6ac43f4b343d6de5cfc641730be25baa876b6e6cb293b717a449fc05424954474f0303eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354200ec1bc22ba2af402999aaf84f0f5d0bcbccef9aca37e1b0a697f187bca1d9ced08fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc49fc05424954474f0202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d42039cf40d4e38434812b1504189ec66a861a47f7e2930c209c9f51dc3b7db5edd98029e8aa6d757c6ad481402c2f2130c430a84e117e9c30e216651595a47ff10d21f49fc05424954474f0202f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d420203713b23f25f1db1be5fda7cebc1ef158c2162b884b29e02ffeff12a57044a3c03581c5f2a00d83cf087aeb5685c6c4f9a05ac84ee0ce53e0427591ed23fce47d049fc05424954474f0302f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d200b2163bf3e86e87f599519f425f037d459c776f754cad1e1c908a6731a35dd8249fc05424954474f0302f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d200c881abd2dd7729ff2b2078c52f8847103a6fc445f7af243a148dc186457efd008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - fullSigned: - '70736274ff0100fdae01000000000a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a0000000000000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b000000000000000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b90000000000000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e2000000000000000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef03890001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000010120000000000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87220202cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209473044022013e1c5878f22f12eb699a5eb11f150999f5b169abaf587eb1b14cf0ce7a4f1cc02205fc547f631d8eb384695853f6d981bc1132eeccf5db5243f367166bbd9f2d6020122020344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1483045022100e128c3734a4ef18097e4d2e9806b3d4a101ebc6fb77c7d5935c57383a695bea3022020773bcc1367d2db4445e3ae7b9218f254a33994df73ac6097ffc8590c566bfc01010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a9145768efe6a71468736dce66cba5929c6350609c358700000000010120000000000000000017a9145768efe6a71468736dce66cba5929c6350609c3587220203761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e47304402203731cee532f9b68c1852df3cfd6b316ee9f3dc09037d69deca233f2e117019d90220339420b35cbbc40a52a2fe440035d1eae1e13146d6650ee48fbaca39fff731df01220203a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e4473044022030c6314abb04849ef1fd552a6dc7691bbb21540c2bd7aa5a3f23385649db2ae402203dcedb41fff80b2115d736d29e65fa329ce2d175741f1df65b8d4be30f444dea01010469522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae2206028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea14cc18ae0800000000000000000100000001000000220603761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e14f65cd86900000000000000000100000001000000220603a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e414f2ef03890000000000000000010000000100000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab38700000000010120000000000000000017a914836e0b75e731521db07aa2dfc5a15c9b7e279ab3872202022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d647304402202a7ac15cb66799a86f91306abb1c4cf61b6d4582abc5f80ee6a51ef17967b070022056ed845749df7c4923c5b50c8c4b701a4962da0d95dfb0be6df737bfe83ae3d401220202d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d64730440220126fd17b31a4cb2402592bd2f1bcda4d3b90ce8a49012755e2006800a9e0a42302202e1aeecbb936a4ca0afd576754b525824bb15e8254ed07ce6cb7174ef0ab5b790101042200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a010569522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae2206022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d614f65cd86900000000000000000a00000002000000220602804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c14cc18ae0800000000000000000a00000002000000220602d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d614f2ef038900000000000000000a0000000200000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001007500000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a28700000000010120000000000000000017a914a7621ee3549de756e9048183171d02a48e1f18a2872202031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c7473044022074a13727a3e5736aba2005a006ea1af0e83595de1eb43b6d07468e7909ba9a24022006d94d75266d390e4134dc7bbe544fd76005e2852a88ed9db57c3c02a52f94c8012202034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb3473044022007a80b56b6d628a7be48b825bf964269de3101598e1b83dce67996ad14af21a902205eab963b093c0a871d8e6d63cf9c008fa7a70c6cc3cb5f78f951399eab283406010104220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf5710105695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae2206031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c714f65cd86900000000000000000b000000030000002206034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb314f2ef038900000000000000000b00000003000000220603eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5314cc18ae0800000000000000000b0000000300000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba0000000001012b000000000000000022002080ebe4e2d2d33e7898cb0ddabb1a6dbc2466d6333820886fb6842b49e2ac76ba220203623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a61483045022100866ab759aa3e17fc4b9128bc7bcb871c153a83ad62fe600cc631bb16eeb27f9d0220470d8f3a0a908e55b8c424d384d1ab50d7f77023860ed6fe68a0e3f3db0e7a4d0122020383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8447304402202847ad6c0dafc791fe269d346e95c8ccba12efa90be9bc121af181b31500f26502201c0193ae7152d4a810a30cab134e5dff4bea538174de2fab1c903a00a543a5e30101056952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae2206027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a09676914cc18ae0800000000000000001400000004000000220603623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6114f65cd8690000000000000000140000000400000022060383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8414f2ef03890000000000000000140000000400000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff10000000001000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be0000000001012b000000000000000022002096462d2916f4907312fb02c74412b5a8d92f566f5d4f34d744916720aec977be220202d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b473044022074a44626578abb12b29db5aa2a57dddbf1548c8b295e382f74711b7cc45b309c0220725bde51555e81c54dc73be0c4928fec6a1e100f30aae7b7ce99ff67a06b0d7d01220202f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f647304402206c472129bab262d8e15c4d8eae6bae8ffaafad49e0857de0defc705c454ac7c202201d1f95264be08d72bd2dc313e61a7394ea4b4d9e4b01f78684059f6d0068240f01010569522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae220602671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef314cc18ae0800000000000000001500000005000000220602d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b14f65cd86900000000000000001500000005000000220602f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f614f2ef03890000000000000000150000000500000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c290000000001012b0000000000000000225120db284bf5c2d0ba0a03fe29240f29bda603a705aa090584b637474ec2c09f7c2941142a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e1742a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb79140f419ebe7ba0487a4c179c4f010cc92b893149ed12ccf504d106f95394639a707b8c9e51c3b38c5465861c1b178377ad46c8f220442863957fb7bc248c5dd33e24114c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c842a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb79140b2b2467a458d385aa4afb982c624ea7239720f204c54abaf66f34d1feca154092bb8b060ee3564be1bf4abd33c508c5474e0182a6abb22ef9fad35c929182e3a4215c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d4520c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17acc021162a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f65cd86900000000000000001e000000060000002116c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8350142a464371efcc831b425e671f82488821ec1fbd1610cd5017540d3f2b17eb791f2ef038900000000000000001e0000000600000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d0000000001012b00000000000000002251201a7acb31cf6bbf739dcc38b6d889ed3c2f3c8dfe219bd53347de500e7a421c7d41149b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce3154b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d7440e831e3e0219552cfdd87c6f9af3854c6447a09265854d0c4d3c160ac0557498aeab1160c6f7d62422db67af3776f06ebd76c2d35e514125f5ddedc435ba277d84114e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f4b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d744002ecc2125852f5856584d56181d4ef896208b20d95046fea05944b78c5d4978dd8f7013b30cfcb9837aeb8bbe314a6bd74b4ef9c9460fff6a9f04a41342ce4a14215c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea55074520e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315acc021169b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce31535014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f65cd86900000000000000001f000000070000002116e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900f35014b5521d0235ac6798e0ec20fcab5572e4853cc74b2ac5623d8c8472a9b8c3d74f2ef038900000000000000001f0000000700000008fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff1000000000100000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03540000000001012b00000000000000002251201d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354211633bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101500f2ef0389000000000000000028000000080000002116eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941500f65cd869000000000000000028000000080000000117207f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb670118202d5ae45def1d1e5c0e119b107275755f75386d7a86dec79d6f4621b385cf6cd648fc05424954474f011d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03547f5b14ae6f1cb9426136073c6962eef187f4af390aaa7ea11da6be101558cb67420233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b91003eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af8759509449fc05424954474f020233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03544203f1d04082e975a8b42c2475a00924e3479bb64336dae4e2fd07d86efa49eeb5bf03a812a9ce506da15c2bcb1b3984fec825672310274dc5367f8989dea78dc0e76149fc05424954474f0203eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f03544203e871015c33cd9f36aa0b9d93e1f59375a9e70151cd5b65d6e2a3de682d0884f7036b5f179e608c2a672971cdf8195a8e7856380564df63289fab938b41d77c7c8f49fc05424954474f030233bc494f3ea86c13a9fba20abfa888593110db9e23c268105c8988d87957b9101d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f0354201e7040844aec63c2fdf1faa44a22e2359524d256b0f37206ce3e6985bd33819949fc05424954474f0303eb3a656215fa62b1d240096f695e3184eec77ee08fbbc5ced600b5af875950941d4f08c91c860545e970325543b283f8ebb036877337a2c96907ebd7cd2f035420b6b193e3242edd703c964aa16e8c997febe8ee18eda50bcdd9490b3a4054aab408fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720001008000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220020e816464a0141176fb1b582b012c5b2a7b3ab3f708465b5cf9cf81999f4e6aff100000000010000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d0000000001012b0000000000000000225120bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d2116f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d1500f2ef0389000000000000000029000000090000002116f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc1500f65cd86900000000000000002900000009000000011720c4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0430118200da8eab7f651495d404cf9c51e15747719a42e3b4078ca87c5412e84563bd47b48fc05424954474f01bdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93dc4a6939e74c11c496fdcee803e3292117760a19fe42a3dd089ad801e9f2cb0434202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59d02f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dc49fc05424954474f0202f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d4202d5ae6b61ab16b114de105f6bc7ca9c1f247f25b7c37409a69a55f1ea626ae5c5023c8a1d61c3c9ceab2f8bbeb12c1fde0c3a54d5b8f03187da0ce6d0f793e44fcb49fc05424954474f0202f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d420266cdac5067019d12c22fbce70b37211ab204e7fb7d0fde90799c66609a9ba88f0239c65cb555aac728ce31a441e216407b4b9a3824a024d987268a1fc7c826ecf049fc05424954474f0302f5370f52856166f7ec086a3e95cd7f1e848301b90681a7d0146ecb9ac5e1c59dbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d204f3fe6ef46b24401f71fc0e33cf9fbbf7f6ec86527b0dfc30240dce85487f8a149fc05424954474f0302f6b36d425bd445717706f8a1dbe4dd813fb0c50339fbec367eb0ed8c39b3d9dcbdc70773283923be0e6d17777d35cf901e02822a445637ad80ae694b557ab93d204eebcd450801725ee417f647de7888bf42a5b12130b309610cdc05e8fac15ba208fc05424954474f051e492063616e2062656c69657665206974206973206e6f74206275747465720000', - extractedTx: - '0000000000010a97aac049b2b52216aecb2bc78c8af46201212ee96e20e914df2e36d69a543c5a00000000fdfd0000473044022013e1c5878f22f12eb699a5eb11f150999f5b169abaf587eb1b14cf0ce7a4f1cc02205fc547f631d8eb384695853f6d981bc1132eeccf5db5243f367166bbd9f2d60201483045022100e128c3734a4ef18097e4d2e9806b3d4a101ebc6fb77c7d5935c57383a695bea3022020773bcc1367d2db4445e3ae7b9218f254a33994df73ac6097ffc8590c566bfc014c69522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae000000000cdca00b194e8ca29eb3bf17c78bbeeefa318b6d84c315359f7d19106615681b00000000fc00473044022030c6314abb04849ef1fd552a6dc7691bbb21540c2bd7aa5a3f23385649db2ae402203dcedb41fff80b2115d736d29e65fa329ce2d175741f1df65b8d4be30f444dea0147304402203731cee532f9b68c1852df3cfd6b316ee9f3dc09037d69deca233f2e117019d90220339420b35cbbc40a52a2fe440035d1eae1e13146d6650ee48fbaca39fff731df014c69522103a0334f9fbb9da9888e9ea3cc458c2a9ef659aec340bfb1d2d6616f01e5e5c4e421028fd779569e5588cabc672fc3c64fe12501490439a8e1990e079003a1a66921ea2103761b51c305db18bf65bb7703e47bb31e40372bf58a06b8970d3a3442f867741e53ae00000000c8f6693d34c4e98ef1fee4970e8342a12e67f81a4e74f7c5f5203c7fd6bcf2b900000000232200208224f2e5de25d91de7ae08f8744f98ac30a7c86e9c0fcf169279e520c2b8313a000000009f29963b1fa0a10e5fd6d35893ed4342755c5446055a3bb3f11db5dbfb50c4e20000000023220020fff6d24d943ecfea3b2cab30a1db70ef66b765be13b13e4e1758410217edf57100000000f76fd6f563a17407845ad8f4e5654a520db5ebe1248b05a7e0926037cce94057000000000000000000764f19f344db53359718284d4bb03bb0bbb83ae4125d45047faf3bf26a97ca95000000000000000000e2b53078c15bebe0bc8152af38bb355d08adeae9b5b86ec6770ce66d92e9d969000000000000000000a2dcc6006e599cb473166667035ba9b6c662cfed865daebb425a89d40af2dffe00000000000000000047b378408d0f5a9be521ce8e37113a0202b0e0a8c8d3409e3e1e4c27038c29560000000000000000005019def787deba1bac0c861ecea5bdbd6269f373d9daeaa31396350b2c84d2ca000000000000000000010000000000000000016a000004004730440220126fd17b31a4cb2402592bd2f1bcda4d3b90ce8a49012755e2006800a9e0a42302202e1aeecbb936a4ca0afd576754b525824bb15e8254ed07ce6cb7174ef0ab5b790147304402202a7ac15cb66799a86f91306abb1c4cf61b6d4582abc5f80ee6a51ef17967b070022056ed845749df7c4923c5b50c8c4b701a4962da0d95dfb0be6df737bfe83ae3d40169522102d5878a4d1c23ea735d7146ef2e1094f08d118bf0e20ea09366077c6b086c49d62102804dae97fd1acbb46d2816f530f83119dccdcaf3f5dd4c4dabb8edccd04bc65c21022ddee7d0b3f7f894fca44650a72137908eb843432e6874cb873cc0f2d27a54d653ae0400473044022007a80b56b6d628a7be48b825bf964269de3101598e1b83dce67996ad14af21a902205eab963b093c0a871d8e6d63cf9c008fa7a70c6cc3cb5f78f951399eab28340601473044022074a13727a3e5736aba2005a006ea1af0e83595de1eb43b6d07468e7909ba9a24022006d94d75266d390e4134dc7bbe544fd76005e2852a88ed9db57c3c02a52f94c801695221034f0c87cd48157c37d26c296937b816218f6093d038ae6c3deba6b9f5776abfb32103eebab40c070ebe90e2806af5a4e365116c013a4d81ee7c167663649ef7a91d5321031b6cad2325e074b6f7419e7d1bfe37f317b309707630c0c313f89221cc8113c753ae040047304402202847ad6c0dafc791fe269d346e95c8ccba12efa90be9bc121af181b31500f26502201c0193ae7152d4a810a30cab134e5dff4bea538174de2fab1c903a00a543a5e301483045022100866ab759aa3e17fc4b9128bc7bcb871c153a83ad62fe600cc631bb16eeb27f9d0220470d8f3a0a908e55b8c424d384d1ab50d7f77023860ed6fe68a0e3f3db0e7a4d016952210383a7be358204e1f8dfba8dc7cdc0dca66a00b14eaf679d91b1a92f656c26bf8421027c8c55f1c02918ebf0daed6dc58f5e0b1074e46d8310d162570044084a0967692103623dc211dc28212e83fdf9f808e1dec770e461b0af1ba65458be106222be6a6153ae040047304402206c472129bab262d8e15c4d8eae6bae8ffaafad49e0857de0defc705c454ac7c202201d1f95264be08d72bd2dc313e61a7394ea4b4d9e4b01f78684059f6d0068240f01473044022074a44626578abb12b29db5aa2a57dddbf1548c8b295e382f74711b7cc45b309c0220725bde51555e81c54dc73be0c4928fec6a1e100f30aae7b7ce99ff67a06b0d7d0169522102f1af33db32f4c97b5f9381129f47e9f622a427144518eae3f8eca814741241f62102671f7f94e0adbc5be6893191ab88405b7aaa5cba3ef98ae4fd136316aad4cef32102d71c110eed1ae7e1c51377ac72f94339caa280a6d9dd7a843aad65cf4509288b53ae0440f419ebe7ba0487a4c179c4f010cc92b893149ed12ccf504d106f95394639a707b8c9e51c3b38c5465861c1b178377ad46c8f220442863957fb7bc248c5dd33e240b2b2467a458d385aa4afb982c624ea7239720f204c54abaf66f34d1feca154092bb8b060ee3564be1bf4abd33c508c5474e0182a6abb22ef9fad35c929182e3a4420c69e0b14bfba3101e0f336480a4617964ddb34d14755406529bc3f1f57fa49c8ad202a42e9d0284d5515d404dd84024b3d2eb291e2f971da02262a91551e35ed7e17ac41c11ce1dfba2ee2d1cab438a36b7e39f77da38229cc8f220570166a04bf0f29daf10f3d3e320bd977cf4de055594a1b93b6bf3bf35d9e5b8ac3bae37ca23f76f91d0440e831e3e0219552cfdd87c6f9af3854c6447a09265854d0c4d3c160ac0557498aeab1160c6f7d62422db67af3776f06ebd76c2d35e514125f5ddedc435ba277d84002ecc2125852f5856584d56181d4ef896208b20d95046fea05944b78c5d4978dd8f7013b30cfcb9837aeb8bbe314a6bd74b4ef9c9460fff6a9f04a41342ce4a14420e08fd25466b7ddb5239bd54c4823f877c137bda413fb5bd8a12bc5242a18900fad209b8c27e9f9f279390ab304cc3415e29d59e15f6ba34d463446fc90f8ea3ce315ac41c0a30fa2cbc9c0febc03c43d3d4d5f450ca164039364081cc681cc308388d249947ae56f815f9d25f5c2b33edeaad613c1a7d14fba7a2d48db9523b06c5eea5507014031c1b3b7b21d9d470772b556159a6e6761cc07058351f9228a7451dba41767cee17c30dd48161afdf8e441a480b60a4ddb4209cf2df15f984ff86e877d4a1ff60140d3e7ef0dd3ecae81237abddc1b5365ef81d89439f0a47a4484ab6e0e6fb99c55af9c089f37d4d1512a1f020c200d922dd527a310a34cdc1354e7afdae9bd42ea00000000', - }, -}; diff --git a/modules/abstract-utxo/test/unit/transaction/fixedScript/explainPsbt.ts b/modules/abstract-utxo/test/unit/transaction/fixedScript/explainPsbt.ts index cacbbe2d6c..fe19d2a92a 100644 --- a/modules/abstract-utxo/test/unit/transaction/fixedScript/explainPsbt.ts +++ b/modules/abstract-utxo/test/unit/transaction/fixedScript/explainPsbt.ts @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import * as utxolib from '@bitgo/utxo-lib'; import { testutil } from '@bitgo/utxo-lib'; -import { fixedScriptWallet, Triple } from '@bitgo/wasm-utxo'; +import { fixedScriptWallet } from '@bitgo/wasm-utxo'; import type { TransactionExplanation } from '../../../../src/transaction/fixedScript/explainTransaction'; import { @@ -18,8 +18,8 @@ function describeTransactionWith(acidTest: testutil.AcidTest) { describe(`${acidTest.name}`, function () { let psbt: utxolib.bitgo.UtxoPsbt; let psbtBytes: Buffer; - let walletXpubs: Triple; - let customChangeWalletXpubs: Triple | undefined; + let walletXpubs: fixedScriptWallet.RootWalletKeys; + let customChangeWalletXpubs: fixedScriptWallet.RootWalletKeys | undefined; let wasmPsbt: fixedScriptWallet.BitGoPsbt; let refExplanation: TransactionExplanation; before('prepare', function () { @@ -31,8 +31,8 @@ function describeTransactionWith(acidTest: testutil.AcidTest) { psbtBytes = psbt.toBuffer(); const networkName = utxolib.getNetworkName(acidTest.network); assert(networkName); - walletXpubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58()) as Triple; - customChangeWalletXpubs = acidTest.otherWalletKeys.triple.map((k) => k.neutered().toBase58()) as Triple; + walletXpubs = fixedScriptWallet.RootWalletKeys.from(acidTest.rootWalletKeys); + customChangeWalletXpubs = fixedScriptWallet.RootWalletKeys.from(acidTest.otherWalletKeys); wasmPsbt = fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName); }); @@ -154,7 +154,7 @@ describe('aggregateTransactionExplanations', function () { const networkName = utxolib.getNetworkName(acidTest.network); assert(networkName); const wasmPsbt = fixedScriptWallet.BitGoPsbt.fromBytes(psbtBytes, networkName); - const walletXpubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58()) as Triple; + const walletXpubs = fixedScriptWallet.RootWalletKeys.from(acidTest.rootWalletKeys); exp = explainPsbtWasmBigInt(wasmPsbt, walletXpubs, { replayProtection: { publicKeys: [acidTest.getReplayProtectionPublicKey()] }, });