From 8cbdf3ec4be6cc52abd405c369befb8814957063 Mon Sep 17 00:00:00 2001 From: Ravi Hegde Date: Tue, 7 Oct 2025 12:29:49 +0530 Subject: [PATCH] feat(sdk-coin-canton): added pre-approval builder Ticket: COIN-5918 --- .../sdk-coin-canton/resources/hash/hash.d.ts | 5 + .../sdk-coin-canton/resources/hash/hash.js | 297 ++++++++++++++++++ modules/sdk-coin-canton/src/lib/iface.ts | 26 +- .../src/lib/oneStepPreApprovalBuilder.ts | 177 +++++++++++ .../src/lib/transaction/transaction.ts | 50 ++- .../src/lib/transactionBuilder.ts | 59 ++-- .../src/lib/transferBuilder.ts | 5 + modules/sdk-coin-canton/src/lib/utils.ts | 7 + .../walletInitTransaction.ts | 1 - modules/sdk-coin-canton/test/resources.ts | 36 +++ .../oneStepEnablementBuilder.ts | 88 ++++++ modules/sdk-coin-canton/test/unit/utils.ts | 12 +- .../sdk-core/src/account-lib/baseCoin/enum.ts | 2 + 13 files changed, 727 insertions(+), 38 deletions(-) create mode 100644 modules/sdk-coin-canton/resources/hash/hash.d.ts create mode 100644 modules/sdk-coin-canton/resources/hash/hash.js create mode 100644 modules/sdk-coin-canton/src/lib/oneStepPreApprovalBuilder.ts create mode 100644 modules/sdk-coin-canton/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.ts diff --git a/modules/sdk-coin-canton/resources/hash/hash.d.ts b/modules/sdk-coin-canton/resources/hash/hash.d.ts new file mode 100644 index 0000000000..e03d4a9e6e --- /dev/null +++ b/modules/sdk-coin-canton/resources/hash/hash.d.ts @@ -0,0 +1,5 @@ +import type { IPreparedTransaction } from '../../src/lib/iface'; + +declare module '../../resources/hash/hash.js' { + export function computePreparedTransaction(preparedTransaction: IPreparedTransaction): Promise; +} diff --git a/modules/sdk-coin-canton/resources/hash/hash.js b/modules/sdk-coin-canton/resources/hash/hash.js new file mode 100644 index 0000000000..f50b260c84 --- /dev/null +++ b/modules/sdk-coin-canton/resources/hash/hash.js @@ -0,0 +1,297 @@ +// This is the static helper file from canton SDK, replicating it here since we won't be using the canton wallet SDK +// TODO: https://bitgoinc.atlassian.net/browse/COIN-6016 +const PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([0x00, 0x00, 0x00, 0x30]); +const NODE_ENCODING_VERSION = Uint8Array.from([0x01]); +const HASHING_SCHEME_VERSION = Uint8Array.from([2]); +async function sha256(message) { + const msg = typeof message === 'string' ? new TextEncoder().encode(message) : message; + return crypto.subtle.digest('SHA-256', new Uint8Array(msg)).then((hash) => new Uint8Array(hash)); +} +async function mkByteArray(...args) { + const normalizedArgs = args.map((arg) => { + if (typeof arg === 'number') { + return new Uint8Array([arg]); + } else { + return arg; + } + }); + let totalLength = 0; + normalizedArgs.forEach((arg) => { + totalLength += arg.length; + }); + const mergedArray = new Uint8Array(totalLength); + let offset = 0; + normalizedArgs.forEach((arg) => { + mergedArray.set(arg, offset); + offset += arg.length; + }); + return mergedArray; +} +async function encodeBool(value) { + return new Uint8Array([value ? 1 : 0]); +} +async function encodeInt32(value) { + const buffer = new ArrayBuffer(4); + const view = new DataView(buffer); + view.setInt32(0, value, false); // true for little-endian + return new Uint8Array(buffer); +} +async function encodeInt64(value) { + // eslint-disable-next-line no-undef + const num = typeof value === 'bigint' ? value : BigInt(value || 0); + const buffer = new ArrayBuffer(8); + const view = new DataView(buffer); + view.setBigInt64(0, num, false); // true for little-endian + return new Uint8Array(buffer); +} +export async function encodeString(value = '') { + const utf8Bytes = new TextEncoder().encode(value); + return encodeBytes(utf8Bytes); +} +async function encodeBytes(value) { + const length = await encodeInt32(value.length); + return mkByteArray(length, value); +} +async function encodeHash(value) { + return value; +} +function encodeHexString(value = '') { + // Convert hex string to Uint8Array + const bytes = new Uint8Array(value.length / 2); + for (let i = 0; i < value.length; i += 2) { + bytes[i / 2] = parseInt(value.slice(i, i + 2), 16); + } + return encodeBytes(bytes); +} +// Maybe suspicious? +async function encodeOptional(value, encodeFn) { + if (value === undefined || value === null) { + return new Uint8Array([0]); // Return empty array for undefined fields + } else { + return mkByteArray(1, await encodeFn(value)); + } +} +// Maybe suspicious? +async function encodeProtoOptional(parentValue, fieldName, value, encodeFn) { + if (parentValue && parentValue[fieldName] !== undefined) { + return mkByteArray(1, await encodeFn(value)); + } else { + return new Uint8Array([0]); // Return empty array for undefined fields + } +} +async function encodeRepeated(values = [], encodeFn) { + const length = await encodeInt32(values.length); + const encodedValues = await Promise.all(values.map(encodeFn)); + return mkByteArray(length, ...encodedValues); +} +function findSeed(nodeId, nodeSeeds) { + const seed = nodeSeeds.find((seed) => seed.nodeId.toString() === nodeId)?.seed; + return seed; +} +async function encodeIdentifier(identifier) { + return mkByteArray( + await encodeString(identifier.packageId), + await encodeRepeated(identifier.moduleName.split('.'), encodeString), + await encodeRepeated(identifier.entityName.split('.'), encodeString) + ); +} +async function encodeMetadata(metadata) { + return mkByteArray( + Uint8Array.from([0x01]), + await encodeRepeated(metadata.submitterInfo?.actAs, encodeString), + await encodeString(metadata.submitterInfo?.commandId), + await encodeString(metadata.transactionUuid), + await encodeInt32(metadata.mediatorGroup), + await encodeString(metadata.synchronizerId), + await encodeProtoOptional(metadata, 'minLedgerEffectiveTime', metadata.minLedgerEffectiveTime, encodeInt64), + await encodeProtoOptional(metadata, 'maxLedgerEffectiveTime', metadata.maxLedgerEffectiveTime, encodeInt64), + await encodeInt64(metadata.preparationTime), + await encodeRepeated(metadata.inputContracts, encodeInputContract) + ); +} +async function encodeCreateNode(create, nodeId, nodeSeeds) { + return create + ? mkByteArray( + NODE_ENCODING_VERSION, + await encodeString(create.lfVersion), + 0 /** Create node tag */, + await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash), + await encodeHexString(create.contractId), + await encodeString(create.packageName), + await encodeIdentifier(create.templateId), + await encodeValue(create.argument), + await encodeRepeated(create.signatories, encodeString), + await encodeRepeated(create.stakeholders, encodeString) + ) + : mkByteArray(); +} +async function encodeExerciseNode(exercise, nodeId, nodesDict, nodeSeeds) { + return mkByteArray( + NODE_ENCODING_VERSION, + await encodeString(exercise.lfVersion), + 1 /** Exercise node tag */, + await encodeHash(findSeed(nodeId, nodeSeeds)), + await encodeHexString(exercise.contractId), + await encodeString(exercise.packageName), + await encodeIdentifier(exercise.templateId), + await encodeRepeated(exercise.signatories, encodeString), + await encodeRepeated(exercise.stakeholders, encodeString), + await encodeRepeated(exercise.actingParties, encodeString), + await encodeProtoOptional(exercise, 'interfaceId', exercise.interfaceId, encodeIdentifier), + await encodeString(exercise.choiceId), + await encodeValue(exercise.chosenValue), + await encodeBool(exercise.consuming), + await encodeProtoOptional(exercise, 'exerciseResult', exercise.exerciseResult, encodeValue), + await encodeRepeated(exercise.choiceObservers, encodeString), + await encodeRepeated(exercise.children, encodeNodeId(nodesDict, nodeSeeds)) + ); +} +async function encodeFetchNode(fetch) { + return mkByteArray( + NODE_ENCODING_VERSION, + await encodeString(fetch.lfVersion), + 2 /** Fetch node tag */, + await encodeHexString(fetch.contractId), + await encodeString(fetch.packageName), + await encodeIdentifier(fetch.templateId), + await encodeRepeated(fetch.signatories, encodeString), + await encodeRepeated(fetch.stakeholders, encodeString), + await encodeProtoOptional(fetch, 'interfaceId', fetch.interfaceId, encodeIdentifier), + await encodeRepeated(fetch.actingParties, encodeString) + ); +} +async function encodeRollbackNode(rollback, nodesDict, nodeSeeds) { + return mkByteArray( + NODE_ENCODING_VERSION, + 3 /** Rollback node tag */, + await encodeRepeated(rollback.children, encodeNodeId(nodesDict, nodeSeeds)) + ); +} +async function encodeInputContract(contract) { + if (contract.contract.oneofKind === 'v1') + return mkByteArray( + await encodeInt64(contract.createdAt), + await sha256(await encodeCreateNode(contract.contract.v1, 'unused_node_id', [])) + ); + else throw new Error('Unsupported contract version'); +} +async function encodeValue(value) { + if (value.sum.oneofKind === 'unit') { + return Uint8Array.from([0]); // Unit value + } else if (value.sum.oneofKind === 'bool') { + return mkByteArray(Uint8Array.from([0x01]), await encodeBool(value.sum.bool)); + } else if (value.sum.oneofKind === 'int64') { + return mkByteArray(Uint8Array.from([0x02]), await encodeInt64(parseInt(value.sum.int64, 10))); + } else if (value.sum.oneofKind === 'numeric') { + return mkByteArray(Uint8Array.from([0x03]), await encodeString(value.sum.numeric)); + } else if (value.sum.oneofKind === 'timestamp') { + // eslint-disable-next-line no-undef + return mkByteArray(Uint8Array.from([0x04]), await encodeInt64(BigInt(value.sum.timestamp))); + } else if (value.sum.oneofKind === 'date') { + return mkByteArray(Uint8Array.from([0x05]), await encodeInt32(value.sum.date)); + } else if (value.sum.oneofKind === 'party') { + return mkByteArray(Uint8Array.from([0x06]), await encodeString(value.sum.party)); + } else if (value.sum.oneofKind === 'text') { + return mkByteArray(Uint8Array.from([0x07]), await encodeString(value.sum.text)); + } else if (value.sum.oneofKind === 'contractId') { + return mkByteArray(Uint8Array.from([0x08]), await encodeHexString(value.sum.contractId)); + } else if (value.sum.oneofKind === 'optional') { + return mkByteArray( + Uint8Array.from([0x09]), + await encodeProtoOptional(value.sum.optional, 'value', value.sum.optional.value, encodeValue) + ); + } else if (value.sum.oneofKind === 'list') { + return mkByteArray(Uint8Array.from([0x0a]), await encodeRepeated(value.sum.list.elements, encodeValue)); + } else if (value.sum.oneofKind === 'textMap') { + return mkByteArray(Uint8Array.from([0x0b]), await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry)); + } else if (value.sum.oneofKind === 'record') { + return mkByteArray( + Uint8Array.from([0x0c]), + await encodeProtoOptional(value.sum.record, 'recordId', value.sum.record.recordId, encodeIdentifier), + await encodeRepeated(value.sum.record.fields, encodeRecordField) + ); + } else if (value.sum.oneofKind === 'variant') { + return mkByteArray( + Uint8Array.from([0x0d]), + await encodeProtoOptional(value.sum.variant, 'variantId', value.sum.variant.variantId, encodeIdentifier), + await encodeString(value.sum.variant.constructor), + await encodeValue(value.sum.variant.value) + ); + } else if (value.sum.oneofKind === 'enum') { + return mkByteArray( + Uint8Array.from([0x0e]), + await encodeProtoOptional(value.sum.enum, 'enumId', value.sum.enum.enumId, encodeIdentifier), + await encodeString(value.sum.enum.constructor) + ); + } else if (value.sum.oneofKind === 'genMap') { + return mkByteArray(Uint8Array.from([0x0f]), await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry)); + } + throw new Error('Unsupported value type: ' + JSON.stringify(value)); +} +async function encodeTextMapEntry(entry) { + return mkByteArray(await encodeString(entry.key), await encodeValue(entry.value)); +} +async function encodeRecordField(field) { + return mkByteArray(await encodeOptional(field.label, encodeString), await encodeValue(field.value)); +} +async function encodeGenMapEntry(entry) { + return mkByteArray(await encodeValue(entry.key), await encodeValue(entry.value)); +} +function encodeNodeId(nodesDict, nodeSeeds) { + return async (nodeId) => { + const node = nodesDict[nodeId]; + if (!node) { + throw new Error(`Node with ID ${nodeId} not found in transaction`); + } + const encodedNode = await encodeNode(node, nodesDict, nodeSeeds); + return sha256(encodedNode); + }; +} +async function encodeNode(node, nodesDict, nodeSeeds) { + if (node.versionedNode.oneofKind === 'v1') { + if (node.versionedNode.v1.nodeType.oneofKind === 'create') { + return encodeCreateNode(node.versionedNode.v1.nodeType.create, node.nodeId, nodeSeeds); + } else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') { + return encodeExerciseNode(node.versionedNode.v1.nodeType.exercise, node.nodeId, nodesDict, nodeSeeds); + } else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') { + return encodeFetchNode(node.versionedNode.v1.nodeType.fetch); + } else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') { + return encodeRollbackNode(node.versionedNode.v1.nodeType.rollback, nodesDict, nodeSeeds); + } + throw new Error('Unsupported node type'); + } else { + throw new Error(`Unsupported node version`); + } +} +function createNodesDict(preparedTransaction) { + const nodesDict = {}; + const nodes = preparedTransaction.transaction?.nodes || []; + for (const node of nodes) { + nodesDict[node.nodeId] = node; + } + return nodesDict; +} +async function encodeTransaction(transaction, nodesDict, nodeSeeds) { + return mkByteArray( + await encodeString(transaction.version), + await encodeRepeated(transaction.roots, encodeNodeId(nodesDict, nodeSeeds)) + ); +} +async function hashTransaction(transaction, nodesDict) { + const encodedTransaction = await encodeTransaction(transaction, nodesDict, transaction.nodeSeeds); + const hash = await sha256(await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction)); + return hash; +} +async function hashMetadata(metadata) { + const hash = await sha256(await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, await encodeMetadata(metadata))); + return hash; +} +async function encodePreparedTransaction(preparedTransaction) { + const nodesDict = createNodesDict(preparedTransaction); + const transactionHash = await hashTransaction(preparedTransaction.transaction, nodesDict); + const metadataHash = await hashMetadata(preparedTransaction.metadata); + return mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, HASHING_SCHEME_VERSION, transactionHash, metadataHash); +} +export async function computePreparedTransaction(preparedTransaction) { + return sha256(await encodePreparedTransaction(preparedTransaction)); +} diff --git a/modules/sdk-coin-canton/src/lib/iface.ts b/modules/sdk-coin-canton/src/lib/iface.ts index 66bff2f94f..4df4130d14 100644 --- a/modules/sdk-coin-canton/src/lib/iface.ts +++ b/modules/sdk-coin-canton/src/lib/iface.ts @@ -27,7 +27,7 @@ export interface CantonPrepareCommandResponse { preparedTransaction?: string; preparedTransactionHash: string; hashingSchemeVersion: string; - hashingDetails?: string; + hashingDetails?: string | null; } export interface PreparedParty { @@ -57,3 +57,27 @@ export interface WalletInitRequest { confirmationThreshold: number; observingParticipantUids: string[]; } + +interface PreApprovalCreateCommand { + templateId: string; + createArguments: { + receiver: string; + provider: string; + expectedDso: string; + }; +} + +export interface OneStepEnablementRequest { + commandId: string; + commands: [ + { + CreateCommand: PreApprovalCreateCommand; + } + ]; + disclosedContracts: []; + synchronizerId: string; + verboseHashing: boolean; + actAs: string[]; + readAs: string[]; + packageIdSelectionPreference: string[]; +} diff --git a/modules/sdk-coin-canton/src/lib/oneStepPreApprovalBuilder.ts b/modules/sdk-coin-canton/src/lib/oneStepPreApprovalBuilder.ts new file mode 100644 index 0000000000..676c119265 --- /dev/null +++ b/modules/sdk-coin-canton/src/lib/oneStepPreApprovalBuilder.ts @@ -0,0 +1,177 @@ +import { TransactionType } from '@bitgo/sdk-core'; +import { BaseCoin as CoinConfig } from '@bitgo/statics'; +import { CantonPrepareCommandResponse, OneStepEnablementRequest } from './iface'; +import { TransactionBuilder } from './transactionBuilder'; +import { Transaction } from './transaction/transaction'; + +export class OneStepPreApprovalBuilder extends TransactionBuilder { + private _synchronizerId: string; + private _commandId: string; + private _templateId: string; + private _receiverPartyId: string; + private _providerPartyId: string; + private _expectedDso: string; + constructor(_coinConfig: Readonly) { + super(_coinConfig); + } + + initBuilder(tx: Transaction): void { + super.initBuilder(tx); + this.setTransactionType(); + } + + get transactionType(): TransactionType { + return TransactionType.OneStepPreApproval; + } + + setTransactionType(): void { + this.transaction.transactionType = TransactionType.OneStepPreApproval; + } + + setTransaction(transaction: CantonPrepareCommandResponse): void { + this.transaction.prepareCommand = transaction; + } + + /** + * Sets the synchronizer ID for the pre-approval builder. + * + * @param id - The synchronizer identifier (must be a non-empty string). + * @returns The current builder instance for chaining. + * @throws Error if the synchronizer ID is empty. + */ + synchronizerId(id: string): this { + if (!id.trim()) { + throw new Error('synchronizer must be a non-empty string'); + } + this._synchronizerId = id.trim(); + return this; + } + + /** + * Sets the unique id for the 1-step enablement + * Also sets the _id of the transaction + * + * @param id - A uuid + * @returns The current builder instance for chaining. + * @throws Error if id is empty. + */ + commandId(id: string): this { + if (!id.trim()) { + throw new Error('commandId must be a non-empty string'); + } + this._commandId = id.trim(); + // also set the transaction _id + this.transaction.id = id.trim(); + return this; + } + + /** + * Sets the template id for the 1-step enablement + * + * @param id - the template if of the form `#splice-wallet:Splice.Wallet.TransferPreapproval:TransferPreapprovalProposal` + * @returns The current builder instance for chaining. + * @throws Error if id is empty. + */ + templateId(id: string): this { + if (!id.trim()) { + throw new Error('templateId must be a non-empty string'); + } + this._templateId = id.trim(); + return this; + } + + /** + * Sets the receiver for the 1-step enablement + * + * @param id - the receiver party id (address) + * @returns The current builder instance for chaining. + * @throws Error if id is empty. + */ + receiverPartyId(id: string): this { + if (!id.trim()) { + throw new Error('receiverPartyId must be a non-empty string'); + } + this._receiverPartyId = id.trim(); + return this; + } + + /** + * Sets the provider for the 1-step enablement + * + * @param id - the validator party id (address) + * @returns The current builder instance for chaining. + * @throws Error if id is empty. + */ + providerPartyId(id: string): this { + if (!id.trim()) { + throw new Error('providerPartyId must be a non-empty string'); + } + this._providerPartyId = id.trim(); + return this; + } + + /** + * Sets the dso id for the 1-step enablement + * + * @param id - the dso id of the validator + * @returns The current builder instance for chaining. + * @throws Error if id is empty. + */ + expectedDso(id: string): this { + if (!id.trim()) { + throw new Error('expectedDso must be a non-empty string'); + } + this._expectedDso = id.trim(); + return this; + } + + /** + * Builds and returns the OneStepEnablementRequest object from the builder's internal state. + * + * This method performs validation before constructing the object. If required fields are + * missing or invalid, it throws an error. + * + * @returns {OneStepEnablementRequest} - A fully constructed and validated request object for 1-step enablement. + * @throws {Error} If any required field is missing or fails validation. + */ + toRequestObject(): OneStepEnablementRequest { + this.validate(); + + return { + commandId: this._commandId, + commands: [ + { + CreateCommand: { + templateId: this._templateId, + createArguments: { + receiver: this._receiverPartyId, + provider: this._providerPartyId, + expectedDso: this._expectedDso, + }, + }, + }, + ], + disclosedContracts: [], + synchronizerId: this._synchronizerId, + verboseHashing: false, + actAs: [this._receiverPartyId], + readAs: [], + packageIdSelectionPreference: [], + }; + } + + /** + * Validates the internal state of the builder before building the request object. + * + * @private + * @throws {Error} If any required field is missing or invalid. + */ + private validate(): void { + if (!this._receiverPartyId) throw new Error('receiver partyId is missing'); + if (!this._providerPartyId) throw new Error('provider partyId is missing'); + if (!this._expectedDso) throw new Error('expectedDso is missing'); + if (!this._commandId) throw new Error('commandId is missing'); + if (!this._templateId) throw new Error('templateId is missing'); + if (!this._synchronizerId) throw new Error('synchronizerId is missing'); + } +} diff --git a/modules/sdk-coin-canton/src/lib/transaction/transaction.ts b/modules/sdk-coin-canton/src/lib/transaction/transaction.ts index b92816d724..705b397265 100644 --- a/modules/sdk-coin-canton/src/lib/transaction/transaction.ts +++ b/modules/sdk-coin-canton/src/lib/transaction/transaction.ts @@ -4,19 +4,33 @@ import { CantonPrepareCommandResponse, PreparedTxnParsedInfo, TxData } from '../ import utils from '../utils'; export class Transaction extends BaseTransaction { - private _transaction: CantonPrepareCommandResponse; + private _prepareCommand: CantonPrepareCommandResponse; constructor(coinConfig: Readonly) { super(coinConfig); } - get transaction(): CantonPrepareCommandResponse { - return this._transaction; + get prepareCommand(): CantonPrepareCommandResponse { + return this._prepareCommand; } - set transaction(transaction: CantonPrepareCommandResponse) { - this._transaction = transaction; - this._id = transaction.preparedTransactionHash; + set prepareCommand(transaction: CantonPrepareCommandResponse) { + this._prepareCommand = transaction; + } + + set transactionType(transactionType: TransactionType) { + this._type = transactionType; + } + + get id(): string { + if (!this._id) { + throw new InvalidTransactionError('transaction is is not set'); + } + return this._id; + } + + set id(id: string) { + this._id = id; } canSign(key: BaseKey): boolean { @@ -24,14 +38,14 @@ export class Transaction extends BaseTransaction { } toBroadcastFormat(): string { - if (!this._transaction) { + if (!this._prepareCommand) { throw new InvalidTransactionError('Empty transaction data'); } - return this._transaction.preparedTransactionHash; + return Buffer.from(JSON.stringify(this._prepareCommand)).toString('base64'); } toJson(): TxData { - if (!this._transaction || !this._transaction.preparedTransaction) { + if (!this._prepareCommand || !this._prepareCommand.preparedTransaction) { throw new InvalidTransactionError('Empty transaction data'); } const result: TxData = { @@ -43,7 +57,7 @@ export class Transaction extends BaseTransaction { // TODO: extract other required data (utxo used, request time, execute before etc) let parsedInfo: PreparedTxnParsedInfo; try { - parsedInfo = utils.parseRawCantonTransactionData(this._transaction.preparedTransaction); + parsedInfo = utils.parseRawCantonTransactionData(this._prepareCommand.preparedTransaction); } catch (e) { throw new InvalidTransactionError(`Failed to parse transaction hash: ${e instanceof Error ? e.message : e}`); } @@ -51,4 +65,20 @@ export class Transaction extends BaseTransaction { result.receiver = parsedInfo.receiver; return result; } + + getSignablePayload(): Buffer { + if (!this._prepareCommand) { + throw new InvalidTransactionError('Empty transaction data'); + } + return Buffer.from(this._prepareCommand.preparedTransactionHash); + } + + fromRawTransaction(rawTx: string): void { + try { + const decoded: CantonPrepareCommandResponse = JSON.parse(Buffer.from(rawTx, 'base64').toString('utf8')); + this.prepareCommand = decoded; + } catch (e) { + throw new InvalidTransactionError('Unable to parse raw transaction data'); + } + } } diff --git a/modules/sdk-coin-canton/src/lib/transactionBuilder.ts b/modules/sdk-coin-canton/src/lib/transactionBuilder.ts index 3e078c7bd3..6f6a965334 100644 --- a/modules/sdk-coin-canton/src/lib/transactionBuilder.ts +++ b/modules/sdk-coin-canton/src/lib/transactionBuilder.ts @@ -3,12 +3,13 @@ import { BaseKey, BaseTransactionBuilder, BuildTransactionError, - FeeOptions, PublicKey as BasePublicKey, Signature, TransactionType, } from '@bitgo/sdk-core'; import BigNumber from 'bignumber.js'; +import { CantonPrepareCommandResponse } from './iface'; +import { KeyPair } from './keyPair'; import { Transaction } from './transaction/transaction'; import utils from './utils'; @@ -16,7 +17,10 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { protected _transaction: Transaction; private _signatures: Signature[] = []; - // get and set region + initBuilder(tx: Transaction): void { + this._transaction = tx; + } + /** * The transaction type. */ @@ -28,9 +32,7 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { } /** @inheritdoc */ - protected set transaction(transaction: Transaction) { - this._transaction = transaction; - } + abstract setTransaction(transaction: CantonPrepareCommandResponse): void; /** @inheritdoc */ protected signImplementation(key: BaseKey): Transaction { @@ -42,21 +44,6 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { this._signatures.push({ publicKey, signature }); } - /** - * Sets the sender of this transaction. - * This account will be responsible for paying transaction fees. - * - * @param {string} senderAddress the account that is sending this transaction - * @returns {TransactionBuilder} This transaction builder - */ - sender(senderAddress: string): this { - throw new Error('Method not implemented.'); - } - - fee(feeOptions: FeeOptions): this { - throw new Error('Method not implemented.'); - } - /** @inheritdoc */ protected fromImplementation(rawTransaction: string): Transaction { throw new Error('Method not implemented.'); @@ -77,17 +64,39 @@ export abstract class TransactionBuilder extends BaseTransactionBuilder { /** @inheritdoc */ validateKey(key: BaseKey): void { - throw new Error('Method not implemented.'); + let keyPair: KeyPair; + try { + keyPair = new KeyPair({ prv: key.key }); + } catch { + throw new BuildTransactionError('Invalid key'); + } + if (!keyPair.getKeys().prv) { + throw new BuildTransactionError('Invalid key'); + } } /** @inheritdoc */ - validateRawTransaction(rawTransaction: string): void { - throw new Error('Method not implemented.'); + async validateRawTransaction(rawTransaction: string): Promise { + if (!rawTransaction || !this._transaction.prepareCommand) { + throw new BuildTransactionError('invalid raw transaction'); + } + const localHash = await utils.computeHashFromPrepareSubmissionResponse(rawTransaction); + if (localHash !== this._transaction.prepareCommand.preparedTransactionHash) { + throw new BuildTransactionError('invalid raw transaction, hash not matching'); + } } /** @inheritdoc */ - validateTransaction(transaction?: Transaction): void { - throw new Error('Method not implemented.'); + async validateTransaction(transaction?: Transaction): Promise { + if (!transaction?.prepareCommand?.preparedTransaction) { + return; + } + const localHash = await utils.computeHashFromPrepareSubmissionResponse( + transaction.prepareCommand.preparedTransaction + ); + if (localHash !== transaction.prepareCommand.preparedTransactionHash) { + throw new BuildTransactionError('invalid transaction'); + } } /** @inheritdoc */ diff --git a/modules/sdk-coin-canton/src/lib/transferBuilder.ts b/modules/sdk-coin-canton/src/lib/transferBuilder.ts index e57cedf7c9..1dd42469c4 100644 --- a/modules/sdk-coin-canton/src/lib/transferBuilder.ts +++ b/modules/sdk-coin-canton/src/lib/transferBuilder.ts @@ -1,6 +1,7 @@ import { TransactionType } from '@bitgo/sdk-core'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { TransactionBuilder } from './transactionBuilder'; +import { CantonPrepareCommandResponse } from './iface'; export class TransferBuilder extends TransactionBuilder { constructor(_coinConfig: Readonly) { @@ -10,4 +11,8 @@ export class TransferBuilder extends TransactionBuilder { protected get transactionType(): TransactionType { return TransactionType.Send; } + + setTransaction(transaction: CantonPrepareCommandResponse): void { + this.transaction.prepareCommand = transaction; + } } diff --git a/modules/sdk-coin-canton/src/lib/utils.ts b/modules/sdk-coin-canton/src/lib/utils.ts index 8732d69b42..3ab062d8e0 100644 --- a/modules/sdk-coin-canton/src/lib/utils.ts +++ b/modules/sdk-coin-canton/src/lib/utils.ts @@ -2,6 +2,7 @@ import crypto from 'crypto'; import { BaseUtils, isValidEd25519PublicKey } from '@bitgo/sdk-core'; +import { computePreparedTransaction } from '../../resources/hash/hash.js'; import { PreparedTransaction } from '../../resources/proto/preparedTransaction.js'; import { CryptoKeyFormat, SigningAlgorithmSpec, SigningKeySpec } from './constant'; @@ -123,6 +124,12 @@ export class Utils implements BaseUtils { return this.computeHashFromTopologyTransaction(txBuffers); } + async computeHashFromPrepareSubmissionResponse(preparedTransactionBase64: string): Promise { + const preparedTransaction = this.decodePreparedTransaction(preparedTransactionBase64); + const hash = await computePreparedTransaction(preparedTransaction); + return Buffer.from(hash).toString('base64'); + } + /** * Computes the final topology transaction hash for a list of prepared Canton transactions. * diff --git a/modules/sdk-coin-canton/src/lib/walletInitialization/walletInitTransaction.ts b/modules/sdk-coin-canton/src/lib/walletInitialization/walletInitTransaction.ts index db980e04a7..fe108d7259 100644 --- a/modules/sdk-coin-canton/src/lib/walletInitialization/walletInitTransaction.ts +++ b/modules/sdk-coin-canton/src/lib/walletInitialization/walletInitTransaction.ts @@ -1,7 +1,6 @@ import { BaseKey, BaseTransaction, InvalidTransactionError, TransactionType } from '@bitgo/sdk-core'; import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { PreparedParty, WalletInitTxData } from '../iface'; -import { Buffer } from 'buffer'; export class WalletInitTransaction extends BaseTransaction { private _preparedParty: PreparedParty; diff --git a/modules/sdk-coin-canton/test/resources.ts b/modules/sdk-coin-canton/test/resources.ts index 31d81e6580..01cff323de 100644 --- a/modules/sdk-coin-canton/test/resources.ts +++ b/modules/sdk-coin-canton/test/resources.ts @@ -24,8 +24,44 @@ export const InvalidGenerateTopologyResponse = { multiHash: 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/A/u+OGR+npg==', }; +export const PrepareSubmissionResponse = { + preparedTransaction: + 'CqGRAQoDMi4xEgEwGu8DCgEzwj7oAxLlAwoDMi4xEooBMDAzYWJmZTUzOGQwYjUxNzg0N2M2M2RkODdlYjQ4OGUzYzRmZjY5MDEyOGNlNjhhODI4ZjRiZWJiNzg5YTZkNjE0Y2ExMTEyMjAyYTI4NDJhNmUwNDgxNGI0YWRkNWJlNTdmOGZkNWQ3ZGE2NWRiZDVkYjZhZTkyODVkNzZlYmMwZDliMzE4ODdhGg1zcGxpY2UtYW11bGV0ImEKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDFNwbGljZS5Sb3VuZBoPT3Blbk1pbmluZ1JvdW5kKklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhGvINCgIxMcI+6g0K5w0KAzIuMRJCMDBjNWJkZWU1YjkxNDY3YjZkMDZjYmYzNGI0NjQzYmUxMDk4MzhhY2MwOWNmOWFjOWVkNDI5ZmFmYWM5NmJiOTFmGg1zcGxpY2UtYW11bGV0In8KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESIFNwbGljZS5BbXVsZXRUcmFuc2Zlckluc3RydWN0aW9uGhlBbXVsZXRUcmFuc2Zlckluc3RydWN0aW9uKtwIctkICn8KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESIFNwbGljZS5BbXVsZXRUcmFuc2Zlckluc3RydWN0aW9uGhlBbXVsZXRUcmFuc2Zlckluc3RydWN0aW9uElQKDGxvY2tlZEFtdWxldBJESkIwMGQ3ZTI3OTM0Mzc5YWMzZDI4NTljNzM1OGU2YTYxYzA2YWI3ZmY2ZDI4ZGQwYTMyNTFjNDY1Mzg4ZjY5ZGI2MWYS/wYKCHRyYW5zZmVyEvIGcu8GCnQKQDU1YmE0ZGViMGFkNDY2MmM0MTY4YjM5ODU5NzM4YTBlOTEzODhkMjUyMjg2NDgwYzczMzFiM2Y3MWE1MTcyODESJlNwbGljZS5BcGkuVG9rZW4uVHJhbnNmZXJJbnN0cnVjdGlvblYxGghUcmFuc2ZlchJkCgZzZW5kZXISWjpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OBJxCghyZWNlaXZlchJlOmNyYXZpLWRlbW8tcGFydHktdHhuLTAxLXRhcHBlcjo6MTIyMGVhN2FiNWE3MjNmOGE2YjIwNzhlNjE3ZTZjNThjYjdlNzhlNDk5NDdkZGMyMzllMWE5NDFhYTU2ZTZiYTA4YjQSGQoGYW1vdW50Eg8yDTUwLjAwMDAwMDAwMDAS6AEKDGluc3RydW1lbnRJZBLXAXLUAQpsCkA3MThhMGY3N2U1MDVhOGRlMjJmMTg4YmQ0Yzg3ZmU3NDEwMTI3NGU5ZDRjYjFiZmFjN2QwOWFlYzcxNThkMzViEhpTcGxpY2UuQXBpLlRva2VuLkhvbGRpbmdWMRoMSW5zdHJ1bWVudElkElQKBWFkbWluEks6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWESDgoCaWQSCEIGQW11bGV0EhgKC3JlcXVlc3RlZEF0Egkp6ad1trhABgASGgoNZXhlY3V0ZUJlZm9yZRIJKenzqjnhQAYAElwKEGlucHV0SG9sZGluZ0NpZHMSSFpGCkRKQjAwZDdlMjc5MzQzNzlhYzNkMjg1OWM3MzU4ZTZhNjFjMDZhYjdmZjZkMjhkZDBhMzI1MWM0NjUzODhmNjlkYjYxZhKDAQoEbWV0YRJ7cnkKaQpANGRlZDZiNjY4Y2IzYjY0ZjdhODhhMzA4NzRjZDQxYzc1ODI5ZjVlMDY0YjNmYmJhZGY0MWVjN2U4MzYzMzU0ZhIbU3BsaWNlLkFwaS5Ub2tlbi5NZXRhZGF0YVYxGghNZXRhZGF0YRIMCgZ2YWx1ZXMSAmIAMklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4OklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhOmNyYXZpLWRlbW8tcGFydHktdHhuLTAxLXRhcHBlcjo6MTIyMGVhN2FiNWE3MjNmOGE2YjIwNzhlNjE3ZTZjNThjYjdlNzhlNDk5NDdkZGMyMzllMWE5NDFhYTU2ZTZiYTA4YjQ6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTga8QMKATHCPuoDEucDCgMyLjESigEwMDNiOTAzMDQ3OWExZWE1MGI0MjA3MjVjNDEwYjY0YzQ2MDliNjRhYjQ5OTZkZTcwN2VmOTlhNjJjZmEwOWY5MDdjYTExMTIyMGEwYmNmNjRlNzNiYjNhZTM3ZDBmZjhjZmUyZWQyMzU0NjZjYmVkY2NhNjViZjRiYjgzZDFiZDg5ZjM0MzM5ZjQaDXNwbGljZS1hbXVsZXQiYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGgtBbXVsZXRSdWxlcypJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRreBgoBNMI+1wYS1AYKAzIuMRKKATAwYmMwMmQyZjUwMjhkMDAxMGRiZDczZDM0NThkZDliODI3MGVkMGU4YmZkZmJlNTk0NzcxYjhjNWM5YTdjYzA2YmNhMTExMjIwM2QzYWI5YWFhMmY1NjZmMWFjNGI3OTMwZWNjYzMxZjc4ZWU5MjhlMzM1YjU5NDAyNjE4YzAwZDg1MTUwZWU0NxoNc3BsaWNlLWFtdWxldCJZCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEg1TcGxpY2UuQW11bGV0GgZBbXVsZXQqSURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEqWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEyWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTg6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNThCZwpANzE4YTBmNzdlNTA1YThkZTIyZjE4OGJkNGM4N2ZlNzQxMDEyNzRlOWQ0Y2IxYmZhYzdkMDlhZWM3MTU4ZDM1YhIaU3BsaWNlLkFwaS5Ub2tlbi5Ib2xkaW5nVjEaB0hvbGRpbmca6wYKATjCPuQGGuEGCgMyLjESigEwMGJjMDJkMmY1MDI4ZDAwMTBkYmQ3M2QzNDU4ZGQ5YjgyNzBlZDBlOGJmZGZiZTU5NDc3MWI4YzVjOWE3Y2MwNmJjYTExMTIyMDNkM2FiOWFhYTJmNTY2ZjFhYzRiNzkzMGVjY2MzMWY3OGVlOTI4ZTMzNWI1OTQwMjYxOGMwMGQ4NTE1MGVlNDcaDXNwbGljZS1hbXVsZXQiWQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkFtdWxldBoGQW11bGV0KklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhKlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4MklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4OklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhOlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4SgdBcmNoaXZlUmVyYwphCkA5ZTcwYThiMzUxMGQ2MTdmOGExMzYyMTNmMzNkNmE5MDNhMTBjYTBlZWVjNzZiYjA2YmE1NWQxZWQ5NjgwZjY5EhREQS5JbnRlcm5hbC5UZW1wbGF0ZRoHQXJjaGl2ZVgBagIKABq9CQoCMTDCPrUJCrIJCgMyLjESQjAwNzNkZDA0OTI2NTQzMDVjYTYxODM5ZTNjNWIxMzQzMDc3YTE4OTE5MjliNmVhODQxMDI0N2Q2YTM2MDcwNGM4NhoNc3BsaWNlLWFtdWxldCJZCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEg1TcGxpY2UuQW11bGV0GgZBbXVsZXQqsgVyrwUKWQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkFtdWxldBoGQW11bGV0ElIKA2RzbxJLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhEmMKBW93bmVyElo6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgSmAMKBmFtb3VudBKNA3KKAwpfCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgtTcGxpY2UuRmVlcxoORXhwaXJpbmdBbW91bnQSIQoNaW5pdGlhbEFtb3VudBIQMg45NTAuMDAwMDAwMDAwMBJ4CgljcmVhdGVkQXQSa3JpClcKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDFNwbGljZS5UeXBlcxoFUm91bmQSDgoGbnVtYmVyEgQY5tgBEokBCgxyYXRlUGVyUm91bmQSeXJ3Cl0KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGgxSYXRlUGVyUm91bmQSFgoEcmF0ZRIOMgwwLjAwMDIwMDI3MjYySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEyWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTg6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTga7wMKATbCPugDEuUDCgMyLjESigEwMDNhYmZlNTM4ZDBiNTE3ODQ3YzYzZGQ4N2ViNDg4ZTNjNGZmNjkwMTI4Y2U2OGE4MjhmNGJlYmI3ODlhNmQ2MTRjYTExMTIyMDJhMjg0MmE2ZTA0ODE0YjRhZGQ1YmU1N2Y4ZmQ1ZDdkYTY1ZGJkNWRiNmFlOTI4NWQ3NmViYzBkOWIzMTg4N2EaDXNwbGljZS1hbXVsZXQiYQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIMU3BsaWNlLlJvdW5kGg9PcGVuTWluaW5nUm91bmQqSURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEa9QwKATLCPu4MGusMCgMyLjESigEwMDNiOTAzMDQ3OWExZWE1MGI0MjA3MjVjNDEwYjY0YzQ2MDliNjRhYjQ5OTZkZTcwN2VmOTlhNjJjZmEwOWY5MDdjYTExMTIyMGEwYmNmNjRlNzNiYjNhZTM3ZDBmZjhjZmUyZWQyMzU0NjZjYmVkY2NhNjViZjRiYjgzZDFiZDg5ZjM0MzM5ZjQaDXNwbGljZS1hbXVsZXQiYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGgtBbXVsZXRSdWxlcypJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OEoXQW11bGV0UnVsZXNfQ29tcHV0ZUZlZXNSvQdyugcKbwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGhdBbXVsZXRSdWxlc19Db21wdXRlRmVlcxLOAgoHY29udGV4dBLCAnK/AgpnCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaD1RyYW5zZmVyQ29udGV4dBKhAQoPb3Blbk1pbmluZ1JvdW5kEo0BSooBMDAzYWJmZTUzOGQwYjUxNzg0N2M2M2RkODdlYjQ4OGUzYzRmZjY5MDEyOGNlNjhhODI4ZjRiZWJiNzg5YTZkNjE0Y2ExMTEyMjAyYTI4NDJhNmUwNDgxNGI0YWRkNWJlNTdmOGZkNWQ3ZGE2NWRiZDVkYjZhZTkyODVkNzZlYmMwZDliMzE4ODdhEhkKE2lzc3VpbmdNaW5pbmdSb3VuZHMSAmoAEhUKD3ZhbGlkYXRvclJpZ2h0cxICagASZAoGc2VuZGVyElo6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgSrwIKB291dHB1dHMSowJaoAIKnQJymgIKZgpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGg5UcmFuc2Zlck91dHB1dBJxCghyZWNlaXZlchJlOmNyYXZpLWRlbW8tcGFydHktdHhuLTAxLXRhcHBlcjo6MTIyMGVhN2FiNWE3MjNmOGE2YjIwNzhlNjE3ZTZjNThjYjdlNzhlNDk5NDdkZGMyMzllMWE5NDFhYTU2ZTZiYTA4YjQSIgoQcmVjZWl2ZXJGZWVSYXRpbxIOMgwwLjAwMDAwMDAwMDASGQoGYW1vdW50Eg8yDTUwLjAwMDAwMDAwMDASXgoLZXhwZWN0ZWREc28ST1JNCks6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWFiATNqlgFykwEKdQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGh1BbXVsZXRSdWxlc19Db21wdXRlRmVlc1Jlc3VsdBIaCgRmZWVzEhJaEAoOMgwwLjAwMDAwMDAwMDAa9QUKATfCPu4FEusFCgMyLjESigEwMGJjMDJkMmY1MDI4ZDAwMTBkYmQ3M2QzNDU4ZGQ5YjgyNzBlZDBlOGJmZGZiZTU5NDc3MWI4YzVjOWE3Y2MwNmJjYTExMTIyMDNkM2FiOWFhYTJmNTY2ZjFhYzRiNzkzMGVjY2MzMWY3OGVlOTI4ZTMzNWI1OTQwMjYxOGMwMGQ4NTE1MGVlNDcaDXNwbGljZS1hbXVsZXQiWQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkFtdWxldBoGQW11bGV0KklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhKlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4MklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4OklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhOlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4GqAdCgEwwj6ZHRqWHQoDMi4xEooBMDA5ZjAwZTViZjAwNjQwMTE4ZDg0OTA4MGFhZjIyYmM5NjNhODQ1OGQzMjI1ODVjZWJmMTExOWNiN2JmMzdhOTU1Y2ExMTEyMjA2NWI3NzVmYjhhNDE5OTkwNGVkMzJmYTkyNzdmZDljMGU4MmJiODIzMTlhNzE1MTI0OWRmMTI0MTgyMDcyMzgxGg1zcGxpY2UtYW11bGV0In0KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESH1NwbGljZS5FeHRlcm5hbFBhcnR5QW11bGV0UnVsZXMaGEV4dGVybmFsUGFydHlBbXVsZXRSdWxlcypJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OEJ7CkA1NWJhNGRlYjBhZDQ2NjJjNDE2OGIzOTg1OTczOGEwZTkxMzg4ZDI1MjI4NjQ4MGM3MzMxYjNmNzFhNTE3MjgxEiZTcGxpY2UuQXBpLlRva2VuLlRyYW5zZmVySW5zdHJ1Y3Rpb25WMRoPVHJhbnNmZXJGYWN0b3J5ShhUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXJSkBFyjREKhAEKQDU1YmE0ZGViMGFkNDY2MmM0MTY4YjM5ODU5NzM4YTBlOTEzODhkMjUyMjg2NDgwYzczMzFiM2Y3MWE1MTcyODESJlNwbGljZS5BcGkuVG9rZW4uVHJhbnNmZXJJbnN0cnVjdGlvblYxGhhUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXISXAoNZXhwZWN0ZWRBZG1pbhJLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhEswHCgh0cmFuc2ZlchK/B3K8Bwp0CkA1NWJhNGRlYjBhZDQ2NjJjNDE2OGIzOTg1OTczOGEwZTkxMzg4ZDI1MjI4NjQ4MGM3MzMxYjNmNzFhNTE3MjgxEiZTcGxpY2UuQXBpLlRva2VuLlRyYW5zZmVySW5zdHJ1Y3Rpb25WMRoIVHJhbnNmZXISZAoGc2VuZGVyElo6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgScQoIcmVjZWl2ZXISZTpjcmF2aS1kZW1vLXBhcnR5LXR4bi0wMS10YXBwZXI6OjEyMjBlYTdhYjVhNzIzZjhhNmIyMDc4ZTYxN2U2YzU4Y2I3ZTc4ZTQ5OTQ3ZGRjMjM5ZTFhOTQxYWE1NmU2YmEwOGI0EhkKBmFtb3VudBIPMg01MC4wMDAwMDAwMDAwEugBCgxpbnN0cnVtZW50SWQS1wFy1AEKbApANzE4YTBmNzdlNTA1YThkZTIyZjE4OGJkNGM4N2ZlNzQxMDEyNzRlOWQ0Y2IxYmZhYzdkMDlhZWM3MTU4ZDM1YhIaU3BsaWNlLkFwaS5Ub2tlbi5Ib2xkaW5nVjEaDEluc3RydW1lbnRJZBJUCgVhZG1pbhJLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhEg4KAmlkEghCBkFtdWxldBIYCgtyZXF1ZXN0ZWRBdBIJKemndba4QAYAEhoKDWV4ZWN1dGVCZWZvcmUSCSnp86o54UAGABKoAQoQaW5wdXRIb2xkaW5nQ2lkcxKTAVqQAQqNAUqKATAwYmMwMmQyZjUwMjhkMDAxMGRiZDczZDM0NThkZDliODI3MGVkMGU4YmZkZmJlNTk0NzcxYjhjNWM5YTdjYzA2YmNhMTExMjIwM2QzYWI5YWFhMmY1NjZmMWFjNGI3OTMwZWNjYzMxZjc4ZWU5MjhlMzM1YjU5NDAyNjE4YzAwZDg1MTUwZWU0NxKDAQoEbWV0YRJ7cnkKaQpANGRlZDZiNjY4Y2IzYjY0ZjdhODhhMzA4NzRjZDQxYzc1ODI5ZjVlMDY0YjNmYmJhZGY0MWVjN2U4MzYzMzU0ZhIbU3BsaWNlLkFwaS5Ub2tlbi5NZXRhZGF0YVYxGghNZXRhZGF0YRIMCgZ2YWx1ZXMSAmIAEtYHCglleHRyYUFyZ3MSyAdyxQcKagpANGRlZDZiNjY4Y2IzYjY0ZjdhODhhMzA4NzRjZDQxYzc1ODI5ZjVlMDY0YjNmYmJhZGY0MWVjN2U4MzYzMzU0ZhIbU3BsaWNlLkFwaS5Ub2tlbi5NZXRhZGF0YVYxGglFeHRyYUFyZ3MS0AUKB2NvbnRleHQSxAVywQUKbgpANGRlZDZiNjY4Y2IzYjY0ZjdhODhhMzA4NzRjZDQxYzc1ODI5ZjVlMDY0YjNmYmJhZGY0MWVjN2U4MzYzMzU0ZhIbU3BsaWNlLkFwaS5Ub2tlbi5NZXRhZGF0YVYxGg1DaG9pY2VDb250ZXh0Es4ECgZ2YWx1ZXMSwwRiwAQKngIKDGFtdWxldC1ydWxlcxKNAnqKAgppCkA0ZGVkNmI2NjhjYjNiNjRmN2E4OGEzMDg3NGNkNDFjNzU4MjlmNWUwNjRiM2ZiYmFkZjQxZWM3ZTgzNjMzNTRmEhtTcGxpY2UuQXBpLlRva2VuLk1ldGFkYXRhVjEaCEFueVZhbHVlEg1BVl9Db250cmFjdElkGo0BSooBMDAzYjkwMzA0NzlhMWVhNTBiNDIwNzI1YzQxMGI2NGM0NjA5YjY0YWI0OTk2ZGU3MDdlZjk5YTYyY2ZhMDlmOTA3Y2ExMTEyMjBhMGJjZjY0ZTczYmIzYWUzN2QwZmY4Y2ZlMmVkMjM1NDY2Y2JlZGNjYTY1YmY0YmI4M2QxYmQ4OWYzNDMzOWY0CpwCCgpvcGVuLXJvdW5kEo0CeooCCmkKQDRkZWQ2YjY2OGNiM2I2NGY3YTg4YTMwODc0Y2Q0MWM3NTgyOWY1ZTA2NGIzZmJiYWRmNDFlYzdlODM2MzM1NGYSG1NwbGljZS5BcGkuVG9rZW4uTWV0YWRhdGFWMRoIQW55VmFsdWUSDUFWX0NvbnRyYWN0SWQajQFKigEwMDNhYmZlNTM4ZDBiNTE3ODQ3YzYzZGQ4N2ViNDg4ZTNjNGZmNjkwMTI4Y2U2OGE4MjhmNGJlYmI3ODlhNmQ2MTRjYTExMTIyMDJhMjg0MmE2ZTA0ODE0YjRhZGQ1YmU1N2Y4ZmQ1ZDdkYTY1ZGJkNWRiNmFlOTI4NWQ3NmViYzBkOWIzMTg4N2ESgwEKBG1ldGESe3J5CmkKQDRkZWQ2YjY2OGNiM2I2NGY3YTg4YTMwODc0Y2Q0MWM3NTgyOWY1ZTA2NGIzZmJiYWRmNDFlYzdlODM2MzM1NGYSG1NwbGljZS5BcGkuVG9rZW4uTWV0YWRhdGFWMRoITWV0YWRhdGESDAoGdmFsdWVzEgJiAGIBMWIBMmIBNGIBNWICMTFqyQZyxgYKhQEKQDU1YmE0ZGViMGFkNDY2MmM0MTY4YjM5ODU5NzM4YTBlOTEzODhkMjUyMjg2NDgwYzczMzFiM2Y3MWE1MTcyODESJlNwbGljZS5BcGkuVG9rZW4uVHJhbnNmZXJJbnN0cnVjdGlvblYxGhlUcmFuc2Zlckluc3RydWN0aW9uUmVzdWx0EtcDCgZvdXRwdXQSzAN6yQMKjAEKQDU1YmE0ZGViMGFkNDY2MmM0MTY4YjM5ODU5NzM4YTBlOTEzODhkMjUyMjg2NDgwYzczMzFiM2Y3MWE1MTcyODESJlNwbGljZS5BcGkuVG9rZW4uVHJhbnNmZXJJbnN0cnVjdGlvblYxGiBUcmFuc2Zlckluc3RydWN0aW9uUmVzdWx0X091dHB1dBIhVHJhbnNmZXJJbnN0cnVjdGlvblJlc3VsdF9QZW5kaW5nGpQCcpECCq4BCkA1NWJhNGRlYjBhZDQ2NjJjNDE2OGIzOTg1OTczOGEwZTkxMzg4ZDI1MjI4NjQ4MGM3MzMxYjNmNzFhNTE3MjgxEiZTcGxpY2UuQXBpLlRva2VuLlRyYW5zZmVySW5zdHJ1Y3Rpb25WMRpCVHJhbnNmZXJJbnN0cnVjdGlvblJlc3VsdF9PdXRwdXQuVHJhbnNmZXJJbnN0cnVjdGlvblJlc3VsdF9QZW5kaW5nEl4KFnRyYW5zZmVySW5zdHJ1Y3Rpb25DaWQSREpCMDBjNWJkZWU1YjkxNDY3YjZkMDZjYmYzNGI0NjQzYmUxMDk4MzhhY2MwOWNmOWFjOWVkNDI5ZmFmYWM5NmJiOTFmElwKEHNlbmRlckNoYW5nZUNpZHMSSFpGCkRKQjAwNzNkZDA0OTI2NTQzMDVjYTYxODM5ZTNjNWIxMzQzMDc3YTE4OTE5MjliNmVhODQxMDI0N2Q2YTM2MDcwNGM4NhKDAQoEbWV0YRJ7cnkKaQpANGRlZDZiNjY4Y2IzYjY0ZjdhODhhMzA4NzRjZDQxYzc1ODI5ZjVlMDY0YjNmYmJhZGY0MWVjN2U4MzYzMzU0ZhIbU3BsaWNlLkFwaS5Ub2tlbi5NZXRhZGF0YVYxGghNZXRhZGF0YRIMCgZ2YWx1ZXMSAmIAGpsNCgE5wj6UDQqRDQoDMi4xEkIwMGQ3ZTI3OTM0Mzc5YWMzZDI4NTljNzM1OGU2YTYxYzA2YWI3ZmY2ZDI4ZGQwYTMyNTFjNDY1Mzg4ZjY5ZGI2MWYaDXNwbGljZS1hbXVsZXQiXwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkFtdWxldBoMTG9ja2VkQW11bGV0KosJcogJCl8KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDVNwbGljZS5BbXVsZXQaDExvY2tlZEFtdWxldBK8BQoGYW11bGV0ErEFcq4FClkKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDVNwbGljZS5BbXVsZXQaBkFtdWxldBJSCgNkc28SSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRJjCgVvd25lchJaOlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4EpcDCgZhbW91bnQSjANyiQMKXwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRILU3BsaWNlLkZlZXMaDkV4cGlyaW5nQW1vdW50EiAKDWluaXRpYWxBbW91bnQSDzINNTAuMDAwMDAwMDAwMBJ4CgljcmVhdGVkQXQSa3JpClcKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDFNwbGljZS5UeXBlcxoFUm91bmQSDgoGbnVtYmVyEgQY5tgBEokBCgxyYXRlUGVyUm91bmQSeXJ3Cl0KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGgxSYXRlUGVyUm91bmQSFgoEcmF0ZRIOMgwwLjAwMDIwMDI3MjYS5QIKBGxvY2sS3AJy2QIKWwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkV4cGlyeRoIVGltZUxvY2sSWgoHaG9sZGVycxJPWk0KSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRIWCglleHBpcmVzQXQSCSnp86o54UAGABKFAQoKb3B0Q29udGV4dBJ3UnUKc0JxdHJhbnNmZXIgdG8gJ3JhdmktZGVtby1wYXJ0eS10eG4tMDEtdGFwcGVyOjoxMjIwZWE3YWI1YTcyM2Y4YTZiMjA3OGU2MTdlNmM1OGNiN2U3OGU0OTk0N2RkYzIzOWUxYTk0MWFhNTZlNmJhMDhiNCcySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEyWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTg6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgagSEKATXCPvogGvcgCgMyLjESigEwMDNiOTAzMDQ3OWExZWE1MGI0MjA3MjVjNDEwYjY0YzQ2MDliNjRhYjQ5OTZkZTcwN2VmOTlhNjJjZmEwOWY5MDdjYTExMTIyMGEwYmNmNjRlNzNiYjNhZTM3ZDBmZjhjZmUyZWQyMzU0NjZjYmVkY2NhNjViZjRiYjgzZDFiZDg5ZjM0MzM5ZjQaDXNwbGljZS1hbXVsZXQiYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGgtBbXVsZXRSdWxlcypJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OEoUQW11bGV0UnVsZXNfVHJhbnNmZXJSlQ5ykg4KbApAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGhRBbXVsZXRSdWxlc19UcmFuc2ZlchLwCQoIdHJhbnNmZXIS4wly4AkKYApAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGghUcmFuc2ZlchJkCgZzZW5kZXISWjpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OBJmCghwcm92aWRlchJaOlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4EpgCCgZpbnB1dHMSjQJaigIKhwJ6hAIKZQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGg1UcmFuc2ZlcklucHV0EgtJbnB1dEFtdWxldBqNAUqKATAwYmMwMmQyZjUwMjhkMDAxMGRiZDczZDM0NThkZDliODI3MGVkMGU4YmZkZmJlNTk0NzcxYjhjNWM5YTdjYzA2YmNhMTExMjIwM2QzYWI5YWFhMmY1NjZmMWFjNGI3OTMwZWNjYzMxZjc4ZWU5MjhlMzM1YjU5NDAyNjE4YzAwZDg1MTUwZWU0NxKSBQoHb3V0cHV0cxKGBVqDBQqABXL9BApmCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaDlRyYW5zZmVyT3V0cHV0EmYKCHJlY2VpdmVyElo6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgSIgoQcmVjZWl2ZXJGZWVSYXRpbxIOMgwwLjAwMDAwMDAwMDASGQoGYW1vdW50Eg8yDTUwLjAwMDAwMDAwMDAS6wIKBGxvY2sS4gJS3wIK3AJy2QIKWwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRINU3BsaWNlLkV4cGlyeRoIVGltZUxvY2sSWgoHaG9sZGVycxJPWk0KSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRIWCglleHBpcmVzQXQSCSnp86o54UAGABKFAQoKb3B0Q29udGV4dBJ3UnUKc0JxdHJhbnNmZXIgdG8gJ3JhdmktZGVtby1wYXJ0eS10eG4tMDEtdGFwcGVyOjoxMjIwZWE3YWI1YTcyM2Y4YTZiMjA3OGU2MTdlNmM1OGNiN2U3OGU0OTk0N2RkYzIzOWUxYTk0MWFhNTZlNmJhMDhiNCcSzgIKB2NvbnRleHQSwgJyvwIKZwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGg9UcmFuc2ZlckNvbnRleHQSoQEKD29wZW5NaW5pbmdSb3VuZBKNAUqKATAwM2FiZmU1MzhkMGI1MTc4NDdjNjNkZDg3ZWI0ODhlM2M0ZmY2OTAxMjhjZTY4YTgyOGY0YmViYjc4OWE2ZDYxNGNhMTExMjIwMmEyODQyYTZlMDQ4MTRiNGFkZDViZTU3ZjhmZDVkN2RhNjVkYmQ1ZGI2YWU5Mjg1ZDc2ZWJjMGQ5YjMxODg3YRIZChNpc3N1aW5nTWluaW5nUm91bmRzEgJqABIVCg92YWxpZGF0b3JSaWdodHMSAmoAEl4KC2V4cGVjdGVkRHNvEk9STQpLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhYgE2YgE3YgE4YgE5YgIxMGr1DXLyDQpmCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaDlRyYW5zZmVyUmVzdWx0EnQKBXJvdW5kEmtyaQpXCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgxTcGxpY2UuVHlwZXMaBVJvdW5kEg4KBm51bWJlchIEGObYARL6BgoHc3VtbWFyeRLuBnLrBgpnCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaD1RyYW5zZmVyU3VtbWFyeRImChRpbnB1dEFwcFJld2FyZEFtb3VudBIOMgwwLjAwMDAwMDAwMDASLAoaaW5wdXRWYWxpZGF0b3JSZXdhcmRBbW91bnQSDjIMMC4wMDAwMDAwMDAwEiUKE2lucHV0U3ZSZXdhcmRBbW91bnQSDjIMMC4wMDAwMDAwMDAwEiYKEWlucHV0QW11bGV0QW1vdW50EhEyDzEwMDAuMDAwMDAwMDAwMBLDAgoOYmFsYW5jZUNoYW5nZXMSsAJqrQIKqgIKWjpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OBLLAXLIAQplCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaDUJhbGFuY2VDaGFuZ2USNAoiY2hhbmdlVG9Jbml0aWFsQW1vdW50QXNPZlJvdW5kWmVybxIOMgwyLjc3OTk4Mzk2MDYSKQoXY2hhbmdlVG9Ib2xkaW5nRmVlc1JhdGUSDjIMMC4wMDAyMDAyNzI2Eh0KC2hvbGRpbmdGZWVzEg4yDDAuMDAwMDAwMDAwMBIgCgpvdXRwdXRGZWVzEhJaEAoOMgwwLjAwMDAwMDAwMDASIQoPc2VuZGVyQ2hhbmdlRmVlEg4yDDAuMDAwMDAwMDAwMBImChJzZW5kZXJDaGFuZ2VBbW91bnQSEDIOOTUwLjAwMDAwMDAwMDASHQoLYW11bGV0UHJpY2USDjIMMC4wOTUwMDAwMDAwEjAKGmlucHV0VmFsaWRhdG9yRmF1Y2V0QW1vdW50EhJSEAoOMgwwLjAwMDAwMDAwMDASOAoiaW5wdXRVbmNsYWltZWRBY3Rpdml0eVJlY29yZEFtb3VudBISUhAKDjIMMC4wMDAwMDAwMDAwEuUBCg5jcmVhdGVkQW11bGV0cxLSAVrPAQrMAXrJAQplCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhJTcGxpY2UuQW11bGV0UnVsZXMaDUNyZWF0ZWRBbXVsZXQSGlRyYW5zZmVyUmVzdWx0TG9ja2VkQW11bGV0GkRKQjAwZDdlMjc5MzQzNzlhYzNkMjg1OWM3MzU4ZTZhNjFjMDZhYjdmZjZkMjhkZDBhMzI1MWM0NjUzODhmNjlkYjYxZhJeChJzZW5kZXJDaGFuZ2VBbXVsZXQSSFJGCkRKQjAwNzNkZDA0OTI2NTQzMDVjYTYxODM5ZTNjNWIxMzQzMDc3YTE4OTE5MjliNmVhODQxMDI0N2Q2YTM2MDcwNGM4NhLMAgoEbWV0YRLDAlLAAgq9AnK6AgppCkA0ZGVkNmI2NjhjYjNiNjRmN2E4OGEzMDg3NGNkNDFjNzU4MjlmNWUwNjRiM2ZiYmFkZjQxZWM3ZTgzNjMzNTRmEhtTcGxpY2UuQXBpLlRva2VuLk1ldGFkYXRhVjEaCE1ldGFkYXRhEswBCgZ2YWx1ZXMSwQFivgEKhAEKJnNwbGljZS5sZmRlY2VudHJhbGl6ZWR0cnVzdC5vcmcvc2VuZGVyElpCWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTgKNQonc3BsaWNlLmxmZGVjZW50cmFsaXplZHRydXN0Lm9yZy90eC1raW5kEgpCCHRyYW5zZmVyIiISIF3UMbLHNDZFwYbbTSkF0Mqj0jaj/7clw4U1rQzFfvRGIiQIAhIgySalmynaOg5HTwNUEjM5bGa1u9XlUGABNmCtRNeWzskiJAgFEiANaOJaZBzr1jLdnsigIlppJR+opSDaKrWrj3eMRnGpHiIkCAgSIIrEze1HbnjoTJPNyKAuDkPQ6txcBKTB7FKi2ptOKsmdIiQICRIg2X1YghNLdq8C425o8+asBwFGGB+gt9WvbGgsR0QvRJQiJAgKEiBTO7ltnV2coPon5skGGPQKU888lUF384hT/gURUn+ACiIkCAsSIDUT5/KxjPqvwj+ozTTiH7FrzkQhXyeRK02th/6SfbibEv97EoABClh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4EiQ3YWRkNDZjMi1jZGI2LTRlZjktYTk4ZS0xZjIxN2YyYzYwMzkaU2dsb2JhbC1kb21haW46OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhKiRkMDRkOTcyOS0xZTYxLTRjOWYtODZjOS05MTI3ZjM2ZWIwNmMw/KWeiJCXkAM68hwKtRUKAzIuMRKKATAwM2FiZmU1MzhkMGI1MTc4NDdjNjNkZDg3ZWI0ODhlM2M0ZmY2OTAxMjhjZTY4YTgyOGY0YmViYjc4OWE2ZDYxNGNhMTExMjIwMmEyODQyYTZlMDQ4MTRiNGFkZDViZTU3ZjhmZDVkN2RhNjVkYmQ1ZGI2YWU5Mjg1ZDc2ZWJjMGQ5YjMxODg3YRoNc3BsaWNlLWFtdWxldCJhCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgxTcGxpY2UuUm91bmQaD09wZW5NaW5pbmdSb3VuZCqYEnKVEgphCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgxTcGxpY2UuUm91bmQaD09wZW5NaW5pbmdSb3VuZBJSCgNkc28SSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRJ0CgVyb3VuZBJrcmkKVwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIMU3BsaWNlLlR5cGVzGgVSb3VuZBIOCgZudW1iZXISBBjm2AESHQoLYW11bGV0UHJpY2USDjIMMC4wOTUwMDAwMDAwEhQKB29wZW5zQXQSCSnpp3W2uEAGABIbCg50YXJnZXRDbG9zZXNBdBIJKekz/P24QAYAEoYBCgppc3N1aW5nRm9yEnhydgpaCkBiNzBkYjgzNjllMWM0NjFkNWM3MGYxYzg2ZjUyNmEyOWU5Nzc2YzY1NWU2ZmZjMjU2MGY5NWIwNWNjYjhiOTQ2Eg1EQS5UaW1lLlR5cGVzGgdSZWxUaW1lEhgKDG1pY3Jvc2Vjb25kcxIIGIDI14rK5AMS0gkKEXRyYW5zZmVyQ29uZmlnVXNkErwJcrkJCmcKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESE1NwbGljZS5BbXVsZXRDb25maWcaDlRyYW5zZmVyQ29uZmlnEoEBCgljcmVhdGVGZWUSdHJyClkKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGghGaXhlZEZlZRIVCgNmZWUSDjIMMC4wMDAwMDAwMDAwEocBCgpob2xkaW5nRmVlEnlydwpdCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgtTcGxpY2UuRmVlcxoMUmF0ZVBlclJvdW5kEhYKBHJhdGUSDjIMMC4wMDAwMTkwMjU5EsMECgt0cmFuc2ZlckZlZRKzBHKwBApcCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgtTcGxpY2UuRmVlcxoLU3RlcHBlZFJhdGUSHQoLaW5pdGlhbFJhdGUSDjIMMC4wMDAwMDAwMDAwErADCgVzdGVwcxKmA1qjAwqHAXKEAQpUCkA1YWVlOWIyMWI4ZTlhNGM0OTc1YjVmNGM0MTk4ZTZlNmU4NDY5ZGY0OWUyMDEwODIwZTc5MmYzOTNkYjg3MGY0EghEQS5UeXBlcxoGVHVwbGUyEhYKAl8xEhAyDjEwMC4wMDAwMDAwMDAwEhQKAl8yEg4yDDAuMDAwMDAwMDAwMAqIAXKFAQpUCkA1YWVlOWIyMWI4ZTlhNGM0OTc1YjVmNGM0MTk4ZTZlNmU4NDY5ZGY0OWUyMDEwODIwZTc5MmYzOTNkYjg3MGY0EghEQS5UeXBlcxoGVHVwbGUyEhcKAl8xEhEyDzEwMDAuMDAwMDAwMDAwMBIUCgJfMhIOMgwwLjAwMDAwMDAwMDAKiwFyiAEKVApANWFlZTliMjFiOGU5YTRjNDk3NWI1ZjRjNDE5OGU2ZTZlODQ2OWRmNDllMjAxMDgyMGU3OTJmMzkzZGI4NzBmNBIIREEuVHlwZXMaBlR1cGxlMhIaCgJfMRIUMhIxMDAwMDAwLjAwMDAwMDAwMDASFAoCXzISDjIMMC4wMDAwMDAwMDAwEoUBCg1sb2NrSG9sZGVyRmVlEnRycgpZCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgtTcGxpY2UuRmVlcxoIRml4ZWRGZWUSFQoDZmVlEg4yDDAuMDAwMDAwMDAwMBIuChxleHRyYUZlYXR1cmVkQXBwUmV3YXJkQW1vdW50Eg4yDDEuMDAwMDAwMDAwMBITCgxtYXhOdW1JbnB1dHMSAxjIARIUCg1tYXhOdW1PdXRwdXRzEgMYyAESFwoRbWF4TnVtTG9ja0hvbGRlcnMSAhhkEqwDCg5pc3N1YW5jZUNvbmZpZxKZA3KWAwpjCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEg9TcGxpY2UuSXNzdWFuY2UaDklzc3VhbmNlQ29uZmlnEjAKFGFtdWxldFRvSXNzdWVQZXJZZWFyEhgyFjQwMDAwMDAwMDAwLjAwMDAwMDAwMDASKwoZdmFsaWRhdG9yUmV3YXJkUGVyY2VudGFnZRIOMgwwLjA1MDAwMDAwMDASJQoTYXBwUmV3YXJkUGVyY2VudGFnZRIOMgwwLjE1MDAwMDAwMDASJAoSdmFsaWRhdG9yUmV3YXJkQ2FwEg4yDDAuMjAwMDAwMDAwMBIqChRmZWF0dXJlZEFwcFJld2FyZENhcBISMhAyMDAwMC4wMDAwMDAwMDAwEigKFnVuZmVhdHVyZWRBcHBSZXdhcmRDYXASDjIMMC42MDAwMDAwMDAwEi0KFW9wdFZhbGlkYXRvckZhdWNldENhcBIUUhIKEDIONTcwLjAwMDAwMDAwMDAShgEKDHRpY2tEdXJhdGlvbhJ2cnQKWgpAYjcwZGI4MzY5ZTFjNDYxZDVjNzBmMWM4NmY1MjZhMjllOTc3NmM2NTVlNmZmYzI1NjBmOTViMDVjY2I4Yjk0NhINREEuVGltZS5UeXBlcxoHUmVsVGltZRIWCgxtaWNyb3NlY29uZHMSBhiAmJq8BDJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYcA+6cPJlYmXkAPSPqwHCgMyLjESpAcKRQA6v+U40LUXhHxj3YfrSI48T/aQEozmioKPS+u3iabWFMoREiAqKEKm4EgUtK3Vvlf4/V19pl29XbaukoXXbrwNmzGIehINc3BsaWNlLWFtdWxldBpiCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEgZTcGxpY2USBVJvdW5kGg9PcGVuTWluaW5nUm91bmQi5wRq5AQKTQpLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhCgwKCmoICgYKBBjm2AEKEAoOMgwwLjA5NTAwMDAwMDAKCwoJKemndba4QAYACgsKCSnpM/z9uEAGAAoQCg5qDAoKCggYgMjXisrkAwqbAgqYAmqVAgoWChRqEgoQCg4yDDAuMDAwMDAwMDAwMAoWChRqEgoQCg4yDDAuMDAwMDE5MDI1OQqkAQqhAWqeAQoQCg4yDDAuMDAwMDAwMDAwMAqJAQqGAVqDAQooaiYKEgoQMg4xMDAuMDAwMDAwMDAwMAoQCg4yDDAuMDAwMDAwMDAwMAopaicKEwoRMg8xMDAwLjAwMDAwMDAwMDAKEAoOMgwwLjAwMDAwMDAwMDAKLGoqChYKFDISMTAwMDAwMC4wMDAwMDAwMDAwChAKDjIMMC4wMDAwMDAwMDAwChYKFGoSChAKDjIMMC4wMDAwMDAwMDAwChAKDjIMMS4wMDAwMDAwMDAwCgUKAxjIAQoFCgMYyAEKBAoCGGQKmAEKlQFqkgEKGgoYMhY0MDAwMDAwMDAwMC4wMDAwMDAwMDAwChAKDjIMMC4wNTAwMDAwMDAwChAKDjIMMC4xNTAwMDAwMDAwChAKDjIMMC4yMDAwMDAwMDAwChQKEjIQMjAwMDAuMDAwMDAwMDAwMAoQCg4yDDAuNjAwMDAwMDAwMAoWChRSEgoQMg41NzAuMDAwMDAwMDAwMAoOCgxqCgoICgYYgJiavAQqSURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE56WGykrhABgBCKgomCiQIARIgtT9saRZa34xXgKpJVjpDkY8gRT/OuBVESf5hjY7c70sQHjqCRQqbNQoDMi4xEooBMDAzYjkwMzA0NzlhMWVhNTBiNDIwNzI1YzQxMGI2NGM0NjA5YjY0YWI0OTk2ZGU3MDdlZjk5YTYyY2ZhMDlmOTA3Y2ExMTEyMjBhMGJjZjY0ZTczYmIzYWUzN2QwZmY4Y2ZlMmVkMjM1NDY2Y2JlZGNjYTY1YmY0YmI4M2QxYmQ4OWYzNDMzOWY0Gg1zcGxpY2UtYW11bGV0ImMKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESElNwbGljZS5BbXVsZXRSdWxlcxoLQW11bGV0UnVsZXMq/DFy+TEKYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRISU3BsaWNlLkFtdWxldFJ1bGVzGgtBbXVsZXRSdWxlcxJSCgNkc28SSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYRKtMAoOY29uZmlnU2NoZWR1bGUSmjBylzAKXQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLlNjaGVkdWxlGghTY2hlZHVsZRKhLwoMaW5pdGlhbFZhbHVlEpAvco0vCmUKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESE1NwbGljZS5BbXVsZXRDb25maWcaDEFtdWxldENvbmZpZxLPCQoOdHJhbnNmZXJDb25maWcSvAlyuQkKZwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRITU3BsaWNlLkFtdWxldENvbmZpZxoOVHJhbnNmZXJDb25maWcSgQEKCWNyZWF0ZUZlZRJ0cnIKWQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRILU3BsaWNlLkZlZXMaCEZpeGVkRmVlEhUKA2ZlZRIOMgwwLjAwMDAwMDAwMDAShwEKCmhvbGRpbmdGZWUSeXJ3Cl0KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGgxSYXRlUGVyUm91bmQSFgoEcmF0ZRIOMgwwLjAwMDAxOTAyNTkSwwQKC3RyYW5zZmVyRmVlErMEcrAEClwKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGgtTdGVwcGVkUmF0ZRIdCgtpbml0aWFsUmF0ZRIOMgwwLjAwMDAwMDAwMDASsAMKBXN0ZXBzEqYDWqMDCocBcoQBClQKQDVhZWU5YjIxYjhlOWE0YzQ5NzViNWY0YzQxOThlNmU2ZTg0NjlkZjQ5ZTIwMTA4MjBlNzkyZjM5M2RiODcwZjQSCERBLlR5cGVzGgZUdXBsZTISFgoCXzESEDIOMTAwLjAwMDAwMDAwMDASFAoCXzISDjIMMC4wMDAwMDAwMDAwCogBcoUBClQKQDVhZWU5YjIxYjhlOWE0YzQ5NzViNWY0YzQxOThlNmU2ZTg0NjlkZjQ5ZTIwMTA4MjBlNzkyZjM5M2RiODcwZjQSCERBLlR5cGVzGgZUdXBsZTISFwoCXzESETIPMTAwMC4wMDAwMDAwMDAwEhQKAl8yEg4yDDAuMDAwMDAwMDAwMAqLAXKIAQpUCkA1YWVlOWIyMWI4ZTlhNGM0OTc1YjVmNGM0MTk4ZTZlNmU4NDY5ZGY0OWUyMDEwODIwZTc5MmYzOTNkYjg3MGY0EghEQS5UeXBlcxoGVHVwbGUyEhoKAl8xEhQyEjEwMDAwMDAuMDAwMDAwMDAwMBIUCgJfMhIOMgwwLjAwMDAwMDAwMDAShQEKDWxvY2tIb2xkZXJGZWUSdHJyClkKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGghGaXhlZEZlZRIVCgNmZWUSDjIMMC4wMDAwMDAwMDAwEi4KHGV4dHJhRmVhdHVyZWRBcHBSZXdhcmRBbW91bnQSDjIMMS4wMDAwMDAwMDAwEhMKDG1heE51bUlucHV0cxIDGMgBEhQKDW1heE51bU91dHB1dHMSAxjIARIXChFtYXhOdW1Mb2NrSG9sZGVycxICGGQSsxgKDWlzc3VhbmNlQ3VydmUSoRhynhgKXQpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLlNjaGVkdWxlGghTY2hlZHVsZRKqAwoMaW5pdGlhbFZhbHVlEpkDcpYDCmMKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESD1NwbGljZS5Jc3N1YW5jZRoOSXNzdWFuY2VDb25maWcSMAoUYW11bGV0VG9Jc3N1ZVBlclllYXISGDIWNDAwMDAwMDAwMDAuMDAwMDAwMDAwMBIrChl2YWxpZGF0b3JSZXdhcmRQZXJjZW50YWdlEg4yDDAuMDUwMDAwMDAwMBIlChNhcHBSZXdhcmRQZXJjZW50YWdlEg4yDDAuMTUwMDAwMDAwMBIkChJ2YWxpZGF0b3JSZXdhcmRDYXASDjIMMC4yMDAwMDAwMDAwEioKFGZlYXR1cmVkQXBwUmV3YXJkQ2FwEhIyEDIwMDAwLjAwMDAwMDAwMDASKAoWdW5mZWF0dXJlZEFwcFJld2FyZENhcBIOMgwwLjYwMDAwMDAwMDASLQoVb3B0VmFsaWRhdG9yRmF1Y2V0Q2FwEhRSEgoQMg41NzAuMDAwMDAwMDAwMBKPFAoMZnV0dXJlVmFsdWVzEv4TWvsTCvwEcvkEClQKQDVhZWU5YjIxYjhlOWE0YzQ5NzViNWY0YzQxOThlNmU2ZTg0NjlkZjQ5ZTIwMTA4MjBlNzkyZjM5M2RiODcwZjQSCERBLlR5cGVzGgZUdXBsZTISfgoCXzESeHJ2CloKQGI3MGRiODM2OWUxYzQ2MWQ1YzcwZjFjODZmNTI2YTI5ZTk3NzZjNjU1ZTZmZmMyNTYwZjk1YjA1Y2NiOGI5NDYSDURBLlRpbWUuVHlwZXMaB1JlbFRpbWUSGAoMbWljcm9zZWNvbmRzEggYgMDP4OiVBxKgAwoCXzISmQNylgMKYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLklzc3VhbmNlGg5Jc3N1YW5jZUNvbmZpZxIwChRhbXVsZXRUb0lzc3VlUGVyWWVhchIYMhYyMDAwMDAwMDAwMC4wMDAwMDAwMDAwEisKGXZhbGlkYXRvclJld2FyZFBlcmNlbnRhZ2USDjIMMC4xMjAwMDAwMDAwEiUKE2FwcFJld2FyZFBlcmNlbnRhZ2USDjIMMC40MDAwMDAwMDAwEiQKEnZhbGlkYXRvclJld2FyZENhcBIOMgwwLjIwMDAwMDAwMDASKgoUZmVhdHVyZWRBcHBSZXdhcmRDYXASEjIQMjAwMDAuMDAwMDAwMDAwMBIoChZ1bmZlYXR1cmVkQXBwUmV3YXJkQ2FwEg4yDDAuNjAwMDAwMDAwMBItChVvcHRWYWxpZGF0b3JGYXVjZXRDYXASFFISChAyDjU3MC4wMDAwMDAwMDAwCvwEcvkEClQKQDVhZWU5YjIxYjhlOWE0YzQ5NzViNWY0YzQxOThlNmU2ZTg0NjlkZjQ5ZTIwMTA4MjBlNzkyZjM5M2RiODcwZjQSCERBLlR5cGVzGgZUdXBsZTISfgoCXzESeHJ2CloKQGI3MGRiODM2OWUxYzQ2MWQ1YzcwZjFjODZmNTI2YTI5ZTk3NzZjNjU1ZTZmZmMyNTYwZjk1YjA1Y2NiOGI5NDYSDURBLlRpbWUuVHlwZXMaB1JlbFRpbWUSGAoMbWljcm9zZWNvbmRzEggYgMDuobrBFRKgAwoCXzISmQNylgMKYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLklzc3VhbmNlGg5Jc3N1YW5jZUNvbmZpZxIwChRhbXVsZXRUb0lzc3VlUGVyWWVhchIYMhYxMDAwMDAwMDAwMC4wMDAwMDAwMDAwEisKGXZhbGlkYXRvclJld2FyZFBlcmNlbnRhZ2USDjIMMC4xODAwMDAwMDAwEiUKE2FwcFJld2FyZFBlcmNlbnRhZ2USDjIMMC42MjAwMDAwMDAwEiQKEnZhbGlkYXRvclJld2FyZENhcBIOMgwwLjIwMDAwMDAwMDASKgoUZmVhdHVyZWRBcHBSZXdhcmRDYXASEjIQMjAwMDAuMDAwMDAwMDAwMBIoChZ1bmZlYXR1cmVkQXBwUmV3YXJkQ2FwEg4yDDAuNjAwMDAwMDAwMBItChVvcHRWYWxpZGF0b3JGYXVjZXRDYXASFFISChAyDjU3MC4wMDAwMDAwMDAwCvsEcvgEClQKQDVhZWU5YjIxYjhlOWE0YzQ5NzViNWY0YzQxOThlNmU2ZTg0NjlkZjQ5ZTIwMTA4MjBlNzkyZjM5M2RiODcwZjQSCERBLlR5cGVzGgZUdXBsZTISfgoCXzESeHJ2CloKQGI3MGRiODM2OWUxYzQ2MWQ1YzcwZjFjODZmNTI2YTI5ZTk3NzZjNjU1ZTZmZmMyNTYwZjk1YjA1Y2NiOGI5NDYSDURBLlRpbWUuVHlwZXMaB1JlbFRpbWUSGAoMbWljcm9zZWNvbmRzEggYgICbxpfaRxKfAwoCXzISmANylQMKYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLklzc3VhbmNlGg5Jc3N1YW5jZUNvbmZpZxIvChRhbXVsZXRUb0lzc3VlUGVyWWVhchIXMhU1MDAwMDAwMDAwLjAwMDAwMDAwMDASKwoZdmFsaWRhdG9yUmV3YXJkUGVyY2VudGFnZRIOMgwwLjIxMDAwMDAwMDASJQoTYXBwUmV3YXJkUGVyY2VudGFnZRIOMgwwLjY5MDAwMDAwMDASJAoSdmFsaWRhdG9yUmV3YXJkQ2FwEg4yDDAuMjAwMDAwMDAwMBIqChRmZWF0dXJlZEFwcFJld2FyZENhcBISMhAyMDAwMC4wMDAwMDAwMDAwEigKFnVuZmVhdHVyZWRBcHBSZXdhcmRDYXASDjIMMC42MDAwMDAwMDAwEi0KFW9wdFZhbGlkYXRvckZhdWNldENhcBIUUhIKEDIONTcwLjAwMDAwMDAwMDAK/ARy+QQKVApANWFlZTliMjFiOGU5YTRjNDk3NWI1ZjRjNDE5OGU2ZTZlODQ2OWRmNDllMjAxMDgyMGU3OTJmMzkzZGI4NzBmNBIIREEuVHlwZXMaBlR1cGxlMhJ/CgJfMRJ5cncKWgpAYjcwZGI4MzY5ZTFjNDYxZDVjNzBmMWM4NmY1MjZhMjllOTc3NmM2NTVlNmZmYzI1NjBmOTViMDVjY2I4Yjk0NhINREEuVGltZS5UeXBlcxoHUmVsVGltZRIZCgxtaWNyb3NlY29uZHMSCRiAgLaMr7SPARKfAwoCXzISmANylQMKYwpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIPU3BsaWNlLklzc3VhbmNlGg5Jc3N1YW5jZUNvbmZpZxIvChRhbXVsZXRUb0lzc3VlUGVyWWVhchIXMhUyNTAwMDAwMDAwLjAwMDAwMDAwMDASKwoZdmFsaWRhdG9yUmV3YXJkUGVyY2VudGFnZRIOMgwwLjIwMDAwMDAwMDASJQoTYXBwUmV3YXJkUGVyY2VudGFnZRIOMgwwLjc1MDAwMDAwMDASJAoSdmFsaWRhdG9yUmV3YXJkQ2FwEg4yDDAuMjAwMDAwMDAwMBIqChRmZWF0dXJlZEFwcFJld2FyZENhcBISMhAyMDAwMC4wMDAwMDAwMDAwEigKFnVuZmVhdHVyZWRBcHBSZXdhcmRDYXASDjIMMC42MDAwMDAwMDAwEi0KFW9wdFZhbGlkYXRvckZhdWNldENhcBIUUhIKEDIONTcwLjAwMDAwMDAwMDASoAgKGWRlY2VudHJhbGl6ZWRTeW5jaHJvbml6ZXISgghy/wcKiwEKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESIFNwbGljZS5EZWNlbnRyYWxpemVkU3luY2hyb25pemVyGiVBbXVsZXREZWNlbnRyYWxpemVkU3luY2hyb25pemVyQ29uZmlnEtwBChVyZXF1aXJlZFN5bmNocm9uaXplcnMSwgFyvwEKVQpAYzNiYjBjNWQwNDc5OWIzZjExYmFkN2MzYzEwMjk2M2UxMTVjZjUzZGEzZTRhZmNiY2ZkOWYwNmViZDgyYjRmZhIMREEuU2V0LlR5cGVzGgNTZXQSZgoDbWFwEl9qXQpbClVCU2dsb2JhbC1kb21haW46OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhEgIKABJrChJhY3RpdmVTeW5jaHJvbml6ZXISVUJTZ2xvYmFsLWRvbWFpbjo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWESogQKBGZlZXMSmQRylgQKfApAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIgU3BsaWNlLkRlY2VudHJhbGl6ZWRTeW5jaHJvbml6ZXIaFlN5bmNocm9uaXplckZlZXNDb25maWcStwIKFWJhc2VSYXRlVHJhZmZpY0xpbWl0cxKdAnKaAgp7CkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEiBTcGxpY2UuRGVjZW50cmFsaXplZFN5bmNocm9uaXplchoVQmFzZVJhdGVUcmFmZmljTGltaXRzEhMKC2J1cnN0QW1vdW50EgQYgOowEoUBCgtidXJzdFdpbmRvdxJ2cnQKWgpAYjcwZGI4MzY5ZTFjNDYxZDVjNzBmMWM4NmY1MjZhMjllOTc3NmM2NTVlNmZmYzI1NjBmOTViMDVjY2I4Yjk0NhINREEuVGltZS5UeXBlcxoHUmVsVGltZRIWCgxtaWNyb3NlY29uZHMSBhiAsLT4CBIkChFleHRyYVRyYWZmaWNQcmljZRIPMg02MC4wMDAwMDAwMDAwEh4KGHJlYWRWc1dyaXRlU2NhbGluZ0ZhY3RvchICGAgSFgoObWluVG9wdXBBbW91bnQSBBiAtRgShgEKDHRpY2tEdXJhdGlvbhJ2cnQKWgpAYjcwZGI4MzY5ZTFjNDYxZDVjNzBmMWM4NmY1MjZhMjllOTc3NmM2NTVlNmZmYzI1NjBmOTViMDVjY2I4Yjk0NhINREEuVGltZS5UeXBlcxoHUmVsVGltZRIWCgxtaWNyb3NlY29uZHMSBhiAmJq8BBKaAgoNcGFja2FnZUNvbmZpZxKIAnKFAgpmCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEhNTcGxpY2UuQW11bGV0Q29uZmlnGg1QYWNrYWdlQ29uZmlnEhIKBmFtdWxldBIIQgYwLjEuMTQSHQoRYW11bGV0TmFtZVNlcnZpY2USCEIGMC4xLjE0EhkKDWRzb0dvdmVybmFuY2USCEIGMC4xLjE5Eh0KEnZhbGlkYXRvckxpZmVjeWNsZRIHQgUwLjEuNRISCgZ3YWxsZXQSCEIGMC4xLjE0EhoKDndhbGxldFBheW1lbnRzEghCBjAuMS4xNBIcChZ0cmFuc2ZlclByZWFwcHJvdmFsRmVlEgJSABI1Ch9mZWF0dXJlZEFwcEFjdGl2aXR5TWFya2VyQW1vdW50EhJSEAoOMgwxLjAwMDAwMDAwMDASEgoMZnV0dXJlVmFsdWVzEgJaABIOCghpc0Rldk5ldBICEAEySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWHAPt3IidTglpAD0j7WDwoDMi4xEs4PCkUAO5AwR5oepQtCByXEELZMRgm2SrSZbecH75mmLPoJ+QfKERIgoLz2TnO7OuN9D/jP4u0jVGbL7cymW/S7g9G9ifNDOfQSDXNwbGljZS1hbXVsZXQaZApAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIGU3BsaWNlEgtBbXVsZXRSdWxlcxoLQW11bGV0UnVsZXMijw1qjA0KTQpLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhCrQMCrEMaq4MCqUMCqIMap8MCpsCCpgCapUCChYKFGoSChAKDjIMMC4wMDAwMDAwMDAwChYKFGoSChAKDjIMMC4wMDAwMTkwMjU5CqQBCqEBap4BChAKDjIMMC4wMDAwMDAwMDAwCokBCoYBWoMBCihqJgoSChAyDjEwMC4wMDAwMDAwMDAwChAKDjIMMC4wMDAwMDAwMDAwCilqJwoTChEyDzEwMDAuMDAwMDAwMDAwMAoQCg4yDDAuMDAwMDAwMDAwMAosaioKFgoUMhIxMDAwMDAwLjAwMDAwMDAwMDAKEAoOMgwwLjAwMDAwMDAwMDAKFgoUahIKEAoOMgwwLjAwMDAwMDAwMDAKEAoOMgwxLjAwMDAwMDAwMDAKBQoDGMgBCgUKAxjIAQoECgIYZAr1BgryBmrvBgqYAQqVAWqSAQoaChgyFjQwMDAwMDAwMDAwLjAwMDAwMDAwMDAKEAoOMgwwLjA1MDAwMDAwMDAKEAoOMgwwLjE1MDAwMDAwMDAKEAoOMgwwLjIwMDAwMDAwMDAKFAoSMhAyMDAwMC4wMDAwMDAwMDAwChAKDjIMMC42MDAwMDAwMDAwChYKFFISChAyDjU3MC4wMDAwMDAwMDAwCtEFCs4FWssFCrABaq0BChAKDmoMCgoKCBiAwM/g6JUHCpgBCpUBapIBChoKGDIWMjAwMDAwMDAwMDAuMDAwMDAwMDAwMAoQCg4yDDAuMTIwMDAwMDAwMAoQCg4yDDAuNDAwMDAwMDAwMAoQCg4yDDAuMjAwMDAwMDAwMAoUChIyEDIwMDAwLjAwMDAwMDAwMDAKEAoOMgwwLjYwMDAwMDAwMDAKFgoUUhIKEDIONTcwLjAwMDAwMDAwMDAKsAFqrQEKEAoOagwKCgoIGIDA7qG6wRUKmAEKlQFqkgEKGgoYMhYxMDAwMDAwMDAwMC4wMDAwMDAwMDAwChAKDjIMMC4xODAwMDAwMDAwChAKDjIMMC42MjAwMDAwMDAwChAKDjIMMC4yMDAwMDAwMDAwChQKEjIQMjAwMDAuMDAwMDAwMDAwMAoQCg4yDDAuNjAwMDAwMDAwMAoWChRSEgoQMg41NzAuMDAwMDAwMDAwMAqvAWqsAQoQCg5qDAoKCggYgICbxpfaRwqXAQqUAWqRAQoZChcyFTUwMDAwMDAwMDAuMDAwMDAwMDAwMAoQCg4yDDAuMjEwMDAwMDAwMAoQCg4yDDAuNjkwMDAwMDAwMAoQCg4yDDAuMjAwMDAwMDAwMAoUChIyEDIwMDAwLjAwMDAwMDAwMDAKEAoOMgwwLjYwMDAwMDAwMDAKFgoUUhIKEDIONTcwLjAwMDAwMDAwMDAKsAFqrQEKEQoPag0KCwoJGICAtoyvtI8BCpcBCpQBapEBChkKFzIVMjUwMDAwMDAwMC4wMDAwMDAwMDAwChAKDjIMMC4yMDAwMDAwMDAwChAKDjIMMC43NTAwMDAwMDAwChAKDjIMMC4yMDAwMDAwMDAwChQKEjIQMjAwMDAuMDAwMDAwMDAwMAoQCg4yDDAuNjAwMDAwMDAwMAoWChRSEgoQMg41NzAuMDAwMDAwMDAwMAqNAgqKAmqHAgpnCmVqYwphCl9iXQpbClVCU2dsb2JhbC1kb21haW46OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhEgIKAApXClVCU2dsb2JhbC1kb21haW46OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhCkMKQWo/ChwKGmoYCgYKBBiA6jAKDgoMagoKCAoGGICwtPgIChEKDzINNjAuMDAwMDAwMDAwMAoECgIYCAoGCgQYgLUYCg4KDGoKCggKBhiAmJq8BApLCklqRwoKCghCBjAuMS4xNAoKCghCBjAuMS4xNAoKCghCBjAuMS4xOQoJCgdCBTAuMS41CgoKCEIGMC4xLjE0CgoKCEIGMC4xLjE0CgQKAlIAChQKElIQCg4yDDEuMDAwMDAwMDAwMAoECgJaAAoECgIQASpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTldZIIKtkAGAEIqCiYKJAgBEiAq8EtMq9+TalRq5epvA9S5EXsGT7RLa6WY5hrOoiCbyBAeOtEICo8FCgMyLjESigEwMDlmMDBlNWJmMDA2NDAxMThkODQ5MDgwYWFmMjJiYzk2M2E4NDU4ZDMyMjU4NWNlYmYxMTE5Y2I3YmYzN2E5NTVjYTExMTIyMDY1Yjc3NWZiOGE0MTk5OTA0ZWQzMmZhOTI3N2ZkOWMwZTgyYmI4MjMxOWE3MTUxMjQ5ZGYxMjQxODIwNzIzODEaDXNwbGljZS1hbXVsZXQifQpAYTViMDU1NDkyZmI4ZjA4YjJlN2JjMGZjOTRkYTZkYTUwYzM5YzJlMWQ3ZjI0Y2Q1ZWE4ZGIxMmZjODdjMTMzMhIfU3BsaWNlLkV4dGVybmFsUGFydHlBbXVsZXRSdWxlcxoYRXh0ZXJuYWxQYXJ0eUFtdWxldFJ1bGVzKtYBctMBCn0KQGE1YjA1NTQ5MmZiOGYwOGIyZTdiYzBmYzk0ZGE2ZGE1MGMzOWMyZTFkN2YyNGNkNWVhOGRiMTJmYzg3YzEzMzISH1NwbGljZS5FeHRlcm5hbFBhcnR5QW11bGV0UnVsZXMaGEV4dGVybmFsUGFydHlBbXVsZXRSdWxlcxJSCgNkc28SSzpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTJJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYTpJRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYcA+uKzv4J+ejgPSPrEDCgMyLjESqQMKRQCfAOW/AGQBGNhJCAqvIryWOoRY0yJYXOvxEZy3vzepVcoREiBlt3X7ikGZkE7TL6knf9nA6Cu4IxmnFRJJ3xJBggcjgRINc3BsaWNlLWFtdWxldBp+CkBhNWIwNTU0OTJmYjhmMDhiMmU3YmMwZmM5NGRhNmRhNTBjMzljMmUxZDdmMjRjZDVlYThkYjEyZmM4N2MxMzMyEgZTcGxpY2USGEV4dGVybmFsUGFydHlBbXVsZXRSdWxlcxoYRXh0ZXJuYWxQYXJ0eUFtdWxldFJ1bGVzIlFqTwpNCks6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEqSURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE5ONYb/PE4BgBCKgomCiQIARIgg6XaQb6Ove2ZeEETfGZZCQBZC/+uO0vA1Vrm1nkOd7oQHjqVDwr8CQoDMi4xEooBMDBiYzAyZDJmNTAyOGQwMDEwZGJkNzNkMzQ1OGRkOWI4MjcwZWQwZThiZmRmYmU1OTQ3NzFiOGM1YzlhN2NjMDZiY2ExMTEyMjAzZDNhYjlhYWEyZjU2NmYxYWM0Yjc5MzBlY2NjMzFmNzhlZTkyOGUzMzViNTk0MDI2MThjMDBkODUxNTBlZTQ3Gg1zcGxpY2UtYW11bGV0IlkKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDVNwbGljZS5BbXVsZXQaBkFtdWxldCqzBXKwBQpZCkAzY2ExMzQzYWIyNmI0NTNkMzhjOGFkYjcwZGNhNWYxZWFkODQ0MGM0MmI1OWI2OGYwNzA3ODY5NTVjYmY5ZWMxEg1TcGxpY2UuQW11bGV0GgZBbXVsZXQSUgoDZHNvEks6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWESYwoFb3duZXISWjpYdGVzdC1iYWxhLXBhcnR5LTAxOjoxMjIwMzg5ZTY0ODA3NGM3MDhlYWQ1MjdmZDlmNDM2OTFlMDQ2M2U3NTljMDllZTRkOTk0ZDY4M2IxYWEyY2M3NGQ1OBKZAwoGYW1vdW50Eo4DcosDCl8KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGg5FeHBpcmluZ0Ftb3VudBIiCg1pbml0aWFsQW1vdW50EhEyDzEwMDAuMDAwMDAwMDAwMBJ4CgljcmVhdGVkQXQSa3JpClcKQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESDFNwbGljZS5UeXBlcxoFUm91bmQSDgoGbnVtYmVyEgQY2tgBEokBCgxyYXRlUGVyUm91bmQSeXJ3Cl0KQDNjYTEzNDNhYjI2YjQ1M2QzOGM4YWRiNzBkY2E1ZjFlYWQ4NDQwYzQyYjU5YjY4ZjA3MDc4Njk1NWNiZjllYzESC1NwbGljZS5GZWVzGgxSYXRlUGVyUm91bmQSFgoEcmF0ZRIOMgwwLjAwMDIwMDI3MjYySURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEyWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTg6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWE6WHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTjAPs3F7dr/lpAD0j6IBQoDMi4xEoAFCkUAvALS9QKNABDb1z00WN2bgnDtDov9++WUdxuMXJp8wGvKERIgPTq5qqL1ZvGsS3kw7Mwx947pKOM1tZQCYYwA2FFQ7kcSDXNwbGljZS1hbXVsZXQaWgpAM2NhMTM0M2FiMjZiNDUzZDM4YzhhZGI3MGRjYTVmMWVhZDg0NDBjNDJiNTliNjhmMDcwNzg2OTU1Y2JmOWVjMRIGU3BsaWNlEgZBbXVsZXQaBkFtdWxldCLxAWruAQpNCks6SURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEKXApaOlh0ZXN0LWJhbGEtcGFydHktMDE6OjEyMjAzODllNjQ4MDc0YzcwOGVhZDUyN2ZkOWY0MzY5MWUwNDYzZTc1OWMwOWVlNGQ5OTRkNjgzYjFhYTJjYzc0ZDU4Cj8KPWo7ChMKETIPMTAwMC4wMDAwMDAwMDAwCgwKCmoICgYKBBja2AEKFgoUahIKEAoOMgwwLjAwMDIwMDI3MjYqSURTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEqWHRlc3QtYmFsYS1wYXJ0eS0wMTo6MTIyMDM4OWU2NDgwNzRjNzA4ZWFkNTI3ZmQ5ZjQzNjkxZTA0NjNlNzU5YzA5ZWU0ZDk5NGQ2ODNiMWFhMmNjNzRkNTg5zWJb+7dABgBCKgomCiQIARIgja6ZmldCirmJDw8TItHU4LrCK22NkAeuFjTkrfCq2goQHkjpz9azi5eQA1Do56vNk5yQAw==', + preparedTransactionHash: '7Ey4Q2TqWQcK1eAl6p15UT02M4mx92Tvo9ifvtzlm5o=', + hashingSchemeVersion: 'HASHING_SCHEME_VERSION_V2', + hashingDetails: + "'00000030' # Hash Purpose\n'02' # 02 (Hashing Scheme Version)\n '00000030' # Hash Purpose\n # Transaction Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n # Root Nodes\n '00000001' # 1 (int)\n '01' # 01 (Node Encoding Version)\n # Exercise Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '01' # Exercise Node Tag\n # Node Seed\n '5dd431b2c7343645c186db4d2905d0caa3d236a3ffb725c38535ad0cc57ef446' # seed\n # Contract Id\n '00000045' # 69 (int)\n '009f00e5bf00640118d849080aaf22bc963a8458d322585cebf1119cb7bf37a955ca11122065b775fb8a4199904ed32fa9277fd9c0e82bb82319a7151249df124182072381' # 009f00e5bf00640118d849080aaf22bc963a8458d322585cebf1119cb7bf37a955ca11122065b775fb8a4199904ed32fa9277fd9c0e82bb82319a7151249df124182072381 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n '00000001' # 1 (int)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Acting Parties\n '00000001' # 1 (int)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '5472616e73666572466163746f7279' # TransferFactory (string)\n # Choice Id\n '00000018' # 24 (int)\n '5472616e73666572466163746f72795f5472616e73666572' # TransferFactory_Transfer (string)\n # Chosen Value\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '00000018' # 24 (int)\n '5472616e73666572466163746f72795f5472616e73666572' # TransferFactory_Transfer (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000d' # 13 (int)\n '657870656374656441646d696e' # expectedAdmin (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000008' # 8 (int)\n '7472616e73666572' # transfer (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '5472616e73666572' # Transfer (string)\n '00000008' # 8 (int)\n '01' # Some\n '00000006' # 6 (int)\n '73656e646572' # sender (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000008' # 8 (int)\n '7265636569766572' # receiver (string)\n '06' # Party Type Tag\n '00000063' # 99 (int)\n '726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a3132323065613761623561373233663861366232303738653631376536633538636237653738653439393437646463323339653161393431616135366536626130386234' # ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4 (string)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '35302e30303030303030303030' # 50.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '696e737472756d656e744964' # instrumentId (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '37313861306637376535303561386465323266313838626434633837666537343130313237346539643463623162666163376430396165633731353864333562' # 718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000009' # 9 (int)\n '486f6c64696e675631' # HoldingV1 (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '496e737472756d656e744964' # InstrumentId (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000005' # 5 (int)\n '61646d696e' # admin (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000002' # 2 (int)\n '6964' # id (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '01' # Some\n '0000000b' # 11 (int)\n '7265717565737465644174' # requestedAt (string)\n '04' # Timestamp Type Tag\n '000640b8b675a7e9' # 1760011939588073 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '657865637574654265666f7265' # executeBefore (string)\n '04' # Timestamp Type Tag\n '000640e139aaf3e9' # 1760185939588073 (long)\n '01' # Some\n '00000010' # 16 (int)\n '696e707574486f6c64696e6743696473' # inputHoldingCids (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n '01' # Some\n '00000004' # 4 (int)\n '6d657461' # meta (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4d65746164617461' # Metadata (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '00000009' # 9 (int)\n '657874726141726773' # extraArgs (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000009' # 9 (int)\n '457874726141726773' # ExtraArgs (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000007' # 7 (int)\n '636f6e74657874' # context (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '0000000d' # 13 (int)\n '43686f696365436f6e74657874' # ChoiceContext (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000002' # 2 (int)\n '0000000c' # 12 (int)\n '616d756c65742d72756c6573' # amulet-rules (string)\n '0d' # Variant Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '416e7956616c7565' # AnyValue (string)\n '0000000d' # 13 (int)\n '41565f436f6e74726163744964' # AV_ContractId (string)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4' # 003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4 (contractId)\n '0000000a' # 10 (int)\n '6f70656e2d726f756e64' # open-round (string)\n '0d' # Variant Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '416e7956616c7565' # AnyValue (string)\n '0000000d' # 13 (int)\n '41565f436f6e74726163744964' # AV_ContractId (string)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n '01' # Some\n '00000004' # 4 (int)\n '6d657461' # meta (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4d65746164617461' # Metadata (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000000' # 0 (int)\n # Consuming\n '00' # false (bool)\n # Exercise Result\n '01' # Some\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '00000019' # 25 (int)\n '5472616e73666572496e737472756374696f6e526573756c74' # TransferInstructionResult (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6f7574707574' # output (string)\n '0d' # Variant Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '00000020' # 32 (int)\n '5472616e73666572496e737472756374696f6e526573756c745f4f7574707574' # TransferInstructionResult_Output (string)\n '00000021' # 33 (int)\n '5472616e73666572496e737472756374696f6e526573756c745f50656e64696e67' # TransferInstructionResult_Pending (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000002' # 2 (int)\n '00000020' # 32 (int)\n '5472616e73666572496e737472756374696f6e526573756c745f4f7574707574' # TransferInstructionResult_Output (string)\n '00000021' # 33 (int)\n '5472616e73666572496e737472756374696f6e526573756c745f50656e64696e67' # TransferInstructionResult_Pending (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000016' # 22 (int)\n '7472616e73666572496e737472756374696f6e436964' # transferInstructionCid (string)\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '00c5bdee5b91467b6d06cbf34b4643be109838acc09cf9ac9ed429fafac96bb91f' # 00c5bdee5b91467b6d06cbf34b4643be109838acc09cf9ac9ed429fafac96bb91f (contractId)\n '01' # Some\n '00000010' # 16 (int)\n '73656e6465724368616e676543696473' # senderChangeCids (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86' # 0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86 (contractId)\n '01' # Some\n '00000004' # 4 (int)\n '6d657461' # meta (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4d65746164617461' # Metadata (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000000' # 0 (int)\n # Choice Observers\n '00000000' # 0 (int)\n # Children\n '00000005' # 5 (int)\n '01' # 01 (Node Encoding Version)\n # Fetch Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '02' # Fetch Node Tag\n # Contract Id\n '00000045' # 69 (int)\n '003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4' # 003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Interface Id\n '00' # None\n # Acting Parties\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '3b8efcebf75a59ff956476e591cff03abe4dd5812c5d49cb8e87d0d6c8155f6e' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Exercise Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '01' # Exercise Node Tag\n # Node Seed\n 'c926a59b29da3a0e474f03541233396c66b5bbd5e55060013660ad44d796cec9' # seed\n # Contract Id\n '00000045' # 69 (int)\n '003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4' # 003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Acting Parties\n '00000001' # 1 (int)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '00' # None\n # Choice Id\n '00000017' # 23 (int)\n '416d756c657452756c65735f436f6d7075746546656573' # AmuletRules_ComputeFees (string)\n # Chosen Value\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '00000017' # 23 (int)\n '416d756c657452756c65735f436f6d7075746546656573' # AmuletRules_ComputeFees (string)\n '00000004' # 4 (int)\n '01' # Some\n '00000007' # 7 (int)\n '636f6e74657874' # context (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '5472616e73666572436f6e74657874' # TransferContext (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000f' # 15 (int)\n '6f70656e4d696e696e67526f756e64' # openMiningRound (string)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n '01' # Some\n '00000013' # 19 (int)\n '69737375696e674d696e696e67526f756e6473' # issuingMiningRounds (string)\n '0f' # GenMap Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '0000000f' # 15 (int)\n '76616c696461746f72526967687473' # validatorRights (string)\n '0f' # GenMap Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '00000006' # 6 (int)\n '73656e646572' # sender (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000007' # 7 (int)\n '6f757470757473' # outputs (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '5472616e736665724f7574707574' # TransferOutput (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000008' # 8 (int)\n '7265636569766572' # receiver (string)\n '06' # Party Type Tag\n '00000063' # 99 (int)\n '726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a3132323065613761623561373233663861366232303738653631376536633538636237653738653439393437646463323339653161393431616135366536626130386234' # ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4 (string)\n '01' # Some\n '00000010' # 16 (int)\n '7265636569766572466565526174696f' # receiverFeeRatio (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '35302e30303030303030303030' # 50.0000000000 (numeric)\n '01' # Some\n '0000000b' # 11 (int)\n '657870656374656444736f' # expectedDso (string)\n '09' # Optional Type Tag\n '01' # Some\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Consuming\n '00' # false (bool)\n # Exercise Result\n '01' # Some\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000001d' # 29 (int)\n '416d756c657452756c65735f436f6d7075746546656573526573756c74' # AmuletRules_ComputeFeesResult (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '66656573' # fees (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n # Choice Observers\n '00000000' # 0 (int)\n # Children\n '00000001' # 1 (int)\n '01' # 01 (Node Encoding Version)\n # Fetch Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '02' # Fetch Node Tag\n # Contract Id\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '4f70656e4d696e696e67526f756e64' # OpenMiningRound (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Interface Id\n '00' # None\n # Acting Parties\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '936a24c570ffed7f1606b3653788fc05d0a77f71e430ffe761c295ab5a0e3ede' # (Hashed Inner Node)\n '0ab579f128227a2b1b313de7f32a10483f514d4ea5ff4dbac41079a0204a065d' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Fetch Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '02' # Fetch Node Tag\n # Contract Id\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '01' # Some\n '00000040' # 64 (int)\n '37313861306637376535303561386465323266313838626434633837666537343130313237346539643463623162666163376430396165633731353864333562' # 718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000009' # 9 (int)\n '486f6c64696e675631' # HoldingV1 (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '486f6c64696e67' # Holding (string)\n # Acting Parties\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '7d6ba8d94725509e9b6e035155ec45ae54c5f09353479cdd01b4453837ecfa70' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Exercise Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '01' # Exercise Node Tag\n # Node Seed\n '0d68e25a641cebd632dd9ec8a0225a69251fa8a520da2ab5ab8f778c4671a91e' # seed\n # Contract Id\n '00000045' # 69 (int)\n '003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4' # 003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Acting Parties\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '00' # None\n # Choice Id\n '00000014' # 20 (int)\n '416d756c657452756c65735f5472616e73666572' # AmuletRules_Transfer (string)\n # Chosen Value\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '00000014' # 20 (int)\n '416d756c657452756c65735f5472616e73666572' # AmuletRules_Transfer (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000008' # 8 (int)\n '7472616e73666572' # transfer (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '5472616e73666572' # Transfer (string)\n '00000004' # 4 (int)\n '01' # Some\n '00000006' # 6 (int)\n '73656e646572' # sender (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000008' # 8 (int)\n '70726f7669646572' # provider (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000006' # 6 (int)\n '696e70757473' # inputs (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '0d' # Variant Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000d' # 13 (int)\n '5472616e73666572496e707574' # TransferInput (string)\n '0000000b' # 11 (int)\n '496e707574416d756c6574' # InputAmulet (string)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n '01' # Some\n '00000007' # 7 (int)\n '6f757470757473' # outputs (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '5472616e736665724f7574707574' # TransferOutput (string)\n '00000004' # 4 (int)\n '01' # Some\n '00000008' # 8 (int)\n '7265636569766572' # receiver (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000010' # 16 (int)\n '7265636569766572466565526174696f' # receiverFeeRatio (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '35302e30303030303030303030' # 50.0000000000 (numeric)\n '01' # Some\n '00000004' # 4 (int)\n '6c6f636b' # lock (string)\n '09' # Optional Type Tag\n '01' # Some\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '457870697279' # Expiry (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '54696d654c6f636b' # TimeLock (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000007' # 7 (int)\n '686f6c64657273' # holders (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000009' # 9 (int)\n '657870697265734174' # expiresAt (string)\n '04' # Timestamp Type Tag\n '000640e139aaf3e9' # 1760185939588073 (long)\n '01' # Some\n '0000000a' # 10 (int)\n '6f7074436f6e74657874' # optContext (string)\n '09' # Optional Type Tag\n '01' # Some\n '07' # Text Type Tag\n '00000071' # 113 (int)\n '7472616e7366657220746f2027726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a313232306561376162356137323366386136623230373865363137653663353863623765373865343939343764646332333965316139343161613536653662613038623427' # transfer to 'ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4' (string)\n '01' # Some\n '00000007' # 7 (int)\n '636f6e74657874' # context (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '5472616e73666572436f6e74657874' # TransferContext (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000f' # 15 (int)\n '6f70656e4d696e696e67526f756e64' # openMiningRound (string)\n '08' # ContractId Type Tag\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n '01' # Some\n '00000013' # 19 (int)\n '69737375696e674d696e696e67526f756e6473' # issuingMiningRounds (string)\n '0f' # GenMap Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '0000000f' # 15 (int)\n '76616c696461746f72526967687473' # validatorRights (string)\n '0f' # GenMap Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '0000000b' # 11 (int)\n '657870656374656444736f' # expectedDso (string)\n '09' # Optional Type Tag\n '01' # Some\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Consuming\n '00' # false (bool)\n # Exercise Result\n '01' # Some\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '5472616e73666572526573756c74' # TransferResult (string)\n '00000005' # 5 (int)\n '01' # Some\n '00000005' # 5 (int)\n '726f756e64' # round (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6e756d626572' # number (string)\n '02' # Int64 Type Tag\n '0000000000003633' # 13875 (long)\n '01' # Some\n '00000007' # 7 (int)\n '73756d6d617279' # summary (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '5472616e7366657253756d6d617279' # TransferSummary (string)\n '0000000c' # 12 (int)\n '01' # Some\n '00000014' # 20 (int)\n '696e707574417070526577617264416d6f756e74' # inputAppRewardAmount (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000001a' # 26 (int)\n '696e70757456616c696461746f72526577617264416d6f756e74' # inputValidatorRewardAmount (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '696e7075745376526577617264416d6f756e74' # inputSvRewardAmount (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000011' # 17 (int)\n '696e707574416d756c6574416d6f756e74' # inputAmuletAmount (string)\n '03' # Numeric Type Tag\n '0000000f' # 15 (int)\n '313030302e30303030303030303030' # 1000.0000000000 (numeric)\n '01' # Some\n '0000000e' # 14 (int)\n '62616c616e63654368616e676573' # balanceChanges (string)\n '0f' # GenMap Type Tag\n '00000001' # 1 (int)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000d' # 13 (int)\n '42616c616e63654368616e6765' # BalanceChange (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000022' # 34 (int)\n '6368616e6765546f496e697469616c416d6f756e7441734f66526f756e645a65726f' # changeToInitialAmountAsOfRoundZero (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '322e37373939383339363036' # 2.7799839606 (numeric)\n '01' # Some\n '00000017' # 23 (int)\n '6368616e6765546f486f6c64696e674665657352617465' # changeToHoldingFeesRate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303032303032373236' # 0.0002002726 (numeric)\n '01' # Some\n '0000000b' # 11 (int)\n '686f6c64696e6746656573' # holdingFees (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000a' # 10 (int)\n '6f757470757446656573' # outputFees (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000f' # 15 (int)\n '73656e6465724368616e6765466565' # senderChangeFee (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '73656e6465724368616e6765416d6f756e74' # senderChangeAmount (string)\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3935302e30303030303030303030' # 950.0000000000 (numeric)\n '01' # Some\n '0000000b' # 11 (int)\n '616d756c65745072696365' # amuletPrice (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30393530303030303030' # 0.0950000000 (numeric)\n '01' # Some\n '0000001a' # 26 (int)\n '696e70757456616c696461746f72466175636574416d6f756e74' # inputValidatorFaucetAmount (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000022' # 34 (int)\n '696e707574556e636c61696d656441637469766974795265636f7264416d6f756e74' # inputUnclaimedActivityRecordAmount (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000e' # 14 (int)\n '63726561746564416d756c657473' # createdAmulets (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '0d' # Variant Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000d' # 13 (int)\n '43726561746564416d756c6574' # CreatedAmulet (string)\n '0000001a' # 26 (int)\n '5472616e73666572526573756c744c6f636b6564416d756c6574' # TransferResultLockedAmulet (string)\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f' # 00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f (contractId)\n '01' # Some\n '00000012' # 18 (int)\n '73656e6465724368616e6765416d756c6574' # senderChangeAmulet (string)\n '09' # Optional Type Tag\n '01' # Some\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86' # 0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86 (contractId)\n '01' # Some\n '00000004' # 4 (int)\n '6d657461' # meta (string)\n '09' # Optional Type Tag\n '01' # Some\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4d65746164617461' # Metadata (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000002' # 2 (int)\n '00000026' # 38 (int)\n '73706c6963652e6c66646563656e7472616c697a656474727573742e6f72672f73656e646572' # splice.lfdecentralizedtrust.org/sender (string)\n '07' # Text Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '00000027' # 39 (int)\n '73706c6963652e6c66646563656e7472616c697a656474727573742e6f72672f74782d6b696e64' # splice.lfdecentralizedtrust.org/tx-kind (string)\n '07' # Text Type Tag\n '00000008' # 8 (int)\n '7472616e73666572' # transfer (string)\n # Choice Observers\n '00000000' # 0 (int)\n # Children\n '00000005' # 5 (int)\n '01' # 01 (Node Encoding Version)\n # Fetch Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '02' # Fetch Node Tag\n # Contract Id\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '4f70656e4d696e696e67526f756e64' # OpenMiningRound (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Interface Id\n '00' # None\n # Acting Parties\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '936a24c570ffed7f1606b3653788fc05d0a77f71e430ffe761c295ab5a0e3ede' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Fetch Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '02' # Fetch Node Tag\n # Contract Id\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '00' # None\n # Acting Parties\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '808cb338370d8773e8443e607c65de96779cafda41eee83cdd31e1ee903efc55' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Exercise Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '01' # Exercise Node Tag\n # Node Seed\n '8ac4cded476e78e84c93cdc8a02e0e43d0eadc5c04a4c1ec52a2da9b4e2ac99d' # seed\n # Contract Id\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Acting Parties\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Interface Id\n '00' # None\n # Choice Id\n '00000007' # 7 (int)\n '41726368697665' # Archive (string)\n # Chosen Value\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '39653730613862333531306436313766386131333632313366333364366139303361313063613065656563373662623036626135356431656439363830663639' # 9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000008' # 8 (int)\n '496e7465726e616c' # Internal (string)\n '00000008' # 8 (int)\n '54656d706c617465' # Template (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '41726368697665' # Archive (string)\n '00000000' # 0 (int)\n # Consuming\n '01' # true (bool)\n # Exercise Result\n '01' # Some\n '00' # Unit Type Tag\n # Choice Observers\n '00000000' # 0 (int)\n # Children\n '00000000' # 0 (int)\n 'a5d6fa2d0a77458bc8fa4752751846e69496594dd729624c1c52439e77e4486f' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '01' # Some\n 'd97d5882134b76af02e36e68f3e6ac070146181fa0b7d5af6c682c47442f4494' # node seed\n # Contract Id\n '00000021' # 33 (int)\n '00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f' # 00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '4c6f636b6564416d756c6574' # LockedAmulet (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '4c6f636b6564416d756c6574' # LockedAmulet (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000006' # 6 (int)\n '616d756c6574' # amulet (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000005' # 5 (int)\n '6f776e6572' # owner (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '4578706972696e67416d6f756e74' # ExpiringAmount (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000d' # 13 (int)\n '696e697469616c416d6f756e74' # initialAmount (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '35302e30303030303030303030' # 50.0000000000 (numeric)\n '01' # Some\n '00000009' # 9 (int)\n '637265617465644174' # createdAt (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6e756d626572' # number (string)\n '02' # Int64 Type Tag\n '0000000000003633' # 13875 (long)\n '01' # Some\n '0000000c' # 12 (int)\n '72617465506572526f756e64' # ratePerRound (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '52617465506572526f756e64' # RatePerRound (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '72617465' # rate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303032303032373236' # 0.0002002726 (numeric)\n '01' # Some\n '00000004' # 4 (int)\n '6c6f636b' # lock (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '457870697279' # Expiry (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '54696d654c6f636b' # TimeLock (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000007' # 7 (int)\n '686f6c64657273' # holders (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000009' # 9 (int)\n '657870697265734174' # expiresAt (string)\n '04' # Timestamp Type Tag\n '000640e139aaf3e9' # 1760185939588073 (long)\n '01' # Some\n '0000000a' # 10 (int)\n '6f7074436f6e74657874' # optContext (string)\n '09' # Optional Type Tag\n '01' # Some\n '07' # Text Type Tag\n '00000071' # 113 (int)\n '7472616e7366657220746f2027726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a313232306561376162356137323366386136623230373865363137653663353863623765373865343939343764646332333965316139343161613536653662613038623427' # transfer to 'ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4' (string)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '4257bdf00f8ab5e61186d991cc16e2a395deb05fae585eb458eb3a4ad64a7eb9' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '01' # Some\n '533bb96d9d5d9ca0fa27e6c90618f40a53cf3c954177f38853fe0511527f800a' # node seed\n # Contract Id\n '00000021' # 33 (int)\n '0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86' # 0073dd0492654305ca61839e3c5b1343077a1891929b6ea8410247d6a360704c86 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000005' # 5 (int)\n '6f776e6572' # owner (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '4578706972696e67416d6f756e74' # ExpiringAmount (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000d' # 13 (int)\n '696e697469616c416d6f756e74' # initialAmount (string)\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3935302e30303030303030303030' # 950.0000000000 (numeric)\n '01' # Some\n '00000009' # 9 (int)\n '637265617465644174' # createdAt (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6e756d626572' # number (string)\n '02' # Int64 Type Tag\n '0000000000003633' # 13875 (long)\n '01' # Some\n '0000000c' # 12 (int)\n '72617465506572526f756e64' # ratePerRound (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '52617465506572526f756e64' # RatePerRound (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '72617465' # rate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303032303032373236' # 0.0002002726 (numeric)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '70a048cee04a91a8527a3cabbd81d12fd564ca463ffdd16b88d2b00f07554ec6' # (Hashed Inner Node)\n '6f8af2ae8e91f161bb32af9fe42540bc365c21a04277b65d3fa133c519f7b250' # (Hashed Inner Node)\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '01' # Some\n '3513e7f2b18cfaafc23fa8cd34e21fb16bce44215f27912b4dad87fe927db89b' # node seed\n # Contract Id\n '00000021' # 33 (int)\n '00c5bdee5b91467b6d06cbf34b4643be109838acc09cf9ac9ed429fafac96bb91f' # 00c5bdee5b91467b6d06cbf34b4643be109838acc09cf9ac9ed429fafac96bb91f (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000019' # 25 (int)\n '416d756c65745472616e73666572496e737472756374696f6e' # AmuletTransferInstruction (string)\n '00000001' # 1 (int)\n '00000019' # 25 (int)\n '416d756c65745472616e73666572496e737472756374696f6e' # AmuletTransferInstruction (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000019' # 25 (int)\n '416d756c65745472616e73666572496e737472756374696f6e' # AmuletTransferInstruction (string)\n '00000001' # 1 (int)\n '00000019' # 25 (int)\n '416d756c65745472616e73666572496e737472756374696f6e' # AmuletTransferInstruction (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6c6f636b6564416d756c6574' # lockedAmulet (string)\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f' # 00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f (contractId)\n '01' # Some\n '00000008' # 8 (int)\n '7472616e73666572' # transfer (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35356261346465623061643436363263343136386233393835393733386130653931333838643235323238363438306337333331623366373161353137323831' # 55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281 (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000015' # 21 (int)\n '5472616e73666572496e737472756374696f6e5631' # TransferInstructionV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '5472616e73666572' # Transfer (string)\n '00000008' # 8 (int)\n '01' # Some\n '00000006' # 6 (int)\n '73656e646572' # sender (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000008' # 8 (int)\n '7265636569766572' # receiver (string)\n '06' # Party Type Tag\n '00000063' # 99 (int)\n '726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a3132323065613761623561373233663861366232303738653631376536633538636237653738653439393437646463323339653161393431616135366536626130386234' # ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4 (string)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '35302e30303030303030303030' # 50.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '696e737472756d656e744964' # instrumentId (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '37313861306637376535303561386465323266313838626434633837666537343130313237346539643463623162666163376430396165633731353864333562' # 718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '00000009' # 9 (int)\n '486f6c64696e675631' # HoldingV1 (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '496e737472756d656e744964' # InstrumentId (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000005' # 5 (int)\n '61646d696e' # admin (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000002' # 2 (int)\n '6964' # id (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '01' # Some\n '0000000b' # 11 (int)\n '7265717565737465644174' # requestedAt (string)\n '04' # Timestamp Type Tag\n '000640b8b675a7e9' # 1760011939588073 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '657865637574654265666f7265' # executeBefore (string)\n '04' # Timestamp Type Tag\n '000640e139aaf3e9' # 1760185939588073 (long)\n '01' # Some\n '00000010' # 16 (int)\n '696e707574486f6c64696e6743696473' # inputHoldingCids (string)\n '0a' # List Type Tag\n '00000001' # 1 (int)\n '08' # ContractId Type Tag\n '00000021' # 33 (int)\n '00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f' # 00d7e27934379ac3d2859c7358e6a61c06ab7ff6d28dd0a3251c465388f69db61f (contractId)\n '01' # Some\n '00000004' # 4 (int)\n '6d657461' # meta (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '34646564366236363863623362363466376138386133303837346364343163373538323966356530363462336662626164663431656337653833363333353466' # 4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f (string)\n '00000004' # 4 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000003' # 3 (int)\n '417069' # Api (string)\n '00000005' # 5 (int)\n '546f6b656e' # Token (string)\n '0000000a' # 10 (int)\n '4d657461646174615631' # MetadataV1 (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4d65746164617461' # Metadata (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '76616c756573' # values (string)\n '0b' # TextMap Type Tag\n '00000000' # 0 (int)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000003' # 3 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000063' # 99 (int)\n '726176692d64656d6f2d70617274792d74786e2d30312d7461707065723a3a3132323065613761623561373233663861366232303738653631376536633538636237653738653439393437646463323339653161393431616135366536626130386234' # ravi-demo-party-txn-01-tapper::1220ea7ab5a723f8a6b2078e617e6c58cb7e78e49947ddc239e1a941aa56e6ba08b4 (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n 'f8527f2a3e34d1a297e9aaae9b26b1d12f95d14ac3dbe4417a0b52dcd180e260' # (Hashed Inner Node)\n '86dd9ee402afe314837f4223426559f94fbfa1daef52aac4d956bbfe14d623e0' # (Hashed Inner Node)\n'1a39ca65487be7f30f1a7d52f3962ac26be28c82d5fa41973907adab7958967e' # Transaction\n '00000030' # Hash Purpose\n '01' # 01 (Metadata Encoding Version)\n # Act As Parties\n '00000001' # 1 (int)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Command Id\n '00000024' # 36 (int)\n '37616464343663322d636462362d346566392d613938652d316632313766326336303339' # 7add46c2-cdb6-4ef9-a98e-1f217f2c6039 (string)\n # Transaction UUID\n '00000024' # 36 (int)\n '64303464393732392d316536312d346339662d383663392d393132376633366562303663' # d04d9729-1e61-4c9f-86c9-9127f36eb06c (string)\n # Mediator Group\n '00000000' # 0 (int)\n # Synchronizer Id\n '00000053' # 83 (int)\n '676c6f62616c2d646f6d61696e3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Min Time Boundary\n '01' # Some\n '000640b8b675a7e9' # 1760011939588073 (long)\n # Max Time Boundary\n '01' # Some\n '000640e139aaf3e8' # 1760185939588072 (long)\n # Preparation Time\n '000640b9010792fc' # 1760013190664956 (long)\n # Disclosed Contracts\n '00000004' # 4 (int)\n # Created At\n '000640b892b261e9' # 1760011339588073 (long)\n # Create Contract\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '00' # None\n # Contract Id\n '00000045' # 69 (int)\n '003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a' # 003abfe538d0b517847c63dd87eb488e3c4ff690128ce68a828f4bebb789a6d614ca1112202a2842a6e04814b4add5be57f8fd5d7da65dbd5db6ae9285d76ebc0d9b31887a (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '4f70656e4d696e696e67526f756e64' # OpenMiningRound (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '0000000f' # 15 (int)\n '4f70656e4d696e696e67526f756e64' # OpenMiningRound (string)\n '00000009' # 9 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000005' # 5 (int)\n '726f756e64' # round (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6e756d626572' # number (string)\n '02' # Int64 Type Tag\n '0000000000003633' # 13875 (long)\n '01' # Some\n '0000000b' # 11 (int)\n '616d756c65745072696365' # amuletPrice (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30393530303030303030' # 0.0950000000 (numeric)\n '01' # Some\n '00000007' # 7 (int)\n '6f70656e734174' # opensAt (string)\n '04' # Timestamp Type Tag\n '000640b8b675a7e9' # 1760011939588073 (long)\n '01' # Some\n '0000000e' # 14 (int)\n '746172676574436c6f7365734174' # targetClosesAt (string)\n '04' # Timestamp Type Tag\n '000640b8fdfc33e9' # 1760013139588073 (long)\n '01' # Some\n '0000000a' # 10 (int)\n '69737375696e67466f72' # issuingFor (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '0000079250aaf200' # 8325000000000 (long)\n '01' # Some\n '00000011' # 17 (int)\n '7472616e73666572436f6e666967557364' # transferConfigUsd (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000c' # 12 (int)\n '416d756c6574436f6e666967' # AmuletConfig (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '5472616e73666572436f6e666967' # TransferConfig (string)\n '00000008' # 8 (int)\n '01' # Some\n '00000009' # 9 (int)\n '637265617465466565' # createFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4669786564466565' # FixedFee (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '666565' # fee (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000a' # 10 (int)\n '686f6c64696e67466565' # holdingFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '52617465506572526f756e64' # RatePerRound (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '72617465' # rate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030313930323539' # 0.0000190259 (numeric)\n '01' # Some\n '0000000b' # 11 (int)\n '7472616e73666572466565' # transferFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '5374657070656452617465' # SteppedRate (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000b' # 11 (int)\n '696e697469616c52617465' # initialRate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000005' # 5 (int)\n '7374657073' # steps (string)\n '0a' # List Type Tag\n '00000003' # 3 (int)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3130302e30303030303030303030' # 100.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '0000000f' # 15 (int)\n '313030302e30303030303030303030' # 1000.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '00000012' # 18 (int)\n '313030303030302e30303030303030303030' # 1000000.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000d' # 13 (int)\n '6c6f636b486f6c646572466565' # lockHolderFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4669786564466565' # FixedFee (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '666565' # fee (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000001c' # 28 (int)\n '65787472614665617475726564417070526577617264416d6f756e74' # extraFeaturedAppRewardAmount (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '312e30303030303030303030' # 1.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '6d61784e756d496e70757473' # maxNumInputs (string)\n '02' # Int64 Type Tag\n '0000000000000064' # 100 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '6d61784e756d4f757470757473' # maxNumOutputs (string)\n '02' # Int64 Type Tag\n '0000000000000064' # 100 (long)\n '01' # Some\n '00000011' # 17 (int)\n '6d61784e756d4c6f636b486f6c64657273' # maxNumLockHolders (string)\n '02' # Int64 Type Tag\n '0000000000000032' # 50 (long)\n '01' # Some\n '0000000e' # 14 (int)\n '69737375616e6365436f6e666967' # issuanceConfig (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000016' # 22 (int)\n '34303030303030303030302e30303030303030303030' # 40000000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30353030303030303030' # 0.0500000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e31353030303030303030' # 0.1500000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '7469636b4475726174696f6e' # tickDuration (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '0000000023c34600' # 600000000 (long)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n 'f030b5f8f0be9b332faa0d6580d347f356668f096d91fbf1734580c490cd8aa6' # Disclosed Contract\n # Created At\n '000640b60a82645d' # 1760000464807005 (long)\n # Create Contract\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '00' # None\n # Contract Id\n '00000045' # 69 (int)\n '003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4' # 003b9030479a1ea50b420725c410b64c4609b64ab4996de707ef99a62cfa09f907ca111220a0bcf64e73bb3ae37d0ff8cfe2ed235466cbedcca65bf4bb83d1bd89f34339f4 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '416d756c657452756c6573' # AmuletRules (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '0000000e' # 14 (int)\n '636f6e6669675363686564756c65' # configSchedule (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '5363686564756c65' # Schedule (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '5363686564756c65' # Schedule (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '696e697469616c56616c7565' # initialValue (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000c' # 12 (int)\n '416d756c6574436f6e666967' # AmuletConfig (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '416d756c6574436f6e666967' # AmuletConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '0000000e' # 14 (int)\n '7472616e73666572436f6e666967' # transferConfig (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000c' # 12 (int)\n '416d756c6574436f6e666967' # AmuletConfig (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '5472616e73666572436f6e666967' # TransferConfig (string)\n '00000008' # 8 (int)\n '01' # Some\n '00000009' # 9 (int)\n '637265617465466565' # createFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4669786564466565' # FixedFee (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '666565' # fee (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000a' # 10 (int)\n '686f6c64696e67466565' # holdingFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '52617465506572526f756e64' # RatePerRound (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '72617465' # rate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030313930323539' # 0.0000190259 (numeric)\n '01' # Some\n '0000000b' # 11 (int)\n '7472616e73666572466565' # transferFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000b' # 11 (int)\n '5374657070656452617465' # SteppedRate (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000b' # 11 (int)\n '696e697469616c52617465' # initialRate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '00000005' # 5 (int)\n '7374657073' # steps (string)\n '0a' # List Type Tag\n '00000003' # 3 (int)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3130302e30303030303030303030' # 100.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '0000000f' # 15 (int)\n '313030302e30303030303030303030' # 1000.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '03' # Numeric Type Tag\n '00000012' # 18 (int)\n '313030303030302e30303030303030303030' # 1000000.0000000000 (numeric)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000000d' # 13 (int)\n '6c6f636b486f6c646572466565' # lockHolderFee (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '4669786564466565' # FixedFee (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '666565' # fee (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303030303030303030' # 0.0000000000 (numeric)\n '01' # Some\n '0000001c' # 28 (int)\n '65787472614665617475726564417070526577617264416d6f756e74' # extraFeaturedAppRewardAmount (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '312e30303030303030303030' # 1.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '6d61784e756d496e70757473' # maxNumInputs (string)\n '02' # Int64 Type Tag\n '0000000000000064' # 100 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '6d61784e756d4f757470757473' # maxNumOutputs (string)\n '02' # Int64 Type Tag\n '0000000000000064' # 100 (long)\n '01' # Some\n '00000011' # 17 (int)\n '6d61784e756d4c6f636b486f6c64657273' # maxNumLockHolders (string)\n '02' # Int64 Type Tag\n '0000000000000032' # 50 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '69737375616e63654375727665' # issuanceCurve (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '5363686564756c65' # Schedule (string)\n '00000001' # 1 (int)\n '00000008' # 8 (int)\n '5363686564756c65' # Schedule (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '696e697469616c56616c7565' # initialValue (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000016' # 22 (int)\n '34303030303030303030302e30303030303030303030' # 40000000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30353030303030303030' # 0.0500000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e31353030303030303030' # 0.1500000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '66757475726556616c756573' # futureValues (string)\n '0a' # List Type Tag\n '00000004' # 4 (int)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '00000e574609f000' # 15768000000000 (long)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000016' # 22 (int)\n '32303030303030303030302e30303030303030303030' # 20000000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e31323030303030303030' # 0.1200000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e34303030303030303030' # 0.4000000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '00002b05d21dd000' # 47304000000000 (long)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000016' # 22 (int)\n '31303030303030303030302e30303030303030303030' # 10000000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e31383030303030303030' # 0.1800000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36323030303030303030' # 0.6200000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '00008f68bc636000' # 157680000000000 (long)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000015' # 21 (int)\n '353030303030303030302e30303030303030303030' # 5000000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32313030303030303030' # 0.2100000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36393030303030303030' # 0.6900000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '35616565396232316238653961346334393735623566346334313938653665366538343639646634396532303130383230653739326633393364623837306634' # 5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4 (string)\n '00000002' # 2 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '5475706c6532' # Tuple2 (string)\n '00000002' # 2 (int)\n '01' # Some\n '00000002' # 2 (int)\n '5f31' # _1 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '00011ed178c6c000' # 315360000000000 (long)\n '01' # Some\n '00000002' # 2 (int)\n '5f32' # _2 (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000008' # 8 (int)\n '49737375616e6365' # Issuance (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '49737375616e6365436f6e666967' # IssuanceConfig (string)\n '00000007' # 7 (int)\n '01' # Some\n '00000014' # 20 (int)\n '616d756c6574546f497373756550657259656172' # amuletToIssuePerYear (string)\n '03' # Numeric Type Tag\n '00000015' # 21 (int)\n '323530303030303030302e30303030303030303030' # 2500000000.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '76616c696461746f7252657761726450657263656e74616765' # validatorRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000013' # 19 (int)\n '61707052657761726450657263656e74616765' # appRewardPercentage (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e37353030303030303030' # 0.7500000000 (numeric)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f72526577617264436170' # validatorRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e32303030303030303030' # 0.2000000000 (numeric)\n '01' # Some\n '00000014' # 20 (int)\n '6665617475726564417070526577617264436170' # featuredAppRewardCap (string)\n '03' # Numeric Type Tag\n '00000010' # 16 (int)\n '32303030302e30303030303030303030' # 20000.0000000000 (numeric)\n '01' # Some\n '00000016' # 22 (int)\n '756e6665617475726564417070526577617264436170' # unfeaturedAppRewardCap (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e36303030303030303030' # 0.6000000000 (numeric)\n '01' # Some\n '00000015' # 21 (int)\n '6f707456616c696461746f72466175636574436170' # optValidatorFaucetCap (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000e' # 14 (int)\n '3537302e30303030303030303030' # 570.0000000000 (numeric)\n '01' # Some\n '00000019' # 25 (int)\n '646563656e7472616c697a656453796e6368726f6e697a6572' # decentralizedSynchronizer (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000019' # 25 (int)\n '446563656e7472616c697a656453796e6368726f6e697a6572' # DecentralizedSynchronizer (string)\n '00000001' # 1 (int)\n '00000025' # 37 (int)\n '416d756c6574446563656e7472616c697a656453796e6368726f6e697a6572436f6e666967' # AmuletDecentralizedSynchronizerConfig (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000015' # 21 (int)\n '726571756972656453796e6368726f6e697a657273' # requiredSynchronizers (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '63336262306335643034373939623366313162616437633363313032393633653131356366353364613365346166636263666439663036656264383262346666' # c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000003' # 3 (int)\n '536574' # Set (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000003' # 3 (int)\n '536574' # Set (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '6d6170' # map (string)\n '0f' # GenMap Type Tag\n '00000001' # 1 (int)\n '07' # Text Type Tag\n '00000053' # 83 (int)\n '676c6f62616c2d646f6d61696e3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00' # Unit Type Tag\n '01' # Some\n '00000012' # 18 (int)\n '61637469766553796e6368726f6e697a6572' # activeSynchronizer (string)\n '07' # Text Type Tag\n '00000053' # 83 (int)\n '676c6f62616c2d646f6d61696e3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000004' # 4 (int)\n '66656573' # fees (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000019' # 25 (int)\n '446563656e7472616c697a656453796e6368726f6e697a6572' # DecentralizedSynchronizer (string)\n '00000001' # 1 (int)\n '00000016' # 22 (int)\n '53796e6368726f6e697a657246656573436f6e666967' # SynchronizerFeesConfig (string)\n '00000004' # 4 (int)\n '01' # Some\n '00000015' # 21 (int)\n '6261736552617465547261666669634c696d697473' # baseRateTrafficLimits (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000019' # 25 (int)\n '446563656e7472616c697a656453796e6368726f6e697a6572' # DecentralizedSynchronizer (string)\n '00000001' # 1 (int)\n '00000015' # 21 (int)\n '4261736552617465547261666669634c696d697473' # BaseRateTrafficLimits (string)\n '00000002' # 2 (int)\n '01' # Some\n '0000000b' # 11 (int)\n '6275727374416d6f756e74' # burstAmount (string)\n '02' # Int64 Type Tag\n '0000000000061a80' # 400000 (long)\n '01' # Some\n '0000000b' # 11 (int)\n '627572737457696e646f77' # burstWindow (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '0000000047868c00' # 1200000000 (long)\n '01' # Some\n '00000011' # 17 (int)\n '6578747261547261666669635072696365' # extraTrafficPrice (string)\n '03' # Numeric Type Tag\n '0000000d' # 13 (int)\n '36302e30303030303030303030' # 60.0000000000 (numeric)\n '01' # Some\n '00000018' # 24 (int)\n '72656164567357726974655363616c696e67466163746f72' # readVsWriteScalingFactor (string)\n '02' # Int64 Type Tag\n '0000000000000004' # 4 (long)\n '01' # Some\n '0000000e' # 14 (int)\n '6d696e546f707570416d6f756e74' # minTopupAmount (string)\n '02' # Int64 Type Tag\n '0000000000030d40' # 200000 (long)\n '01' # Some\n '0000000c' # 12 (int)\n '7469636b4475726174696f6e' # tickDuration (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '62373064623833363965316334363164356337306631633836663532366132396539373736633635356536666663323536306639356230356363623862393436' # b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946 (string)\n '00000003' # 3 (int)\n '00000002' # 2 (int)\n '4441' # DA (string)\n '00000004' # 4 (int)\n '54696d65' # Time (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000007' # 7 (int)\n '52656c54696d65' # RelTime (string)\n '00000001' # 1 (int)\n '01' # Some\n '0000000c' # 12 (int)\n '6d6963726f7365636f6e6473' # microseconds (string)\n '02' # Int64 Type Tag\n '0000000023c34600' # 600000000 (long)\n '01' # Some\n '0000000d' # 13 (int)\n '7061636b616765436f6e666967' # packageConfig (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '0000000c' # 12 (int)\n '416d756c6574436f6e666967' # AmuletConfig (string)\n '00000001' # 1 (int)\n '0000000d' # 13 (int)\n '5061636b616765436f6e666967' # PackageConfig (string)\n '00000006' # 6 (int)\n '01' # Some\n '00000006' # 6 (int)\n '616d756c6574' # amulet (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '302e312e3134' # 0.1.14 (string)\n '01' # Some\n '00000011' # 17 (int)\n '616d756c65744e616d6553657276696365' # amuletNameService (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '302e312e3134' # 0.1.14 (string)\n '01' # Some\n '0000000d' # 13 (int)\n '64736f476f7665726e616e6365' # dsoGovernance (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '302e312e3139' # 0.1.19 (string)\n '01' # Some\n '00000012' # 18 (int)\n '76616c696461746f724c6966656379636c65' # validatorLifecycle (string)\n '07' # Text Type Tag\n '00000005' # 5 (int)\n '302e312e35' # 0.1.5 (string)\n '01' # Some\n '00000006' # 6 (int)\n '77616c6c6574' # wallet (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '302e312e3134' # 0.1.14 (string)\n '01' # Some\n '0000000e' # 14 (int)\n '77616c6c65745061796d656e7473' # walletPayments (string)\n '07' # Text Type Tag\n '00000006' # 6 (int)\n '302e312e3134' # 0.1.14 (string)\n '01' # Some\n '00000016' # 22 (int)\n '7472616e73666572507265617070726f76616c466565' # transferPreapprovalFee (string)\n '09' # Optional Type Tag\n '00' # None\n '01' # Some\n '0000001f' # 31 (int)\n '666561747572656441707041637469766974794d61726b6572416d6f756e74' # featuredAppActivityMarkerAmount (string)\n '09' # Optional Type Tag\n '01' # Some\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '312e30303030303030303030' # 1.0000000000 (numeric)\n '01' # Some\n '0000000c' # 12 (int)\n '66757475726556616c756573' # futureValues (string)\n '0a' # List Type Tag\n '00000000' # 0 (int)\n '01' # Some\n '00000008' # 8 (int)\n '69734465764e6574' # isDevNet (string)\n '01' # Bool Type Tag\n '01' # true (bool)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '95a49980ed74d6d8c5e20e11ed7e481bd2d33e5f1a10092b3a889eff85788200' # Disclosed Contract\n # Created At\n '000638f1fc1bd638' # 1751461828220472 (long)\n # Create Contract\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '00' # None\n # Contract Id\n '00000045' # 69 (int)\n '009f00e5bf00640118d849080aaf22bc963a8458d322585cebf1119cb7bf37a955ca11122065b775fb8a4199904ed32fa9277fd9c0e82bb82319a7151249df124182072381' # 009f00e5bf00640118d849080aaf22bc963a8458d322585cebf1119cb7bf37a955ca11122065b775fb8a4199904ed32fa9277fd9c0e82bb82319a7151249df124182072381 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '61356230353534393266623866303862326537626330666339346461366461353063333963326531643766323463643565613864623132666338376331333332' # a5b055492fb8f08b2e7bc0fc94da6da50c39c2e1d7f24cd5ea8db12fc87c1332 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n '00000001' # 1 (int)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '61356230353534393266623866303862326537626330666339346461366461353063333963326531643766323463643565613864623132666338376331333332' # a5b055492fb8f08b2e7bc0fc94da6da50c39c2e1d7f24cd5ea8db12fc87c1332 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n '00000001' # 1 (int)\n '00000018' # 24 (int)\n '45787465726e616c5061727479416d756c657452756c6573' # ExternalPartyAmuletRules (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Signatories\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n # Stakeholders\n '00000001' # 1 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '2ad8b93014f4d1b59b4467f534d5fce26f20195ab082ed096a25e6df3bbdcbb9' # Disclosed Contract\n # Created At\n '000640b7fb5b62cd' # 1760008800527053 (long)\n # Create Contract\n '01' # 01 (Node Encoding Version)\n # Create Node\n # Node Version\n '00000003' # 3 (int)\n '322e31' # 2.1 (string)\n '00' # Create Node Tag\n # Node Seed\n '00' # None\n # Contract Id\n '00000045' # 69 (int)\n '00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47' # 00bc02d2f5028d0010dbd73d3458dd9b8270ed0e8bfdfbe594771b8c5c9a7cc06bca1112203d3ab9aaa2f566f1ac4b7930eccc31f78ee928e335b59402618c00d85150ee47 (contractId)\n # Package Name\n '0000000d' # 13 (int)\n '73706c6963652d616d756c6574' # splice-amulet (string)\n # Template Id\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n # Arg\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000001' # 1 (int)\n '00000006' # 6 (int)\n '416d756c6574' # Amulet (string)\n '00000003' # 3 (int)\n '01' # Some\n '00000003' # 3 (int)\n '64736f' # dso (string)\n '06' # Party Type Tag\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '01' # Some\n '00000005' # 5 (int)\n '6f776e6572' # owner (string)\n '06' # Party Type Tag\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '01' # Some\n '00000006' # 6 (int)\n '616d6f756e74' # amount (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000e' # 14 (int)\n '4578706972696e67416d6f756e74' # ExpiringAmount (string)\n '00000003' # 3 (int)\n '01' # Some\n '0000000d' # 13 (int)\n '696e697469616c416d6f756e74' # initialAmount (string)\n '03' # Numeric Type Tag\n '0000000f' # 15 (int)\n '313030302e30303030303030303030' # 1000.0000000000 (numeric)\n '01' # Some\n '00000009' # 9 (int)\n '637265617465644174' # createdAt (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000005' # 5 (int)\n '5479706573' # Types (string)\n '00000001' # 1 (int)\n '00000005' # 5 (int)\n '526f756e64' # Round (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000006' # 6 (int)\n '6e756d626572' # number (string)\n '02' # Int64 Type Tag\n '000000000000362d' # 13869 (long)\n '01' # Some\n '0000000c' # 12 (int)\n '72617465506572526f756e64' # ratePerRound (string)\n '0c' # Record Type Tag\n '01' # Some\n '00000040' # 64 (int)\n '33636131333433616232366234353364333863386164623730646361356631656164383434306334326235396236386630373037383639353563626639656331' # 3ca1343ab26b453d38c8adb70dca5f1ead8440c42b59b68f070786955cbf9ec1 (string)\n '00000002' # 2 (int)\n '00000006' # 6 (int)\n '53706c696365' # Splice (string)\n '00000004' # 4 (int)\n '46656573' # Fees (string)\n '00000001' # 1 (int)\n '0000000c' # 12 (int)\n '52617465506572526f756e64' # RatePerRound (string)\n '00000001' # 1 (int)\n '01' # Some\n '00000004' # 4 (int)\n '72617465' # rate (string)\n '03' # Numeric Type Tag\n '0000000c' # 12 (int)\n '302e30303032303032373236' # 0.0002002726 (numeric)\n # Signatories\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n # Stakeholders\n '00000002' # 2 (int)\n '00000049' # 73 (int)\n '44534f3a3a3132323062653538633239653635646534306266323733626531646332623236366434336139613030326561356231383935356165656637616163383831626234373161' # DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a (string)\n '00000058' # 88 (int)\n '746573742d62616c612d70617274792d30313a3a3132323033383965363438303734633730386561643532376664396634333639316530343633653735396330396565346439393464363833623161613263633734643538' # test-bala-party-01::1220389e648074c708ead527fd9f43691e0463e759c09ee4d994d683b1aa2cc74d58 (string)\n '318cf3d700f90f834db9a17ebe39fdf6355a33ccb9ee79bcae0152282344e652' # Disclosed Contract\n'e30879e3cc0ff675f010e7f87332a983a51cef694827b50ee9554a898f7e32e7' # Metadata\n", +}; + export const WalletInitRequestData = { synchronizer: 'global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a', partyHint: '1220b', publicKey: 'zs4J2IrVpfYNHN0bR7EHS0Fb3rETUyyu2L2QwxucPjg=', }; + +export const OneStepEnablement = { + synchronizer: 'global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a', + partyId: 'ravi-test-party-1::12205b4e3537a95126d90604592344d8ad3c3ddccda4f79901954280ee19c576714d', + validatorPartyId: 'Bitgo-devnet-validator-1::1220a0a0f60b0e62b5d750c484b18c091dba23080c133d944614ba75a5858cba3045', + templateId: '#splice-wallet:Splice.Wallet.TransferPreapproval:TransferPreapprovalProposal', + expectedDsoId: 'DSO::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a', + commandId: '3935a06d-3b03-41be-99a5-95b2ecaabf7d', + synchronizerId: 'global-domain::1220be58c29e65de40bf273be1dc2b266d43a9a002ea5b18955aeef7aac881bb471a', +}; + +export const OneStepPreApprovalPrepareResponse = { + preparedTransaction: + 'CugHCgMyLjESATAauQcKATDCPrIHCq8HCgMyLjESQjAwNjEzZDQwNjc2YjU1M2M1MDdiZTljODUzY2Q4MWQyOTFlMTg2NDQ5OWRmM2Q1N2QyM2Y3ODIwZmNkNWI1ZjJmMhoNc3BsaWNlLXdhbGxldCKCAQpANjkwYzFkNDdiYWMwNmRiNDE5ZGIzNDRkNTlhN2EzMGM1M2ZhM2Y1ZDk2MTk0M2ZlMTc4MmNmYzZjNzg3OTRkOBIhU3BsaWNlLldhbGxldC5UcmFuc2ZlclByZWFwcHJvdmFsGhtUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwqvQNyugMKggEKQDY5MGMxZDQ3YmFjMDZkYjQxOWRiMzQ0ZDU5YTdhMzBjNTNmYTNmNWQ5NjE5NDNmZTE3ODJjZmM2Yzc4Nzk0ZDgSIVNwbGljZS5XYWxsZXQuVHJhbnNmZXJQcmVhcHByb3ZhbBobVHJhbnNmZXJQcmVhcHByb3ZhbFByb3Bvc2FsEmUKCHJlY2VpdmVyElk6V3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZBJsCghwcm92aWRlchJgOl5CaXRnby1kZXZuZXQtdmFsaWRhdG9yLTE6OjEyMjBhMGEwZjYwYjBlNjJiNWQ3NTBjNDg0YjE4YzA5MWRiYTIzMDgwYzEzM2Q5NDQ2MTRiYTc1YTU4NThjYmEzMDQ1El4KC2V4cGVjdGVkRHNvEk9STQpLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMldyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQ6XkJpdGdvLWRldm5ldC12YWxpZGF0b3ItMTo6MTIyMGEwYTBmNjBiMGU2MmI1ZDc1MGM0ODRiMThjMDkxZGJhMjMwODBjMTMzZDk0NDYxNGJhNzVhNTg1OGNiYTMwNDU6V3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZCIiEiCQek+Zx9Y40PKa6qW8zpVWpF3ujaLLe9a0RB0rC2/gdhKFAhJ/CldyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQSJDM5MzVhMDZkLTNiMDMtNDFiZS05OWE1LTk1YjJlY2FhYmY3ZBpTZ2xvYmFsLWRvbWFpbjo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEqJGVmMGNmMzVkLTY5YzctNGU1Yi1hOGE5LWZiOGRlMjkyMGYyYTC964WA66CQAw==', + preparedTransactionHash: 'mc9/dvRWRtx4mFrbb3RDtThtGSOLlbyQjyS6d3LHAPg=', + hashingSchemeVersion: 'HASHING_SCHEME_VERSION_V2', + hashingDetails: null, +}; + +export const InvalidOneStepPreApprovalPrepareResponse = { + preparedTransaction: + 'CugHCgMyLjESATAauQcKATDCPrIHCq8HCgMyLjESQjAwNjEzZDQwNjc2YjU1M2M1MDdiZTljODUzY2Q4MWQyOTFlMTg2NDQ5OWRmM2Q1N2QyM2Y3ODIwZmNkNWI1ZjJmMhoNc3BsaWNlLXdhbGxldCKCAQpANjkwYzFkNDdiYWMwNmRiNDE5ZGIzNDRkNTlhN2EzMGM1M2ZhM2Y1ZDk2MTk0M2ZlMTc4MmNmYzZjNzg3OTRkOBIhU3BsaWNlLldhbGxldC5UcmFuc2ZlclByZWFwcHJvdmFsGhtUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwqvQNyugMKggEKQDY5MGMxZDQ3YmFjMDZkYjQxOWRiMzQ0ZDU5YTdhMzBjNTNmYTNmNWQ5NjE5NDNmZTE3ODJjZmM2Yzc4Nzk0ZDgSIVNwbGljZS5XYWxsZXQuVHJhbnNmZXJQcmVhcHByb3ZhbBobVHJhbnNmZXJQcmVhcHByb3ZhbFByb3Bvc2FsEmUKCHJlY2VpdmVyElk6V3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZBJsCghwcm92aWRlchJgOl5CaXRnby1kZXZuZXQtdmFsaWRhdG9yLTE6OjEyMjBhMGEwZjYwYjBlNjJiNWQ3NTBjNDg0YjE4YzA5MWRiYTIzMDgwYzEzM2Q5NDQ2MTRiYTc1YTU4NThjYmEzMDQ1El4KC2V4cGVjdGVkRHNvEk9STQpLOklEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhMldyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQ6XkJpdGdvLWRldm5ldC12YWxpZGF0b3ItMTo6MTIyMGEwYTBmNjBiMGU2MmI1ZDc1MGM0ODRiMThjMDkxZGJhMjMwODBjMTMzZDk0NDYxNGJhNzVhNTg1OGNiYTMwNDU6V3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZCIiEiCQek+Zx9Y40PKa6qW8zpVWpF3ujaLLe9a0RB0rC2/gdhKFAhJ/CldyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQSJDM5MzVhMDZkLTNiMDMtNDFiZS05OWE1LTk1YjJlY2FhYmY3ZBpTZ2xvYmFsLWRvbWFpbjo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEqJGVmMGNmMzVkLTY5YzctNGU1Yi1hOGE5LWZiOGRlMjkyMGYyYTC964WA66CQAw==', + // the hash is invalid here + preparedTransactionHash: 'mc9/dvRWRtx4mFrbb3RDtThtGSOLlbyQjyS6d3LHAPe=', + hashingSchemeVersion: 'HASHING_SCHEME_VERSION_V2', + hashingDetails: null, +}; diff --git a/modules/sdk-coin-canton/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.ts b/modules/sdk-coin-canton/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.ts new file mode 100644 index 0000000000..9a3404804d --- /dev/null +++ b/modules/sdk-coin-canton/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.ts @@ -0,0 +1,88 @@ +import assert from 'assert'; +import should from 'should'; + +import { coins } from '@bitgo/statics'; + +import { Transaction } from '../../../../src'; +import { OneStepEnablementRequest } from '../../../../src/lib/iface'; +import { OneStepPreApprovalBuilder } from '../../../../src/lib/oneStepPreApprovalBuilder'; + +import { + InvalidOneStepPreApprovalPrepareResponse, + OneStepEnablement, + OneStepPreApprovalPrepareResponse, +} from '../../../resources'; + +describe('Wallet Pre-approval Enablement Builder', () => { + it('should get the wallet init request object', function () { + const txBuilder = new OneStepPreApprovalBuilder(coins.get('tcanton')); + const oneStepEnablementTx = new Transaction(coins.get('tcanton')); + txBuilder.initBuilder(oneStepEnablementTx); + const { synchronizer, commandId, partyId, validatorPartyId, expectedDsoId, templateId, synchronizerId } = + OneStepEnablement; + txBuilder + .commandId(commandId) + .templateId(templateId) + .expectedDso(expectedDsoId) + .templateId(templateId) + .providerPartyId(validatorPartyId) + .receiverPartyId(partyId) + .synchronizerId(synchronizerId); + const requestObj: OneStepEnablementRequest = txBuilder.toRequestObject(); + should.exist(requestObj); + assert.equal(requestObj.synchronizerId, synchronizer); + assert.equal(requestObj.commandId, commandId); + assert.equal(requestObj.commands.length, 1); + const command = requestObj.commands[0]; + should.exist(command); + const createCommand = command.CreateCommand; + should.exist(createCommand); + assert.equal(createCommand.templateId, templateId); + const createArguments = createCommand.createArguments; + should.exist(createArguments); + assert.equal(createArguments.expectedDso, expectedDsoId); + assert.equal(createArguments.provider, validatorPartyId); + assert.equal(createArguments.receiver, partyId); + }); + + it('should validate raw transaction', function () { + const txBuilder = new OneStepPreApprovalBuilder(coins.get('tcanton')); + const oneStepEnablementTx = new Transaction(coins.get('tcanton')); + txBuilder.initBuilder(oneStepEnablementTx); + txBuilder.setTransaction(OneStepPreApprovalPrepareResponse); + txBuilder.validateRawTransaction(OneStepPreApprovalPrepareResponse.preparedTransaction); + }); + + it('should validate the transaction', function () { + const txBuilder = new OneStepPreApprovalBuilder(coins.get('tcanton')); + const oneStepEnablementTx = new Transaction(coins.get('tcanton')); + oneStepEnablementTx.prepareCommand = OneStepPreApprovalPrepareResponse; + txBuilder.initBuilder(oneStepEnablementTx); + txBuilder.setTransaction(OneStepPreApprovalPrepareResponse); + txBuilder.validateTransaction(oneStepEnablementTx); + }); + + it('should throw error in validating raw transaction', function () { + const txBuilder = new OneStepPreApprovalBuilder(coins.get('tcanton')); + const oneStepEnablementTx = new Transaction(coins.get('tcanton')); + txBuilder.initBuilder(oneStepEnablementTx); + txBuilder.setTransaction(InvalidOneStepPreApprovalPrepareResponse); + try { + txBuilder.validateRawTransaction(InvalidOneStepPreApprovalPrepareResponse.preparedTransaction); + } catch (e) { + assert.equal(e.message, 'invalid raw transaction, hash not matching'); + } + }); + + it('should throw error in validating raw transaction', function () { + const txBuilder = new OneStepPreApprovalBuilder(coins.get('tcanton')); + const oneStepEnablementTx = new Transaction(coins.get('tcanton')); + txBuilder.initBuilder(oneStepEnablementTx); + oneStepEnablementTx.prepareCommand = InvalidOneStepPreApprovalPrepareResponse; + try { + txBuilder.validateTransaction(oneStepEnablementTx); + } catch (e) { + assert.equal(e.message, 'invalid transaction'); + } + }); +}); diff --git a/modules/sdk-coin-canton/test/unit/utils.ts b/modules/sdk-coin-canton/test/unit/utils.ts index 72f48667c4..57ce0c0a48 100644 --- a/modules/sdk-coin-canton/test/unit/utils.ts +++ b/modules/sdk-coin-canton/test/unit/utils.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import should from 'should'; import utils from '../../src/lib/utils'; -import { GenerateTopologyResponse, PreparedTransactionRawData } from '../resources'; +import { GenerateTopologyResponse, PreparedTransactionRawData, PrepareSubmissionResponse } from '../resources'; describe('Canton Util', function () { describe('Raw transaction parser', function () { @@ -21,4 +21,14 @@ describe('Canton Util', function () { assert.strictEqual(computedHash, GenerateTopologyResponse.multiHash); }); }); + + describe('Prepare submission response validation', function () { + it('should locally generate and validate the hash for prepare submission response', async function () { + const computedHash = await utils.computeHashFromPrepareSubmissionResponse( + PrepareSubmissionResponse.preparedTransaction + ); + should.exist(computedHash); + assert.strictEqual(computedHash, PrepareSubmissionResponse.preparedTransactionHash); + }); + }); }); diff --git a/modules/sdk-core/src/account-lib/baseCoin/enum.ts b/modules/sdk-core/src/account-lib/baseCoin/enum.ts index 80e8cfd104..f5cb498b58 100644 --- a/modules/sdk-core/src/account-lib/baseCoin/enum.ts +++ b/modules/sdk-core/src/account-lib/baseCoin/enum.ts @@ -87,6 +87,8 @@ export enum TransactionType { FlushERC721, // Flush ERC1155 tokens from a forwarder address to base address FlushERC1155, + // Set up 1-step pre-approval for canton + OneStepPreApproval, // trx FREEZE,